33#define UINT8 JPEG_UINT8
34#define UINT16 JPEG_UINT16
35#define boolean jpeg_boolean
39#define HAVE_STDLIB_H 1
62static void *libjpeg_handle;
64static const WCHAR wszImageQuality[] = {
'I',
'm',
'a',
'g',
'e',
'Q',
'u',
'a',
'l',
'i',
't',
'y',0};
65static const WCHAR wszBitmapTransform[] = {
'B',
'i',
't',
'm',
'a',
'p',
'T',
'r',
'a',
'n',
's',
'f',
'o',
'r',
'm',0};
67static const WCHAR wszChrominance[] = {
'C',
'h',
'r',
'o',
'm',
'i',
'n',
'a',
'n',
'c',
'e',0};
68static const WCHAR wszJpegYCrCbSubsampling[] = {
'J',
'p',
'e',
'g',
'Y',
'C',
'r',
'C',
'b',
'S',
'u',
'b',
's',
'a',
'm',
'p',
'l',
'i',
'n',
'g',0};
69static const WCHAR wszSuppressApp0[] = {
'S',
'u',
'p',
'p',
'r',
'e',
's',
's',
'A',
'p',
'p',
'0',0};
71#define MAKE_FUNCPTR(f) static typeof(f) * p##f
87static void *load_libjpeg(
void)
91#define LOAD_FUNCPTR(f) \
92 if((p##f = wine_dlsym(libjpeg_handle, #f, NULL, 0)) == NULL) { \
93 libjpeg_handle = NULL; \
112 return libjpeg_handle;
120 cinfo->err->format_message(cinfo,
message);
123 longjmp(*(
jmp_buf*)cinfo->client_data, 1);
126static void emit_message_fn(
j_common_ptr cinfo,
int msg_level)
130 if (msg_level < 0 &&
ERR_ON(jpeg))
132 cinfo->err->format_message(cinfo,
message);
135 else if (msg_level == 0 &&
WARN_ON(jpeg))
137 cinfo->err->format_message(cinfo,
message);
140 else if (msg_level > 0 &&
TRACE_ON(jpeg))
142 cinfo->err->format_message(cinfo,
message);
153 BOOL cinfo_initialized;
158 BYTE source_buffer[1024];
174static inline JpegDecoder *decoder_from_decompress(
j_decompress_ptr decompress)
195 *
ppv = &
This->IWICBitmapDecoder_iface;
212 TRACE(
"(%p) refcount=%u\n", iface,
ref);
222 TRACE(
"(%p) refcount=%u\n", iface,
ref);
226 This->lock.DebugInfo->Spare[0] = 0;
228 if (
This->cinfo_initialized) pjpeg_destroy_decompress(&
This->cinfo);
229 if (
This->stream) IStream_Release(
This->stream);
261 JpegDecoder *
This = decoder_from_decompress(cinfo);
265 hr = IStream_Read(
This->stream,
This->source_buffer, 1024, &bytesread);
273 This->source_mgr.next_input_byte =
This->source_buffer;
274 This->source_mgr.bytes_in_buffer = bytesread;
279static void source_mgr_skip_input_data(
j_decompress_ptr cinfo,
long num_bytes)
281 JpegDecoder *
This = decoder_from_decompress(cinfo);
284 if (num_bytes >
This->source_mgr.bytes_in_buffer)
286 seek.QuadPart = num_bytes -
This->source_mgr.bytes_in_buffer;
287 IStream_Seek(
This->stream,
seek, STREAM_SEEK_CUR,
NULL);
288 This->source_mgr.bytes_in_buffer = 0;
290 else if (num_bytes > 0)
292 This->source_mgr.next_input_byte += num_bytes;
293 This->source_mgr.bytes_in_buffer -= num_bytes;
310 TRACE(
"(%p,%p,%u)\n", iface, pIStream, cacheOptions);
314 if (
This->cinfo_initialized)
320 pjpeg_std_error(&
This->jerr);
322 This->jerr.error_exit = error_exit_fn;
323 This->jerr.emit_message = emit_message_fn;
339 This->stream = pIStream;
340 IStream_AddRef(pIStream);
343 IStream_Seek(
This->stream,
seek, STREAM_SEEK_SET,
NULL);
345 This->source_mgr.bytes_in_buffer = 0;
346 This->source_mgr.init_source = source_mgr_init_source;
347 This->source_mgr.fill_input_buffer = source_mgr_fill_input_buffer;
348 This->source_mgr.skip_input_data = source_mgr_skip_input_data;
349 This->source_mgr.resync_to_restart = pjpeg_resync_to_restart;
350 This->source_mgr.term_source = source_mgr_term_source;
352 This->cinfo.src = &
This->source_mgr;
357 WARN(
"Jpeg image in stream has bad format, read header returned %d.\n",
ret);
362 switch (
This->cinfo.jpeg_color_space)
376 ERR(
"Unknown JPEG color space %i\n",
This->cinfo.jpeg_color_space);
381 if (!pjpeg_start_decompress(&
This->cinfo))
383 ERR(
"jpeg_start_decompress failed\n");
392 This->stride = (
This->bpp *
This->cinfo.output_width + 7) / 8;
393 data_size =
This->stride *
This->cinfo.output_height;
396 if (!
This->image_data)
402 while (
This->cinfo.output_scanline <
This->cinfo.output_height)
404 UINT first_scanline =
This->cinfo.output_scanline;
409 max_rows =
min(
This->cinfo.output_height-first_scanline, 4);
410 for (
i=0;
i<max_rows;
i++)
411 out_rows[
i] =
This->image_data +
This->stride * (first_scanline+
i);
413 ret = pjpeg_read_scanlines(&
This->cinfo, out_rows, max_rows);
416 ERR(
"read_scanlines failed\n");
426 This->cinfo.output_width,
This->cinfo.output_height,
430 if (
This->cinfo.out_color_space ==
JCS_CMYK &&
This->cinfo.saw_Adobe_marker)
433 for (
i=0;
i<data_size;
i++)
434 This->image_data[
i] ^= 0xff;
445 GUID *pguidContainerFormat)
447 memcpy(pguidContainerFormat, &GUID_ContainerFormatJpeg,
sizeof(
GUID));
454 TRACE(
"(%p,%p)\n", iface, ppIDecoderInfo);
462 TRACE(
"(%p,%p)\n", iface, pIPalette);
481 FIXME(
"(%p,%p): stub\n", iface, ppIBitmapSource);
488 FIXME(
"(%p,%u,%p,%p): stub\n", iface, cCount, ppIColorContexts, pcActualCount);
495 FIXME(
"(%p,%p): stub\n", iface, ppIThumbnail);
512 TRACE(
"(%p,%u,%p)\n", iface,
index, ppIBitmapFrame);
518 IWICBitmapDecoder_AddRef(iface);
519 *ppIBitmapFrame = &
This->IWICBitmapFrameDecode_iface;
524static const IWICBitmapDecoderVtbl JpegDecoder_Vtbl = {
525 JpegDecoder_QueryInterface,
528 JpegDecoder_QueryCapability,
529 JpegDecoder_Initialize,
530 JpegDecoder_GetContainerFormat,
531 JpegDecoder_GetDecoderInfo,
532 JpegDecoder_CopyPalette,
533 JpegDecoder_GetMetadataQueryReader,
534 JpegDecoder_GetPreview,
535 JpegDecoder_GetColorContexts,
536 JpegDecoder_GetThumbnail,
537 JpegDecoder_GetFrameCount,
554 *
ppv = &
This->IWICBitmapFrameDecode_iface;
569 return IWICBitmapDecoder_AddRef(&
This->IWICBitmapDecoder_iface);
575 return IWICBitmapDecoder_Release(&
This->IWICBitmapDecoder_iface);
582 *puiWidth =
This->cinfo.output_width;
583 *puiHeight =
This->cinfo.output_height;
584 TRACE(
"(%p)->(%u,%u)\n", iface, *puiWidth, *puiHeight);
592 TRACE(
"(%p,%p)\n", iface, pPixelFormat);
594 memcpy(pPixelFormat, &GUID_WICPixelFormat24bppBGR,
sizeof(
GUID));
596 memcpy(pPixelFormat, &GUID_WICPixelFormat32bppCMYK,
sizeof(
GUID));
598 memcpy(pPixelFormat, &GUID_WICPixelFormat8bppGray,
sizeof(
GUID));
603 double *pDpiX,
double *pDpiY)
609 switch (
This->cinfo.density_unit)
612 *pDpiX =
This->cinfo.X_density * 2.54;
613 *pDpiY =
This->cinfo.Y_density * 2.54;
617 *pDpiX =
This->cinfo.X_density;
618 *pDpiY =
This->cinfo.Y_density;
630 TRACE(
"(%p)->(%0.2f,%0.2f)\n", iface, *pDpiX, *pDpiY);
638 FIXME(
"(%p,%p): stub\n", iface, pIPalette);
650 This->cinfo.output_width,
This->cinfo.output_height,
This->stride,
651 prc, cbStride, cbBufferSize, pbBuffer);
659 TRACE(
"(%p,%p)\n", iface, ppIMetadataQueryReader);
661 if (!ppIMetadataQueryReader)
670 FIXME(
"(%p,%u,%p,%p): stub\n", iface, cCount, ppIColorContexts, pcActualCount);
677 FIXME(
"(%p,%p): stub\n", iface, ppIThumbnail);
681static const IWICBitmapFrameDecodeVtbl JpegDecoder_Frame_Vtbl = {
682 JpegDecoder_Frame_QueryInterface,
683 JpegDecoder_Frame_AddRef,
684 JpegDecoder_Frame_Release,
685 JpegDecoder_Frame_GetSize,
686 JpegDecoder_Frame_GetPixelFormat,
687 JpegDecoder_Frame_GetResolution,
688 JpegDecoder_Frame_CopyPalette,
689 JpegDecoder_Frame_CopyPixels,
690 JpegDecoder_Frame_GetMetadataQueryReader,
691 JpegDecoder_Frame_GetColorContexts,
692 JpegDecoder_Frame_GetThumbnail
699 return IWICBitmapFrameDecode_QueryInterface(&
This->IWICBitmapFrameDecode_iface, iid,
ppv);
705 return IWICBitmapDecoder_AddRef(&
This->IWICBitmapDecoder_iface);
711 return IWICBitmapDecoder_Release(&
This->IWICBitmapDecoder_iface);
715 GUID *pguidContainerFormat)
717 TRACE(
"%p,%p\n", iface, pguidContainerFormat);
721 memcpy(pguidContainerFormat, &GUID_ContainerFormatJpeg,
sizeof(
GUID));
729 FIXME(
"%p,%p\n", iface, pcCount);
741 FIXME(
"%p,%d,%p\n", iface, nIndex, ppIMetadataReader);
748 FIXME(
"%p,%p\n", iface, ppIEnumMetadata);
752static const IWICMetadataBlockReaderVtbl JpegDecoder_Block_Vtbl = {
753 JpegDecoder_Block_QueryInterface,
754 JpegDecoder_Block_AddRef,
755 JpegDecoder_Block_Release,
756 JpegDecoder_Block_GetContainerFormat,
757 JpegDecoder_Block_GetCount,
758 JpegDecoder_Block_GetReaderByIndex,
759 JpegDecoder_Block_GetEnumerator,
769 if (!libjpeg_handle && !load_libjpeg())
780 This->IWICBitmapDecoder_iface.lpVtbl = &JpegDecoder_Vtbl;
781 This->IWICBitmapFrameDecode_iface.lpVtbl = &JpegDecoder_Frame_Vtbl;
782 This->IWICMetadataBlockReader_iface.lpVtbl = &JpegDecoder_Block_Vtbl;
789 This->lock.DebugInfo->Spare[0] = (
DWORD_PTR)(__FILE__
": JpegDecoder.lock");
791 ret = IWICBitmapDecoder_QueryInterface(&
This->IWICBitmapDecoder_iface, iid,
ppv);
792 IWICBitmapDecoder_Release(&
This->IWICBitmapDecoder_iface);
797typedef struct jpeg_compress_format {
803} jpeg_compress_format;
805static const jpeg_compress_format compress_formats[] = {
806 { &GUID_WICPixelFormat24bppBGR, 24, 3,
JCS_RGB, 1 },
807 { &GUID_WICPixelFormat32bppCMYK, 32, 4,
JCS_CMYK },
812typedef struct JpegEncoder {
821 BOOL frame_initialized;
822 BOOL started_compress;
824 BOOL frame_committed;
828 const jpeg_compress_format *
format;
833 BYTE dest_buffer[1024];
853 JpegEncoder *
This = encoder_from_compress(cinfo);
855 This->dest_mgr.next_output_byte =
This->dest_buffer;
856 This->dest_mgr.free_in_buffer =
sizeof(
This->dest_buffer);
859static jpeg_boolean dest_mgr_empty_output_buffer(
j_compress_ptr cinfo)
861 JpegEncoder *
This = encoder_from_compress(cinfo);
865 hr = IStream_Write(
This->stream,
This->dest_buffer,
866 sizeof(
This->dest_buffer), &byteswritten);
868 if (
hr !=
S_OK || byteswritten == 0)
870 ERR(
"Failed writing data, hr=%x\n",
hr);
874 This->dest_mgr.next_output_byte =
This->dest_buffer;
875 This->dest_mgr.free_in_buffer =
sizeof(
This->dest_buffer);
881 JpegEncoder *
This = encoder_from_compress(cinfo);
885 if (
This->dest_mgr.free_in_buffer !=
sizeof(
This->dest_buffer))
887 hr = IStream_Write(
This->stream,
This->dest_buffer,
888 sizeof(
This->dest_buffer) -
This->dest_mgr.free_in_buffer, &byteswritten);
890 if (
hr !=
S_OK || byteswritten == 0)
891 ERR(
"Failed writing data, hr=%x\n",
hr);
906 *
ppv = &
This->IWICBitmapFrameEncode_iface;
921 return IWICBitmapEncoder_AddRef(&
This->IWICBitmapEncoder_iface);
927 return IWICBitmapEncoder_Release(&
This->IWICBitmapEncoder_iface);
934 TRACE(
"(%p,%p)\n", iface, pIEncoderOptions);
938 if (
This->frame_initialized)
955 TRACE(
"(%p,%u,%u)\n", iface, uiWidth, uiHeight);
959 if (!
This->frame_initialized ||
This->started_compress)
965 This->width = uiWidth;
966 This->height = uiHeight;
974 double dpiX,
double dpiY)
977 TRACE(
"(%p,%0.2f,%0.2f)\n", iface, dpiX, dpiY);
981 if (!
This->frame_initialized ||
This->started_compress)
1004 if (!
This->frame_initialized ||
This->started_compress)
1010 for (
i=0; compress_formats[
i].guid;
i++)
1012 if (
memcmp(compress_formats[
i].
guid, pPixelFormat,
sizeof(
GUID)) == 0)
1016 if (!compress_formats[
i].
guid)
i = 0;
1018 This->format = &compress_formats[
i];
1029 FIXME(
"(%p,%u,%p): stub\n", iface, cCount, ppIColorContext);
1045 if (
This->frame_initialized)
1057 FIXME(
"(%p,%p): stub\n", iface, pIThumbnail);
1066 BYTE *swapped_data =
NULL, *current_row;
1069 TRACE(
"(%p,%u,%u,%u,%p)\n", iface, lineCount, cbStride, cbBufferSize, pbPixels);
1073 if (!
This->frame_initialized || !
This->width || !
This->height || !
This->format)
1079 if (lineCount == 0 || lineCount +
This->lines_written >
This->height)
1094 if (!
This->started_compress)
1096 This->cinfo.image_width =
This->width;
1097 This->cinfo.image_height =
This->height;
1098 This->cinfo.input_components =
This->format->num_components;
1099 This->cinfo.in_color_space =
This->format->color_space;
1101 pjpeg_set_defaults(&
This->cinfo);
1103 if (
This->xres != 0.0 &&
This->yres != 0.0)
1105 This->cinfo.density_unit = 1;
1106 This->cinfo.X_density =
This->xres;
1107 This->cinfo.Y_density =
This->yres;
1110 pjpeg_start_compress(&
This->cinfo,
TRUE);
1115 row_size =
This->format->bpp / 8 *
This->width;
1117 if (
This->format->swap_rgb)
1129 if (
This->format->swap_rgb)
1133 memcpy(swapped_data, pbPixels + (cbStride *
line), row_size);
1135 for (
x=0;
x <
This->width;
x++)
1139 b = swapped_data[
x*3];
1140 swapped_data[
x*3] = swapped_data[
x*3+2];
1141 swapped_data[
x*3+2] =
b;
1144 current_row = swapped_data;
1147 current_row = pbPixels + (cbStride *
line);
1149 if (!pjpeg_write_scanlines(&
This->cinfo, ¤t_row, 1))
1151 ERR(
"failed writing scanlines\n");
1157 This->lines_written++;
1173 if (!
This->frame_initialized)
1193 TRACE(
"(%p)\n", iface);
1197 if (!
This->started_compress ||
This->lines_written !=
This->height ||
This->frame_committed)
1211 pjpeg_finish_compress(&
This->cinfo);
1223 FIXME(
"(%p, %p): stub\n", iface, ppIMetadataQueryWriter);
1227static const IWICBitmapFrameEncodeVtbl JpegEncoder_FrameVtbl = {
1228 JpegEncoder_Frame_QueryInterface,
1229 JpegEncoder_Frame_AddRef,
1230 JpegEncoder_Frame_Release,
1231 JpegEncoder_Frame_Initialize,
1232 JpegEncoder_Frame_SetSize,
1233 JpegEncoder_Frame_SetResolution,
1234 JpegEncoder_Frame_SetPixelFormat,
1235 JpegEncoder_Frame_SetColorContexts,
1236 JpegEncoder_Frame_SetPalette,
1237 JpegEncoder_Frame_SetThumbnail,
1238 JpegEncoder_Frame_WritePixels,
1239 JpegEncoder_Frame_WriteSource,
1240 JpegEncoder_Frame_Commit,
1241 JpegEncoder_Frame_GetMetadataQueryWriter
1255 *
ppv = &
This->IWICBitmapEncoder_iface;
1272 TRACE(
"(%p) refcount=%u\n", iface,
ref);
1282 TRACE(
"(%p) refcount=%u\n", iface,
ref);
1286 This->lock.DebugInfo->Spare[0] = 0;
1288 if (
This->initialized) pjpeg_destroy_compress(&
This->cinfo);
1289 if (
This->stream) IStream_Release(
This->stream);
1302 TRACE(
"(%p,%p,%u)\n", iface, pIStream, cacheOption);
1306 if (
This->initialized)
1312 pjpeg_std_error(&
This->jerr);
1314 This->jerr.error_exit = error_exit_fn;
1315 This->jerr.emit_message = emit_message_fn;
1329 This->stream = pIStream;
1330 IStream_AddRef(pIStream);
1332 This->dest_mgr.next_output_byte =
This->dest_buffer;
1333 This->dest_mgr.free_in_buffer =
sizeof(
This->dest_buffer);
1335 This->dest_mgr.init_destination = dest_mgr_init_destination;
1336 This->dest_mgr.empty_output_buffer = dest_mgr_empty_output_buffer;
1337 This->dest_mgr.term_destination = dest_mgr_term_destination;
1339 This->cinfo.dest = &
This->dest_mgr;
1371 hr = IWICComponentInfo_QueryInterface(comp_info, &IID_IWICBitmapEncoderInfo, (
void **)
info);
1372 IWICComponentInfo_Release(comp_info);
1380 FIXME(
"(%p,%u,%p): stub\n", iface, cCount, ppIColorContext);
1389 TRACE(
"(%p,%p)\n", iface, pIPalette);
1402 TRACE(
"(%p,%p)\n", iface, pIThumbnail);
1408 TRACE(
"(%p,%p)\n", iface, pIPreview);
1417 static const PROPBAG2 opts[6] =
1427 TRACE(
"(%p,%p,%p)\n", iface, ppIFrameEncode, ppIEncoderOptions);
1431 if (
This->frame_count != 0)
1437 if (!
This->initialized)
1443 if (ppIEncoderOptions)
1453 This->frame_count = 1;
1457 IWICBitmapEncoder_AddRef(iface);
1458 *ppIFrameEncode = &
This->IWICBitmapFrameEncode_iface;
1466 TRACE(
"(%p)\n", iface);
1470 if (!
This->frame_committed ||
This->committed)
1486 FIXME(
"(%p,%p): stub\n", iface, ppIMetadataQueryWriter);
1490static const IWICBitmapEncoderVtbl JpegEncoder_Vtbl = {
1491 JpegEncoder_QueryInterface,
1493 JpegEncoder_Release,
1494 JpegEncoder_Initialize,
1495 JpegEncoder_GetContainerFormat,
1496 JpegEncoder_GetEncoderInfo,
1497 JpegEncoder_SetColorContexts,
1498 JpegEncoder_SetPalette,
1499 JpegEncoder_SetThumbnail,
1500 JpegEncoder_SetPreview,
1501 JpegEncoder_CreateNewFrame,
1503 JpegEncoder_GetMetadataQueryWriter
1515 if (!libjpeg_handle && !load_libjpeg())
1524 This->IWICBitmapEncoder_iface.lpVtbl = &JpegEncoder_Vtbl;
1525 This->IWICBitmapFrameEncode_iface.lpVtbl = &JpegEncoder_FrameVtbl;
1528 This->frame_count = 0;
1531 This->lines_written = 0;
1540 This->lock.DebugInfo->Spare[0] = (
DWORD_PTR)(__FILE__
": JpegEncoder.lock");
1542 ret = IWICBitmapEncoder_QueryInterface(&
This->IWICBitmapEncoder_iface, iid,
ppv);
1543 IWICBitmapEncoder_Release(&
This->IWICBitmapEncoder_iface);
1552 ERR(
"Trying to load JPEG picture, but JPEG support is not compiled in.\n");
1558 ERR(
"Trying to save JPEG picture, but JPEG support is not compiled in.\n");
int memcmp(void *Buffer1, void *Buffer2, ACPI_SIZE Count)
static void * heap_alloc(size_t len)
#define InterlockedIncrement
#define InterlockedDecrement
#define WINE_DEFAULT_DEBUG_CHANNEL(t)
static BmpDecoder * impl_from_IWICBitmapFrameDecode(IWICBitmapFrameDecode *iface)
static BmpDecoder * impl_from_IWICBitmapDecoder(IWICBitmapDecoder *iface)
static BmpFrameEncode * impl_from_IWICBitmapFrameEncode(IWICBitmapFrameEncode *iface)
static BmpEncoder * impl_from_IWICBitmapEncoder(IWICBitmapEncoder *iface)
void copy_pixels(const BYTE *src, UINT src_row_pitch, UINT src_slice_pitch, BYTE *dst, UINT dst_row_pitch, UINT dst_slice_pitch, const struct volume *size, const struct pixel_format_desc *format) DECLSPEC_HIDDEN
#define HeapFree(x, y, z)
#define WINE_DECLARE_DEBUG_CHANNEL(x)
static GpStatus get_decoder_info(IStream *stream, const struct image_codec **result)
HRESULT CreateComponentInfo(REFCLSID clsid, IWICComponentInfo **ppIInfo)
HRESULT write_source(IWICBitmapFrameEncode *iface, IWICBitmapSource *source, const WICRect *prc, const WICPixelFormatGUID *format, UINT bpp, INT width, INT height)
void reverse_bgr8(UINT bytesperpixel, LPBYTE bits, UINT width, UINT height, INT stride)
HRESULT configure_write_source(IWICBitmapFrameEncode *iface, IWICBitmapSource *source, const WICRect *prc, const WICPixelFormatGUID *format, INT width, INT height, double xres, double yres)
HRESULT CreatePropertyBag2(const PROPBAG2 *options, UINT count, IPropertyBag2 **ppPropertyBag2)
GLint GLint GLint GLint GLint x
GLint GLint GLsizei GLsizei height
GLint GLint GLsizei width
GLboolean GLboolean GLboolean b
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble const GLfloat const GLdouble const GLfloat GLint i
jpeg_destroy_compress(j_compress_ptr cinfo)
jpeg_finish_compress(j_compress_ptr cinfo)
jpeg_CreateCompress(j_compress_ptr cinfo, int version, size_t structsize)
jpeg_write_scanlines(j_compress_ptr cinfo, JSAMPARRAY scanlines, JDIMENSION num_lines)
jpeg_start_compress(j_compress_ptr cinfo, boolean write_all_tables)
jpeg_set_defaults(j_compress_ptr cinfo)
jpeg_CreateDecompress(j_decompress_ptr cinfo, int version, size_t structsize)
jpeg_destroy_decompress(j_decompress_ptr cinfo)
jpeg_read_header(j_decompress_ptr cinfo, boolean require_image)
jpeg_read_scanlines(j_decompress_ptr cinfo, JSAMPARRAY scanlines, JDIMENSION max_lines)
jpeg_resync_to_restart(j_decompress_ptr cinfo, int desired)
jpeg_std_error(struct jpeg_error_mgr *err)
void * wine_dlopen(const char *filename, int flag, char *error, size_t errorsize)
#define memcpy(s1, s2, n)
static const WCHAR wszImageQuality[]
static const WCHAR wszChrominance[]
static const WCHAR wszBitmapTransform[]
static const WCHAR wszSuppressApp0[]
static const WCHAR wszLuminance[]
static const WCHAR wszJpegYCrCbSubsampling[]
#define IsEqualIID(riid1, riid2)
int ZEXPORT compress(Bytef *dest, uLongf *destLen, const Bytef *source, uLong sourceLen)
int seek(void *fd, ulong off, int mode)
VOID WINAPI InitializeCriticalSection(OUT LPCRITICAL_SECTION lpCriticalSection)
#define CONTAINING_RECORD(address, type, field)
void WINAPI LeaveCriticalSection(LPCRITICAL_SECTION)
void WINAPI EnterCriticalSection(LPCRITICAL_SECTION)
void WINAPI DeleteCriticalSection(PCRITICAL_SECTION)
WICBitmapEncoderCacheOption
@ WICDecodeMetadataCacheOnDemand
@ WICBitmapDecoderCapabilityCanDecodeSomeImages
@ WICBitmapDecoderCapabilityCanDecodeAllImages
static const char * debug_wic_rect(const WICRect *rect)
#define WINCODEC_ERR_WRONGSTATE
#define WINCODEC_ERR_UNSUPPORTEDOPERATION
#define WINCODEC_ERR_NOTINITIALIZED
#define WINCODEC_ERR_PALETTEUNAVAILABLE
#define WINCODEC_ERR_CODECNOTHUMBNAIL
#define WINCODEC_ERR_FRAMEMISSING