1// Copyright 2016 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_FPDFAPI_PARSER_FPDF_PARSER_DECODE_H_ 8#define CORE_FPDFAPI_PARSER_FPDF_PARSER_DECODE_H_ 9 10#include <memory> 11 12#include "core/fxcrt/fx_basic.h" 13 14class CCodec_ScanlineDecoder; 15class CPDF_Dictionary; 16 17// Indexed by 8-bit char code, contains unicode code points. 18extern const uint16_t PDFDocEncoding[256]; 19 20CFX_ByteString PDF_NameDecode(const CFX_ByteStringC& orig); 21CFX_ByteString PDF_NameDecode(const CFX_ByteString& orig); 22CFX_ByteString PDF_NameEncode(const CFX_ByteString& orig); 23CFX_ByteString PDF_EncodeString(const CFX_ByteString& src, bool bHex = false); 24CFX_WideString PDF_DecodeText(const uint8_t* pData, uint32_t size); 25CFX_WideString PDF_DecodeText(const CFX_ByteString& bstr); 26CFX_ByteString PDF_EncodeText(const FX_WCHAR* pString, int len = -1); 27CFX_ByteString PDF_EncodeText(const CFX_WideString& str); 28 29bool FlateEncode(const uint8_t* src_buf, 30 uint32_t src_size, 31 uint8_t** dest_buf, 32 uint32_t* dest_size); 33 34// This used to have more parameters like the predictor and bpc, but there was 35// only one caller, so the interface has been simplified, the values are hard 36// coded, and dead code has been removed. 37bool PngEncode(const uint8_t* src_buf, 38 uint32_t src_size, 39 uint8_t** dest_buf, 40 uint32_t* dest_size); 41 42uint32_t FlateDecode(const uint8_t* src_buf, 43 uint32_t src_size, 44 uint8_t*& dest_buf, 45 uint32_t& dest_size); 46uint32_t RunLengthDecode(const uint8_t* src_buf, 47 uint32_t src_size, 48 uint8_t*& dest_buf, 49 uint32_t& dest_size); 50 51std::unique_ptr<CCodec_ScanlineDecoder> FPDFAPI_CreateFaxDecoder( 52 const uint8_t* src_buf, 53 uint32_t src_size, 54 int width, 55 int height, 56 const CPDF_Dictionary* pParams); 57 58std::unique_ptr<CCodec_ScanlineDecoder> FPDFAPI_CreateFlateDecoder( 59 const uint8_t* src_buf, 60 uint32_t src_size, 61 int width, 62 int height, 63 int nComps, 64 int bpc, 65 const CPDF_Dictionary* pParams); 66 67// Public for testing. 68uint32_t A85Decode(const uint8_t* src_buf, 69 uint32_t src_size, 70 uint8_t*& dest_buf, 71 uint32_t& dest_size); 72// Public for testing. 73uint32_t HexDecode(const uint8_t* src_buf, 74 uint32_t src_size, 75 uint8_t*& dest_buf, 76 uint32_t& dest_size); 77// Public for testing. 78uint32_t FPDFAPI_FlateOrLZWDecode(bool bLZW, 79 const uint8_t* src_buf, 80 uint32_t src_size, 81 CPDF_Dictionary* pParams, 82 uint32_t estimated_size, 83 uint8_t*& dest_buf, 84 uint32_t& dest_size); 85bool PDF_DataDecode(const uint8_t* src_buf, 86 uint32_t src_size, 87 const CPDF_Dictionary* pDict, 88 uint8_t*& dest_buf, 89 uint32_t& dest_size, 90 CFX_ByteString& ImageEncoding, 91 CPDF_Dictionary*& pImageParms, 92 uint32_t estimated_size, 93 bool bImageAcc); 94 95#endif // CORE_FPDFAPI_PARSER_FPDF_PARSER_DECODE_H_ 96