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

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

Issue 1821043003: Remove FX_WORD in favor of uint16_t. (Closed) Base URL: https://pdfium.googlesource.com/pdfium.git@master
Patch Set: Use stdint.h directly, bitfield minefield. Created 4 years, 9 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/fxcodec/lbmp/fx_bmp.h ('k') | core/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 "core/fxcodec/lbmp/fx_bmp.h" 7 #include "core/fxcodec/lbmp/fx_bmp.h"
8 8
9 #include <algorithm> 9 #include <algorithm>
10 10
11 namespace { 11 namespace {
12 12
13 const size_t kBmpCoreHeaderSize = 12; 13 const size_t kBmpCoreHeaderSize = 12;
14 const size_t kBmpInfoHeaderSize = 40; 14 const size_t kBmpInfoHeaderSize = 40;
15 15
16 // TODO(thestig): Replace with FXDWORD_GET_LSBFIRST? 16 // TODO(thestig): Replace with FXDWORD_GET_LSBFIRST?
17 FX_DWORD GetDWord_LSBFirst(uint8_t* p) { 17 FX_DWORD GetDWord_LSBFirst(uint8_t* p) {
18 return p[0] | (p[1] << 8) | (p[2] << 16) | (p[3] << 24); 18 return p[0] | (p[1] << 8) | (p[2] << 16) | (p[3] << 24);
19 } 19 }
20 20
21 void SetDWord_LSBFirst(uint8_t* p, FX_DWORD v) { 21 void SetDWord_LSBFirst(uint8_t* p, FX_DWORD v) {
22 p[0] = (uint8_t)v; 22 p[0] = (uint8_t)v;
23 p[1] = (uint8_t)(v >> 8); 23 p[1] = (uint8_t)(v >> 8);
24 p[2] = (uint8_t)(v >> 16); 24 p[2] = (uint8_t)(v >> 16);
25 p[3] = (uint8_t)(v >> 24); 25 p[3] = (uint8_t)(v >> 24);
26 } 26 }
27 } // namespace 27 } // namespace
28 28
29 FX_WORD GetWord_LSBFirst(uint8_t* p) { 29 uint16_t GetWord_LSBFirst(uint8_t* p) {
30 return p[0] | (p[1] << 8); 30 return p[0] | (p[1] << 8);
31 } 31 }
32 void SetWord_LSBFirst(uint8_t* p, FX_WORD v) { 32 void SetWord_LSBFirst(uint8_t* p, uint16_t v) {
33 p[0] = (uint8_t)v; 33 p[0] = (uint8_t)v;
34 p[1] = (uint8_t)(v >> 8); 34 p[1] = (uint8_t)(v >> 8);
35 } 35 }
36 void bmp_error(bmp_decompress_struct_p bmp_ptr, const FX_CHAR* err_msg) { 36 void bmp_error(bmp_decompress_struct_p bmp_ptr, const FX_CHAR* err_msg) {
37 if (bmp_ptr && bmp_ptr->bmp_error_fn) { 37 if (bmp_ptr && bmp_ptr->bmp_error_fn) {
38 bmp_ptr->bmp_error_fn(bmp_ptr, err_msg); 38 bmp_ptr->bmp_error_fn(bmp_ptr, err_msg);
39 } 39 }
40 } 40 }
41 bmp_decompress_struct_p bmp_create_decompress() { 41 bmp_decompress_struct_p bmp_create_decompress() {
42 bmp_decompress_struct_p bmp_ptr = FX_Alloc(bmp_decompress_struct, 1); 42 bmp_decompress_struct_p bmp_ptr = FX_Alloc(bmp_decompress_struct, 1);
(...skipping 95 matching lines...) Expand 10 before | Expand all | Expand 10 after
138 } break; 138 } break;
139 default: { 139 default: {
140 if (bmp_ptr->img_ifh_size > 140 if (bmp_ptr->img_ifh_size >
141 std::min(kBmpInfoHeaderSize, sizeof(BmpInfoHeader))) { 141 std::min(kBmpInfoHeaderSize, sizeof(BmpInfoHeader))) {
142 BmpInfoHeaderPtr bmp_info_header_ptr = NULL; 142 BmpInfoHeaderPtr bmp_info_header_ptr = NULL;
143 if (bmp_read_data(bmp_ptr, (uint8_t**)&bmp_info_header_ptr, 143 if (bmp_read_data(bmp_ptr, (uint8_t**)&bmp_info_header_ptr,
144 bmp_ptr->img_ifh_size) == NULL) { 144 bmp_ptr->img_ifh_size) == NULL) {
145 bmp_ptr->skip_size = skip_size_org; 145 bmp_ptr->skip_size = skip_size_org;
146 return 2; 146 return 2;
147 } 147 }
148 FX_WORD biPlanes; 148 uint16_t biPlanes;
149 bmp_ptr->width = 149 bmp_ptr->width =
150 GetDWord_LSBFirst((uint8_t*)&bmp_info_header_ptr->biWidth); 150 GetDWord_LSBFirst((uint8_t*)&bmp_info_header_ptr->biWidth);
151 bmp_ptr->height = 151 bmp_ptr->height =
152 GetDWord_LSBFirst((uint8_t*)&bmp_info_header_ptr->biHeight); 152 GetDWord_LSBFirst((uint8_t*)&bmp_info_header_ptr->biHeight);
153 bmp_ptr->bitCounts = 153 bmp_ptr->bitCounts =
154 GetWord_LSBFirst((uint8_t*)&bmp_info_header_ptr->biBitCount); 154 GetWord_LSBFirst((uint8_t*)&bmp_info_header_ptr->biBitCount);
155 bmp_ptr->compress_flag = 155 bmp_ptr->compress_flag =
156 GetDWord_LSBFirst((uint8_t*)&bmp_info_header_ptr->biCompression); 156 GetDWord_LSBFirst((uint8_t*)&bmp_info_header_ptr->biCompression);
157 bmp_ptr->color_used = 157 bmp_ptr->color_used =
158 GetDWord_LSBFirst((uint8_t*)&bmp_info_header_ptr->biClrUsed); 158 GetDWord_LSBFirst((uint8_t*)&bmp_info_header_ptr->biClrUsed);
(...skipping 174 matching lines...) Expand 10 before | Expand all | Expand 10 after
333 *row_buf++ = des_buf[col >> 3] & (0x80 >> (col % 8)) ? 0x01 : 0x00; 333 *row_buf++ = des_buf[col >> 3] & (0x80 >> (col % 8)) ? 0x01 : 0x00;
334 } 334 }
335 } break; 335 } break;
336 case 4: { 336 case 4: {
337 for (int32_t col = 0; col < bmp_ptr->width; col++) { 337 for (int32_t col = 0; col < bmp_ptr->width; col++) {
338 *row_buf++ = (col & 0x01) ? (des_buf[col >> 1] & 0x0F) 338 *row_buf++ = (col & 0x01) ? (des_buf[col >> 1] & 0x0F)
339 : ((des_buf[col >> 1] & 0xF0) >> 4); 339 : ((des_buf[col >> 1] & 0xF0) >> 4);
340 } 340 }
341 } break; 341 } break;
342 case 16: { 342 case 16: {
343 FX_WORD* buf = (FX_WORD*)des_buf; 343 uint16_t* buf = (uint16_t*)des_buf;
344 uint8_t blue_bits = 0; 344 uint8_t blue_bits = 0;
345 uint8_t green_bits = 0; 345 uint8_t green_bits = 0;
346 uint8_t red_bits = 0; 346 uint8_t red_bits = 0;
347 for (int32_t i = 0; i < 16; i++) { 347 for (int32_t i = 0; i < 16; i++) {
348 if ((bmp_ptr->mask_blue >> i) & 0x01) { 348 if ((bmp_ptr->mask_blue >> i) & 0x01) {
349 blue_bits++; 349 blue_bits++;
350 } 350 }
351 if ((bmp_ptr->mask_green >> i) & 0x01) { 351 if ((bmp_ptr->mask_green >> i) & 0x01) {
352 green_bits++; 352 green_bits++;
353 } 353 }
(...skipping 190 matching lines...) Expand 10 before | Expand all | Expand 10 after
544 while (bmp_ptr->row_num < bmp_row_num_next) { 544 while (bmp_ptr->row_num < bmp_row_num_next) {
545 FXSYS_memset(bmp_ptr->out_row_buffer, 0, bmp_ptr->out_row_bytes); 545 FXSYS_memset(bmp_ptr->out_row_buffer, 0, bmp_ptr->out_row_bytes);
546 bmp_ptr->bmp_get_row_fn( 546 bmp_ptr->bmp_get_row_fn(
547 bmp_ptr, bmp_ptr->imgTB_flag 547 bmp_ptr, bmp_ptr->imgTB_flag
548 ? bmp_ptr->row_num++ 548 ? bmp_ptr->row_num++
549 : (bmp_ptr->height - 1 - bmp_ptr->row_num++), 549 : (bmp_ptr->height - 1 - bmp_ptr->row_num++),
550 bmp_ptr->out_row_buffer); 550 bmp_ptr->out_row_buffer);
551 } 551 }
552 } break; 552 } break;
553 default: { 553 default: {
554 uint8_t size = (uint8_t)(((FX_WORD)(*first_byte_ptr) + 1) >> 1); 554 uint8_t size = (uint8_t)(((uint16_t)(*first_byte_ptr) + 1) >> 1);
555 if ((int32_t)*first_byte_ptr >= 555 if ((int32_t)*first_byte_ptr >=
556 bmp_ptr->out_row_bytes - bmp_ptr->col_num) { 556 bmp_ptr->out_row_bytes - bmp_ptr->col_num) {
557 if (size + (bmp_ptr->col_num >> 1) > bmp_ptr->src_row_bytes) { 557 if (size + (bmp_ptr->col_num >> 1) > bmp_ptr->src_row_bytes) {
558 bmp_error(bmp_ptr, "The Bmp File Is Corrupt"); 558 bmp_error(bmp_ptr, "The Bmp File Is Corrupt");
559 return 0; 559 return 0;
560 } 560 }
561 *first_byte_ptr = bmp_ptr->out_row_bytes - bmp_ptr->col_num - 1; 561 *first_byte_ptr = bmp_ptr->out_row_bytes - bmp_ptr->col_num - 1;
562 } 562 }
563 if (bmp_read_data(bmp_ptr, &second_byte_ptr, 563 if (bmp_read_data(bmp_ptr, &second_byte_ptr,
564 size & 1 ? size + 1 : size) == NULL) { 564 size & 1 ? size + 1 : size) == NULL) {
(...skipping 12 matching lines...) Expand all
577 } 577 }
578 } 578 }
579 } break; 579 } break;
580 default: { 580 default: {
581 if (bmp_read_data(bmp_ptr, &second_byte_ptr, 1) == NULL) { 581 if (bmp_read_data(bmp_ptr, &second_byte_ptr, 1) == NULL) {
582 bmp_ptr->skip_size = skip_size_org; 582 bmp_ptr->skip_size = skip_size_org;
583 return 2; 583 return 2;
584 } 584 }
585 if ((int32_t)*first_byte_ptr > 585 if ((int32_t)*first_byte_ptr >
586 bmp_ptr->out_row_bytes - bmp_ptr->col_num) { 586 bmp_ptr->out_row_bytes - bmp_ptr->col_num) {
587 uint8_t size = (uint8_t)(((FX_WORD)(*first_byte_ptr) + 1) >> 1); 587 uint8_t size = (uint8_t)(((uint16_t)(*first_byte_ptr) + 1) >> 1);
588 if (size + (bmp_ptr->col_num >> 1) > bmp_ptr->src_row_bytes) { 588 if (size + (bmp_ptr->col_num >> 1) > bmp_ptr->src_row_bytes) {
589 bmp_error(bmp_ptr, "The Bmp File Is Corrupt"); 589 bmp_error(bmp_ptr, "The Bmp File Is Corrupt");
590 return 0; 590 return 0;
591 } 591 }
592 *first_byte_ptr = bmp_ptr->out_row_bytes - bmp_ptr->col_num - 1; 592 *first_byte_ptr = bmp_ptr->out_row_bytes - bmp_ptr->col_num - 1;
593 } 593 }
594 for (uint8_t i = 0; i < *first_byte_ptr; i++) { 594 for (uint8_t i = 0; i < *first_byte_ptr; i++) {
595 if (i & 0x01) { 595 if (i & 0x01) {
596 *(bmp_ptr->out_row_buffer + bmp_ptr->col_num++) = 596 *(bmp_ptr->out_row_buffer + bmp_ptr->col_num++) =
597 (*second_byte_ptr & 0x0F); 597 (*second_byte_ptr & 0x0F);
(...skipping 341 matching lines...) Expand 10 before | Expand all | Expand 10 after
939 case BMP_RLE4: 939 case BMP_RLE4:
940 bmp_encode_rle4(bmp_ptr, dst_buf, dst_size); 940 bmp_encode_rle4(bmp_ptr, dst_buf, dst_size);
941 break; 941 break;
942 default: 942 default:
943 break; 943 break;
944 } 944 }
945 bmp_ptr->file_header.bfSize = dst_size; 945 bmp_ptr->file_header.bfSize = dst_size;
946 WriteFileHeader(&bmp_ptr->file_header, dst_buf); 946 WriteFileHeader(&bmp_ptr->file_header, dst_buf);
947 return TRUE; 947 return TRUE;
948 } 948 }
OLDNEW
« no previous file with comments | « core/fxcodec/lbmp/fx_bmp.h ('k') | core/fxcodec/lgif/fx_gif.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698