static boolean istream_fill_input_buffer(j_decompress_ptr cinfo) { SourceManager *sourceManager = reinterpret_cast<SourceManager*>(cinfo->src); sourceManager->is->read(sourceManager->buffer, BUFFERSIZE); cinfo->src->next_input_byte = reinterpret_cast<const JOCTET*>(sourceManager->buffer); if (sourceManager->is->gcount() == 0) { /* Insert a fake EOI marker */ sourceManager->buffer[0] = JOCTET(0xFF); sourceManager->buffer[1] = JOCTET(JPEG_EOI); cinfo->src->bytes_in_buffer = 2; } else cinfo->src->bytes_in_buffer = sourceManager->is->gcount(); return TRUE; }
boolean fill_input_buffer(j_decompress_ptr cinfo) { my_source_mgr* src = (my_source_mgr*)cinfo->src; Q_ASSERT(src->inDevice); int readSize = src->inDevice->read((char*)src->buffer, BUFFER_SIZE); if (readSize > 0) { src->pub.next_input_byte = src->buffer; src->pub.bytes_in_buffer = readSize; } else { /** * JPEG file is broken. We feed the decoder with fake EOI, as specified * in the libjpeg documentation. */ static JOCTET fakeEOI[2] = { JOCTET(0xFF), JOCTET(JPEG_EOI)}; kWarning() << "Image is incomplete"; src->pub.next_input_byte = fakeEOI; src->pub.bytes_in_buffer = 2; } return true; }