Qt
Internal/Contributor docs for the Qt SDK. Note: These are NOT official API docs; those are found at https://doc.qt.io/
Loading...
Searching...
No Matches
cfx_gifcontext.h
Go to the documentation of this file.
1// Copyright 2017 The PDFium Authors
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_FXCODEC_GIF_CFX_GIFCONTEXT_H_
8#define CORE_FXCODEC_GIF_CFX_GIFCONTEXT_H_
9
10#include <memory>
11#include <vector>
12
13#include "core/fxcodec/gif/cfx_gif.h"
14#include "core/fxcodec/gif/gif_decoder.h"
15#include "core/fxcodec/gif/lzw_decompressor.h"
16#include "core/fxcrt/retain_ptr.h"
17#include "core/fxcrt/unowned_ptr.h"
18#include "third_party/base/containers/span.h"
19
20class CFX_CodecMemory;
21
22namespace fxcodec {
23
25 public:
26 explicit CFX_GifContext(GifDecoder::Delegate* delegate);
27 ~CFX_GifContext() override;
28
29 void ReadScanline(int32_t row_num, pdfium::span<uint8_t> row_buf);
30 bool GetRecordPosition(uint32_t cur_pos,
31 int32_t left,
32 int32_t top,
33 int32_t width,
34 int32_t height,
35 int32_t pal_num,
36 CFX_GifPalette* pal,
37 int32_t trans_index,
38 bool interlace);
41 GifDecoder::Status LoadFrame(size_t frame_num);
42 void SetInputBuffer(RetainPtr<CFX_CodecMemory> codec_memory);
43 uint32_t GetAvailInput() const;
44 size_t GetFrameNum() const { return images_.size(); }
45
49 uint32_t img_row_offset_ = 0;
50 uint32_t img_row_avail_size_ = 0;
55 int width_ = 0;
56 int height_ = 0;
57 uint8_t bc_index_ = 0;
58 uint8_t global_sort_flag_ = 0;
60 uint8_t img_pass_num_ = 0;
61
62 protected:
63 bool ReadAllOrNone(uint8_t* dest, uint32_t size);
66
67 RetainPtr<CFX_CodecMemory> input_buffer_;
68
69 private:
70 void SaveDecodingStatus(int32_t status);
71 GifDecoder::Status DecodeExtension();
72 GifDecoder::Status DecodeImageInfo();
73 void DecodingFailureAtTailCleanup(CFX_GifImage* gif_image);
74 bool ScanForTerminalMarker();
75 uint8_t GetPaletteExp(CFX_GifImage* gif_image) const;
76};
77
78} // namespace fxcodec
79
80#endif // CORE_FXCODEC_GIF_CFX_GIFCONTEXT_H_
#define GIF_SIG_EXTENSION
Definition cfx_gif.h:20
#define GIF_BLOCK_GCE
Definition cfx_gif.h:23
#define GIF_D_STATUS_TAIL
Definition cfx_gif.h:30
#define GIF_D_STATUS_EXT
Definition cfx_gif.h:31
#define GIF_D_STATUS_EXT_UNE
Definition cfx_gif.h:35
#define GIF_SIG_TRAILER
Definition cfx_gif.h:22
#define GIF_D_STATUS_EXT_GCE
Definition cfx_gif.h:33
#define GIF_SIG_IMAGE
Definition cfx_gif.h:21
#define GIF_D_STATUS_EXT_CE
Definition cfx_gif.h:32
#define GIF_D_STATUS_SIG
Definition cfx_gif.h:29
#define GIF_D_STATUS_IMG_INFO
Definition cfx_gif.h:36
#define GIF_BLOCK_PTE
Definition cfx_gif.h:24
#define GIF_MAX_LZW_EXP
Definition cfx_gif.h:27
#define GIF_BLOCK_TERMINAL
Definition cfx_gif.h:26
#define GIF_BLOCK_CE
Definition cfx_gif.h:25
#define GIF_D_STATUS_IMG_DATA
Definition cfx_gif.h:37
#define GIF_D_STATUS_EXT_PTE
Definition cfx_gif.h:34
CFX_GifContext(GifDecoder::Delegate *delegate)
std::unique_ptr< CFX_GifGraphicControlExtension > graphic_control_extension_
GifDecoder::Status GetFrame()
void SetInputBuffer(RetainPtr< CFX_CodecMemory > codec_memory)
GifDecoder::Status LoadFrame(size_t frame_num)
RetainPtr< CFX_CodecMemory > input_buffer_
size_t GetFrameNum() const
std::unique_ptr< LZWDecompressor > lzw_decompressor_
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)
GifDecoder::Status ReadGifSignature()
uint8_t global_pal
Definition cfx_gif.h:44
uint8_t color_resolution
Definition cfx_gif.h:43
uint8_t sort_flag
Definition cfx_gif.h:42
uint8_t pal_bits
Definition cfx_gif.h:41
uint16_t height
Definition cfx_gif.h:71
uint16_t top
Definition cfx_gif.h:69
uint16_t left
Definition cfx_gif.h:68
uint16_t width
Definition cfx_gif.h:70
CFX_GifLocalFlags local_flags
Definition cfx_gif.h:72
uint8_t code_exp
Definition cfx_gif.h:123
uint32_t data_pos
Definition cfx_gif.h:124
CFX_GifImageInfo image_info
Definition cfx_gif.h:121
uint8_t local_palette_exp
Definition cfx_gif.h:122
int32_t row_num
Definition cfx_gif.h:125
uint8_t local_pal
Definition cfx_gif.h:52
uint8_t interlace
Definition cfx_gif.h:51
uint8_t pal_bits
Definition cfx_gif.h:48
CFX_GifGlobalFlags global_flags
Definition cfx_gif.h:62