Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(665)

Side by Side Diff: core/src/fxcodec/codec/codec_int.h

Issue 1800523005: Move core/src/ up to core/. (Closed) Base URL: https://pdfium.googlesource.com/pdfium.git@master
Patch Set: Created 4 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « core/src/fxcodec/codec/DEPS ('k') | core/src/fxcodec/codec/fx_codec.cpp » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
(Empty)
1 // Copyright 2014 PDFium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 // Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
6
7 #ifndef CORE_SRC_FXCODEC_CODEC_CODEC_INT_H_
8 #define CORE_SRC_FXCODEC_CODEC_CODEC_INT_H_
9
10 #include <limits.h>
11
12 #include <list>
13 #include <map>
14 #include <memory>
15 #include <vector>
16
17 #include "core/include/fxcodec/fx_codec.h"
18 #include "core/src/fxcodec/jbig2/JBig2_Context.h"
19 #include "third_party/libopenjpeg20/openjpeg.h" // For OPJ_SIZE_T.
20
21 class CFX_IccProfileCache;
22 class CFX_IccTransformCache;
23 class CPDF_ColorSpace;
24
25 class CCodec_BasicModule : public ICodec_BasicModule {
26 public:
27 // ICodec_BasicModule:
28 FX_BOOL RunLengthEncode(const uint8_t* src_buf,
29 FX_DWORD src_size,
30 uint8_t*& dest_buf,
31 FX_DWORD& dest_size) override;
32 FX_BOOL A85Encode(const uint8_t* src_buf,
33 FX_DWORD src_size,
34 uint8_t*& dest_buf,
35 FX_DWORD& dest_size) override;
36 ICodec_ScanlineDecoder* CreateRunLengthDecoder(const uint8_t* src_buf,
37 FX_DWORD src_size,
38 int width,
39 int height,
40 int nComps,
41 int bpc) override;
42 };
43
44 class CCodec_ScanlineDecoder : public ICodec_ScanlineDecoder {
45 public:
46 CCodec_ScanlineDecoder();
47 ~CCodec_ScanlineDecoder() override;
48
49 // ICodec_ScanlineDecoder
50 FX_DWORD GetSrcOffset() override { return -1; }
51 void DownScale(int dest_width, int dest_height) override;
52 const uint8_t* GetScanline(int line) override;
53 FX_BOOL SkipToScanline(int line, IFX_Pause* pPause) override;
54 int GetWidth() override { return m_OutputWidth; }
55 int GetHeight() override { return m_OutputHeight; }
56 int CountComps() override { return m_nComps; }
57 int GetBPC() override { return m_bpc; }
58 FX_BOOL IsColorTransformed() override { return m_bColorTransformed; }
59 void ClearImageData() override { m_pDataCache.reset(); }
60
61 protected:
62 class ImageDataCache {
63 public:
64 ImageDataCache(int width, int height, FX_DWORD pitch);
65 ~ImageDataCache();
66
67 bool AllocateCache();
68 void AppendLine(const uint8_t* line);
69
70 int NumLines() const { return m_nCachedLines; }
71 const uint8_t* GetLine(int line) const;
72 bool IsSameDimensions(int width, int height) const {
73 return width == m_Width && height == m_Height;
74 }
75
76 private:
77 bool IsValid() const { return m_Data.get() != nullptr; }
78
79 const int m_Width;
80 const int m_Height;
81 const FX_DWORD m_Pitch;
82 int m_nCachedLines;
83 std::unique_ptr<uint8_t, FxFreeDeleter> m_Data;
84 };
85
86 virtual FX_BOOL v_Rewind() = 0;
87 virtual uint8_t* v_GetNextLine() = 0;
88 virtual void v_DownScale(int dest_width, int dest_height) = 0;
89
90 uint8_t* ReadNextLine();
91
92 int m_OrigWidth;
93 int m_OrigHeight;
94 int m_DownScale;
95 int m_OutputWidth;
96 int m_OutputHeight;
97 int m_nComps;
98 int m_bpc;
99 FX_DWORD m_Pitch;
100 FX_BOOL m_bColorTransformed;
101 int m_NextLine;
102 uint8_t* m_pLastScanline;
103 std::unique_ptr<ImageDataCache> m_pDataCache;
104 };
105
106 class CCodec_FaxModule : public ICodec_FaxModule {
107 public:
108 // ICodec_FaxModule:
109 ICodec_ScanlineDecoder* CreateDecoder(const uint8_t* src_buf,
110 FX_DWORD src_size,
111 int width,
112 int height,
113 int K,
114 FX_BOOL EndOfLine,
115 FX_BOOL EncodedByteAlign,
116 FX_BOOL BlackIs1,
117 int Columns,
118 int Rows) override;
119 FX_BOOL Encode(const uint8_t* src_buf,
120 int width,
121 int height,
122 int pitch,
123 uint8_t*& dest_buf,
124 FX_DWORD& dest_size) override;
125 };
126
127 class CCodec_FlateModule : public ICodec_FlateModule {
128 public:
129 virtual ICodec_ScanlineDecoder* CreateDecoder(const uint8_t* src_buf,
130 FX_DWORD src_size,
131 int width,
132 int height,
133 int nComps,
134 int bpc,
135 int predictor,
136 int Colors,
137 int BitsPerComponent,
138 int Columns);
139 virtual FX_DWORD FlateOrLZWDecode(FX_BOOL bLZW,
140 const uint8_t* src_buf,
141 FX_DWORD src_size,
142 FX_BOOL bEarlyChange,
143 int predictor,
144 int Colors,
145 int BitsPerComponent,
146 int Columns,
147 FX_DWORD estimated_size,
148 uint8_t*& dest_buf,
149 FX_DWORD& dest_size);
150 virtual FX_BOOL Encode(const uint8_t* src_buf,
151 FX_DWORD src_size,
152 int predictor,
153 int Colors,
154 int BitsPerComponent,
155 int Columns,
156 uint8_t*& dest_buf,
157 FX_DWORD& dest_size);
158 virtual FX_BOOL Encode(const uint8_t* src_buf,
159 FX_DWORD src_size,
160 uint8_t*& dest_buf,
161 FX_DWORD& dest_size);
162 };
163
164 class CCodec_JpegModule : public ICodec_JpegModule {
165 public:
166 CCodec_JpegModule() {}
167 ICodec_ScanlineDecoder* CreateDecoder(const uint8_t* src_buf,
168 FX_DWORD src_size,
169 int width,
170 int height,
171 int nComps,
172 FX_BOOL ColorTransform) override;
173 FX_BOOL LoadInfo(const uint8_t* src_buf,
174 FX_DWORD src_size,
175 int& width,
176 int& height,
177 int& num_components,
178 int& bits_per_components,
179 FX_BOOL& color_transform,
180 uint8_t** icc_buf_ptr,
181 FX_DWORD* icc_length) override;
182 FX_BOOL Encode(const CFX_DIBSource* pSource,
183 uint8_t*& dest_buf,
184 FX_STRSIZE& dest_size,
185 int quality,
186 const uint8_t* icc_buf,
187 FX_DWORD icc_length) override;
188 void* Start() override;
189 void Finish(void* pContext) override;
190 void Input(void* pContext,
191 const uint8_t* src_buf,
192 FX_DWORD src_size) override;
193 #ifndef PDF_ENABLE_XFA
194 int ReadHeader(void* pContext, int* width, int* height, int* nComps) override;
195 #else // PDF_ENABLE_XFA
196 int ReadHeader(void* pContext,
197 int* width,
198 int* height,
199 int* nComps,
200 CFX_DIBAttribute* pAttribute) override;
201 #endif // PDF_ENABLE_XFA
202 int StartScanline(void* pContext, int down_scale) override;
203 FX_BOOL ReadScanline(void* pContext, uint8_t* dest_buf) override;
204 FX_DWORD GetAvailInput(void* pContext, uint8_t** avail_buf_ptr) override;
205 };
206
207 #ifdef PDF_ENABLE_XFA
208 #define PNG_ERROR_SIZE 256
209 class CCodec_PngModule : public ICodec_PngModule {
210 public:
211 CCodec_PngModule() { FXSYS_memset(m_szLastError, '\0', PNG_ERROR_SIZE); }
212
213 virtual void* Start(void* pModule);
214 virtual void Finish(void* pContext);
215 virtual FX_BOOL Input(void* pContext,
216 const uint8_t* src_buf,
217 FX_DWORD src_size,
218 CFX_DIBAttribute* pAttribute);
219
220 protected:
221 FX_CHAR m_szLastError[PNG_ERROR_SIZE];
222 };
223 class CCodec_GifModule : public ICodec_GifModule {
224 public:
225 CCodec_GifModule() { FXSYS_memset(m_szLastError, '\0', 256); }
226 virtual void* Start(void* pModule);
227 virtual void Finish(void* pContext);
228 virtual FX_DWORD GetAvailInput(void* pContext, uint8_t** avail_buf_ptr);
229 virtual void Input(void* pContext, const uint8_t* src_buf, FX_DWORD src_size);
230
231 virtual int32_t ReadHeader(void* pContext,
232 int* width,
233 int* height,
234 int* pal_num,
235 void** pal_pp,
236 int* bg_index,
237 CFX_DIBAttribute* pAttribute);
238
239 virtual int32_t LoadFrameInfo(void* pContext, int* frame_num);
240
241 virtual int32_t LoadFrame(void* pContext,
242 int frame_num,
243 CFX_DIBAttribute* pAttribute);
244
245 protected:
246 FX_CHAR m_szLastError[256];
247 };
248 class CCodec_BmpModule : public ICodec_BmpModule {
249 public:
250 CCodec_BmpModule() { FXSYS_memset(m_szLastError, 0, sizeof(m_szLastError)); }
251 void* Start(void* pModule) override;
252 void Finish(void* pContext) override;
253 FX_DWORD GetAvailInput(void* pContext, uint8_t** avail_buf_ptr) override;
254 void Input(void* pContext,
255 const uint8_t* src_buf,
256 FX_DWORD src_size) override;
257 int32_t ReadHeader(void* pContext,
258 int32_t* width,
259 int32_t* height,
260 FX_BOOL* tb_flag,
261 int32_t* components,
262 int32_t* pal_num,
263 FX_DWORD** pal_pp,
264 CFX_DIBAttribute* pAttribute) override;
265 int32_t LoadImage(void* pContext) override;
266
267 protected:
268 FX_CHAR m_szLastError[256];
269 };
270 #endif // PDF_ENABLE_XFA
271
272 class CCodec_IccModule : public ICodec_IccModule {
273 public:
274 ~CCodec_IccModule() override;
275
276 // ICodec_IccModule:
277 IccCS GetProfileCS(const uint8_t* pProfileData,
278 unsigned int dwProfileSize) override;
279 IccCS GetProfileCS(IFX_FileRead* pFile) override;
280 void* CreateTransform(ICodec_IccModule::IccParam* pInputParam,
281 ICodec_IccModule::IccParam* pOutputParam,
282 ICodec_IccModule::IccParam* pProofParam = NULL,
283 FX_DWORD dwIntent = Icc_INTENT_PERCEPTUAL,
284 FX_DWORD dwFlag = Icc_FLAGS_DEFAULT,
285 FX_DWORD dwPrfIntent = Icc_INTENT_ABSOLUTE_COLORIMETRIC,
286 FX_DWORD dwPrfFlag = Icc_FLAGS_SOFTPROOFING) override;
287 void* CreateTransform_sRGB(
288 const uint8_t* pProfileData,
289 FX_DWORD dwProfileSize,
290 FX_DWORD& nComponents,
291 int32_t intent = 0,
292 FX_DWORD dwSrcFormat = Icc_FORMAT_DEFAULT) override;
293 void* CreateTransform_CMYK(
294 const uint8_t* pSrcProfileData,
295 FX_DWORD dwSrcProfileSize,
296 FX_DWORD& nSrcComponents,
297 const uint8_t* pDstProfileData,
298 FX_DWORD dwDstProfileSize,
299 int32_t intent = 0,
300 FX_DWORD dwSrcFormat = Icc_FORMAT_DEFAULT,
301 FX_DWORD dwDstFormat = Icc_FORMAT_DEFAULT) override;
302 void DestroyTransform(void* pTransform) override;
303 void Translate(void* pTransform,
304 FX_FLOAT* pSrcValues,
305 FX_FLOAT* pDestValues) override;
306 void TranslateScanline(void* pTransform,
307 uint8_t* pDest,
308 const uint8_t* pSrc,
309 int pixels) override;
310 void SetComponents(FX_DWORD nComponents) override {
311 m_nComponents = nComponents;
312 }
313
314 protected:
315 enum Icc_CLASS {
316 Icc_CLASS_INPUT = 0,
317 Icc_CLASS_OUTPUT,
318 Icc_CLASS_PROOF,
319 Icc_CLASS_MAX
320 };
321 void* CreateProfile(ICodec_IccModule::IccParam* pIccParam,
322 Icc_CLASS ic,
323 CFX_BinaryBuf* pTransformKey);
324
325 FX_DWORD m_nComponents;
326 std::map<CFX_ByteString, CFX_IccTransformCache*> m_MapTranform;
327 std::map<CFX_ByteString, CFX_IccProfileCache*> m_MapProfile;
328 };
329
330 class CCodec_JpxModule : public ICodec_JpxModule {
331 public:
332 CCodec_JpxModule();
333 ~CCodec_JpxModule() override;
334
335 // ICodec_JpxModule:
336 CJPX_Decoder* CreateDecoder(const uint8_t* src_buf,
337 FX_DWORD src_size,
338 CPDF_ColorSpace* cs) override;
339 void GetImageInfo(CJPX_Decoder* pDecoder,
340 FX_DWORD* width,
341 FX_DWORD* height,
342 FX_DWORD* components) override;
343 bool Decode(CJPX_Decoder* pDecoder,
344 uint8_t* dest_data,
345 int pitch,
346 const std::vector<uint8_t>& offsets) override;
347 void DestroyDecoder(CJPX_Decoder* pDecoder) override;
348 };
349
350 #ifdef PDF_ENABLE_XFA
351 class CCodec_TiffModule : public ICodec_TiffModule {
352 public:
353 // ICodec_TiffModule
354 void* CreateDecoder(IFX_FileRead* file_ptr) override;
355 void GetFrames(void* ctx, int32_t& frames) override;
356 FX_BOOL LoadFrameInfo(void* ctx,
357 int32_t frame,
358 FX_DWORD& width,
359 FX_DWORD& height,
360 FX_DWORD& comps,
361 FX_DWORD& bpc,
362 CFX_DIBAttribute* pAttribute) override;
363 FX_BOOL Decode(void* ctx, class CFX_DIBitmap* pDIBitmap) override;
364 void DestroyDecoder(void* ctx) override;
365
366 protected:
367 ~CCodec_TiffModule() override {}
368 };
369 #endif // PDF_ENABLE_XFA
370
371 class CCodec_Jbig2Context {
372 public:
373 CCodec_Jbig2Context();
374 ~CCodec_Jbig2Context() {}
375
376 FX_DWORD m_width;
377 FX_DWORD m_height;
378 CPDF_StreamAcc* m_pGlobalStream;
379 CPDF_StreamAcc* m_pSrcStream;
380 uint8_t* m_dest_buf;
381 FX_DWORD m_dest_pitch;
382 IFX_Pause* m_pPause;
383 CJBig2_Context* m_pContext;
384 CJBig2_Image* m_dest_image;
385 };
386 class CCodec_Jbig2Module : public ICodec_Jbig2Module {
387 public:
388 CCodec_Jbig2Module() {}
389 ~CCodec_Jbig2Module() override;
390
391 // ICodec_Jbig2Module
392 void* CreateJbig2Context() override;
393 FXCODEC_STATUS StartDecode(void* pJbig2Context,
394 CFX_PrivateData* pPrivateData,
395 FX_DWORD width,
396 FX_DWORD height,
397 CPDF_StreamAcc* src_stream,
398 CPDF_StreamAcc* global_stream,
399 uint8_t* dest_buf,
400 FX_DWORD dest_pitch,
401 IFX_Pause* pPause) override;
402 FXCODEC_STATUS ContinueDecode(void* pJbig2Context,
403 IFX_Pause* pPause) override;
404 void DestroyJbig2Context(void* pJbig2Context) override;
405 };
406
407 struct DecodeData {
408 public:
409 DecodeData(unsigned char* src_data, OPJ_SIZE_T src_size)
410 : src_data(src_data), src_size(src_size), offset(0) {}
411 unsigned char* src_data;
412 OPJ_SIZE_T src_size;
413 OPJ_SIZE_T offset;
414 };
415
416 void sycc420_to_rgb(opj_image_t* img);
417
418 /* Wrappers for C-style callbacks. */
419 OPJ_SIZE_T opj_read_from_memory(void* p_buffer,
420 OPJ_SIZE_T nb_bytes,
421 void* p_user_data);
422 OPJ_SIZE_T opj_write_from_memory(void* p_buffer,
423 OPJ_SIZE_T nb_bytes,
424 void* p_user_data);
425 OPJ_OFF_T opj_skip_from_memory(OPJ_OFF_T nb_bytes, void* p_user_data);
426 OPJ_BOOL opj_seek_from_memory(OPJ_OFF_T nb_bytes, void* p_user_data);
427
428 #endif // CORE_SRC_FXCODEC_CODEC_CODEC_INT_H_
OLDNEW
« no previous file with comments | « core/src/fxcodec/codec/DEPS ('k') | core/src/fxcodec/codec/fx_codec.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698