33#if JUCE_INCLUDE_JPEGLIB_CODE || ! defined (JUCE_INCLUDE_JPEGLIB_CODE)
39 "-Wdeprecated-register",
40 "-Wdeprecated-declarations",
45 "-Wimplicit-fallthrough",
46 "-Wzero-as-null-pointer-constant",
47 "-Wshift-negative-value",
50 #define JPEG_INTERNALS
100 #undef FIX_0_541196100
102 #undef FIX_0_541196100
105 #undef FIX_1_847759065
111 #undef FIX_1_847759065
125 #define JPEG_INTERNALS
141 #if ! (JUCE_WINDOWS && (JUCE_MSVC || JUCE_CLANG))
145 static void fatalErrorHandler (
j_common_ptr p) { *((
bool*) (
p->client_data)) =
true; }
154 err.error_exit = fatalErrorHandler;
155 err.emit_message = silentErrorCallback2;
156 err.output_message = silentErrorCallback1;
157 err.format_message = silentErrorCallback3;
158 err.reset_error_mgr = silentErrorCallback1;
162 #if ! JUCE_USING_COREIMAGE_LOADER
180 const int jpegBufferSize = 512;
192 JuceJpegDest*
const dest =
static_cast<JuceJpegDest*
> (cinfo->
dest);
194 const size_t numToWrite = jpegBufferSize - dest->free_in_buffer;
195 dest->output->write (dest->buffer, numToWrite);
200 JuceJpegDest*
const dest =
static_cast<JuceJpegDest*
> (cinfo->
dest);
202 const int numToWrite = jpegBufferSize;
204 dest->next_output_byte =
reinterpret_cast<JOCTET*
> (dest->buffer);
205 dest->free_in_buffer = jpegBufferSize;
207 return (
boolean) dest->output->write (dest->buffer, (
size_t) numToWrite);
229 const int bytesNeeded = 24;
232 if (
in.read (header, bytesNeeded) == bytesNeeded
235 && header[2] == 0xff)
238 #if JUCE_USING_COREIMAGE_LOADER
239 return header[20] ==
'j'
242 && header[23] ==
' ';
248#if JUCE_USING_COREIMAGE_LOADER
254 #if JUCE_USING_COREIMAGE_LOADER
255 return juce_loadWithCoreImage (
in);
270 setupSilentErrorHandler (jerr);
271 jpegDecompStruct.err = &jerr;
275 jpegDecompStruct.src = (
jpeg_source_mgr*)(jpegDecompStruct.mem->alloc_small)
278 bool hasFailed =
false;
279 jpegDecompStruct.client_data = &hasFailed;
281 jpegDecompStruct.src->init_source = dummyCallback1;
282 jpegDecompStruct.src->fill_input_buffer = jpegFill;
283 jpegDecompStruct.src->skip_input_data = jpegSkip;
285 jpegDecompStruct.src->term_source = dummyCallback1;
287 jpegDecompStruct.src->next_input_byte =
static_cast<const unsigned char*
> (mb.
getData());
298 const int width = (
int) jpegDecompStruct.output_width;
299 const int height = (
int) jpegDecompStruct.output_height;
301 jpegDecompStruct.out_color_space =
JCS_RGB;
304 = (*jpegDecompStruct.mem->alloc_sarray) ((
j_common_ptr) &jpegDecompStruct,
308 if (jpeg_start_decompress (&jpegDecompStruct) && ! hasFailed)
311 image.getProperties()->set (
"originalImageHadAlpha",
false);
312 const bool hasAlphaChan =
image.hasAlphaChannel();
330 ((
PixelARGB*) dest)->setARGB (0xff, src[0], src[1], src[2]);
340 ((
PixelRGB*) dest)->setARGB (0xff, src[0], src[1], src[2]);
341 dest += destData.pixelStride;
350 in.setPosition (((
char*) jpegDecompStruct.src->next_input_byte) - (
char*) mb.
getData());
372 setupSilentErrorHandler (jerr);
373 jpegCompStruct.err = &jerr;
380 dest.buffer = tempBuffer;
382 dest.free_in_buffer = jpegBufferSize;
383 dest.init_destination = jpegWriteInit;
384 dest.empty_output_buffer = jpegWriteFlush;
385 dest.term_destination = jpegWriteTerminate;
389 jpegCompStruct.input_components = 3;
391 jpegCompStruct.write_JFIF_header = 1;
393 jpegCompStruct.X_density = 72;
394 jpegCompStruct.Y_density = 72;
399 jpegCompStruct.optimize_coding = 1;
408 const int strideBytes = (
int) (jpegCompStruct.image_width * (
unsigned int) jpegCompStruct.input_components);
415 while (jpegCompStruct.next_scanline < jpegCompStruct.image_height)
421 const uint8* src = srcData.getLinePointer ((
int) jpegCompStruct.next_scanline);
423 for (
int i = srcData.width; --
i >= 0;)
425 *dst++ = ((
const PixelRGB*) src)->getRed();
426 *dst++ = ((
const PixelRGB*) src)->getGreen();
428 src += srcData.pixelStride;
433 for (
int x = 0;
x < srcData.width; ++
x)
435 const Colour pixel (srcData.getPixelColour (
x, (
int) jpegCompStruct.next_scanline));
Type jmin(const Type a, const Type b)
Definition MathsFunctions.h:60
Definition juce_Colour.h:38
uint8 getBlue() const noexcept
Definition juce_Colour.h:178
uint8 getGreen() const noexcept
Definition juce_Colour.h:173
uint8 getRed() const noexcept
Definition juce_Colour.h:168
Definition juce_File.h:45
Definition juce_HeapBlock.h:87
Definition juce_Image.h:310
@ writeOnly
Definition juce_Image.h:315
@ readOnly
Definition juce_Image.h:314
Definition juce_Image.h:58
@ RGB
Definition juce_Image.h:66
Definition juce_MemoryOutputStream.h:36
const void * getData() const noexcept
Definition juce_MemoryOutputStream.cpp:148
size_t getDataSize() const noexcept
Definition juce_MemoryOutputStream.h:80
Definition juce_OutputStream.h:38
Definition juce_PixelFormats.h:59
Definition juce_PixelFormats.h:354
Definition juce_String.h:53
int y
Definition inflate.c:1588
register unsigned i
Definition inflate.c:1575
unsigned x[BMAX+1]
Definition inflate.c:1586
unsigned f
Definition inflate.c:1572
static int int height
Definition pugl.h:1594
static int width
Definition pugl.h:1593
jpeg_destroy_compress(j_compress_ptr cinfo)
Definition jcapimin.c:88
jpeg_finish_compress(j_compress_ptr cinfo)
Definition jcapimin.c:147
jpeg_write_scanlines(j_compress_ptr cinfo, JSAMPARRAY scanlines, JDIMENSION num_lines)
Definition jcapistd.c:77
jpeg_start_compress(j_compress_ptr cinfo, boolean write_all_tables)
Definition jcapistd.c:38
jpeg_set_quality(j_compress_ptr cinfo, int quality, boolean force_baseline)
Definition jcparam.c:132
jpeg_set_defaults(j_compress_ptr cinfo)
Definition jcparam.c:268
jpeg_destroy_decompress(j_decompress_ptr cinfo)
Definition jdapimin.c:91
jpeg_finish_decompress(j_decompress_ptr cinfo)
Definition jdapimin.c:369
jpeg_read_header(j_decompress_ptr cinfo, boolean require_image)
Definition jdapimin.c:241
jpeg_read_scanlines(j_decompress_ptr cinfo, JSAMPARRAY scanlines, JDIMENSION max_lines)
Definition jdapistd.c:152
jpeg_calc_output_dimensions(j_decompress_ptr cinfo)
Definition jdmaster.c:84
#define jpeg_create_decompress(cinfo)
Definition jpeglib.h:897
#define jpeg_create_compress(cinfo)
Definition jpeglib.h:894
#define JPOOL_PERMANENT
Definition jpeglib.h:748
#define JPOOL_IMAGE
Definition jpeglib.h:749
#define JUCE_BEGIN_IGNORE_WARNINGS_GCC_LIKE(...)
Definition juce_CompilerWarnings.h:181
#define JUCE_END_IGNORE_WARNINGS_GCC_LIKE
Definition juce_CompilerWarnings.h:182
#define JUCE_BEGIN_IGNORE_WARNINGS_MSVC(warnings)
Definition juce_CompilerWarnings.h:198
#define JUCE_END_IGNORE_WARNINGS_MSVC
Definition juce_CompilerWarnings.h:199
float in
Definition lilv_test.c:1460
float out
Definition lilv_test.c:1461
Definition juce_JPEGLoader.cpp:138
void zerostruct(Type &structure) noexcept
Definition juce_JPEGLoader.cpp:41
unsigned char uint8
Definition juce_JPEGLoader.cpp:90
Definition juce_JPEGLoader.cpp:32
struct jpeg_compress_struct * j_compress_ptr
Definition juce_JPEGLoader.cpp:262
JOCTET * buffer
Definition juce_JPEGLoader.cpp:302
int quality
Definition juce_JPEGLoader.cpp:919
unsigned int JDIMENSION
Definition juce_JPEGLoader.cpp:172
jpeg_resync_to_restart(j_decompress_ptr cinfo, int desired)
Definition juce_JPEGLoader.cpp:1124
@ JCS_RGB
Definition juce_JPEGLoader.cpp:209
struct jpeg_common_struct * j_common_ptr
Definition juce_JPEGLoader.cpp:261
@ JDCT_FLOAT
Definition juce_JPEGLoader.cpp:220
unsigned char boolean
Definition juce_JPEGLoader.cpp:35
JSAMPROW * JSAMPARRAY
Definition juce_JPEGLoader.cpp:67
struct jpeg_decompress_struct * j_decompress_ptr
Definition juce_JPEGLoader.cpp:263
unsigned char JOCTET
Definition juce_JPEGLoader.cpp:111
Definition carla_juce.cpp:31
void zerostruct(Type &structure) noexcept
Definition juce_Memory.h:32
Type jlimit(Type lowerLimit, Type upperLimit, Type valueToConstrain) noexcept
Definition juce_MathsFunctions.h:262
unsigned char uint8
Definition juce_MathsFunctions.h:37
int roundToInt(const FloatType value) noexcept
Definition juce_MathsFunctions.h:465
@ image
Definition juce_AccessibilityRole.h:42
Definition juce_JPEGLoader.cpp:183
Definition juce_JPEGLoader.cpp:268
struct jpeg_destination_mgr * dest
Definition juce_JPEGLoader.cpp:272
Definition juce_JPEGLoader.cpp:411
struct jpeg_source_mgr * src
Definition juce_JPEGLoader.cpp:415
Definition juce_JPEGLoader.cpp:713
Definition juce_JPEGLoader.cpp:643
Definition juce_JPEGLoader.cpp:725
const JOCTET * next_input_byte
Definition juce_JPEGLoader.cpp:726
size_t bytes_in_buffer
Definition juce_JPEGLoader.cpp:727
uch * p
Definition crypt.c:594
typedef int(UZ_EXP MsgFn)()
#define TRUE
Definition unzpriv.h:1295