| OLD | NEW |
| 1 // Copyright 2014 PDFium Authors. All rights reserved. | 1 // Copyright 2014 PDFium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 // Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com | 5 // Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com |
| 6 | 6 |
| 7 #ifndef CORE_SRC_FXCODEC_CODEC_CODEC_INT_H_ | 7 #ifndef CORE_SRC_FXCODEC_CODEC_CODEC_INT_H_ |
| 8 #define CORE_SRC_FXCODEC_CODEC_CODEC_INT_H_ | 8 #define CORE_SRC_FXCODEC_CODEC_CODEC_INT_H_ |
| 9 | 9 |
| 10 #include <limits.h> | 10 #include <limits.h> |
| 11 #include <list> | 11 #include <list> |
| 12 | 12 |
| 13 #include "../../../../third_party/libopenjpeg20/openjpeg.h" // For OPJ_SIZE_T. | 13 #include "../../../../third_party/libopenjpeg20/openjpeg.h" // For OPJ_SIZE_T. |
| 14 #include "../../../include/fxcodec/fx_codec.h" | 14 #include "../../../include/fxcodec/fx_codec.h" |
| 15 #include "../jbig2/JBig2_Context.h" | 15 #include "../jbig2/JBig2_Context.h" |
| 16 | 16 |
| 17 class CCodec_BasicModule : public ICodec_BasicModule | 17 class CCodec_BasicModule : public ICodec_BasicModule |
| 18 { | 18 { |
| 19 public: | 19 public: |
| 20 virtual FX_BOOL» RunLengthEncode(const uint8_t* src_buf, FX_DWORD src_siz
e, uint8_t*& dest_buf, | 20 virtual bool» RunLengthEncode(const uint8_t* src_buf, FX_DWORD src_siz
e, uint8_t*& dest_buf, |
| 21 FX_DWORD& dest_size); | 21 FX_DWORD& dest_size); |
| 22 virtual FX_BOOL» A85Encode(const uint8_t* src_buf, FX_DWORD src_size, uin
t8_t*& dest_buf, | 22 virtual bool» A85Encode(const uint8_t* src_buf, FX_DWORD src_size, uin
t8_t*& dest_buf, |
| 23 FX_DWORD& dest_size); | 23 FX_DWORD& dest_size); |
| 24 virtual ICodec_ScanlineDecoder* CreateRunLengthDecoder(const uint8_t* sr
c_buf, FX_DWORD src_size, int width, int height, | 24 virtual ICodec_ScanlineDecoder* CreateRunLengthDecoder(const uint8_t* sr
c_buf, FX_DWORD src_size, int width, int height, |
| 25 int nComps, int bpc); | 25 int nComps, int bpc); |
| 26 }; | 26 }; |
| 27 struct CCodec_ImageDataCache { | 27 struct CCodec_ImageDataCache { |
| 28 int m_Width, m_Height; | 28 int m_Width, m_Height; |
| 29 int m_nCachedLines; | 29 int m_nCachedLines; |
| 30 uint8_t m_Data; | 30 uint8_t m_Data; |
| 31 }; | 31 }; |
| 32 class CCodec_ScanlineDecoder : public ICodec_ScanlineDecoder | 32 class CCodec_ScanlineDecoder : public ICodec_ScanlineDecoder |
| 33 { | 33 { |
| 34 public: | 34 public: |
| 35 | 35 |
| 36 CCodec_ScanlineDecoder(); | 36 CCodec_ScanlineDecoder(); |
| 37 | 37 |
| 38 virtual ~CCodec_ScanlineDecoder(); | 38 virtual ~CCodec_ScanlineDecoder(); |
| 39 | 39 |
| 40 virtual FX_DWORD GetSrcOffset() | 40 virtual FX_DWORD GetSrcOffset() |
| 41 { | 41 { |
| 42 return -1; | 42 return -1; |
| 43 } | 43 } |
| 44 | 44 |
| 45 virtual void DownScale(int dest_width, int dest_height); | 45 virtual void DownScale(int dest_width, int dest_height); |
| 46 | 46 |
| 47 uint8_t* GetScanline(int line); | 47 uint8_t* GetScanline(int line); |
| 48 | 48 |
| 49 FX_BOOL» » » » SkipToScanline(int line, IFX_Pause* pPau
se); | 49 bool» » » » SkipToScanline(int line, IFX_Pause* pPau
se); |
| 50 | 50 |
| 51 int GetWidth() | 51 int GetWidth() |
| 52 { | 52 { |
| 53 return m_OutputWidth; | 53 return m_OutputWidth; |
| 54 } | 54 } |
| 55 | 55 |
| 56 int GetHeight() | 56 int GetHeight() |
| 57 { | 57 { |
| 58 return m_OutputHeight; | 58 return m_OutputHeight; |
| 59 } | 59 } |
| 60 | 60 |
| 61 int CountComps() | 61 int CountComps() |
| 62 { | 62 { |
| 63 return m_nComps; | 63 return m_nComps; |
| 64 } | 64 } |
| 65 | 65 |
| 66 int GetBPC() | 66 int GetBPC() |
| 67 { | 67 { |
| 68 return m_bpc; | 68 return m_bpc; |
| 69 } | 69 } |
| 70 | 70 |
| 71 FX_BOOL» » » » IsColorTransformed() | 71 bool» » » » IsColorTransformed() |
| 72 { | 72 { |
| 73 return m_bColorTransformed; | 73 return m_bColorTransformed; |
| 74 } | 74 } |
| 75 | 75 |
| 76 void ClearImageData() | 76 void ClearImageData() |
| 77 { | 77 { |
| 78 if (m_pDataCache) { | 78 if (m_pDataCache) { |
| 79 FX_Free(m_pDataCache); | 79 FX_Free(m_pDataCache); |
| 80 } | 80 } |
| 81 m_pDataCache = NULL; | 81 m_pDataCache = NULL; |
| 82 } | 82 } |
| 83 protected: | 83 protected: |
| 84 | 84 |
| 85 int m_OrigWidth; | 85 int m_OrigWidth; |
| 86 | 86 |
| 87 int m_OrigHeight; | 87 int m_OrigHeight; |
| 88 | 88 |
| 89 int m_DownScale; | 89 int m_DownScale; |
| 90 | 90 |
| 91 int m_OutputWidth; | 91 int m_OutputWidth; |
| 92 | 92 |
| 93 int m_OutputHeight; | 93 int m_OutputHeight; |
| 94 | 94 |
| 95 int m_nComps; | 95 int m_nComps; |
| 96 | 96 |
| 97 int m_bpc; | 97 int m_bpc; |
| 98 | 98 |
| 99 int m_Pitch; | 99 int m_Pitch; |
| 100 | 100 |
| 101 FX_BOOL» » » » m_bColorTransformed; | 101 bool» » » » m_bColorTransformed; |
| 102 | 102 |
| 103 uint8_t* ReadNextLine(); | 103 uint8_t* ReadNextLine(); |
| 104 | 104 |
| 105 virtual FX_BOOL» » v_Rewind() = 0; | 105 virtual bool» » v_Rewind() = 0; |
| 106 | 106 |
| 107 virtual uint8_t* v_GetNextLine() = 0; | 107 virtual uint8_t* v_GetNextLine() = 0; |
| 108 | 108 |
| 109 virtual void v_DownScale(int dest_width, int dest_height) = 0
; | 109 virtual void v_DownScale(int dest_width, int dest_height) = 0
; |
| 110 | 110 |
| 111 int m_NextLine; | 111 int m_NextLine; |
| 112 | 112 |
| 113 uint8_t* m_pLastScanline; | 113 uint8_t* m_pLastScanline; |
| 114 | 114 |
| 115 CCodec_ImageDataCache* m_pDataCache; | 115 CCodec_ImageDataCache* m_pDataCache; |
| 116 }; | 116 }; |
| 117 class CCodec_FaxModule : public ICodec_FaxModule | 117 class CCodec_FaxModule : public ICodec_FaxModule |
| 118 { | 118 { |
| 119 public: | 119 public: |
| 120 virtual ICodec_ScanlineDecoder* CreateDecoder(const uint8_t* src_buf, FX
_DWORD src_size, int width, int height, | 120 virtual ICodec_ScanlineDecoder* CreateDecoder(const uint8_t* src_buf, FX
_DWORD src_size, int width, int height, |
| 121 int K, FX_BOOL EndOfLine, FX_BOOL EncodedByteAlign, FX_BOOL BlackIs1
, int Columns, int Rows); | 121 int K, bool EndOfLine, bool EncodedByteAlign, bool BlackIs1, int Col
umns, int Rows); |
| 122 FX_BOOL» » Encode(const uint8_t* src_buf, int width, int height, in
t pitch, uint8_t*& dest_buf, FX_DWORD& dest_size); | 122 bool» » Encode(const uint8_t* src_buf, int width, int height, in
t pitch, uint8_t*& dest_buf, FX_DWORD& dest_size); |
| 123 }; | 123 }; |
| 124 class CCodec_FlateModule : public ICodec_FlateModule | 124 class CCodec_FlateModule : public ICodec_FlateModule |
| 125 { | 125 { |
| 126 public: | 126 public: |
| 127 virtual ICodec_ScanlineDecoder* CreateDecoder(const uint8_t* src_buf, FX
_DWORD src_size, int width, int height, | 127 virtual ICodec_ScanlineDecoder* CreateDecoder(const uint8_t* src_buf, FX
_DWORD src_size, int width, int height, |
| 128 int nComps, int bpc, int predictor, int Colors, int BitsPerComponent
, int Columns); | 128 int nComps, int bpc, int predictor, int Colors, int BitsPerComponent
, int Columns); |
| 129 virtual FX_DWORD FlateOrLZWDecode(FX_BOOL bLZW, const uint8_t* src_buf, FX_D
WORD src_size, FX_BOOL bEarlyChange, | 129 virtual FX_DWORD FlateOrLZWDecode(bool bLZW, const uint8_t* src_buf, FX_DWOR
D src_size, bool bEarlyChange, |
| 130 int predictor, int Colors, int BitsPerComp
onent, int Columns, | 130 int predictor, int Colors, int BitsPerComp
onent, int Columns, |
| 131 FX_DWORD estimated_size, uint8_t*& dest_bu
f, FX_DWORD& dest_size); | 131 FX_DWORD estimated_size, uint8_t*& dest_bu
f, FX_DWORD& dest_size); |
| 132 virtual FX_BOOL Encode(const uint8_t* src_buf, FX_DWORD src_size, | 132 virtual bool Encode(const uint8_t* src_buf, FX_DWORD src_size, |
| 133 int predictor, int Colors, int BitsPerComponent, int
Columns, | 133 int predictor, int Colors, int BitsPerComponent, int
Columns, |
| 134 uint8_t*& dest_buf, FX_DWORD& dest_size); | 134 uint8_t*& dest_buf, FX_DWORD& dest_size); |
| 135 virtual FX_BOOL» » Encode(const uint8_t* src_buf, FX_DWORD src_size
, uint8_t*& dest_buf, FX_DWORD& dest_size); | 135 virtual bool» » Encode(const uint8_t* src_buf, FX_DWORD src_size
, uint8_t*& dest_buf, FX_DWORD& dest_size); |
| 136 }; | 136 }; |
| 137 class CCodec_JpegModule : public ICodec_JpegModule | 137 class CCodec_JpegModule : public ICodec_JpegModule |
| 138 { | 138 { |
| 139 public: | 139 public: |
| 140 CCodec_JpegModule() : m_pExtProvider(NULL) {} | 140 CCodec_JpegModule() : m_pExtProvider(NULL) {} |
| 141 void SetPovider(IFX_JpegProvider* pJP) | 141 void SetPovider(IFX_JpegProvider* pJP) |
| 142 { | 142 { |
| 143 m_pExtProvider = pJP; | 143 m_pExtProvider = pJP; |
| 144 } | 144 } |
| 145 ICodec_ScanlineDecoder* CreateDecoder(const uint8_t* src_buf, FX_DWORD s
rc_size, | 145 ICodec_ScanlineDecoder* CreateDecoder(const uint8_t* src_buf, FX_DWORD s
rc_size, |
| 146 int width, int height, int nComps, FX_
BOOL ColorTransform); | 146 int width, int height, int nComps, boo
l ColorTransform); |
| 147 FX_BOOL» » LoadInfo(const uint8_t* src_buf, FX_DWORD src_size, int&
width, int& height, | 147 bool» » LoadInfo(const uint8_t* src_buf, FX_DWORD src_size, int&
width, int& height, |
| 148 int& num_components, int& bits_per_components, FX_BOOL&
color_transform, | 148 int& num_components, int& bits_per_components, bool& co
lor_transform, |
| 149 uint8_t** icc_buf_ptr, FX_DWORD* icc_length); | 149 uint8_t** icc_buf_ptr, FX_DWORD* icc_length); |
| 150 FX_BOOL» » Encode(const CFX_DIBSource* pSource, uint8_t*& dest_buf,
FX_STRSIZE& dest_size, int quality, const uint8_t* icc_buf, FX_DWORD icc_length
); | 150 bool» » Encode(const CFX_DIBSource* pSource, uint8_t*& dest_buf,
FX_STRSIZE& dest_size, int quality, const uint8_t* icc_buf, FX_DWORD icc_length
); |
| 151 virtual void* Start(); | 151 virtual void* Start(); |
| 152 virtual void Finish(void* pContext); | 152 virtual void Finish(void* pContext); |
| 153 virtual void Input(void* pContext, const uint8_t* src_buf, FX
_DWORD src_size); | 153 virtual void Input(void* pContext, const uint8_t* src_buf, FX
_DWORD src_size); |
| 154 virtual int ReadHeader(void* pContext, int* width, int* heig
ht, int* nComps); | 154 virtual int ReadHeader(void* pContext, int* width, int* heig
ht, int* nComps); |
| 155 virtual FX_BOOL» » StartScanline(void* pContext, int down_scale); | 155 virtual int»» » StartScanline(void* pContext, int down_scale); |
| 156 virtual FX_BOOL» » ReadScanline(void* pContext, uint8_t* dest_buf); | 156 virtual bool» » ReadScanline(void* pContext, uint8_t* dest_buf); |
| 157 virtual FX_DWORD GetAvailInput(void* pContext, uint8_t** avail_buf_ptr); | 157 virtual FX_DWORD GetAvailInput(void* pContext, uint8_t** avail_buf_ptr); |
| 158 protected: | 158 protected: |
| 159 IFX_JpegProvider* m_pExtProvider; | 159 IFX_JpegProvider* m_pExtProvider; |
| 160 }; | 160 }; |
| 161 class CCodec_IccModule : public ICodec_IccModule | 161 class CCodec_IccModule : public ICodec_IccModule |
| 162 { | 162 { |
| 163 public: | 163 public: |
| 164 virtual IccCS GetProfileCS(const uint8_t* pProfileData
, unsigned int dwProfileSize); | 164 virtual IccCS GetProfileCS(const uint8_t* pProfileData
, unsigned int dwProfileSize); |
| 165 virtual IccCS GetProfileCS(IFX_FileRead* pFile); | 165 virtual IccCS GetProfileCS(IFX_FileRead* pFile); |
| 166 virtual void* CreateTransform(ICodec_IccModule::IccParam* pInp
utParam, | 166 virtual void* CreateTransform(ICodec_IccModule::IccParam* pInp
utParam, |
| (...skipping 25 matching lines...) Expand all Loading... |
| 192 Icc_CLASS_OUTPUT, | 192 Icc_CLASS_OUTPUT, |
| 193 Icc_CLASS_PROOF, | 193 Icc_CLASS_PROOF, |
| 194 Icc_CLASS_MAX | 194 Icc_CLASS_MAX |
| 195 } Icc_CLASS; | 195 } Icc_CLASS; |
| 196 void* CreateProfile(ICodec_IccModule::IccParam* pIccParam, Icc
_CLASS ic, CFX_BinaryBuf* pTransformKey); | 196 void* CreateProfile(ICodec_IccModule::IccParam* pIccParam, Icc
_CLASS ic, CFX_BinaryBuf* pTransformKey); |
| 197 }; | 197 }; |
| 198 class CCodec_JpxModule : public ICodec_JpxModule | 198 class CCodec_JpxModule : public ICodec_JpxModule |
| 199 { | 199 { |
| 200 public: | 200 public: |
| 201 CCodec_JpxModule(); | 201 CCodec_JpxModule(); |
| 202 void*» » CreateDecoder(const uint8_t* src_buf, FX_DWORD src_size,
FX_BOOL useColorSpace = FALSE); | 202 void*» » CreateDecoder(const uint8_t* src_buf, FX_DWORD src_size,
bool useColorSpace = false); |
| 203 void GetImageInfo(void* ctx, FX_DWORD& width, FX_DWORD& heigh
t, | 203 void GetImageInfo(void* ctx, FX_DWORD& width, FX_DWORD& heigh
t, |
| 204 FX_DWORD& codestream_nComps, FX_DWORD& output_nComp
s); | 204 FX_DWORD& codestream_nComps, FX_DWORD& output_nComp
s); |
| 205 FX_BOOL» » Decode(void* ctx, uint8_t* dest_data, int pitch, FX_BOOL
bTranslateColor, uint8_t* offsets); | 205 bool» » Decode(void* ctx, uint8_t* dest_data, int pitch, bool bT
ranslateColor, uint8_t* offsets); |
| 206 void DestroyDecoder(void* ctx); | 206 void DestroyDecoder(void* ctx); |
| 207 }; | 207 }; |
| 208 class CPDF_Jbig2Interface : public CJBig2_Module | 208 class CPDF_Jbig2Interface : public CJBig2_Module |
| 209 { | 209 { |
| 210 public: | 210 public: |
| 211 virtual void *JBig2_Malloc(FX_DWORD dwSize) | 211 virtual void *JBig2_Malloc(FX_DWORD dwSize) |
| 212 { | 212 { |
| 213 return FX_Alloc(uint8_t, dwSize); | 213 return FX_Alloc(uint8_t, dwSize); |
| 214 } | 214 } |
| 215 virtual void *JBig2_Malloc2(FX_DWORD num, FX_DWORD dwSize) | 215 virtual void *JBig2_Malloc2(FX_DWORD num, FX_DWORD dwSize) |
| (...skipping 30 matching lines...) Expand all Loading... |
| 246 ~CCodec_Jbig2Context() {}; | 246 ~CCodec_Jbig2Context() {}; |
| 247 IFX_FileRead* m_file_ptr; | 247 IFX_FileRead* m_file_ptr; |
| 248 FX_DWORD m_width; | 248 FX_DWORD m_width; |
| 249 FX_DWORD m_height; | 249 FX_DWORD m_height; |
| 250 uint8_t* m_src_buf; | 250 uint8_t* m_src_buf; |
| 251 FX_DWORD m_src_size; | 251 FX_DWORD m_src_size; |
| 252 const uint8_t* m_global_data; | 252 const uint8_t* m_global_data; |
| 253 FX_DWORD m_global_size; | 253 FX_DWORD m_global_size; |
| 254 uint8_t* m_dest_buf; | 254 uint8_t* m_dest_buf; |
| 255 FX_DWORD m_dest_pitch; | 255 FX_DWORD m_dest_pitch; |
| 256 FX_BOOL» m_bFileReader; | 256 bool» m_bFileReader; |
| 257 IFX_Pause* m_pPause; | 257 IFX_Pause* m_pPause; |
| 258 CJBig2_Context* m_pContext; | 258 CJBig2_Context* m_pContext; |
| 259 CJBig2_Image* m_dest_image; | 259 CJBig2_Image* m_dest_image; |
| 260 }; | 260 }; |
| 261 class CCodec_Jbig2Module : public ICodec_Jbig2Module | 261 class CCodec_Jbig2Module : public ICodec_Jbig2Module |
| 262 { | 262 { |
| 263 public: | 263 public: |
| 264 CCodec_Jbig2Module() {}; | 264 CCodec_Jbig2Module() {}; |
| 265 ~CCodec_Jbig2Module(); | 265 ~CCodec_Jbig2Module(); |
| 266 FX_BOOL» » Decode(FX_DWORD width, FX_DWORD height, const uint8_t* s
rc_buf, FX_DWORD src_size, | 266 bool» » Decode(FX_DWORD width, FX_DWORD height, const uint8_t* s
rc_buf, FX_DWORD src_size, |
| 267 const uint8_t* global_data, FX_DWORD global_size, uint8_t
* dest_buf, FX_DWORD dest_pitch); | 267 const uint8_t* global_data, FX_DWORD global_size, uint8_t
* dest_buf, FX_DWORD dest_pitch); |
| 268 FX_BOOL» » Decode(IFX_FileRead* file_ptr, | 268 bool» » Decode(IFX_FileRead* file_ptr, |
| 269 FX_DWORD& width, FX_DWORD& height, FX_DWORD& pitch, uint8
_t*& dest_buf); | 269 FX_DWORD& width, FX_DWORD& height, FX_DWORD& pitch, uint8
_t*& dest_buf); |
| 270 void* CreateJbig2Context(); | 270 void* CreateJbig2Context(); |
| 271 FXCODEC_STATUS StartDecode(void* pJbig2Context, FX_DWORD width,
FX_DWORD height, const uint8_t* src_buf, FX_DWORD src_size, | 271 FXCODEC_STATUS StartDecode(void* pJbig2Context, FX_DWORD width,
FX_DWORD height, const uint8_t* src_buf, FX_DWORD src_size, |
| 272 const uint8_t* global_data, FX_DWORD global_
size, uint8_t* dest_buf, FX_DWORD dest_pitch, IFX_Pause* pPause); | 272 const uint8_t* global_data, FX_DWORD global_
size, uint8_t* dest_buf, FX_DWORD dest_pitch, IFX_Pause* pPause); |
| 273 | 273 |
| 274 FXCODEC_STATUS StartDecode(void* pJbig2Context, IFX_FileRead* f
ile_ptr, | 274 FXCODEC_STATUS StartDecode(void* pJbig2Context, IFX_FileRead* f
ile_ptr, |
| 275 FX_DWORD& width, FX_DWORD& height, FX_DWORD&
pitch, uint8_t*& dest_buf, IFX_Pause* pPause); | 275 FX_DWORD& width, FX_DWORD& height, FX_DWORD&
pitch, uint8_t*& dest_buf, IFX_Pause* pPause); |
| 276 FXCODEC_STATUS ContinueDecode(void* pJbig2Context, IFX_Pause* p
Pause); | 276 FXCODEC_STATUS ContinueDecode(void* pJbig2Context, IFX_Pause* p
Pause); |
| 277 void DestroyJbig2Context(void* pJbig2Context)
; | 277 void DestroyJbig2Context(void* pJbig2Context)
; |
| 278 CPDF_Jbig2Interface m_Module; | 278 CPDF_Jbig2Interface m_Module; |
| (...skipping 11 matching lines...) Expand all Loading... |
| 290 OPJ_SIZE_T offset; | 290 OPJ_SIZE_T offset; |
| 291 }; | 291 }; |
| 292 | 292 |
| 293 /* Wrappers for C-style callbacks. */ | 293 /* Wrappers for C-style callbacks. */ |
| 294 OPJ_SIZE_T opj_read_from_memory (void* p_buffer, OPJ_SIZE_T nb_bytes, void* p_u
ser_data); | 294 OPJ_SIZE_T opj_read_from_memory (void* p_buffer, OPJ_SIZE_T nb_bytes, void* p_u
ser_data); |
| 295 OPJ_SIZE_T opj_write_from_memory (void* p_buffer, OPJ_SIZE_T nb_bytes, void* p_u
ser_data); | 295 OPJ_SIZE_T opj_write_from_memory (void* p_buffer, OPJ_SIZE_T nb_bytes, void* p_u
ser_data); |
| 296 OPJ_OFF_T opj_skip_from_memory (OPJ_OFF_T nb_bytes, void* p_user_data); | 296 OPJ_OFF_T opj_skip_from_memory (OPJ_OFF_T nb_bytes, void* p_user_data); |
| 297 OPJ_BOOL opj_seek_from_memory (OPJ_OFF_T nb_bytes, void* p_user_data); | 297 OPJ_BOOL opj_seek_from_memory (OPJ_OFF_T nb_bytes, void* p_user_data); |
| 298 | 298 |
| 299 #endif // CORE_SRC_FXCODEC_CODEC_CODEC_INT_H_ | 299 #endif // CORE_SRC_FXCODEC_CODEC_CODEC_INT_H_ |
| OLD | NEW |