7#ifndef CORE_FXCODEC_GIF_LZW_DECOMPRESSOR_H_
8#define CORE_FXCODEC_GIF_LZW_DECOMPRESSOR_H_
14#include "core/fxcodec/gif/cfx_gif.h"
15#include "core/fxcrt/data_vector.h"
38 void SetSource(
const uint8_t* src_buf, uint32_t src_size);
43 return ExtractData(dest_buf, dest_size);
51 LZWDecompressor(uint8_t color_exp, uint8_t code_exp);
54 void AddCode(uint16_t prefix_code, uint8_t append_char);
55 bool DecodeString(uint16_t code);
56 uint32_t ExtractData(uint8_t* dest_buf, uint32_t dest_size);
58 const uint8_t code_size_;
59 uint8_t code_size_cur_ = 0;
60 const uint16_t code_color_end_;
61 const uint16_t code_clear_;
62 const uint16_t code_end_;
63 uint16_t code_next_ = 0;
64 uint8_t code_first_ = 0;
65 DataVector<uint8_t> decompressed_;
66 size_t decompressed_next_ = 0;
67 uint16_t code_old_ = 0;
68 const uint8_t* next_in_ =
nullptr;
69 uint32_t avail_in_ = 0;
70 uint8_t bits_left_ = 0;
71 uint32_t code_store_ = 0;
#define GIF_SIG_EXTENSION
#define GIF_D_STATUS_TAIL
#define GIF_D_STATUS_EXT_UNE
#define GIF_D_STATUS_EXT_GCE
#define GIF_D_STATUS_EXT_CE
#define GIF_D_STATUS_IMG_INFO
#define GIF_BLOCK_TERMINAL
#define GIF_D_STATUS_IMG_DATA
#define GIF_D_STATUS_EXT_PTE
CFX_GifContext(GifDecoder::Delegate *delegate)
std::unique_ptr< CFX_GifGraphicControlExtension > graphic_control_extension_
uint8_t global_palette_exp_
GifDecoder::Status GetFrame()
void SetInputBuffer(RetainPtr< CFX_CodecMemory > codec_memory)
~CFX_GifContext() override
uint8_t global_sort_flag_
GifDecoder::Status LoadFrame(size_t frame_num)
RetainPtr< CFX_CodecMemory > input_buffer_
size_t GetFrameNum() const
std::unique_ptr< LZWDecompressor > lzw_decompressor_
uint32_t img_row_avail_size_
uint32_t GetAvailInput() const
void ReadScanline(int32_t row_num, pdfium::span< uint8_t > row_buf)
std::vector< std::unique_ptr< CFX_GifImage > > images_
bool GetRecordPosition(uint32_t cur_pos, int32_t left, int32_t top, int32_t width, int32_t height, int32_t pal_num, CFX_GifPalette *pal, int32_t trans_index, bool interlace)
std::vector< CFX_GifPalette > global_palette_
GifDecoder::Status ReadHeader()
GifDecoder::Status ReadLogicalScreenDescriptor()
UnownedPtr< GifDecoder::Delegate > const delegate_
bool ReadAllOrNone(uint8_t *dest, uint32_t size)
uint8_t global_color_resolution_
GifDecoder::Status ReadGifSignature()
virtual bool GifInputRecordPositionBuf(uint32_t rcd_pos, const FX_RECT &img_rc, int32_t pal_num, CFX_GifPalette *pal_ptr, int32_t trans_index, bool interlace)=0
virtual uint32_t GifCurrentPosition() const =0
virtual void GifReadScanline(int32_t row_num, pdfium::span< uint8_t > row_buf)=0
static FX_FILESIZE GetAvailInput(ProgressiveDecoderIface::Context *context)
static bool Input(ProgressiveDecoderIface::Context *context, RetainPtr< CFX_CodecMemory > codec_memory)
static std::unique_ptr< ProgressiveDecoderIface::Context > StartDecode(Delegate *pDelegate)
static Status ReadHeader(ProgressiveDecoderIface::Context *context, int *width, int *height, int *pal_num, CFX_GifPalette **pal_pp, int *bg_index)
GifDecoder & operator=(const GifDecoder &)=delete
static Status LoadFrame(ProgressiveDecoderIface::Context *context, size_t frame_num)
static std::pair< Status, size_t > LoadFrameInfo(ProgressiveDecoderIface::Context *context)
GifDecoder(const GifDecoder &)=delete
DataVector< uint8_t > * DecompressedForTest()
static std::unique_ptr< LZWDecompressor > Create(uint8_t color_exp, uint8_t code_exp)
Status Decode(uint8_t *dest_buf, uint32_t *dest_size)
uint32_t ExtractDataForTest(uint8_t *dest_buf, uint32_t dest_size)
size_t * DecompressedNextForTest()
void SetSource(const uint8_t *src_buf, uint32_t src_size)
CFX_GifLocalFlags local_flags
CFX_GifImageInfo image_info
uint8_t local_palette_exp
CFX_GifGlobalFlags global_flags