Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(136)

Side by Side Diff: core/src/fxcodec/lbmp/fx_bmp.cpp

Issue 1172793002: Merge to XFA: Use stdint.h types throughout PDFium. (Closed) Base URL: https://pdfium.googlesource.com/pdfium.git@xfa
Patch Set: Created 5 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « core/src/fxcodec/lbmp/fx_bmp.h ('k') | core/src/fxcodec/lgif/fx_gif.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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 #include "fx_bmp.h" 7 #include "fx_bmp.h"
8 FX_DWORD _GetDWord_LSBFirst(FX_LPBYTE p) 8 FX_DWORD _GetDWord_LSBFirst(FX_LPBYTE p)
9 { 9 {
10 return p[0] | (p[1] << 8) | (p[2] << 16) | (p[3] << 24); 10 return p[0] | (p[1] << 8) | (p[2] << 16) | (p[3] << 24);
11 } 11 }
12 FX_WORD _GetWord_LSBFirst(FX_LPBYTE p) 12 FX_WORD _GetWord_LSBFirst(FX_LPBYTE p)
13 { 13 {
14 return p[0] | (p[1] << 8); 14 return p[0] | (p[1] << 8);
15 } 15 }
16 void _SetDWord_LSBFirst(FX_LPBYTE p, FX_DWORD v) 16 void _SetDWord_LSBFirst(FX_LPBYTE p, FX_DWORD v)
17 { 17 {
18 p[0] = (FX_BYTE)v; 18 p[0] = (uint8_t)v;
19 p[1] = (FX_BYTE)(v >> 8); 19 p[1] = (uint8_t)(v >> 8);
20 p[2] = (FX_BYTE)(v >> 16); 20 p[2] = (uint8_t)(v >> 16);
21 p[3] = (FX_BYTE)(v >> 24); 21 p[3] = (uint8_t)(v >> 24);
22 } 22 }
23 void _SetWord_LSBFirst(FX_LPBYTE p, FX_WORD v) 23 void _SetWord_LSBFirst(FX_LPBYTE p, FX_WORD v)
24 { 24 {
25 p[0] = (FX_BYTE)v; 25 p[0] = (uint8_t)v;
26 p[1] = (FX_BYTE)(v >> 8); 26 p[1] = (uint8_t)(v >> 8);
27 } 27 }
28 void _bmp_error(bmp_decompress_struct_p bmp_ptr, FX_LPCSTR err_msg) 28 void _bmp_error(bmp_decompress_struct_p bmp_ptr, FX_LPCSTR err_msg)
29 { 29 {
30 if(bmp_ptr != NULL && bmp_ptr->_bmp_error_fn != NULL) { 30 if(bmp_ptr != NULL && bmp_ptr->_bmp_error_fn != NULL) {
31 bmp_ptr->_bmp_error_fn(bmp_ptr, err_msg); 31 bmp_ptr->_bmp_error_fn(bmp_ptr, err_msg);
32 } 32 }
33 } 33 }
34 bmp_decompress_struct_p _bmp_create_decompress() 34 bmp_decompress_struct_p _bmp_create_decompress()
35 { 35 {
36 bmp_decompress_struct_p bmp_ptr = FX_Alloc(bmp_decompress_struct, 1); 36 bmp_decompress_struct_p bmp_ptr = FX_Alloc(bmp_decompress_struct, 1);
(...skipping 16 matching lines...) Expand all
53 FX_Free(bmp_ptr->out_row_buffer); 53 FX_Free(bmp_ptr->out_row_buffer);
54 } 54 }
55 if(bmp_ptr->pal_ptr != NULL) { 55 if(bmp_ptr->pal_ptr != NULL) {
56 FX_Free(bmp_ptr->pal_ptr); 56 FX_Free(bmp_ptr->pal_ptr);
57 } 57 }
58 if(bmp_ptr->bmp_header_ptr != NULL) { 58 if(bmp_ptr->bmp_header_ptr != NULL) {
59 FX_Free(bmp_ptr->bmp_header_ptr); 59 FX_Free(bmp_ptr->bmp_header_ptr);
60 } 60 }
61 FX_Free(bmp_ptr); 61 FX_Free(bmp_ptr);
62 } 62 }
63 FX_INT32 _bmp_read_header(bmp_decompress_struct_p bmp_ptr) 63 int32_t _bmp_read_header(bmp_decompress_struct_p bmp_ptr)
64 { 64 {
65 if(bmp_ptr == NULL) { 65 if(bmp_ptr == NULL) {
66 return 0; 66 return 0;
67 } 67 }
68 FX_DWORD skip_size_org = bmp_ptr->skip_size; 68 FX_DWORD skip_size_org = bmp_ptr->skip_size;
69 if(bmp_ptr->decode_status == BMP_D_STATUS_HEADER) { 69 if(bmp_ptr->decode_status == BMP_D_STATUS_HEADER) {
70 ASSERT(sizeof(BmpFileHeader) == 14); 70 ASSERT(sizeof(BmpFileHeader) == 14);
71 BmpFileHeader* bmp_header_ptr = NULL; 71 BmpFileHeader* bmp_header_ptr = NULL;
72 if(_bmp_read_data(bmp_ptr, (FX_LPBYTE*)&bmp_header_ptr, 14) == NULL) { 72 if(_bmp_read_data(bmp_ptr, (FX_LPBYTE*)&bmp_header_ptr, 14) == NULL) {
73 return 2; 73 return 2;
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after
106 BmpInfoHeaderPtr bmp_info_header_ptr = NULL; 106 BmpInfoHeaderPtr bmp_info_header_ptr = NULL;
107 if(_bmp_read_data(bmp_ptr, (FX_LPBYTE*)&bmp_info_header_ptr, bmp_ptr->img_ifh_size) == NULL) { 107 if(_bmp_read_data(bmp_ptr, (FX_LPBYTE*)&bmp_info_header_ptr, bmp_ptr->img_ifh_size) == NULL) {
108 bmp_ptr->skip_size = skip_size_org; 108 bmp_ptr->skip_size = skip_size_org;
109 return 2; 109 return 2;
110 } 110 }
111 bmp_ptr->width = _GetDWord_LSBFirst((FX_LPBYTE)&bmp_info_hea der_ptr->biWidth); 111 bmp_ptr->width = _GetDWord_LSBFirst((FX_LPBYTE)&bmp_info_hea der_ptr->biWidth);
112 bmp_ptr->height = _GetDWord_LSBFirst((FX_LPBYTE)&bmp_info_he ader_ptr->biHeight); 112 bmp_ptr->height = _GetDWord_LSBFirst((FX_LPBYTE)&bmp_info_he ader_ptr->biHeight);
113 bmp_ptr->bitCounts = _GetWord_LSBFirst((FX_LPBYTE)&bmp_info_ header_ptr->biBitCount); 113 bmp_ptr->bitCounts = _GetWord_LSBFirst((FX_LPBYTE)&bmp_info_ header_ptr->biBitCount);
114 bmp_ptr->compress_flag = _GetDWord_LSBFirst((FX_LPBYTE)&bmp_ info_header_ptr->biCompression); 114 bmp_ptr->compress_flag = _GetDWord_LSBFirst((FX_LPBYTE)&bmp_ info_header_ptr->biCompression);
115 bmp_ptr->color_used = _GetDWord_LSBFirst((FX_LPBYTE)&bmp_inf o_header_ptr->biClrUsed); 115 bmp_ptr->color_used = _GetDWord_LSBFirst((FX_LPBYTE)&bmp_inf o_header_ptr->biClrUsed);
116 bmp_ptr->dpi_x = (FX_INT32)_GetDWord_LSBFirst((FX_LPBYTE)&bm p_info_header_ptr->biXPelsPerMeter); 116 bmp_ptr->dpi_x = (int32_t)_GetDWord_LSBFirst((FX_LPBYTE)&bmp _info_header_ptr->biXPelsPerMeter);
117 bmp_ptr->dpi_y = (FX_INT32)_GetDWord_LSBFirst((FX_LPBYTE)&bm p_info_header_ptr->biYPelsPerMeter); 117 bmp_ptr->dpi_y = (int32_t)_GetDWord_LSBFirst((FX_LPBYTE)&bmp _info_header_ptr->biYPelsPerMeter);
118 if(bmp_ptr->height < 0) { 118 if(bmp_ptr->height < 0) {
119 bmp_ptr->height = -bmp_ptr->height; 119 bmp_ptr->height = -bmp_ptr->height;
120 bmp_ptr->imgTB_flag = TRUE; 120 bmp_ptr->imgTB_flag = TRUE;
121 } 121 }
122 } 122 }
123 break; 123 break;
124 default: { 124 default: {
125 if(bmp_ptr->img_ifh_size > FX_MIN(40, sizeof(BmpInfoHeader)) ) { 125 if(bmp_ptr->img_ifh_size > FX_MIN(40, sizeof(BmpInfoHeader)) ) {
126 BmpInfoHeaderPtr bmp_info_header_ptr = NULL; 126 BmpInfoHeaderPtr bmp_info_header_ptr = NULL;
127 if(_bmp_read_data(bmp_ptr, (FX_LPBYTE*)&bmp_info_header_ ptr, bmp_ptr->img_ifh_size) == NULL) { 127 if(_bmp_read_data(bmp_ptr, (FX_LPBYTE*)&bmp_info_header_ ptr, bmp_ptr->img_ifh_size) == NULL) {
(...skipping 62 matching lines...) Expand 10 before | Expand all | Expand 10 after
190 break; 190 break;
191 case 32: 191 case 32:
192 bmp_ptr->out_row_bytes = bmp_ptr->src_row_bytes; 192 bmp_ptr->out_row_bytes = bmp_ptr->src_row_bytes;
193 bmp_ptr->components = 4; 193 bmp_ptr->components = 4;
194 break; 194 break;
195 } 195 }
196 if(bmp_ptr->out_row_buffer != NULL) { 196 if(bmp_ptr->out_row_buffer != NULL) {
197 FX_Free(bmp_ptr->out_row_buffer); 197 FX_Free(bmp_ptr->out_row_buffer);
198 bmp_ptr->out_row_buffer = NULL; 198 bmp_ptr->out_row_buffer = NULL;
199 } 199 }
200 bmp_ptr->out_row_buffer = FX_Alloc(FX_BYTE, bmp_ptr->out_row_bytes); 200 bmp_ptr->out_row_buffer = FX_Alloc(uint8_t, bmp_ptr->out_row_bytes);
201 BMP_PTR_NOT_NULL(bmp_ptr->out_row_buffer, bmp_ptr); 201 BMP_PTR_NOT_NULL(bmp_ptr->out_row_buffer, bmp_ptr);
202 FXSYS_memset32(bmp_ptr->out_row_buffer, 0, bmp_ptr->out_row_bytes); 202 FXSYS_memset32(bmp_ptr->out_row_buffer, 0, bmp_ptr->out_row_bytes);
203 _bmp_save_decoding_status(bmp_ptr, BMP_D_STATUS_PAL); 203 _bmp_save_decoding_status(bmp_ptr, BMP_D_STATUS_PAL);
204 } 204 }
205 if (bmp_ptr->decode_status == BMP_D_STATUS_PAL) { 205 if (bmp_ptr->decode_status == BMP_D_STATUS_PAL) {
206 skip_size_org = bmp_ptr->skip_size; 206 skip_size_org = bmp_ptr->skip_size;
207 #ifdef BMP_SUPPORT_BITFIELD 207 #ifdef BMP_SUPPORT_BITFIELD
208 if(bmp_ptr->compress_flag == BMP_BITFIELDS) { 208 if(bmp_ptr->compress_flag == BMP_BITFIELDS) {
209 if(bmp_ptr->bitCounts != 16 && bmp_ptr->bitCounts != 32) { 209 if(bmp_ptr->bitCounts != 16 && bmp_ptr->bitCounts != 32) {
210 _bmp_error(bmp_ptr, "The Bmp File Is Corrupt"); 210 _bmp_error(bmp_ptr, "The Bmp File Is Corrupt");
(...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after
251 if(_bmp_read_data(bmp_ptr, (FX_LPBYTE*)&src_pal_ptr, src_pal_size) = = NULL) { 251 if(_bmp_read_data(bmp_ptr, (FX_LPBYTE*)&src_pal_ptr, src_pal_size) = = NULL) {
252 bmp_ptr->skip_size = skip_size_org; 252 bmp_ptr->skip_size = skip_size_org;
253 return 2; 253 return 2;
254 } 254 }
255 if(bmp_ptr->pal_ptr != NULL) { 255 if(bmp_ptr->pal_ptr != NULL) {
256 FX_Free(bmp_ptr->pal_ptr); 256 FX_Free(bmp_ptr->pal_ptr);
257 bmp_ptr->pal_ptr = NULL; 257 bmp_ptr->pal_ptr = NULL;
258 } 258 }
259 bmp_ptr->pal_ptr = FX_Alloc(FX_DWORD, bmp_ptr->pal_num); 259 bmp_ptr->pal_ptr = FX_Alloc(FX_DWORD, bmp_ptr->pal_num);
260 BMP_PTR_NOT_NULL(bmp_ptr->pal_ptr, bmp_ptr); 260 BMP_PTR_NOT_NULL(bmp_ptr->pal_ptr, bmp_ptr);
261 FX_INT32 src_pal_index = 0; 261 int32_t src_pal_index = 0;
262 if(bmp_ptr->pal_type == BMP_PAL_OLD) { 262 if(bmp_ptr->pal_type == BMP_PAL_OLD) {
263 while(src_pal_index < bmp_ptr->pal_num) { 263 while(src_pal_index < bmp_ptr->pal_num) {
264 bmp_ptr->pal_ptr[src_pal_index++] = BMP_PAL_ENCODE(0x00, src _pal_ptr[2], src_pal_ptr[1], src_pal_ptr[0]); 264 bmp_ptr->pal_ptr[src_pal_index++] = BMP_PAL_ENCODE(0x00, src _pal_ptr[2], src_pal_ptr[1], src_pal_ptr[0]);
265 src_pal_ptr += 3; 265 src_pal_ptr += 3;
266 } 266 }
267 } else { 267 } else {
268 while(src_pal_index < bmp_ptr->pal_num) { 268 while(src_pal_index < bmp_ptr->pal_num) {
269 bmp_ptr->pal_ptr[src_pal_index++] = BMP_PAL_ENCODE(src_pal_p tr[3], src_pal_ptr[2], src_pal_ptr[1], src_pal_ptr[0]); 269 bmp_ptr->pal_ptr[src_pal_index++] = BMP_PAL_ENCODE(src_pal_p tr[3], src_pal_ptr[2], src_pal_ptr[1], src_pal_ptr[0]);
270 src_pal_ptr += 4; 270 src_pal_ptr += 4;
271 } 271 }
272 } 272 }
273 } 273 }
274 if(bmp_ptr->bmp_header_ptr->bfOffBits < 14 + bmp_ptr->img_ifh_size + bmp _ptr->pal_num * (bmp_ptr->pal_type ? 3 : 4)) { 274 if(bmp_ptr->bmp_header_ptr->bfOffBits < 14 + bmp_ptr->img_ifh_size + bmp _ptr->pal_num * (bmp_ptr->pal_type ? 3 : 4)) {
275 bmp_ptr->bmp_header_ptr->bfOffBits = 14 + bmp_ptr->img_ifh_size + bm p_ptr->pal_num * (bmp_ptr->pal_type ? 3 : 4); 275 bmp_ptr->bmp_header_ptr->bfOffBits = 14 + bmp_ptr->img_ifh_size + bm p_ptr->pal_num * (bmp_ptr->pal_type ? 3 : 4);
276 } 276 }
277 _bmp_save_decoding_status(bmp_ptr, BMP_D_STATUS_DATA_PRE); 277 _bmp_save_decoding_status(bmp_ptr, BMP_D_STATUS_DATA_PRE);
278 } 278 }
279 return 1; 279 return 1;
280 } 280 }
281 FX_INT32 _bmp_decode_image(bmp_decompress_struct_p bmp_ptr) 281 int32_t _bmp_decode_image(bmp_decompress_struct_p bmp_ptr)
282 { 282 {
283 if(bmp_ptr->decode_status == BMP_D_STATUS_DATA_PRE) { 283 if(bmp_ptr->decode_status == BMP_D_STATUS_DATA_PRE) {
284 bmp_ptr->avail_in = 0; 284 bmp_ptr->avail_in = 0;
285 if(!bmp_ptr->_bmp_get_data_position_fn(bmp_ptr, bmp_ptr->bmp_header_ptr- >bfOffBits)) { 285 if(!bmp_ptr->_bmp_get_data_position_fn(bmp_ptr, bmp_ptr->bmp_header_ptr- >bfOffBits)) {
286 bmp_ptr->decode_status = BMP_D_STATUS_TAIL; 286 bmp_ptr->decode_status = BMP_D_STATUS_TAIL;
287 _bmp_error(bmp_ptr, "The Bmp File Is Corrupt, Unexpected Stream Offs et"); 287 _bmp_error(bmp_ptr, "The Bmp File Is Corrupt, Unexpected Stream Offs et");
288 return 0; 288 return 0;
289 } 289 }
290 bmp_ptr->row_num = 0; 290 bmp_ptr->row_num = 0;
291 _bmp_save_decoding_status(bmp_ptr, BMP_D_STATUS_DATA); 291 _bmp_save_decoding_status(bmp_ptr, BMP_D_STATUS_DATA);
292 } 292 }
293 if(bmp_ptr->decode_status == BMP_D_STATUS_DATA) { 293 if(bmp_ptr->decode_status == BMP_D_STATUS_DATA) {
294 switch(bmp_ptr->compress_flag) { 294 switch(bmp_ptr->compress_flag) {
295 case BMP_RGB: 295 case BMP_RGB:
296 case BMP_BITFIELDS: 296 case BMP_BITFIELDS:
297 return _bmp_decode_rgb(bmp_ptr); 297 return _bmp_decode_rgb(bmp_ptr);
298 case BMP_RLE8: 298 case BMP_RLE8:
299 return _bmp_decode_rle8(bmp_ptr); 299 return _bmp_decode_rle8(bmp_ptr);
300 case BMP_RLE4: 300 case BMP_RLE4:
301 return _bmp_decode_rle4(bmp_ptr); 301 return _bmp_decode_rle4(bmp_ptr);
302 } 302 }
303 } 303 }
304 _bmp_error(bmp_ptr, "Any Uncontrol Error"); 304 _bmp_error(bmp_ptr, "Any Uncontrol Error");
305 return 0; 305 return 0;
306 } 306 }
307 FX_INT32 _bmp_decode_rgb(bmp_decompress_struct_p bmp_ptr) 307 int32_t _bmp_decode_rgb(bmp_decompress_struct_p bmp_ptr)
308 { 308 {
309 FX_LPBYTE row_buf = bmp_ptr->out_row_buffer; 309 FX_LPBYTE row_buf = bmp_ptr->out_row_buffer;
310 FX_LPBYTE des_buf = NULL; 310 FX_LPBYTE des_buf = NULL;
311 while (bmp_ptr->row_num < bmp_ptr->height) { 311 while (bmp_ptr->row_num < bmp_ptr->height) {
312 if(_bmp_read_data(bmp_ptr, &des_buf, bmp_ptr->src_row_bytes) == NULL) { 312 if(_bmp_read_data(bmp_ptr, &des_buf, bmp_ptr->src_row_bytes) == NULL) {
313 return 2; 313 return 2;
314 } 314 }
315 _bmp_save_decoding_status(bmp_ptr, BMP_D_STATUS_DATA); 315 _bmp_save_decoding_status(bmp_ptr, BMP_D_STATUS_DATA);
316 switch(bmp_ptr->bitCounts) { 316 switch(bmp_ptr->bitCounts) {
317 case 1: { 317 case 1: {
318 for (FX_INT32 col = 0; col < bmp_ptr->width; col++) { 318 for (int32_t col = 0; col < bmp_ptr->width; col++) {
319 *row_buf++ = des_buf[col >> 3] & (0x80 >> (col % 8)) ? 0 x01 : 0x00; 319 *row_buf++ = des_buf[col >> 3] & (0x80 >> (col % 8)) ? 0 x01 : 0x00;
320 } 320 }
321 } 321 }
322 break; 322 break;
323 case 4: { 323 case 4: {
324 for (FX_INT32 col = 0; col < bmp_ptr->width; col++) { 324 for (int32_t col = 0; col < bmp_ptr->width; col++) {
325 *row_buf++ = (col & 0x01) ? 325 *row_buf++ = (col & 0x01) ?
326 (des_buf[col >> 1] & 0x0F) : 326 (des_buf[col >> 1] & 0x0F) :
327 ((des_buf[col >> 1] & 0xF0) >> 4); 327 ((des_buf[col >> 1] & 0xF0) >> 4);
328 } 328 }
329 } 329 }
330 break; 330 break;
331 #ifdef BMP_SUPPORT_BITFIELD 331 #ifdef BMP_SUPPORT_BITFIELD
332 case 16: { 332 case 16: {
333 FX_WORD* buf = (FX_WORD*)des_buf; 333 FX_WORD* buf = (FX_WORD*)des_buf;
334 FX_BYTE blue_bits = 0; 334 uint8_t blue_bits = 0;
335 FX_BYTE green_bits = 0; 335 uint8_t green_bits = 0;
336 FX_BYTE red_bits = 0; 336 uint8_t red_bits = 0;
337 for(FX_INT32 i = 0; i < 16; i++) { 337 for(int32_t i = 0; i < 16; i++) {
338 if((bmp_ptr->mask_blue >> i) & 0x01) { 338 if((bmp_ptr->mask_blue >> i) & 0x01) {
339 blue_bits++; 339 blue_bits++;
340 } 340 }
341 if((bmp_ptr->mask_green >> i) & 0x01) { 341 if((bmp_ptr->mask_green >> i) & 0x01) {
342 green_bits++; 342 green_bits++;
343 } 343 }
344 if((bmp_ptr->mask_red >> i) & 0x01) { 344 if((bmp_ptr->mask_red >> i) & 0x01) {
345 red_bits++; 345 red_bits++;
346 } 346 }
347 } 347 }
348 green_bits += blue_bits; 348 green_bits += blue_bits;
349 red_bits += green_bits; 349 red_bits += green_bits;
350 blue_bits = 8 - blue_bits; 350 blue_bits = 8 - blue_bits;
351 green_bits -= 8; 351 green_bits -= 8;
352 red_bits -= 8; 352 red_bits -= 8;
353 for (FX_INT32 col = 0; col < bmp_ptr->width; col++) { 353 for (int32_t col = 0; col < bmp_ptr->width; col++) {
354 *buf = _GetWord_LSBFirst((FX_LPBYTE)buf); 354 *buf = _GetWord_LSBFirst((FX_LPBYTE)buf);
355 *row_buf++ = (FX_BYTE)((*buf & bmp_ptr->mask_blue) << bl ue_bits); 355 *row_buf++ = (uint8_t)((*buf & bmp_ptr->mask_blue) << bl ue_bits);
356 *row_buf++ = (FX_BYTE)((*buf & bmp_ptr->mask_green) >> g reen_bits); 356 *row_buf++ = (uint8_t)((*buf & bmp_ptr->mask_green) >> g reen_bits);
357 *row_buf++ = (FX_BYTE)((*buf++ & bmp_ptr->mask_red) >> r ed_bits); 357 *row_buf++ = (uint8_t)((*buf++ & bmp_ptr->mask_red) >> r ed_bits);
358 } 358 }
359 } 359 }
360 break; 360 break;
361 #endif 361 #endif
362 case 8: 362 case 8:
363 case 24: 363 case 24:
364 case 32: 364 case 32:
365 FXSYS_memcpy32(bmp_ptr->out_row_buffer, des_buf, bmp_ptr->src_ro w_bytes); 365 FXSYS_memcpy32(bmp_ptr->out_row_buffer, des_buf, bmp_ptr->src_ro w_bytes);
366 break; 366 break;
367 } 367 }
368 row_buf = bmp_ptr->out_row_buffer; 368 row_buf = bmp_ptr->out_row_buffer;
369 bmp_ptr->_bmp_get_row_fn(bmp_ptr, 369 bmp_ptr->_bmp_get_row_fn(bmp_ptr,
370 bmp_ptr->imgTB_flag ? bmp_ptr->row_num++ : (bmp _ptr->height - 1 - bmp_ptr->row_num++), 370 bmp_ptr->imgTB_flag ? bmp_ptr->row_num++ : (bmp _ptr->height - 1 - bmp_ptr->row_num++),
371 bmp_ptr->out_row_buffer); 371 bmp_ptr->out_row_buffer);
372 } 372 }
373 _bmp_save_decoding_status(bmp_ptr, BMP_D_STATUS_TAIL); 373 _bmp_save_decoding_status(bmp_ptr, BMP_D_STATUS_TAIL);
374 return 1; 374 return 1;
375 } 375 }
376 FX_INT32 _bmp_decode_rle8(bmp_decompress_struct_p bmp_ptr) 376 int32_t _bmp_decode_rle8(bmp_decompress_struct_p bmp_ptr)
377 { 377 {
378 FX_LPBYTE first_byte_ptr = NULL; 378 FX_LPBYTE first_byte_ptr = NULL;
379 FX_LPBYTE second_byte_ptr = NULL; 379 FX_LPBYTE second_byte_ptr = NULL;
380 bmp_ptr->col_num = 0; 380 bmp_ptr->col_num = 0;
381 while(TRUE) { 381 while(TRUE) {
382 FX_DWORD skip_size_org = bmp_ptr->skip_size; 382 FX_DWORD skip_size_org = bmp_ptr->skip_size;
383 if(_bmp_read_data(bmp_ptr, &first_byte_ptr, 1) == NULL) { 383 if(_bmp_read_data(bmp_ptr, &first_byte_ptr, 1) == NULL) {
384 return 2; 384 return 2;
385 } 385 }
386 switch(*first_byte_ptr) { 386 switch(*first_byte_ptr) {
(...skipping 25 matching lines...) Expand all
412 } 412 }
413 _bmp_save_decoding_status(bmp_ptr, BMP_D_STATUS_ TAIL); 413 _bmp_save_decoding_status(bmp_ptr, BMP_D_STATUS_ TAIL);
414 return 1; 414 return 1;
415 } 415 }
416 case RLE_DELTA: { 416 case RLE_DELTA: {
417 FX_LPBYTE delta_ptr; 417 FX_LPBYTE delta_ptr;
418 if(_bmp_read_data(bmp_ptr, &delta_ptr, 2) == NUL L) { 418 if(_bmp_read_data(bmp_ptr, &delta_ptr, 2) == NUL L) {
419 bmp_ptr->skip_size = skip_size_org; 419 bmp_ptr->skip_size = skip_size_org;
420 return 2; 420 return 2;
421 } 421 }
422 bmp_ptr->col_num += (FX_INT32)delta_ptr[0]; 422 bmp_ptr->col_num += (int32_t)delta_ptr[0];
423 FX_INT32 bmp_row_num_next = bmp_ptr->row_num + ( FX_INT32)delta_ptr[1]; 423 int32_t bmp_row_num_next = bmp_ptr->row_num + (i nt32_t)delta_ptr[1];
424 if(bmp_ptr->col_num >= bmp_ptr->out_row_bytes || bmp_row_num_next >= bmp_ptr->height) { 424 if(bmp_ptr->col_num >= bmp_ptr->out_row_bytes || bmp_row_num_next >= bmp_ptr->height) {
425 _bmp_error(bmp_ptr, "The Bmp File Is Corrupt Or Not Supported"); 425 _bmp_error(bmp_ptr, "The Bmp File Is Corrupt Or Not Supported");
426 return 0; 426 return 0;
427 } 427 }
428 while(bmp_ptr->row_num < bmp_row_num_next) { 428 while(bmp_ptr->row_num < bmp_row_num_next) {
429 FXSYS_memset32(bmp_ptr->out_row_buffer, 0, b mp_ptr->out_row_bytes); 429 FXSYS_memset32(bmp_ptr->out_row_buffer, 0, b mp_ptr->out_row_bytes);
430 bmp_ptr->_bmp_get_row_fn(bmp_ptr, 430 bmp_ptr->_bmp_get_row_fn(bmp_ptr,
431 bmp_ptr->imgTB_flag ? bmp_ptr->row_num++ : (bmp_ptr->height - 1 - bmp_ptr->row_num++), 431 bmp_ptr->imgTB_flag ? bmp_ptr->row_num++ : (bmp_ptr->height - 1 - bmp_ptr->row_num++),
432 bmp_ptr->out_row_bu ffer); 432 bmp_ptr->out_row_bu ffer);
433 } 433 }
434 } 434 }
435 break; 435 break;
436 default: { 436 default: {
437 if((FX_INT32)(*first_byte_ptr) > bmp_ptr->src_ro w_bytes - bmp_ptr->col_num) { 437 if((int32_t)(*first_byte_ptr) > bmp_ptr->src_row _bytes - bmp_ptr->col_num) {
438 _bmp_error(bmp_ptr, "The Bmp File Is Corrupt "); 438 _bmp_error(bmp_ptr, "The Bmp File Is Corrupt ");
439 return 0; 439 return 0;
440 } 440 }
441 if(_bmp_read_data(bmp_ptr, &second_byte_ptr, 441 if(_bmp_read_data(bmp_ptr, &second_byte_ptr,
442 *first_byte_ptr & 1 ? *first_b yte_ptr + 1 : *first_byte_ptr) == NULL) { 442 *first_byte_ptr & 1 ? *first_b yte_ptr + 1 : *first_byte_ptr) == NULL) {
443 bmp_ptr->skip_size = skip_size_org; 443 bmp_ptr->skip_size = skip_size_org;
444 return 2; 444 return 2;
445 } 445 }
446 FXSYS_memcpy32(bmp_ptr->out_row_buffer + bmp_ptr ->col_num, second_byte_ptr, *first_byte_ptr); 446 FXSYS_memcpy32(bmp_ptr->out_row_buffer + bmp_ptr ->col_num, second_byte_ptr, *first_byte_ptr);
447 bmp_ptr->col_num += (FX_INT32)(*first_byte_ptr); 447 bmp_ptr->col_num += (int32_t)(*first_byte_ptr);
448 } 448 }
449 } 449 }
450 } 450 }
451 break; 451 break;
452 default: { 452 default: {
453 if(_bmp_read_data(bmp_ptr, &second_byte_ptr, 1) == NULL) { 453 if(_bmp_read_data(bmp_ptr, &second_byte_ptr, 1) == NULL) {
454 bmp_ptr->skip_size = skip_size_org; 454 bmp_ptr->skip_size = skip_size_org;
455 return 2; 455 return 2;
456 } 456 }
457 if((FX_INT32)(*first_byte_ptr) > bmp_ptr->src_row_bytes - bm p_ptr->col_num) { 457 if((int32_t)(*first_byte_ptr) > bmp_ptr->src_row_bytes - bmp _ptr->col_num) {
458 _bmp_error(bmp_ptr, "The Bmp File Is Corrupt"); 458 _bmp_error(bmp_ptr, "The Bmp File Is Corrupt");
459 return 0; 459 return 0;
460 } 460 }
461 FXSYS_memset8(bmp_ptr->out_row_buffer + bmp_ptr->col_num, *s econd_byte_ptr, *first_byte_ptr); 461 FXSYS_memset8(bmp_ptr->out_row_buffer + bmp_ptr->col_num, *s econd_byte_ptr, *first_byte_ptr);
462 bmp_ptr->col_num += (FX_INT32)(*first_byte_ptr); 462 bmp_ptr->col_num += (int32_t)(*first_byte_ptr);
463 } 463 }
464 } 464 }
465 } 465 }
466 _bmp_error(bmp_ptr, "Any Uncontrol Error"); 466 _bmp_error(bmp_ptr, "Any Uncontrol Error");
467 return 0; 467 return 0;
468 } 468 }
469 FX_INT32 _bmp_decode_rle4(bmp_decompress_struct_p bmp_ptr) 469 int32_t _bmp_decode_rle4(bmp_decompress_struct_p bmp_ptr)
470 { 470 {
471 FX_LPBYTE first_byte_ptr = NULL; 471 FX_LPBYTE first_byte_ptr = NULL;
472 FX_LPBYTE second_byte_ptr = NULL; 472 FX_LPBYTE second_byte_ptr = NULL;
473 bmp_ptr->col_num = 0; 473 bmp_ptr->col_num = 0;
474 while (TRUE) { 474 while (TRUE) {
475 FX_DWORD skip_size_org = bmp_ptr->skip_size; 475 FX_DWORD skip_size_org = bmp_ptr->skip_size;
476 if(_bmp_read_data(bmp_ptr, &first_byte_ptr, 1) == NULL) { 476 if(_bmp_read_data(bmp_ptr, &first_byte_ptr, 1) == NULL) {
477 return 2; 477 return 2;
478 } 478 }
479 switch(*first_byte_ptr) { 479 switch(*first_byte_ptr) {
(...skipping 25 matching lines...) Expand all
505 } 505 }
506 _bmp_save_decoding_status(bmp_ptr, BMP_D_STATUS_ TAIL); 506 _bmp_save_decoding_status(bmp_ptr, BMP_D_STATUS_ TAIL);
507 return 1; 507 return 1;
508 } 508 }
509 case RLE_DELTA: { 509 case RLE_DELTA: {
510 FX_LPBYTE delta_ptr; 510 FX_LPBYTE delta_ptr;
511 if(_bmp_read_data(bmp_ptr, &delta_ptr, 2) == NUL L) { 511 if(_bmp_read_data(bmp_ptr, &delta_ptr, 2) == NUL L) {
512 bmp_ptr->skip_size = skip_size_org; 512 bmp_ptr->skip_size = skip_size_org;
513 return 2; 513 return 2;
514 } 514 }
515 bmp_ptr->col_num += (FX_INT32)delta_ptr[0]; 515 bmp_ptr->col_num += (int32_t)delta_ptr[0];
516 FX_INT32 bmp_row_num_next = bmp_ptr->row_num + ( FX_INT32)delta_ptr[1]; 516 int32_t bmp_row_num_next = bmp_ptr->row_num + (i nt32_t)delta_ptr[1];
517 if(bmp_ptr->col_num >= bmp_ptr->out_row_bytes || bmp_row_num_next >= bmp_ptr->height) { 517 if(bmp_ptr->col_num >= bmp_ptr->out_row_bytes || bmp_row_num_next >= bmp_ptr->height) {
518 _bmp_error(bmp_ptr, "The Bmp File Is Corrupt Or Not Supported"); 518 _bmp_error(bmp_ptr, "The Bmp File Is Corrupt Or Not Supported");
519 return 0; 519 return 0;
520 } 520 }
521 while(bmp_ptr->row_num < bmp_row_num_next) { 521 while(bmp_ptr->row_num < bmp_row_num_next) {
522 FXSYS_memset32(bmp_ptr->out_row_buffer, 0, b mp_ptr->out_row_bytes); 522 FXSYS_memset32(bmp_ptr->out_row_buffer, 0, b mp_ptr->out_row_bytes);
523 bmp_ptr->_bmp_get_row_fn(bmp_ptr, 523 bmp_ptr->_bmp_get_row_fn(bmp_ptr,
524 bmp_ptr->imgTB_flag ? bmp_ptr->row_num++ : (bmp_ptr->height - 1 - bmp_ptr->row_num++), 524 bmp_ptr->imgTB_flag ? bmp_ptr->row_num++ : (bmp_ptr->height - 1 - bmp_ptr->row_num++),
525 bmp_ptr->out_row_bu ffer); 525 bmp_ptr->out_row_bu ffer);
526 } 526 }
527 } 527 }
528 break; 528 break;
529 default: { 529 default: {
530 FX_BYTE size = (FX_BYTE)(((FX_WORD)(*first_byte_ ptr) + 1) >> 1); 530 uint8_t size = (uint8_t)(((FX_WORD)(*first_byte_ ptr) + 1) >> 1);
531 if((FX_INT32)*first_byte_ptr >= bmp_ptr->out_row _bytes - bmp_ptr->col_num) { 531 if((int32_t)*first_byte_ptr >= bmp_ptr->out_row_ bytes - bmp_ptr->col_num) {
532 if(size + (bmp_ptr->col_num >> 1) > bmp_ptr- >src_row_bytes) { 532 if(size + (bmp_ptr->col_num >> 1) > bmp_ptr- >src_row_bytes) {
533 _bmp_error(bmp_ptr, "The Bmp File Is Cor rupt"); 533 _bmp_error(bmp_ptr, "The Bmp File Is Cor rupt");
534 return 0; 534 return 0;
535 } 535 }
536 *first_byte_ptr = bmp_ptr->out_row_bytes - b mp_ptr->col_num - 1; 536 *first_byte_ptr = bmp_ptr->out_row_bytes - b mp_ptr->col_num - 1;
537 } 537 }
538 if(_bmp_read_data(bmp_ptr, &second_byte_ptr, siz e & 1 ? size + 1 : size) == NULL) { 538 if(_bmp_read_data(bmp_ptr, &second_byte_ptr, siz e & 1 ? size + 1 : size) == NULL) {
539 bmp_ptr->skip_size = skip_size_org; 539 bmp_ptr->skip_size = skip_size_org;
540 return 2; 540 return 2;
541 } 541 }
542 for (FX_BYTE i = 0; i < *first_byte_ptr; i++) { 542 for (uint8_t i = 0; i < *first_byte_ptr; i++) {
543 if(i & 0x01) { 543 if(i & 0x01) {
544 *(bmp_ptr->out_row_buffer + bmp_ptr->col _num++) = (*second_byte_ptr++ & 0x0F); 544 *(bmp_ptr->out_row_buffer + bmp_ptr->col _num++) = (*second_byte_ptr++ & 0x0F);
545 } else { 545 } else {
546 *(bmp_ptr->out_row_buffer + bmp_ptr->col _num++) = ((*second_byte_ptr & 0xF0) >> 4); 546 *(bmp_ptr->out_row_buffer + bmp_ptr->col _num++) = ((*second_byte_ptr & 0xF0) >> 4);
547 } 547 }
548 } 548 }
549 } 549 }
550 } 550 }
551 } 551 }
552 break; 552 break;
553 default: { 553 default: {
554 if(_bmp_read_data(bmp_ptr, &second_byte_ptr, 1) == NULL) { 554 if(_bmp_read_data(bmp_ptr, &second_byte_ptr, 1) == NULL) {
555 bmp_ptr->skip_size = skip_size_org; 555 bmp_ptr->skip_size = skip_size_org;
556 return 2; 556 return 2;
557 } 557 }
558 if((FX_INT32)*first_byte_ptr > bmp_ptr->out_row_bytes - bmp_ ptr->col_num) { 558 if((int32_t)*first_byte_ptr > bmp_ptr->out_row_bytes - bmp_p tr->col_num) {
559 FX_BYTE size = (FX_BYTE)(((FX_WORD)(*first_byte_ptr) + 1 ) >> 1); 559 uint8_t size = (uint8_t)(((FX_WORD)(*first_byte_ptr) + 1 ) >> 1);
560 if(size + (bmp_ptr->col_num >> 1) > bmp_ptr->src_row_byt es) { 560 if(size + (bmp_ptr->col_num >> 1) > bmp_ptr->src_row_byt es) {
561 _bmp_error(bmp_ptr, "The Bmp File Is Corrupt"); 561 _bmp_error(bmp_ptr, "The Bmp File Is Corrupt");
562 return 0; 562 return 0;
563 } 563 }
564 *first_byte_ptr = bmp_ptr->out_row_bytes - bmp_ptr->col_ num - 1; 564 *first_byte_ptr = bmp_ptr->out_row_bytes - bmp_ptr->col_ num - 1;
565 } 565 }
566 for (FX_BYTE i = 0; i < *first_byte_ptr; i++) { 566 for (uint8_t i = 0; i < *first_byte_ptr; i++) {
567 if(i & 0x01) { 567 if(i & 0x01) {
568 *(bmp_ptr->out_row_buffer + bmp_ptr->col_num++) = (* second_byte_ptr & 0x0F); 568 *(bmp_ptr->out_row_buffer + bmp_ptr->col_num++) = (* second_byte_ptr & 0x0F);
569 } else { 569 } else {
570 *(bmp_ptr->out_row_buffer + bmp_ptr->col_num++) = (( *second_byte_ptr & 0xF0) >> 4); 570 *(bmp_ptr->out_row_buffer + bmp_ptr->col_num++) = (( *second_byte_ptr & 0xF0) >> 4);
571 } 571 }
572 } 572 }
573 } 573 }
574 } 574 }
575 } 575 }
576 _bmp_error(bmp_ptr, "Any Uncontrol Error"); 576 _bmp_error(bmp_ptr, "Any Uncontrol Error");
577 return 0; 577 return 0;
578 } 578 }
579 FX_LPBYTE _bmp_read_data(bmp_decompress_struct_p bmp_ptr, FX_LPBYTE* des_buf_pp, FX_DWORD data_size) 579 FX_LPBYTE _bmp_read_data(bmp_decompress_struct_p bmp_ptr, FX_LPBYTE* des_buf_pp, FX_DWORD data_size)
580 { 580 {
581 if(bmp_ptr == NULL || 581 if(bmp_ptr == NULL ||
582 bmp_ptr->avail_in < bmp_ptr->skip_size + data_size) { 582 bmp_ptr->avail_in < bmp_ptr->skip_size + data_size) {
583 return NULL; 583 return NULL;
584 } 584 }
585 *des_buf_pp = bmp_ptr->next_in + bmp_ptr->skip_size; 585 *des_buf_pp = bmp_ptr->next_in + bmp_ptr->skip_size;
586 bmp_ptr->skip_size += data_size; 586 bmp_ptr->skip_size += data_size;
587 return *des_buf_pp; 587 return *des_buf_pp;
588 } 588 }
589 void _bmp_save_decoding_status(bmp_decompress_struct_p bmp_ptr, FX_INT32 status) 589 void _bmp_save_decoding_status(bmp_decompress_struct_p bmp_ptr, int32_t status)
590 { 590 {
591 bmp_ptr->decode_status = status; 591 bmp_ptr->decode_status = status;
592 bmp_ptr->next_in += bmp_ptr->skip_size; 592 bmp_ptr->next_in += bmp_ptr->skip_size;
593 bmp_ptr->avail_in -= bmp_ptr->skip_size; 593 bmp_ptr->avail_in -= bmp_ptr->skip_size;
594 bmp_ptr->skip_size = 0; 594 bmp_ptr->skip_size = 0;
595 } 595 }
596 void _bmp_input_buffer(bmp_decompress_struct_p bmp_ptr, FX_LPBYTE src_buf, FX_DW ORD src_size) 596 void _bmp_input_buffer(bmp_decompress_struct_p bmp_ptr, FX_LPBYTE src_buf, FX_DW ORD src_size)
597 { 597 {
598 bmp_ptr->next_in = src_buf; 598 bmp_ptr->next_in = src_buf;
599 bmp_ptr->avail_in = src_size; 599 bmp_ptr->avail_in = src_size;
(...skipping 72 matching lines...) Expand 10 before | Expand all | Expand 10 after
672 #ifdef BMP_SUPPORT_BITFIELD 672 #ifdef BMP_SUPPORT_BITFIELD
673 static void _bmp_encode_bitfields(bmp_compress_struct_p bmp_ptr, FX_LPBYTE& dst_ buf, FX_DWORD& dst_size) 673 static void _bmp_encode_bitfields(bmp_compress_struct_p bmp_ptr, FX_LPBYTE& dst_ buf, FX_DWORD& dst_size)
674 { 674 {
675 if (bmp_ptr->info_header.biBitCount != 16 && bmp_ptr->info_header.biBitCount != 32) { 675 if (bmp_ptr->info_header.biBitCount != 16 && bmp_ptr->info_header.biBitCount != 32) {
676 return; 676 return;
677 } 677 }
678 FX_DWORD size, dst_pos, i; 678 FX_DWORD size, dst_pos, i;
679 size = bmp_ptr->src_pitch * bmp_ptr->src_row * bmp_ptr->info_header.biBitCou nt / 16; 679 size = bmp_ptr->src_pitch * bmp_ptr->src_row * bmp_ptr->info_header.biBitCou nt / 16;
680 dst_pos = bmp_ptr->file_header.bfOffBits; 680 dst_pos = bmp_ptr->file_header.bfOffBits;
681 dst_size += size; 681 dst_size += size;
682 dst_buf = FX_Realloc(FX_BYTE, dst_buf, dst_size); 682 dst_buf = FX_Realloc(uint8_t, dst_buf, dst_size);
683 if (dst_buf == NULL) { 683 if (dst_buf == NULL) {
684 return; 684 return;
685 } 685 }
686 FXSYS_memset32(&dst_buf[dst_pos], 0, size); 686 FXSYS_memset32(&dst_buf[dst_pos], 0, size);
687 FX_DWORD mask_red; 687 FX_DWORD mask_red;
688 FX_DWORD mask_green; 688 FX_DWORD mask_green;
689 FX_DWORD mask_blue; 689 FX_DWORD mask_blue;
690 mask_red = 0x7C00; 690 mask_red = 0x7C00;
691 mask_green = 0x03E0; 691 mask_green = 0x03E0;
692 mask_blue = 0x001F; 692 mask_blue = 0x001F;
693 if (bmp_ptr->info_header.biCompression == BMP_BITFIELDS) { 693 if (bmp_ptr->info_header.biCompression == BMP_BITFIELDS) {
694 if (bmp_ptr->bit_type == BMP_BIT_565) { 694 if (bmp_ptr->bit_type == BMP_BIT_565) {
695 mask_red = 0xF800; 695 mask_red = 0xF800;
696 mask_green = 0x07E0; 696 mask_green = 0x07E0;
697 mask_blue = 0x001F; 697 mask_blue = 0x001F;
698 } 698 }
699 if (bmp_ptr->info_header.biBitCount == 32) { 699 if (bmp_ptr->info_header.biBitCount == 32) {
700 mask_red = 0xFF0000; 700 mask_red = 0xFF0000;
701 mask_green = 0x00FF00; 701 mask_green = 0x00FF00;
702 mask_blue = 0x0000FF; 702 mask_blue = 0x0000FF;
703 } 703 }
704 _SetDWord_LSBFirst(&dst_buf[dst_pos], mask_red); 704 _SetDWord_LSBFirst(&dst_buf[dst_pos], mask_red);
705 dst_pos += 4; 705 dst_pos += 4;
706 _SetDWord_LSBFirst(&dst_buf[dst_pos], mask_green); 706 _SetDWord_LSBFirst(&dst_buf[dst_pos], mask_green);
707 dst_pos += 4; 707 dst_pos += 4;
708 _SetDWord_LSBFirst(&dst_buf[dst_pos], mask_blue); 708 _SetDWord_LSBFirst(&dst_buf[dst_pos], mask_blue);
709 dst_pos += 4; 709 dst_pos += 4;
710 bmp_ptr->file_header.bfOffBits = dst_pos; 710 bmp_ptr->file_header.bfOffBits = dst_pos;
711 } 711 }
712 FX_BYTE blue_bits = 0; 712 uint8_t blue_bits = 0;
713 FX_BYTE green_bits = 0; 713 uint8_t green_bits = 0;
714 FX_BYTE red_bits = 0; 714 uint8_t red_bits = 0;
715 for(i = 0; i < bmp_ptr->info_header.biBitCount; i++) { 715 for(i = 0; i < bmp_ptr->info_header.biBitCount; i++) {
716 if((mask_blue >> i) & 0x01) { 716 if((mask_blue >> i) & 0x01) {
717 blue_bits++; 717 blue_bits++;
718 } 718 }
719 if((mask_green >> i) & 0x01) { 719 if((mask_green >> i) & 0x01) {
720 green_bits++; 720 green_bits++;
721 } 721 }
722 if((mask_red >> i) & 0x01) { 722 if((mask_red >> i) & 0x01) {
723 red_bits++; 723 red_bits++;
724 } 724 }
725 } 725 }
726 green_bits += blue_bits; 726 green_bits += blue_bits;
727 red_bits += green_bits; 727 red_bits += green_bits;
728 blue_bits = 8 - blue_bits; 728 blue_bits = 8 - blue_bits;
729 green_bits -= 8; 729 green_bits -= 8;
730 red_bits -= 8; 730 red_bits -= 8;
731 i = 0; 731 i = 0;
732 for (FX_INT32 row_num = bmp_ptr->src_row - 1; row_num > -1; row_num--, i = 0 ) { 732 for (int32_t row_num = bmp_ptr->src_row - 1; row_num > -1; row_num--, i = 0) {
733 while (i < bmp_ptr->src_width * bmp_ptr->src_bpp / 8) { 733 while (i < bmp_ptr->src_width * bmp_ptr->src_bpp / 8) {
734 FX_BYTE b = bmp_ptr->src_buf[row_num * bmp_ptr->src_pitch + i++]; 734 uint8_t b = bmp_ptr->src_buf[row_num * bmp_ptr->src_pitch + i++];
735 FX_BYTE g = bmp_ptr->src_buf[row_num * bmp_ptr->src_pitch + i++]; 735 uint8_t g = bmp_ptr->src_buf[row_num * bmp_ptr->src_pitch + i++];
736 FX_BYTE r = bmp_ptr->src_buf[row_num * bmp_ptr->src_pitch + i++]; 736 uint8_t r = bmp_ptr->src_buf[row_num * bmp_ptr->src_pitch + i++];
737 if (bmp_ptr->src_bpp == 32) { 737 if (bmp_ptr->src_bpp == 32) {
738 i++; 738 i++;
739 } 739 }
740 FX_DWORD pix_val = 0; 740 FX_DWORD pix_val = 0;
741 pix_val |= (b >> blue_bits) & mask_blue; 741 pix_val |= (b >> blue_bits) & mask_blue;
742 pix_val |= (g << green_bits) & mask_green; 742 pix_val |= (g << green_bits) & mask_green;
743 pix_val |= (r << red_bits) & mask_red; 743 pix_val |= (r << red_bits) & mask_red;
744 if (bmp_ptr->info_header.biBitCount == 16) { 744 if (bmp_ptr->info_header.biBitCount == 16) {
745 _SetWord_LSBFirst(&dst_buf[dst_pos], (FX_WORD)pix_val); 745 _SetWord_LSBFirst(&dst_buf[dst_pos], (FX_WORD)pix_val);
746 dst_pos += 2; 746 dst_pos += 2;
(...skipping 12 matching lines...) Expand all
759 #ifdef BMP_SUPPORT_BITFIELD 759 #ifdef BMP_SUPPORT_BITFIELD
760 _bmp_encode_bitfields(bmp_ptr, dst_buf, dst_size); 760 _bmp_encode_bitfields(bmp_ptr, dst_buf, dst_size);
761 #endif 761 #endif
762 return; 762 return;
763 } 763 }
764 FX_DWORD size, dst_pos; 764 FX_DWORD size, dst_pos;
765 FX_DWORD dst_pitch = (bmp_ptr->src_width * bmp_ptr->info_header.biBitCount + 31) / 32 * 4; 765 FX_DWORD dst_pitch = (bmp_ptr->src_width * bmp_ptr->info_header.biBitCount + 31) / 32 * 4;
766 size = dst_pitch * bmp_ptr->src_row; 766 size = dst_pitch * bmp_ptr->src_row;
767 dst_pos = bmp_ptr->file_header.bfOffBits; 767 dst_pos = bmp_ptr->file_header.bfOffBits;
768 dst_size += size; 768 dst_size += size;
769 dst_buf = FX_Realloc(FX_BYTE, dst_buf, dst_size); 769 dst_buf = FX_Realloc(uint8_t, dst_buf, dst_size);
770 if (dst_buf == NULL) { 770 if (dst_buf == NULL) {
771 return; 771 return;
772 } 772 }
773 FXSYS_memset32(&dst_buf[dst_pos], 0, size); 773 FXSYS_memset32(&dst_buf[dst_pos], 0, size);
774 for (FX_INT32 row_num = bmp_ptr->src_row - 1; row_num > -1; row_num--) { 774 for (int32_t row_num = bmp_ptr->src_row - 1; row_num > -1; row_num--) {
775 FXSYS_memcpy32(&dst_buf[dst_pos], &bmp_ptr->src_buf[row_num * bmp_ptr->s rc_pitch], bmp_ptr->src_pitch); 775 FXSYS_memcpy32(&dst_buf[dst_pos], &bmp_ptr->src_buf[row_num * bmp_ptr->s rc_pitch], bmp_ptr->src_pitch);
776 dst_pos += dst_pitch; 776 dst_pos += dst_pitch;
777 } 777 }
778 dst_size = dst_pos; 778 dst_size = dst_pos;
779 } 779 }
780 static FX_BYTE _bmp_rle8_search(FX_LPCBYTE buf, FX_INT32 len) 780 static uint8_t _bmp_rle8_search(FX_LPCBYTE buf, int32_t len)
781 { 781 {
782 FX_BYTE num; 782 uint8_t num;
783 num = 1; 783 num = 1;
784 while (num < len) { 784 while (num < len) {
785 if (buf[num - 1] != buf[num] || num == 0xFF) { 785 if (buf[num - 1] != buf[num] || num == 0xFF) {
786 break; 786 break;
787 } 787 }
788 num++; 788 num++;
789 } 789 }
790 return num; 790 return num;
791 } 791 }
792 static void _bmp_encode_rle8(bmp_compress_struct_p bmp_ptr, FX_LPBYTE& dst_buf, FX_DWORD& dst_size) 792 static void _bmp_encode_rle8(bmp_compress_struct_p bmp_ptr, FX_LPBYTE& dst_buf, FX_DWORD& dst_size)
793 { 793 {
794 FX_DWORD size, dst_pos, index; 794 FX_DWORD size, dst_pos, index;
795 FX_BYTE rle[2] = {0}; 795 uint8_t rle[2] = {0};
796 size = bmp_ptr->src_pitch * bmp_ptr->src_row * 2; 796 size = bmp_ptr->src_pitch * bmp_ptr->src_row * 2;
797 dst_pos = bmp_ptr->file_header.bfOffBits; 797 dst_pos = bmp_ptr->file_header.bfOffBits;
798 dst_size += size; 798 dst_size += size;
799 dst_buf = FX_Realloc(FX_BYTE, dst_buf, dst_size); 799 dst_buf = FX_Realloc(uint8_t, dst_buf, dst_size);
800 if (dst_buf == NULL) { 800 if (dst_buf == NULL) {
801 return; 801 return;
802 } 802 }
803 FXSYS_memset32(&dst_buf[dst_pos], 0, size); 803 FXSYS_memset32(&dst_buf[dst_pos], 0, size);
804 for (FX_INT32 row_num = bmp_ptr->src_row - 1, i = 0; row_num > -1; ) { 804 for (int32_t row_num = bmp_ptr->src_row - 1, i = 0; row_num > -1; ) {
805 index = row_num * bmp_ptr->src_pitch; 805 index = row_num * bmp_ptr->src_pitch;
806 rle[0] = _bmp_rle8_search(&bmp_ptr->src_buf[index + i], size - index - i ); 806 rle[0] = _bmp_rle8_search(&bmp_ptr->src_buf[index + i], size - index - i );
807 rle[1] = bmp_ptr->src_buf[index + i]; 807 rle[1] = bmp_ptr->src_buf[index + i];
808 if (i + rle[0] >= (FX_INT32)bmp_ptr->src_pitch) { 808 if (i + rle[0] >= (int32_t)bmp_ptr->src_pitch) {
809 rle[0] = FX_BYTE(bmp_ptr->src_pitch - i); 809 rle[0] = uint8_t(bmp_ptr->src_pitch - i);
810 if (rle[0]) { 810 if (rle[0]) {
811 dst_buf[dst_pos++] = rle[0]; 811 dst_buf[dst_pos++] = rle[0];
812 dst_buf[dst_pos++] = rle[1]; 812 dst_buf[dst_pos++] = rle[1];
813 } 813 }
814 dst_buf[dst_pos++] = RLE_MARKER; 814 dst_buf[dst_pos++] = RLE_MARKER;
815 dst_buf[dst_pos++] = RLE_EOL; 815 dst_buf[dst_pos++] = RLE_EOL;
816 i = 0; 816 i = 0;
817 row_num--; 817 row_num--;
818 } else { 818 } else {
819 i += rle[0]; 819 i += rle[0];
820 dst_buf[dst_pos++] = rle[0]; 820 dst_buf[dst_pos++] = rle[0];
821 dst_buf[dst_pos++] = rle[1]; 821 dst_buf[dst_pos++] = rle[1];
822 } 822 }
823 } 823 }
824 dst_buf[dst_pos++] = RLE_MARKER; 824 dst_buf[dst_pos++] = RLE_MARKER;
825 dst_buf[dst_pos++] = RLE_EOI; 825 dst_buf[dst_pos++] = RLE_EOI;
826 dst_size = dst_pos; 826 dst_size = dst_pos;
827 } 827 }
828 static FX_BYTE _bmp_rle4_search(FX_LPCBYTE buf, FX_INT32 len) 828 static uint8_t _bmp_rle4_search(FX_LPCBYTE buf, int32_t len)
829 { 829 {
830 FX_BYTE num; 830 uint8_t num;
831 num = 2; 831 num = 2;
832 while (num < len) { 832 while (num < len) {
833 if (buf[num - 2] != buf[num] || num == 0xFF) { 833 if (buf[num - 2] != buf[num] || num == 0xFF) {
834 break; 834 break;
835 } 835 }
836 num++; 836 num++;
837 } 837 }
838 return num; 838 return num;
839 } 839 }
840 static void _bmp_encode_rle4(bmp_compress_struct_p bmp_ptr, FX_LPBYTE& dst_buf, FX_DWORD& dst_size) 840 static void _bmp_encode_rle4(bmp_compress_struct_p bmp_ptr, FX_LPBYTE& dst_buf, FX_DWORD& dst_size)
841 { 841 {
842 FX_DWORD size, dst_pos, index; 842 FX_DWORD size, dst_pos, index;
843 FX_BYTE rle[2] = {0}; 843 uint8_t rle[2] = {0};
844 size = bmp_ptr->src_pitch * bmp_ptr->src_row; 844 size = bmp_ptr->src_pitch * bmp_ptr->src_row;
845 dst_pos = bmp_ptr->file_header.bfOffBits; 845 dst_pos = bmp_ptr->file_header.bfOffBits;
846 dst_size += size; 846 dst_size += size;
847 dst_buf = FX_Realloc(FX_BYTE, dst_buf, dst_size); 847 dst_buf = FX_Realloc(uint8_t, dst_buf, dst_size);
848 if (dst_buf == NULL) { 848 if (dst_buf == NULL) {
849 return; 849 return;
850 } 850 }
851 FXSYS_memset32(&dst_buf[dst_pos], 0, size); 851 FXSYS_memset32(&dst_buf[dst_pos], 0, size);
852 for (FX_INT32 row_num = bmp_ptr->src_row - 1, i = 0; row_num > -1; rle[1] = 0) { 852 for (int32_t row_num = bmp_ptr->src_row - 1, i = 0; row_num > -1; rle[1] = 0 ) {
853 index = row_num * bmp_ptr->src_pitch; 853 index = row_num * bmp_ptr->src_pitch;
854 rle[0] = _bmp_rle4_search(&bmp_ptr->src_buf[index + i], size - index - i ); 854 rle[0] = _bmp_rle4_search(&bmp_ptr->src_buf[index + i], size - index - i );
855 rle[1] |= (bmp_ptr->src_buf[index + i] & 0x0f) << 4; 855 rle[1] |= (bmp_ptr->src_buf[index + i] & 0x0f) << 4;
856 rle[1] |= bmp_ptr->src_buf[index + i + 1] & 0x0f; 856 rle[1] |= bmp_ptr->src_buf[index + i + 1] & 0x0f;
857 if (i + rle[0] >= (FX_INT32)bmp_ptr->src_pitch) { 857 if (i + rle[0] >= (int32_t)bmp_ptr->src_pitch) {
858 rle[0] = FX_BYTE(bmp_ptr->src_pitch - i); 858 rle[0] = uint8_t(bmp_ptr->src_pitch - i);
859 if (rle[0]) { 859 if (rle[0]) {
860 dst_buf[dst_pos++] = rle[0]; 860 dst_buf[dst_pos++] = rle[0];
861 dst_buf[dst_pos++] = rle[1]; 861 dst_buf[dst_pos++] = rle[1];
862 } 862 }
863 dst_buf[dst_pos++] = RLE_MARKER; 863 dst_buf[dst_pos++] = RLE_MARKER;
864 dst_buf[dst_pos++] = RLE_EOL; 864 dst_buf[dst_pos++] = RLE_EOL;
865 i = 0; 865 i = 0;
866 row_num--; 866 row_num--;
867 } else { 867 } else {
868 i += rle[0]; 868 i += rle[0];
869 dst_buf[dst_pos++] = rle[0]; 869 dst_buf[dst_pos++] = rle[0];
870 dst_buf[dst_pos++] = rle[1]; 870 dst_buf[dst_pos++] = rle[1];
871 } 871 }
872 } 872 }
873 dst_buf[dst_pos++] = RLE_MARKER; 873 dst_buf[dst_pos++] = RLE_MARKER;
874 dst_buf[dst_pos++] = RLE_EOI; 874 dst_buf[dst_pos++] = RLE_EOI;
875 dst_size = dst_pos; 875 dst_size = dst_pos;
876 } 876 }
877 FX_BOOL _bmp_encode_image( bmp_compress_struct_p bmp_ptr, FX_LPBYTE& dst_buf, FX _DWORD& dst_size ) 877 FX_BOOL _bmp_encode_image( bmp_compress_struct_p bmp_ptr, FX_LPBYTE& dst_buf, FX _DWORD& dst_size )
878 { 878 {
879 FX_DWORD head_size = sizeof(BmpFileHeader) + sizeof(BmpInfoHeader); 879 FX_DWORD head_size = sizeof(BmpFileHeader) + sizeof(BmpInfoHeader);
880 FX_DWORD pal_size = sizeof(FX_DWORD) * bmp_ptr->pal_num; 880 FX_DWORD pal_size = sizeof(FX_DWORD) * bmp_ptr->pal_num;
881 if (bmp_ptr->info_header.biClrUsed > 0 && bmp_ptr->info_header.biClrUsed < b mp_ptr->pal_num) { 881 if (bmp_ptr->info_header.biClrUsed > 0 && bmp_ptr->info_header.biClrUsed < b mp_ptr->pal_num) {
882 pal_size = sizeof(FX_DWORD) * bmp_ptr->info_header.biClrUsed; 882 pal_size = sizeof(FX_DWORD) * bmp_ptr->info_header.biClrUsed;
883 } 883 }
884 dst_size = head_size + sizeof(FX_DWORD) * bmp_ptr->pal_num; 884 dst_size = head_size + sizeof(FX_DWORD) * bmp_ptr->pal_num;
885 dst_buf = FX_TryAlloc(FX_BYTE, dst_size); 885 dst_buf = FX_TryAlloc(uint8_t, dst_size);
886 if (dst_buf == NULL) { 886 if (dst_buf == NULL) {
887 return FALSE; 887 return FALSE;
888 } 888 }
889 FXSYS_memset32(dst_buf, 0, dst_size); 889 FXSYS_memset32(dst_buf, 0, dst_size);
890 bmp_ptr->file_header.bfOffBits = head_size; 890 bmp_ptr->file_header.bfOffBits = head_size;
891 if (bmp_ptr->pal_ptr && pal_size) { 891 if (bmp_ptr->pal_ptr && pal_size) {
892 FXSYS_memcpy32(&dst_buf[head_size], bmp_ptr->pal_ptr, pal_size); 892 FXSYS_memcpy32(&dst_buf[head_size], bmp_ptr->pal_ptr, pal_size);
893 bmp_ptr->file_header.bfOffBits += pal_size; 893 bmp_ptr->file_header.bfOffBits += pal_size;
894 } 894 }
895 WriteInfoHeader(&bmp_ptr->info_header, dst_buf); 895 WriteInfoHeader(&bmp_ptr->info_header, dst_buf);
(...skipping 12 matching lines...) Expand all
908 case BMP_RLE4: 908 case BMP_RLE4:
909 _bmp_encode_rle4(bmp_ptr, dst_buf, dst_size); 909 _bmp_encode_rle4(bmp_ptr, dst_buf, dst_size);
910 break; 910 break;
911 default: 911 default:
912 ; 912 ;
913 } 913 }
914 bmp_ptr->file_header.bfSize = dst_size; 914 bmp_ptr->file_header.bfSize = dst_size;
915 WriteFileHeader(&bmp_ptr->file_header, dst_buf); 915 WriteFileHeader(&bmp_ptr->file_header, dst_buf);
916 return TRUE; 916 return TRUE;
917 } 917 }
OLDNEW
« no previous file with comments | « core/src/fxcodec/lbmp/fx_bmp.h ('k') | core/src/fxcodec/lgif/fx_gif.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698