Merge XFA to PDFium master at 4dc95e7 on 10/28/2014
[pdfium.git] / core / include / fxcodec / fx_codec.h
index da8b309..b0eecc3 100644 (file)
@@ -13,6 +13,7 @@
 #include "fx_codec_provider.h"
 class CFX_DIBSource;
 class ICodec_ScanlineDecoder;
+class ICodec_ProgressiveDecoder;\r
 class ICodec_BasicModule;
 class ICodec_FaxModule;
 class ICodec_JpegModule;
@@ -21,6 +22,11 @@ class ICodec_Jbig2Module;
 class ICodec_IccModule;
 class ICodec_FlateModule;
 class ICodec_Jbig2Encoder;
+class ICodec_PngModule;\r
+class ICodec_GifModule;\r
+class ICodec_BmpModule;\r
+class ICodec_TiffModule;\r
+class CFX_DIBAttribute;\r
 class ICodec_ScanlineDecoder;
 class CCodec_ModuleMgr : public CFX_Object
 {
@@ -37,6 +43,9 @@ public:
 
     void                               InitIccDecoder();
 
+\r
+    ICodec_ProgressiveDecoder* CreateProgressiveDecoder();\r
+\r
     ICodec_Jbig2Encoder*               CreateJbig2Encoder();
 protected:
     CCodec_ModuleMgr();
@@ -70,6 +79,22 @@ public:
     {
         return m_pFlateModule;
     }
+    ICodec_PngModule*  GetPngModule()\r
+    {\r
+        return m_pPngModule;\r
+    }\r
+    ICodec_GifModule*  GetGifModule()\r
+    {\r
+        return m_pGifModule;\r
+    }\r
+    ICodec_BmpModule*  GetBmpModule()\r
+    {\r
+        return m_pBmpModule;\r
+    }\r
+    ICodec_TiffModule* GetTiffModule()\r
+    {\r
+        return m_pTiffModule;\r
+    }\r
 protected:
     ICodec_BasicModule*        m_pBasicModule;
     ICodec_FaxModule*  m_pFaxModule;
@@ -78,6 +103,10 @@ protected:
     ICodec_Jbig2Module*        m_pJbig2Module;
     ICodec_IccModule*  m_pIccModule;
     ICodec_FlateModule*        m_pFlateModule;
+    ICodec_PngModule*  m_pPngModule;\r
+    ICodec_GifModule*  m_pGifModule;\r
+    ICodec_BmpModule*  m_pBmpModule;\r
+    ICodec_TiffModule* m_pTiffModule;\r
 
 };
 class ICodec_BasicModule : public CFX_Object
@@ -170,7 +199,7 @@ public:
 
     virtual void               Input(void* pContext, FX_LPCBYTE src_buf, FX_DWORD src_size) = 0;
 
-    virtual int                        ReadHeader(void* pContext, int* width, int* height, int* nComps) = 0;
+    virtual int                        ReadHeader(void* pContext, int* width, int* height, int* nComps, CFX_DIBAttribute* pAttribute = NULL) = 0;\r
 
 
     virtual int                        StartScanline(void* pContext, int down_scale) = 0;
@@ -197,6 +226,97 @@ public:
 
     virtual void               DestroyDecoder(FX_LPVOID ctx) = 0;
 };
