mirror of
https://github.com/elima/gpu-playground.git
synced 2025-06-06 15:36:35 +00:00
83 lines
2.4 KiB
C
83 lines
2.4 KiB
C
#pragma once
|
|
|
|
#include <unistd.h>
|
|
#include <setjmp.h>
|
|
#include <stdbool.h>
|
|
#include <stdio.h>
|
|
#include <jpeglib.h>
|
|
#include <stdint.h>
|
|
|
|
enum jpeg_status {
|
|
JPEG_STATUS_NONE = 0,
|
|
JPEG_STATUS_DECODE_READY,
|
|
JPEG_STATUS_ENCODE_READY,
|
|
JPEG_STATUS_ERROR,
|
|
JPEG_STATUS_DONE,
|
|
};
|
|
|
|
enum jpeg_format {
|
|
JPEG_FORMAT_UNKNOWN, /* error/unspecified */
|
|
JPEG_FORMAT_GRAYSCALE, /* monochrome */
|
|
JPEG_FORMAT_RGB, /* red/green/blue as specified by the RGB_RED,
|
|
RGB_GREEN, RGB_BLUE, and RGB_PIXELSIZE macros */
|
|
JPEG_FORMAT_YCbCr, /* Y/Cb/Cr (also known as YUV) */
|
|
JPEG_FORMAT_CMYK, /* C/M/Y/K */
|
|
JPEG_FORMAT_YCCK, /* Y/Cb/Cr/K */
|
|
JPEG_FORMAT_EXT_RGB, /* red/green/blue */
|
|
JPEG_FORMAT_EXT_RGBX, /* red/green/blue/x */
|
|
JPEG_FORMAT_EXT_BGR, /* blue/green/red */
|
|
JPEG_FORMAT_EXT_BGRX, /* blue/green/red/x */
|
|
JPEG_FORMAT_EXT_XBGR, /* x/blue/green/red */
|
|
JPEG_FORMAT_EXT_XRGB, /* x/red/green/blue */
|
|
/* When out_color_space is set to JCS_EXT_RGBX, JCS_EXT_BGRX, JCS_EXT_XBGR,
|
|
or JCS_EXT_XRGB during decompression, the X byte is undefined, and in
|
|
order to ensure the best performance, libjpeg-turbo can set that byte to
|
|
whatever value it wishes. Use the following colorspace constants to
|
|
ensure that the X byte is set to 0xFF, so that it can be interpreted as an
|
|
opaque alpha channel. */
|
|
JPEG_FORMAT_EXT_RGBA, /* red/green/blue/alpha */
|
|
JPEG_FORMAT_EXT_BGRA, /* blue/green/red/alpha */
|
|
JPEG_FORMAT_EXT_ABGR, /* alpha/blue/green/red */
|
|
JPEG_FORMAT_EXT_ARGB, /* alpha/red/green/blue */
|
|
JPEG_FORMAT_RGB565 /* 5-bit red/6-bit green/5-bit blue */
|
|
};
|
|
|
|
struct jpeg_ctx;
|
|
|
|
struct jpeg_error_handler {
|
|
struct jpeg_error_mgr jpeg_error_mgr;
|
|
|
|
struct jpeg_ctx *ctx;
|
|
jmp_buf setjmp_buffer;
|
|
};
|
|
|
|
struct jpeg_ctx {
|
|
FILE *file_obj;
|
|
struct jpeg_decompress_struct cinfo;
|
|
|
|
struct jpeg_error_mgr err_manager;
|
|
|
|
enum jpeg_status status;
|
|
|
|
uint32_t width;
|
|
uint32_t height;
|
|
uint32_t row_stride;
|
|
enum jpeg_format format;
|
|
|
|
struct jpeg_error_handler err_handler;
|
|
};
|
|
|
|
bool
|
|
jpeg_decoder_init_from_filename (struct jpeg_ctx *self,
|
|
const char *filename);
|
|
|
|
void
|
|
jpeg_clear (struct jpeg_ctx *self);
|
|
|
|
ssize_t
|
|
jpeg_read (struct jpeg_ctx *self,
|
|
void *buffer,
|
|
size_t size,
|
|
size_t *first_row,
|
|
size_t *num_rows);
|