aboutsummaryrefslogtreecommitdiffstats
path: root/libsgl/images/fpdfemb_ext.h
diff options
context:
space:
mode:
Diffstat (limited to 'libsgl/images/fpdfemb_ext.h')
-rw-r--r--libsgl/images/fpdfemb_ext.h81
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