+class ICodec_PngModule : public CFX_Object\r
+{\r
+public:\r
+\r
+    virtual ~ICodec_PngModule() {}\r
+\r
+    virtual void*              Start(void* pModule) = 0;\r
+\r
+    virtual void               Finish(void* pContext) = 0;\r
+\r
+    virtual FX_BOOL            Input(void* pContext, FX_LPCBYTE src_buf, FX_DWORD src_size, CFX_DIBAttribute* pAttribute = NULL) = 0;\r
+\r
+    FX_BOOL                            (*ReadHeaderCallback)(void* pModule, int width, int height, int bpc, int pass, int* color_type, double* gamma);\r
+\r
+    FX_BOOL                            (*AskScanlineBufCallback)(void* pModule, int line, FX_LPBYTE& src_buf);\r
+\r
+    void                               (*FillScanlineBufCompletedCallback)(void* pModule, int pass, int line);\r
+};\r
+class ICodec_GifModule : public CFX_Object\r
+{\r
+public:\r
+\r
+    virtual ~ICodec_GifModule() {}\r
+\r
+    virtual void*              Start(void* pModule) = 0;\r
+\r
+    virtual void               Finish(void* pContext) = 0;\r
+\r
+    virtual FX_DWORD   GetAvailInput(void* pContext, FX_LPBYTE* avail_buf_ptr = NULL) = 0;\r
+\r
+    virtual void               Input(void* pContext, FX_LPCBYTE src_buf, FX_DWORD src_size) = 0;\r
+\r
+    virtual FX_INT32   ReadHeader(void* pContext, int* width, int* height,\r
+                                   int* pal_num, void** pal_pp, int* bg_index, CFX_DIBAttribute* pAttribute = NULL) = 0;\r
+\r
+    virtual FX_INT32   LoadFrameInfo(void* pContext, int* frame_num) = 0;\r
+\r
+    void                               (*RecordCurrentPositionCallback)(void* pModule, FX_DWORD& cur_pos);\r
+\r
+    FX_LPBYTE                  (*AskLocalPaletteBufCallback)(void* pModule, FX_INT32 frame_num, FX_INT32 pal_size);\r
+\r
+    virtual FX_INT32   LoadFrame(void* pContext, int frame_num, CFX_DIBAttribute* pAttribute = NULL) = 0;\r
+\r
+    FX_BOOL                            (*InputRecordPositionBufCallback)(void* pModule, FX_DWORD rcd_pos, const FX_RECT& img_rc,\r
+            FX_INT32 pal_num, void* pal_ptr,\r
+            FX_INT32 delay_time, FX_BOOL user_input,\r
+            FX_INT32 trans_index, FX_INT32 disposal_method, FX_BOOL interlace);\r
+\r
+    void                               (*ReadScanlineCallback)(void* pModule, FX_INT32 row_num, FX_LPBYTE row_buf);\r
+};\r
+class ICodec_BmpModule : public CFX_Object\r
+{\r
+public:\r
+\r
+    virtual ~ICodec_BmpModule() {}\r
+\r
+    virtual void*              Start(void* pModule) = 0;\r
+\r
+    virtual void               Finish(void* pContext) = 0;\r
+\r
+    virtual FX_DWORD   GetAvailInput(void* pContext, FX_LPBYTE* avail_buf_ptr = NULL) = 0;\r
+\r
+    virtual void               Input(void* pContext, FX_LPCBYTE src_buf, FX_DWORD src_size) = 0;\r
+\r
+    virtual FX_INT32   ReadHeader(void* pContext, FX_INT32* width, FX_INT32* height, FX_BOOL* tb_flag, FX_INT32* components,\r
+                                   int* pal_num, FX_DWORD** pal_pp, CFX_DIBAttribute* pAttribute = NULL) = 0;\r
+\r
+    virtual FX_INT32   LoadImage(void* pContext) = 0;\r
+\r
+    FX_BOOL                            (*InputImagePositionBufCallback)(void* pModule, FX_DWORD rcd_pos);\r
+\r
+    void                               (*ReadScanlineCallback)(void* pModule, FX_INT32 row_num, FX_LPBYTE row_buf);\r
+};\r
+class ICodec_TiffModule : public CFX_Object\r
+{\r
+public:\r
+\r
+    virtual ~ICodec_TiffModule() {}\r
+\r
+    virtual FX_LPVOID  CreateDecoder(IFX_FileRead* file_ptr) = 0;\r
+\r
+\r
+    virtual void               GetFrames(FX_LPVOID ctx, FX_INT32& frames) = 0;\r
+\r
+    virtual FX_BOOL            LoadFrameInfo(FX_LPVOID ctx, FX_INT32 frame, FX_DWORD& width, FX_DWORD& height, FX_DWORD& comps, FX_DWORD& bpc, CFX_DIBAttribute* pAttribute = NULL) = 0;\r
+\r
+\r
+    virtual FX_BOOL            Decode(FX_LPVOID ctx, class CFX_DIBitmap* pDIBitmap) = 0;\r
+\r
+    virtual void               DestroyDecoder(FX_LPVOID ctx) = 0;\r
+};\r
 class ICodec_Jbig2Module : public CFX_Object
 {
 public:
@@ -218,6 +338,34 @@ public:
     virtual FXCODEC_STATUS             ContinueDecode(void* pJbig2Content, IFX_Pause* pPause) = 0;
     virtual void                               DestroyJbig2Context(void* pJbig2Content) = 0;
 };
