18const qint64 INPUT_BUFFER_SIZE = 4096;
20struct KisJPEGSourceManager :
public jpeg_source_mgr
27typedef KisJPEGSourceManager* KisJPEGSourceManagerPtr;
32void init_source(j_decompress_ptr cinfo)
34 KisJPEGSourceManagerPtr
src = (KisJPEGSourceManagerPtr)cinfo->src;
35 src->anyDataReceived =
false;
38boolean fill_input_buffer(j_decompress_ptr cinfo)
40 KisJPEGSourceManagerPtr
src = (KisJPEGSourceManagerPtr)cinfo->src;
41 qint64 numBytesRead =
src->input->read(
reinterpret_cast<char*
>(
src->buffer), INPUT_BUFFER_SIZE);
43 if (numBytesRead <= 0) {
44 if (!
src->anyDataReceived) {
46 ERREXIT(cinfo, JERR_INPUT_EMPTY);
48 WARNMS(cinfo, JWRN_JPEG_EOF);
51 src->buffer[0] = (JOCTET)0xFF;
52 src->buffer[1] = (JOCTET)JPEG_EOI;
56 src->next_input_byte =
src->buffer;
57 src->bytes_in_buffer = numBytesRead;
58 src->anyDataReceived =
true;
63void skip_input_data(j_decompress_ptr cinfo,
long numBytes)
65 KisJPEGSourceManagerPtr
src = (KisJPEGSourceManagerPtr)cinfo->src;
68 while (numBytes > (
long)
src->bytes_in_buffer) {
69 numBytes -= (long)
src->bytes_in_buffer;
70 (
void)fill_input_buffer(cinfo);
72 src->next_input_byte += (size_t)numBytes;
73 src->bytes_in_buffer -= (size_t)numBytes;
77void term_source(j_decompress_ptr cinfo)
88void setSource(j_decompress_ptr cinfo, QIODevice* inputDevice)
90 KisJPEGSourceManagerPtr src = 0;
92 if (cinfo->src == 0) {
93 cinfo->src = (
struct jpeg_source_mgr*)
94 (*cinfo->mem->alloc_small)((j_common_ptr)cinfo, JPOOL_PERMANENT,
95 sizeof(KisJPEGSourceManager));
96 src = (KisJPEGSourceManagerPtr)cinfo->src;
97 src->buffer = (JOCTET*)
98 (*cinfo->mem->alloc_small)((j_common_ptr)cinfo, JPOOL_PERMANENT,
99 INPUT_BUFFER_SIZE*
sizeof(JOCTET));
102 src = (KisJPEGSourceManagerPtr)cinfo->src;
103 src->init_source = init_source;
104 src->fill_input_buffer = fill_input_buffer;
105 src->skip_input_data = skip_input_data;
106 src->resync_to_restart = jpeg_resync_to_restart;
107 src->term_source = term_source;
108 src->input = inputDevice;
109 src->bytes_in_buffer = 0;
110 src->next_input_byte = 0;
typedef void(QOPENGLF_APIENTRYP PFNGLINVALIDATEBUFFERDATAPROC)(GLuint buffer)
void setSource(j_decompress_ptr cinfo, QIODevice *inputDevice)