diff options
Diffstat (limited to 'libsgl/images/fpdfemb_ext.h')
-rw-r--r-- | libsgl/images/fpdfemb_ext.h | 81 |
1 files changed, 81 insertions, 0 deletions
diff --git a/libsgl/images/fpdfemb_ext.h b/libsgl/images/fpdfemb_ext.h new file mode 100644 index 0000000..d82c4df --- /dev/null +++ b/libsgl/images/fpdfemb_ext.h @@ -0,0 +1,81 @@ +#ifdef __cplusplus +extern "C" { +#endif + +/** Extended interfaces for JPEG, JPEG2000 and JBIG2 decoders **/ +typedef struct +{ + /** Initialize the decoding context, with memory allocator provided by FPDFEMB. + Implementation should return a pointer to the decoding context. + */ + void* (*Init)(void* (*alloc_func)(unsigned int), void (*free_func)(void*)); + + /** Finish with the decoding. */ + void (*Finish)(void* pContext); + + /** Input JPEG encoded data from the source. + This function may be called multiple times during decoding progress. + */ + void (*Input)(void* pContext, const unsigned char* src_buf, unsigned long src_size); + + /** Read the header information. Return non-zero for success, 0 for failure */ + int (*ReadHeader)(void* pContext); + + /** Get info from the decoder, including image width, height and number of components */ + void (*GetInfo)(void* pContext, int* width, int* height, int* nComps); + + /** Read one scanline from decoded image */ + int (*ReadScanline)(void* pContext, unsigned char* dest_buf); + + /** Get number of available source bytes left in the input stream */ + unsigned long (*GetAvailInput)(void* pContext); +} FPDFEMB_JPEG_DECODER; + +void FPDFEMB_SetJpegDecoder(FPDFEMB_JPEG_DECODER* pDecoder); + +typedef struct +{ + /** Initialize the decoder with the full source data. + Implementation should return a pointer to the context. + */ + void* (*Init)(const unsigned char* src_buf, unsigned long src_size); + + /** Destroy the context */ + void (*Finish)(void* context); + + /** Get image info from the context, including width, height, number of components + in original codestream, and number of components in output image. For some + particular type of encoded image, like paletted image, these two numbers of + components may vary. + */ + void (*GetInfo)(void* context, unsigned long* width, unsigned long* height, + unsigned long* codestream_nComps, unsigned long* output_nComps); + + /** Do the real data decoding, output to a pre-allocated buffer. + bTranslateColor indicates whether the decoder should use JPEG2000 embedded + color space info to translate image into sRGB color space. + "offsets" array describes the byte order of all components. For example, + {2,1,0} means the first components is output to last byte. + */ + void (*Decode)(void* context, unsigned char* dest_buf, int pitch, + int bTranslateColor, unsigned char* offsets); +} FPDFEMB_JPEG2000_DECODER; + +void FPDFEMB_SetJpeg2000Decoder(FPDFEMB_JPEG2000_DECODER* pDecoder); + +typedef struct +{ + /** Do the whole decoding process. Supplied parameters include width, height, source image + data and size, global data and size (can be shared among different images), destination + buffer and scanline pitch in dest buffer. + */ + void (*Decode)(unsigned long width, unsigned long height, const unsigned char* src_buf, + unsigned long src_size, const unsigned char* global_buf, unsigned long global_size, + unsigned char* dest_buf, int dest_pitch); +} FPDFEMB_JBIG2_DECODER; + +void FPDFEMB_SetJbig2Decoder(FPDFEMB_JBIG2_DECODER* pDecoder); + +#ifdef __cplusplus +}; +#endif |