+class ICodec_ProgressiveDecoder : public CFX_Object\r
+{\r
+public:\r
+\r
+    virtual ~ICodec_ProgressiveDecoder() {}\r
+\r
+    virtual FXCODEC_STATUS             LoadImageInfo(IFX_FileRead* pFile, FXCODEC_IMAGE_TYPE imageType = FXCODEC_IMAGE_UNKNOWN, CFX_DIBAttribute* pAttribute = NULL) = 0;\r
+\r
+    virtual FXCODEC_IMAGE_TYPE GetType() = 0;\r
+\r
+    virtual FX_INT32                   GetWidth() = 0;\r
+\r
+    virtual FX_INT32                   GetHeight() = 0;\r
+\r
+    virtual FX_INT32                   GetNumComponents() = 0;\r
+\r
+    virtual FX_INT32                   GetBPC() = 0;\r
+\r
+    virtual void                               SetClipBox(FX_RECT* clip) = 0;\r
+\r
+    virtual FXCODEC_STATUS             GetFrames(FX_INT32& frames, IFX_Pause* pPause = NULL) = 0;\r
+\r
+    virtual FXCODEC_STATUS             StartDecode(class CFX_DIBitmap* pDIBitmap,\r
+                                            FX_INT32 start_x, FX_INT32 start_y, FX_INT32 size_x, FX_INT32 size_y,\r
+                                            FX_INT32 frames = 0, FX_BOOL bInterpol = TRUE) = 0;\r
+\r
+    virtual FXCODEC_STATUS             ContinueDecode(IFX_Pause* pPause = NULL) = 0;\r
+};\r
 class ICodec_Jbig2Encoder : public CFX_Object
 {
 public:
@@ -286,4 +434,38 @@ public:
 void AdobeCMYK_to_sRGB(FX_FLOAT c, FX_FLOAT m, FX_FLOAT y, FX_FLOAT k, FX_FLOAT& R, FX_FLOAT& G, FX_FLOAT& B);
 void AdobeCMYK_to_sRGB1(FX_BYTE c, FX_BYTE m, FX_BYTE y, FX_BYTE k, FX_BYTE& R, FX_BYTE& G, FX_BYTE& B);
 FX_BOOL MD5ComputeID(FX_LPCVOID buf, FX_DWORD dwSize, FX_BYTE ID[16]);
+class CFX_DIBAttribute : public CFX_Object\r
+{\r
+public:\r
+    CFX_DIBAttribute();\r
+    ~CFX_DIBAttribute();\r
+\r
+    FX_INT32           m_nXDPI;\r
+\r
+    FX_INT32           m_nYDPI;\r
+\r
+    FX_FLOAT           m_fAspectRatio;\r
+\r
+    FX_WORD                    m_wDPIUnit;\r
+\r
+    CFX_ByteString     m_strAuthor;\r
+\r
+    FX_BYTE                    m_strTime[20];\r
+\r
+    FX_INT32           m_nGifLeft;\r
+    FX_INT32           m_nGifTop;\r
+\r
+    FX_DWORD*          m_pGifLocalPalette;\r
+\r
+    FX_DWORD           m_nGifLocalPalNum;\r
+\r
+    FX_INT32           m_nBmpCompressType;\r
+    class IFX_DIBAttributeExif* m_pExif;\r
+};\r
+class IFX_DIBAttributeExif : public CFX_Object\r
+{\r
+public:\r
+    virtual ~IFX_DIBAttributeExif() {};\r
+    virtual FX_BOOL            GetInfo(FX_WORD tag, FX_LPVOID val) = 0;\r
+};\r
 #endif