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_FXCODEC_GIF_CFX_GIF_H_ 8#define CORE_FXCODEC_GIF_CFX_GIF_H_ 9 10#include <memory> 11#include <vector> 12 13class CFX_GifContext; 14 15extern const char* kGifSignature87; 16extern const char* kGifSignature89; 17 18#define GIF_SIG_EXTENSION 0x21 19#define GIF_SIG_IMAGE 0x2C 20#define GIF_SIG_TRAILER 0x3B 21#define GIF_BLOCK_GCE 0xF9 22#define GIF_BLOCK_PTE 0x01 23#define GIF_BLOCK_CE 0xFE 24#define GIF_BLOCK_TERMINAL 0x00 25#define GIF_MAX_LZW_EXP 12 26#define GIF_MAX_LZW_CODE 4096 27#define GIF_DATA_BLOCK 255 28#define GIF_D_STATUS_SIG 0x01 29#define GIF_D_STATUS_TAIL 0x02 30#define GIF_D_STATUS_EXT 0x03 31#define GIF_D_STATUS_EXT_CE 0x05 32#define GIF_D_STATUS_EXT_GCE 0x06 33#define GIF_D_STATUS_EXT_PTE 0x07 34#define GIF_D_STATUS_EXT_UNE 0x08 35#define GIF_D_STATUS_IMG_INFO 0x09 36#define GIF_D_STATUS_IMG_DATA 0x0A 37 38#pragma pack(1) 39typedef struct { 40 uint8_t pal_bits : 3; 41 uint8_t sort_flag : 1; 42 uint8_t color_resolution : 3; 43 uint8_t global_pal : 1; 44} CFX_GifGlobalFlags; 45 46typedef struct { 47 uint8_t pal_bits : 3; 48 uint8_t reserved : 2; 49 uint8_t sort_flag : 1; 50 uint8_t interlace : 1; 51 uint8_t local_pal : 1; 52} CFX_GifLocalFlags; 53 54typedef struct { char signature[6]; } CFX_GifHeader; 55 56typedef struct { 57 uint16_t width; 58 uint16_t height; 59 CFX_GifGlobalFlags global_flags; 60 uint8_t bc_index; 61 uint8_t pixel_aspect; 62} CFX_GifLocalScreenDescriptor; 63 64typedef struct { 65 uint16_t left; 66 uint16_t top; 67 uint16_t width; 68 uint16_t height; 69 CFX_GifLocalFlags local_flags; 70} CFX_CFX_GifImageInfo; 71 72typedef struct { 73 uint8_t transparency : 1; 74 uint8_t user_input : 1; 75 uint8_t disposal_method : 3; 76 uint8_t reserved : 3; 77} CFX_GifControlExtensionFlags; 78 79typedef struct { 80 uint8_t block_size; 81 CFX_GifControlExtensionFlags gce_flags; 82 uint16_t delay_time; 83 uint8_t trans_index; 84} CFX_GifGraphicControlExtension; 85 86typedef struct { 87 uint8_t block_size; 88 uint16_t grid_left; 89 uint16_t grid_top; 90 uint16_t grid_width; 91 uint16_t grid_height; 92 93 uint8_t char_width; 94 uint8_t char_height; 95 96 uint8_t fc_index; 97 uint8_t bc_index; 98} CFX_GifPlainTextExtension; 99 100typedef struct { 101 uint8_t block_size; 102 uint8_t app_identify[8]; 103 uint8_t app_authentication[3]; 104} GifApplicationExtension; 105 106typedef struct { uint8_t r, g, b; } CFX_GifPalette; 107#pragma pack() 108 109enum class CFX_GifDecodeStatus { 110 Error, 111 Success, 112 Unfinished, 113 InsufficientDestSize, // Only used internally by CGifLZWDecoder::Decode() 114}; 115 116typedef struct { 117 std::unique_ptr<CFX_GifGraphicControlExtension> image_GCE; 118 std::vector<CFX_GifPalette> local_palettes; 119 std::vector<uint8_t> row_buffer; 120 CFX_CFX_GifImageInfo image_info; 121 uint8_t local_pallette_exp; 122 uint8_t code_exp; 123 uint32_t data_pos; 124 int32_t row_num; 125} CFX_GifImage; 126 127#endif // CORE_FXCODEC_GIF_CFX_GIF_H_ 128