OLD | NEW |
| (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_LBMP_FX_BMP_H_ | |
8 #define CORE_SRC_FXCODEC_LBMP_FX_BMP_H_ | |
9 | |
10 #include <setjmp.h> | |
11 | |
12 #include "core/include/fxcrt/fx_basic.h" | |
13 | |
14 #define BMP_WIDTHBYTES(width, bitCount) ((width * bitCount) + 31) / 32 * 4 | |
15 #define BMP_PAL_ENCODE(a, r, g, b) \ | |
16 (((FX_DWORD)(a) << 24) | ((r) << 16) | ((g) << 8) | (b)) | |
17 #define BMP_D_STATUS_HEADER 0x01 | |
18 #define BMP_D_STATUS_PAL 0x02 | |
19 #define BMP_D_STATUS_DATA_PRE 0x03 | |
20 #define BMP_D_STATUS_DATA 0x04 | |
21 #define BMP_D_STATUS_TAIL 0x00 | |
22 #define BMP_SIGNATURE 0x4D42 | |
23 #define BMP_PAL_NEW 0 | |
24 #define BMP_PAL_OLD 1 | |
25 #define RLE_MARKER 0 | |
26 #define RLE_EOL 0 | |
27 #define RLE_EOI 1 | |
28 #define RLE_DELTA 2 | |
29 #define BMP_RGB 0L | |
30 #define BMP_RLE8 1L | |
31 #define BMP_RLE4 2L | |
32 #define BMP_BITFIELDS 3L | |
33 #define BMP_BIT_555 0 | |
34 #define BMP_BIT_565 1 | |
35 #define BMP_MAX_ERROR_SIZE 256 | |
36 #pragma pack(1) | |
37 typedef struct tagBmpFileHeader { | |
38 FX_WORD bfType; | |
39 FX_DWORD bfSize; | |
40 FX_WORD bfReserved1; | |
41 FX_WORD bfReserved2; | |
42 FX_DWORD bfOffBits; | |
43 } BmpFileHeader, *BmpFileHeaderPtr; | |
44 typedef struct tagBmpCoreHeader { | |
45 FX_DWORD bcSize; | |
46 FX_WORD bcWidth; | |
47 FX_WORD bcHeight; | |
48 FX_WORD bcPlanes; | |
49 FX_WORD bcBitCount; | |
50 } BmpCoreHeader, *BmpCoreHeaderPtr; | |
51 typedef struct tagBmpInfoHeader { | |
52 FX_DWORD biSize; | |
53 int32_t biWidth; | |
54 int32_t biHeight; | |
55 FX_WORD biPlanes; | |
56 FX_WORD biBitCount; | |
57 FX_DWORD biCompression; | |
58 FX_DWORD biSizeImage; | |
59 int32_t biXPelsPerMeter; | |
60 int32_t biYPelsPerMeter; | |
61 FX_DWORD biClrUsed; | |
62 FX_DWORD biClrImportant; | |
63 } BmpInfoHeader, *BmpInfoHeaderPtr; | |
64 #pragma pack() | |
65 | |
66 typedef struct tag_bmp_decompress_struct bmp_decompress_struct; | |
67 typedef bmp_decompress_struct* bmp_decompress_struct_p; | |
68 typedef bmp_decompress_struct_p* bmp_decompress_struct_pp; | |
69 struct tag_bmp_decompress_struct { | |
70 jmp_buf jmpbuf; | |
71 FX_CHAR* err_ptr; | |
72 void (*bmp_error_fn)(bmp_decompress_struct_p gif_ptr, const FX_CHAR* err_msg); | |
73 | |
74 void* context_ptr; | |
75 | |
76 BmpFileHeaderPtr bmp_header_ptr; | |
77 BmpInfoHeaderPtr bmp_infoheader_ptr; | |
78 int32_t width; | |
79 int32_t height; | |
80 FX_DWORD compress_flag; | |
81 int32_t components; | |
82 int32_t src_row_bytes; | |
83 int32_t out_row_bytes; | |
84 uint8_t* out_row_buffer; | |
85 FX_WORD bitCounts; | |
86 FX_DWORD color_used; | |
87 FX_BOOL imgTB_flag; | |
88 int32_t pal_num; | |
89 int32_t pal_type; | |
90 FX_DWORD* pal_ptr; | |
91 FX_DWORD data_size; | |
92 FX_DWORD img_data_offset; | |
93 FX_DWORD img_ifh_size; | |
94 int32_t row_num; | |
95 int32_t col_num; | |
96 int32_t dpi_x; | |
97 int32_t dpi_y; | |
98 FX_DWORD mask_red; | |
99 FX_DWORD mask_green; | |
100 FX_DWORD mask_blue; | |
101 | |
102 FX_BOOL (*bmp_get_data_position_fn)(bmp_decompress_struct_p bmp_ptr, | |
103 FX_DWORD cur_pos); | |
104 void (*bmp_get_row_fn)(bmp_decompress_struct_p bmp_ptr, | |
105 int32_t row_num, | |
106 uint8_t* row_buf); | |
107 uint8_t* next_in; | |
108 FX_DWORD avail_in; | |
109 FX_DWORD skip_size; | |
110 int32_t decode_status; | |
111 }; | |
112 void bmp_error(bmp_decompress_struct_p bmp_ptr, const FX_CHAR* err_msg); | |
113 bmp_decompress_struct_p bmp_create_decompress(); | |
114 void bmp_destroy_decompress(bmp_decompress_struct_pp bmp_ptr_ptr); | |
115 int32_t bmp_read_header(bmp_decompress_struct_p bmp_ptr); | |
116 int32_t bmp_decode_image(bmp_decompress_struct_p bmp_ptr); | |
117 int32_t bmp_decode_rgb(bmp_decompress_struct_p bmp_ptr); | |
118 int32_t bmp_decode_rle8(bmp_decompress_struct_p bmp_ptr); | |
119 int32_t bmp_decode_rle4(bmp_decompress_struct_p bmp_ptr); | |
120 uint8_t* bmp_read_data(bmp_decompress_struct_p bmp_ptr, | |
121 uint8_t** des_buf_pp, | |
122 FX_DWORD data_size); | |
123 void bmp_save_decoding_status(bmp_decompress_struct_p bmp_ptr, int32_t status); | |
124 void bmp_input_buffer(bmp_decompress_struct_p bmp_ptr, | |
125 uint8_t* src_buf, | |
126 FX_DWORD src_size); | |
127 FX_DWORD bmp_get_avail_input(bmp_decompress_struct_p bmp_ptr, | |
128 uint8_t** avial_buf_ptr); | |
129 typedef struct tag_bmp_compress_struct bmp_compress_struct; | |
130 typedef bmp_compress_struct* bmp_compress_struct_p; | |
131 typedef bmp_compress_struct_p* bmp_compress_struct_pp; | |
132 struct tag_bmp_compress_struct { | |
133 BmpFileHeader file_header; | |
134 BmpInfoHeader info_header; | |
135 uint8_t* src_buf; | |
136 FX_DWORD src_pitch; | |
137 FX_DWORD src_row; | |
138 uint8_t src_bpp; | |
139 FX_DWORD src_width; | |
140 FX_BOOL src_free; | |
141 FX_DWORD* pal_ptr; | |
142 FX_WORD pal_num; | |
143 uint8_t bit_type; | |
144 }; | |
145 | |
146 bmp_compress_struct_p bmp_create_compress(); | |
147 void bmp_destroy_compress(bmp_compress_struct_p bmp_ptr); | |
148 FX_BOOL bmp_encode_image(bmp_compress_struct_p bmp_ptr, | |
149 uint8_t*& dst_buf, | |
150 FX_DWORD& dst_size); | |
151 | |
152 FX_WORD GetWord_LSBFirst(uint8_t* p); | |
153 void SetWord_LSBFirst(uint8_t* p, FX_WORD v); | |
154 | |
155 #endif // CORE_SRC_FXCODEC_LBMP_FX_BMP_H_ | |
OLD | NEW |