64 const char magic[2] = {0xFF, 0xD8};
76 struct jpeg_error_mgr
pub;
88 (*cinfo->err->output_message)(cinfo);
94 longjmp(
err->setjmp_buffer, 1);
109 struct jpeg_source_mgr pub;
132 src->
pub.bytes_in_buffer = 2;
134 src->
terminal[1] = (JOCTET)JPEG_EOI;
145 size_t skip_size = (size_t)num_bytes <= src->pub.bytes_in_buffer ? num_bytes :
146 src->
pub.bytes_in_buffer;
148 src->
pub.next_input_byte = src->
pub.next_input_byte + skip_size;
149 src->
pub.bytes_in_buffer = src->
pub.bytes_in_buffer - skip_size;
162 if (cinfo->src ==
NULL) {
163 cinfo->src = (
struct jpeg_source_mgr *)(*cinfo->mem->alloc_small)(
164 (j_common_ptr)cinfo, JPOOL_PERMANENT,
sizeof(
my_source_mgr));
171 src->
pub.resync_to_restart = jpeg_resync_to_restart;
174 src->
pub.bytes_in_buffer =
size;
181 #define MAKESTMT(stuff) \
186 #define INPUT_VARS(cinfo) \
187 struct jpeg_source_mgr *datasrc = (cinfo)->src; \
188 const JOCTET *next_input_byte = datasrc->next_input_byte; \
189 size_t bytes_in_buffer = datasrc->bytes_in_buffer
192 #define INPUT_SYNC(cinfo) \
193 (datasrc->next_input_byte = next_input_byte, datasrc->bytes_in_buffer = bytes_in_buffer)
196 #define INPUT_RELOAD(cinfo) \
197 (next_input_byte = datasrc->next_input_byte, bytes_in_buffer = datasrc->bytes_in_buffer)
203 #define MAKE_BYTE_AVAIL(cinfo, action) \
204 if (bytes_in_buffer == 0) { \
205 if (!(*datasrc->fill_input_buffer)(cinfo)) { \
208 INPUT_RELOAD(cinfo); \
215 #define INPUT_BYTE(cinfo, V, action) \
216 MAKESTMT(MAKE_BYTE_AVAIL(cinfo, action); bytes_in_buffer--; V = GETJOCTET(*next_input_byte++);)
221 #define INPUT_2BYTES(cinfo, V, action) \
222 MAKESTMT(MAKE_BYTE_AVAIL(cinfo, action); bytes_in_buffer--; \
223 V = ((unsigned int)GETJOCTET(*next_input_byte++)) << 8; \
224 MAKE_BYTE_AVAIL(cinfo, action); \
226 V += GETJOCTET(*next_input_byte++);)
248 for (i = 0; i <
length; i++) {
259 (*cinfo->src->skip_input_data)(cinfo,
length);
266 JSAMPARRAY row_pointer;
269 int x,
y, depth,
r, g, b, k;
272 jpeg_saved_marker_ptr marker;
273 char *
str, *key, *value;
277 jpeg_set_marker_processor(cinfo, 0xe1,
handle_app1);
278 cinfo->dct_method = JDCT_FLOAT;
279 jpeg_save_markers(cinfo, JPEG_COM, 0xffff);
281 if (jpeg_read_header(cinfo,
false) == JPEG_HEADER_OK) {
282 x = cinfo->image_width;
283 y = cinfo->image_height;
284 depth = cinfo->num_components;
286 if (cinfo->jpeg_color_space == JCS_YCCK) {
287 cinfo->out_color_space = JCS_CMYK;
290 jpeg_start_decompress(cinfo);
293 jpeg_abort_decompress(cinfo);
297 jpeg_abort_decompress(cinfo);
300 row_stride = cinfo->output_width * depth;
302 row_pointer = (*cinfo->mem->alloc_sarray)((j_common_ptr)cinfo, JPOOL_IMAGE, row_stride, 1);
304 for (
y = ibuf->
y - 1;
y >= 0;
y--) {
305 jpeg_read_scanlines(cinfo, row_pointer, 1);
311 for (
x = ibuf->
x;
x > 0;
x--) {
318 for (
x = ibuf->
x;
x > 0;
x--) {
327 for (
x = ibuf->
x;
x > 0;
x--) {
347 marker = cinfo->marker_list;
349 if (marker->marker != JPEG_COM) {
350 goto next_stamp_marker;
382 goto next_stamp_marker;
385 key = strchr(
str,
':');
393 goto next_stamp_marker;
397 value = strchr(key,
':');
400 goto next_stamp_marker;
410 marker = marker->next;
413 jpeg_finish_decompress(cinfo);
418 if (cinfo->density_unit == 1) {
420 ibuf->
ppm[0] = cinfo->X_density / 0.0254f;
421 ibuf->
ppm[1] = cinfo->Y_density / 0.0254f;
423 else if (cinfo->density_unit == 2) {
424 ibuf->
ppm[0] = cinfo->X_density * 100.0f;
425 ibuf->
ppm[1] = cinfo->Y_density * 100.0f;
431 jpeg_destroy((j_common_ptr)cinfo);
442 struct jpeg_decompress_struct _cinfo, *cinfo = &_cinfo;
452 cinfo->err = jpeg_std_error(&jerr.
pub);
460 jpeg_destroy_decompress(cinfo);
464 jpeg_create_decompress(cinfo);
475 JSAMPROW row_pointer[1];
481 jpeg_start_compress(cinfo,
true);
483 strcpy(neogeo,
"NeoGeo");
485 memset(neogeo_word, 0,
sizeof(*neogeo_word));
487 jpeg_write_marker(cinfo, 0xe1, (JOCTET *)neogeo, 10);
491 char static_text[1024];
492 const int static_text_size =
ARRAY_SIZE(static_text);
497 jpeg_write_marker(cinfo, JPEG_COM, (JOCTET *)
IDP_String(prop), prop->
len + 1);
500 char *text = static_text;
501 int text_size = static_text_size;
504 const int text_length_required = 7 + 2 + strlen(prop->
name) + strlen(
IDP_String(prop)) + 1;
505 if (text_length_required <= static_text_size) {
506 text =
MEM_mallocN(text_length_required,
"jpeg metadata field");
507 text_size = text_length_required;
520 jpeg_write_marker(cinfo, JPEG_COM, (JOCTET *)text, text_len + 1);
525 if (text != static_text) {
532 row_pointer[0] =
MEM_mallocN(
sizeof(JSAMPLE) * cinfo->input_components * cinfo->image_width,
535 for (
y = ibuf->
y - 1;
y >= 0;
y--) {
539 switch (cinfo->in_color_space) {
541 for (
x = 0;
x < ibuf->
x;
x++) {
549 for (
x = 0;
x < ibuf->
x;
x++) {
555 memcpy(
buffer, rect, 4 * ibuf->
x);
563 jpeg_write_scanlines(cinfo, row_pointer, 1);
566 jpeg_finish_compress(cinfo);
570 static int init_jpeg(FILE *outfile,
struct jpeg_compress_struct *cinfo,
struct ImBuf *ibuf)
582 jpeg_create_compress(cinfo);
583 jpeg_stdio_dest(cinfo, outfile);
585 cinfo->image_width = ibuf->
x;
586 cinfo->image_height = ibuf->
y;
588 cinfo->in_color_space = JCS_RGB;
590 cinfo->in_color_space = JCS_GRAYSCALE;
597 cinfo->in_color_space = JCS_UNKNOWN;
600 switch (cinfo->in_color_space) {
602 cinfo->input_components = 3;
605 cinfo->input_components = 1;
608 cinfo->input_components = 4;
615 jpeg_set_defaults(cinfo);
619 cinfo->dct_method = JDCT_FLOAT;
620 jpeg_set_quality(cinfo,
quality,
true);
628 struct jpeg_compress_struct _cinfo, *cinfo = &_cinfo;
635 cinfo->err = jpeg_std_error(&jerr.
pub);
643 jpeg_destroy_compress(cinfo);
654 jpeg_destroy_compress(cinfo);
File and directory operations.
FILE * BLI_fopen(const char *filename, const char *mode) ATTR_WARN_UNUSED_RESULT ATTR_NONNULL()
char * BLI_strdupn(const char *str, const size_t len) ATTR_MALLOC ATTR_WARN_UNUSED_RESULT ATTR_NONNULL()
size_t BLI_snprintf(char *__restrict dst, size_t maxncpy, const char *__restrict format,...) ATTR_NONNULL(1
ID and Library types, which are fundamental for sdna.
_GL_VOID GLfloat value _GL_VOID_RET _GL_VOID const GLuint GLboolean *residences _GL_BOOL_RET _GL_VOID GLsizei GLfloat GLfloat GLfloat GLfloat const GLubyte *bitmap _GL_VOID_RET _GL_VOID GLenum const void *lists _GL_VOID_RET _GL_VOID const GLdouble *equation _GL_VOID_RET _GL_VOID GLdouble GLdouble blue _GL_VOID_RET _GL_VOID GLfloat GLfloat blue _GL_VOID_RET _GL_VOID GLint GLint blue _GL_VOID_RET _GL_VOID GLshort GLshort blue _GL_VOID_RET _GL_VOID GLubyte GLubyte blue _GL_VOID_RET _GL_VOID GLuint GLuint blue _GL_VOID_RET _GL_VOID GLushort GLushort blue _GL_VOID_RET _GL_VOID GLbyte GLbyte GLbyte alpha _GL_VOID_RET _GL_VOID GLdouble GLdouble GLdouble alpha _GL_VOID_RET _GL_VOID GLfloat GLfloat GLfloat alpha _GL_VOID_RET _GL_VOID GLint GLint GLint alpha _GL_VOID_RET _GL_VOID GLshort GLshort GLshort alpha _GL_VOID_RET _GL_VOID GLubyte GLubyte GLubyte alpha _GL_VOID_RET _GL_VOID GLuint GLuint GLuint alpha _GL_VOID_RET _GL_VOID GLushort GLushort GLushort alpha _GL_VOID_RET _GL_VOID GLenum mode _GL_VOID_RET _GL_VOID GLint GLsizei GLsizei GLenum type _GL_VOID_RET _GL_VOID GLsizei GLenum GLenum const void *pixels _GL_VOID_RET _GL_VOID const void *pointer _GL_VOID_RET _GL_VOID GLdouble v _GL_VOID_RET _GL_VOID GLfloat v _GL_VOID_RET _GL_VOID GLint GLint i2 _GL_VOID_RET _GL_VOID GLint j _GL_VOID_RET _GL_VOID GLfloat param _GL_VOID_RET _GL_VOID GLint param _GL_VOID_RET _GL_VOID GLdouble GLdouble GLdouble GLdouble GLdouble zFar _GL_VOID_RET _GL_UINT GLdouble *equation _GL_VOID_RET _GL_VOID GLenum GLint *params _GL_VOID_RET _GL_VOID GLenum GLfloat *v _GL_VOID_RET _GL_VOID GLenum GLfloat *params _GL_VOID_RET _GL_VOID GLfloat *values _GL_VOID_RET _GL_VOID GLushort *values _GL_VOID_RET _GL_VOID GLenum GLfloat *params _GL_VOID_RET _GL_VOID GLenum GLdouble *params _GL_VOID_RET _GL_VOID GLenum GLint *params _GL_VOID_RET _GL_VOID GLsizei const void *pointer _GL_VOID_RET _GL_VOID GLsizei const void *pointer _GL_VOID_RET _GL_BOOL GLfloat param _GL_VOID_RET _GL_VOID GLint param _GL_VOID_RET _GL_VOID GLenum GLfloat param _GL_VOID_RET _GL_VOID GLenum GLint param _GL_VOID_RET _GL_VOID GLushort pattern _GL_VOID_RET _GL_VOID GLdouble GLdouble GLint GLint const GLdouble *points _GL_VOID_RET _GL_VOID GLdouble GLdouble GLint GLint GLdouble GLdouble GLint GLint const GLdouble *points _GL_VOID_RET _GL_VOID GLdouble GLdouble u2 _GL_VOID_RET _GL_VOID GLdouble GLdouble GLint GLdouble GLdouble v2 _GL_VOID_RET _GL_VOID GLenum GLfloat param _GL_VOID_RET _GL_VOID GLenum GLint param _GL_VOID_RET _GL_VOID GLenum mode _GL_VOID_RET _GL_VOID GLdouble GLdouble nz _GL_VOID_RET _GL_VOID GLfloat GLfloat nz _GL_VOID_RET _GL_VOID GLint GLint nz _GL_VOID_RET _GL_VOID GLshort GLshort nz _GL_VOID_RET _GL_VOID GLsizei const void *pointer _GL_VOID_RET _GL_VOID GLsizei const GLfloat *values _GL_VOID_RET _GL_VOID GLsizei const GLushort *values _GL_VOID_RET _GL_VOID GLint param _GL_VOID_RET _GL_VOID const GLuint const GLclampf *priorities _GL_VOID_RET _GL_VOID GLdouble y _GL_VOID_RET _GL_VOID GLfloat y _GL_VOID_RET _GL_VOID GLint y _GL_VOID_RET _GL_VOID GLshort y _GL_VOID_RET _GL_VOID GLdouble GLdouble z _GL_VOID_RET _GL_VOID GLfloat GLfloat z _GL_VOID_RET _GL_VOID GLint GLint z _GL_VOID_RET _GL_VOID GLshort GLshort z _GL_VOID_RET _GL_VOID GLdouble GLdouble GLdouble w _GL_VOID_RET _GL_VOID GLfloat GLfloat GLfloat w _GL_VOID_RET _GL_VOID GLint GLint GLint w _GL_VOID_RET _GL_VOID GLshort GLshort GLshort w _GL_VOID_RET _GL_VOID GLdouble GLdouble GLdouble y2 _GL_VOID_RET _GL_VOID GLfloat GLfloat GLfloat y2 _GL_VOID_RET _GL_VOID GLint GLint GLint y2 _GL_VOID_RET _GL_VOID GLshort GLshort GLshort y2 _GL_VOID_RET _GL_VOID GLdouble GLdouble GLdouble z _GL_VOID_RET _GL_VOID GLdouble GLdouble z _GL_VOID_RET _GL_VOID GLuint *buffer _GL_VOID_RET _GL_VOID GLdouble t _GL_VOID_RET _GL_VOID GLfloat t _GL_VOID_RET _GL_VOID GLint t _GL_VOID_RET _GL_VOID GLshort t _GL_VOID_RET _GL_VOID GLdouble GLdouble r _GL_VOID_RET _GL_VOID GLfloat GLfloat r _GL_VOID_RET _GL_VOID GLint GLint r _GL_VOID_RET _GL_VOID GLshort GLshort r _GL_VOID_RET _GL_VOID GLdouble GLdouble r
_GL_VOID GLfloat value _GL_VOID_RET _GL_VOID const GLuint GLboolean *residences _GL_BOOL_RET _GL_VOID GLsizei GLfloat GLfloat GLfloat GLfloat const GLubyte *bitmap _GL_VOID_RET _GL_VOID GLenum const void *lists _GL_VOID_RET _GL_VOID const GLdouble *equation _GL_VOID_RET _GL_VOID GLdouble GLdouble blue _GL_VOID_RET _GL_VOID GLfloat GLfloat blue _GL_VOID_RET _GL_VOID GLint GLint blue _GL_VOID_RET _GL_VOID GLshort GLshort blue _GL_VOID_RET _GL_VOID GLubyte GLubyte blue _GL_VOID_RET _GL_VOID GLuint GLuint blue _GL_VOID_RET _GL_VOID GLushort GLushort blue _GL_VOID_RET _GL_VOID GLbyte GLbyte GLbyte alpha _GL_VOID_RET _GL_VOID GLdouble GLdouble GLdouble alpha _GL_VOID_RET _GL_VOID GLfloat GLfloat GLfloat alpha _GL_VOID_RET _GL_VOID GLint GLint GLint alpha _GL_VOID_RET _GL_VOID GLshort GLshort GLshort alpha _GL_VOID_RET _GL_VOID GLubyte GLubyte GLubyte alpha _GL_VOID_RET _GL_VOID GLuint GLuint GLuint alpha _GL_VOID_RET _GL_VOID GLushort GLushort GLushort alpha _GL_VOID_RET _GL_VOID GLenum mode _GL_VOID_RET _GL_VOID GLint y
@ COLOR_ROLE_DEFAULT_BYTE
struct ImBuf * IMB_allocImBuf(unsigned int x, unsigned int y, unsigned char planes, unsigned int flags)
Contains defines and structs used throughout the imbuf module.
Read Guarded memory(de)allocation.
static DBVT_INLINE btScalar size(const btDbvtVolume &a)
SIMD_FORCE_INLINE btScalar length(const btQuaternion &q)
Return the length of a quaternion.
void colorspace_set_default_role(char *colorspace, int size, int role)
#define INPUT_BYTE(cinfo, V, action)
static const uchar jpeg_default_quality
static void write_jpeg(struct jpeg_compress_struct *cinfo, struct ImBuf *ibuf)
bool imb_savejpeg(struct ImBuf *ibuf, const char *filepath, int flags)
static bool save_stdjpeg(const char *name, struct ImBuf *ibuf)
my_source_mgr * my_src_ptr
#define INPUT_2BYTES(cinfo, V, action)
#define INPUT_VARS(cinfo)
struct my_error_mgr my_error_mgr
my_error_mgr * my_error_ptr
static int init_jpeg(FILE *outfile, struct jpeg_compress_struct *cinfo, struct ImBuf *ibuf)
BLI_STATIC_ASSERT(sizeof(struct NeoGeo_Word)==4, "Must be 4 bytes")
static void term_source(j_decompress_ptr cinfo)
static uchar ibuf_quality
static boolean handle_app1(j_decompress_ptr cinfo)
#define INPUT_SYNC(cinfo)
static void skip_input_data(j_decompress_ptr cinfo, long num_bytes)
static void init_source(j_decompress_ptr cinfo)
static void jpeg_error(j_common_ptr cinfo) ATTR_NORETURN
static boolean fill_input_buffer(j_decompress_ptr cinfo)
bool imb_is_a_jpeg(const unsigned char *mem, const size_t size)
static void memory_source(j_decompress_ptr cinfo, const unsigned char *buffer, size_t size)
ImBuf * imb_load_jpeg(const unsigned char *buffer, size_t size, int flags, char colorspace[IM_MAX_SPACE])
static ImBuf * ibJpegImageFromCinfo(struct jpeg_decompress_struct *cinfo, int flags)
__kernel void ccl_constant KernelData ccl_global void ccl_global char ccl_global int ccl_global char ccl_global unsigned int ccl_global float * buffer
void(* MEM_freeN)(void *vmemh)
void *(* MEM_mallocN)(size_t len, const char *str)
struct IDProperty * metadata
ImbFormatOptions foptions
struct jpeg_error_mgr pub
const unsigned char * buffer
struct jpeg_source_mgr pub
static int magic(const Tex *tex, const float texvec[3], TexResult *texres)