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