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

Side by Side Diff: core/fxcodec/codec/fx_codec_flate.cpp

Issue 2477443002: Remove FX_BOOL from core (Closed)
Patch Set: Created 4 years, 1 month 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/codec/fx_codec_fax.cpp ('k') | core/fxcodec/codec/fx_codec_gif.cpp » ('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/codec/codec_int.h" 7 #include "core/fxcodec/codec/codec_int.h"
8 8
9 #include <algorithm> 9 #include <algorithm>
10 #include <memory> 10 #include <memory>
(...skipping 76 matching lines...) Expand 10 before | Expand all | Expand 10 after
87 } // extern "C" 87 } // extern "C"
88 88
89 namespace { 89 namespace {
90 90
91 class CLZWDecoder { 91 class CLZWDecoder {
92 public: 92 public:
93 int Decode(uint8_t* output, 93 int Decode(uint8_t* output,
94 uint32_t& outlen, 94 uint32_t& outlen,
95 const uint8_t* input, 95 const uint8_t* input,
96 uint32_t& size, 96 uint32_t& size,
97 FX_BOOL bEarlyChange); 97 bool bEarlyChange);
98 98
99 private: 99 private:
100 void AddCode(uint32_t prefix_code, uint8_t append_char); 100 void AddCode(uint32_t prefix_code, uint8_t append_char);
101 void DecodeString(uint32_t code); 101 void DecodeString(uint32_t code);
102 102
103 uint32_t m_InPos; 103 uint32_t m_InPos;
104 uint32_t m_OutPos; 104 uint32_t m_OutPos;
105 uint8_t* m_pOutput; 105 uint8_t* m_pOutput;
106 const uint8_t* m_pInput; 106 const uint8_t* m_pInput;
107 FX_BOOL m_Early; 107 bool m_Early;
108 uint32_t m_CodeArray[5021]; 108 uint32_t m_CodeArray[5021];
109 uint32_t m_nCodes; 109 uint32_t m_nCodes;
110 uint8_t m_DecodeStack[4000]; 110 uint8_t m_DecodeStack[4000];
111 uint32_t m_StackLen; 111 uint32_t m_StackLen;
112 int m_CodeLen; 112 int m_CodeLen;
113 }; 113 };
114 114
115 void CLZWDecoder::AddCode(uint32_t prefix_code, uint8_t append_char) { 115 void CLZWDecoder::AddCode(uint32_t prefix_code, uint8_t append_char) {
116 if (m_nCodes + m_Early == 4094) { 116 if (m_nCodes + m_Early == 4094) {
117 return; 117 return;
(...skipping 22 matching lines...) Expand all
140 } 140 }
141 if (m_StackLen >= sizeof(m_DecodeStack)) { 141 if (m_StackLen >= sizeof(m_DecodeStack)) {
142 return; 142 return;
143 } 143 }
144 m_DecodeStack[m_StackLen++] = (uint8_t)code; 144 m_DecodeStack[m_StackLen++] = (uint8_t)code;
145 } 145 }
146 int CLZWDecoder::Decode(uint8_t* dest_buf, 146 int CLZWDecoder::Decode(uint8_t* dest_buf,
147 uint32_t& dest_size, 147 uint32_t& dest_size,
148 const uint8_t* src_buf, 148 const uint8_t* src_buf,
149 uint32_t& src_size, 149 uint32_t& src_size,
150 FX_BOOL bEarlyChange) { 150 bool bEarlyChange) {
151 m_CodeLen = 9; 151 m_CodeLen = 9;
152 m_InPos = 0; 152 m_InPos = 0;
153 m_OutPos = 0; 153 m_OutPos = 0;
154 m_pInput = src_buf; 154 m_pInput = src_buf;
155 m_pOutput = dest_buf; 155 m_pOutput = dest_buf;
156 m_Early = bEarlyChange ? 1 : 0; 156 m_Early = bEarlyChange ? 1 : 0;
157 m_nCodes = 0; 157 m_nCodes = 0;
158 uint32_t old_code = (uint32_t)-1; 158 uint32_t old_code = (uint32_t)-1;
159 uint8_t last_char = 0; 159 uint8_t last_char = 0;
160 while (1) { 160 while (1) {
(...skipping 174 matching lines...) Expand 10 before | Expand all | Expand 10 after
335 pDestData[byte] = raw_byte + PathPredictor(left, up, upper_left); 335 pDestData[byte] = raw_byte + PathPredictor(left, up, upper_left);
336 break; 336 break;
337 } 337 }
338 default: 338 default:
339 pDestData[byte] = raw_byte; 339 pDestData[byte] = raw_byte;
340 break; 340 break;
341 } 341 }
342 } 342 }
343 } 343 }
344 344
345 FX_BOOL PNG_Predictor(uint8_t*& data_buf, 345 bool PNG_Predictor(uint8_t*& data_buf,
346 uint32_t& data_size, 346 uint32_t& data_size,
347 int Colors, 347 int Colors,
348 int BitsPerComponent, 348 int BitsPerComponent,
349 int Columns) { 349 int Columns) {
350 const int BytesPerPixel = (Colors * BitsPerComponent + 7) / 8; 350 const int BytesPerPixel = (Colors * BitsPerComponent + 7) / 8;
351 const int row_size = (Colors * BitsPerComponent * Columns + 7) / 8; 351 const int row_size = (Colors * BitsPerComponent * Columns + 7) / 8;
352 if (row_size <= 0) 352 if (row_size <= 0)
353 return FALSE; 353 return false;
354 const int row_count = (data_size + row_size) / (row_size + 1); 354 const int row_count = (data_size + row_size) / (row_size + 1);
355 if (row_count <= 0) 355 if (row_count <= 0)
356 return FALSE; 356 return false;
357 const int last_row_size = data_size % (row_size + 1); 357 const int last_row_size = data_size % (row_size + 1);
358 uint8_t* dest_buf = FX_Alloc2D(uint8_t, row_size, row_count); 358 uint8_t* dest_buf = FX_Alloc2D(uint8_t, row_size, row_count);
359 int byte_cnt = 0; 359 int byte_cnt = 0;
360 uint8_t* pSrcData = data_buf; 360 uint8_t* pSrcData = data_buf;
361 uint8_t* pDestData = dest_buf; 361 uint8_t* pDestData = dest_buf;
362 for (int row = 0; row < row_count; row++) { 362 for (int row = 0; row < row_count; row++) {
363 uint8_t tag = pSrcData[0]; 363 uint8_t tag = pSrcData[0];
364 byte_cnt++; 364 byte_cnt++;
365 if (tag == 0) { 365 if (tag == 0) {
366 int move_size = row_size; 366 int move_size = row_size;
(...skipping 59 matching lines...) Expand 10 before | Expand all | Expand 10 after
426 } 426 }
427 byte_cnt++; 427 byte_cnt++;
428 } 428 }
429 pSrcData += row_size + 1; 429 pSrcData += row_size + 1;
430 pDestData += row_size; 430 pDestData += row_size;
431 } 431 }
432 FX_Free(data_buf); 432 FX_Free(data_buf);
433 data_buf = dest_buf; 433 data_buf = dest_buf;
434 data_size = row_size * row_count - 434 data_size = row_size * row_count -
435 (last_row_size > 0 ? (row_size + 1 - last_row_size) : 0); 435 (last_row_size > 0 ? (row_size + 1 - last_row_size) : 0);
436 return TRUE; 436 return true;
437 } 437 }
438 438
439 void TIFF_PredictLine(uint8_t* dest_buf, 439 void TIFF_PredictLine(uint8_t* dest_buf,
440 uint32_t row_size, 440 uint32_t row_size,
441 int BitsPerComponent, 441 int BitsPerComponent,
442 int Colors, 442 int Colors,
443 int Columns) { 443 int Columns) {
444 if (BitsPerComponent == 1) { 444 if (BitsPerComponent == 1) {
445 int row_bits = std::min(BitsPerComponent * Colors * Columns, 445 int row_bits = std::min(BitsPerComponent * Colors * Columns,
446 pdfium::base::checked_cast<int>(row_size * 8)); 446 pdfium::base::checked_cast<int>(row_size * 8));
(...skipping 22 matching lines...) Expand all
469 dest_buf[i] = pixel >> 8; 469 dest_buf[i] = pixel >> 8;
470 dest_buf[i + 1] = (uint8_t)pixel; 470 dest_buf[i + 1] = (uint8_t)pixel;
471 } 471 }
472 } else { 472 } else {
473 for (uint32_t i = BytesPerPixel; i < row_size; i++) { 473 for (uint32_t i = BytesPerPixel; i < row_size; i++) {
474 dest_buf[i] += dest_buf[i - BytesPerPixel]; 474 dest_buf[i] += dest_buf[i - BytesPerPixel];
475 } 475 }
476 } 476 }
477 } 477 }
478 478
479 FX_BOOL TIFF_Predictor(uint8_t*& data_buf, 479 bool TIFF_Predictor(uint8_t*& data_buf,
480 uint32_t& data_size, 480 uint32_t& data_size,
481 int Colors, 481 int Colors,
482 int BitsPerComponent, 482 int BitsPerComponent,
483 int Columns) { 483 int Columns) {
484 int row_size = (Colors * BitsPerComponent * Columns + 7) / 8; 484 int row_size = (Colors * BitsPerComponent * Columns + 7) / 8;
485 if (row_size == 0) 485 if (row_size == 0)
486 return FALSE; 486 return false;
487 const int row_count = (data_size + row_size - 1) / row_size; 487 const int row_count = (data_size + row_size - 1) / row_size;
488 const int last_row_size = data_size % row_size; 488 const int last_row_size = data_size % row_size;
489 for (int row = 0; row < row_count; row++) { 489 for (int row = 0; row < row_count; row++) {
490 uint8_t* scan_line = data_buf + row * row_size; 490 uint8_t* scan_line = data_buf + row * row_size;
491 if ((row + 1) * row_size > (int)data_size) { 491 if ((row + 1) * row_size > (int)data_size) {
492 row_size = last_row_size; 492 row_size = last_row_size;
493 } 493 }
494 TIFF_PredictLine(scan_line, row_size, BitsPerComponent, Colors, Columns); 494 TIFF_PredictLine(scan_line, row_size, BitsPerComponent, Colors, Columns);
495 } 495 }
496 return TRUE; 496 return true;
497 } 497 }
498 498
499 void FlateUncompress(const uint8_t* src_buf, 499 void FlateUncompress(const uint8_t* src_buf,
500 uint32_t src_size, 500 uint32_t src_size,
501 uint32_t orig_size, 501 uint32_t orig_size,
502 uint8_t*& dest_buf, 502 uint8_t*& dest_buf,
503 uint32_t& dest_size, 503 uint32_t& dest_size,
504 uint32_t& offset) { 504 uint32_t& offset) {
505 uint32_t guess_size = orig_size ? orig_size : src_size * 2; 505 uint32_t guess_size = orig_size ? orig_size : src_size * 2;
506 const uint32_t kStepSize = 10240; 506 const uint32_t kStepSize = 10240;
(...skipping 113 matching lines...) Expand 10 before | Expand all | Expand 10 after
620 int width, 620 int width,
621 int height, 621 int height,
622 int nComps, 622 int nComps,
623 int bpc, 623 int bpc,
624 int predictor, 624 int predictor,
625 int Colors, 625 int Colors,
626 int BitsPerComponent, 626 int BitsPerComponent,
627 int Columns); 627 int Columns);
628 628
629 // CCodec_ScanlineDecoder 629 // CCodec_ScanlineDecoder
630 FX_BOOL v_Rewind() override; 630 bool v_Rewind() override;
631 uint8_t* v_GetNextLine() override; 631 uint8_t* v_GetNextLine() override;
632 uint32_t GetSrcOffset() override; 632 uint32_t GetSrcOffset() override;
633 633
634 void* m_pFlate; 634 void* m_pFlate;
635 const uint8_t* m_SrcBuf; 635 const uint8_t* m_SrcBuf;
636 uint32_t m_SrcSize; 636 uint32_t m_SrcSize;
637 uint8_t* m_pScanline; 637 uint8_t* m_pScanline;
638 uint8_t* m_pLastLine; 638 uint8_t* m_pLastLine;
639 uint8_t* m_pPredictBuffer; 639 uint8_t* m_pPredictBuffer;
640 uint8_t* m_pPredictRaw; 640 uint8_t* m_pPredictRaw;
(...skipping 59 matching lines...) Expand 10 before | Expand all | Expand 10 after
700 m_PredictPitch = 700 m_PredictPitch =
701 (static_cast<uint32_t>(m_BitsPerComponent) * m_Colors * m_Columns + 701 (static_cast<uint32_t>(m_BitsPerComponent) * m_Colors * m_Columns +
702 7) / 702 7) /
703 8; 703 8;
704 m_pLastLine = FX_Alloc(uint8_t, m_PredictPitch); 704 m_pLastLine = FX_Alloc(uint8_t, m_PredictPitch);
705 m_pPredictRaw = FX_Alloc(uint8_t, m_PredictPitch + 1); 705 m_pPredictRaw = FX_Alloc(uint8_t, m_PredictPitch + 1);
706 m_pPredictBuffer = FX_Alloc(uint8_t, m_PredictPitch); 706 m_pPredictBuffer = FX_Alloc(uint8_t, m_PredictPitch);
707 } 707 }
708 } 708 }
709 } 709 }
710 FX_BOOL CCodec_FlateScanlineDecoder::v_Rewind() { 710 bool CCodec_FlateScanlineDecoder::v_Rewind() {
711 if (m_pFlate) { 711 if (m_pFlate) {
712 FPDFAPI_FlateEnd(m_pFlate); 712 FPDFAPI_FlateEnd(m_pFlate);
713 } 713 }
714 m_pFlate = FPDFAPI_FlateInit(my_alloc_func, my_free_func); 714 m_pFlate = FPDFAPI_FlateInit(my_alloc_func, my_free_func);
715 if (!m_pFlate) { 715 if (!m_pFlate) {
716 return FALSE; 716 return false;
717 } 717 }
718 FPDFAPI_FlateInput(m_pFlate, m_SrcBuf, m_SrcSize); 718 FPDFAPI_FlateInput(m_pFlate, m_SrcBuf, m_SrcSize);
719 m_LeftOver = 0; 719 m_LeftOver = 0;
720 return TRUE; 720 return true;
721 } 721 }
722 uint8_t* CCodec_FlateScanlineDecoder::v_GetNextLine() { 722 uint8_t* CCodec_FlateScanlineDecoder::v_GetNextLine() {
723 if (m_Predictor) { 723 if (m_Predictor) {
724 if (m_Pitch == m_PredictPitch) { 724 if (m_Pitch == m_PredictPitch) {
725 if (m_Predictor == 2) { 725 if (m_Predictor == 2) {
726 FPDFAPI_FlateOutput(m_pFlate, m_pPredictRaw, m_PredictPitch + 1); 726 FPDFAPI_FlateOutput(m_pFlate, m_pPredictRaw, m_PredictPitch + 1);
727 PNG_PredictLine(m_pScanline, m_pPredictRaw, m_pLastLine, 727 PNG_PredictLine(m_pScanline, m_pPredictRaw, m_pLastLine,
728 m_BitsPerComponent, m_Colors, m_Columns); 728 m_BitsPerComponent, m_Colors, m_Columns);
729 FXSYS_memcpy(m_pLastLine, m_pScanline, m_PredictPitch); 729 FXSYS_memcpy(m_pLastLine, m_pScanline, m_PredictPitch);
730 } else { 730 } else {
(...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after
780 int bpc, 780 int bpc,
781 int predictor, 781 int predictor,
782 int Colors, 782 int Colors,
783 int BitsPerComponent, 783 int BitsPerComponent,
784 int Columns) { 784 int Columns) {
785 CCodec_FlateScanlineDecoder* pDecoder = new CCodec_FlateScanlineDecoder; 785 CCodec_FlateScanlineDecoder* pDecoder = new CCodec_FlateScanlineDecoder;
786 pDecoder->Create(src_buf, src_size, width, height, nComps, bpc, predictor, 786 pDecoder->Create(src_buf, src_size, width, height, nComps, bpc, predictor,
787 Colors, BitsPerComponent, Columns); 787 Colors, BitsPerComponent, Columns);
788 return pDecoder; 788 return pDecoder;
789 } 789 }
790 uint32_t CCodec_FlateModule::FlateOrLZWDecode(FX_BOOL bLZW, 790 uint32_t CCodec_FlateModule::FlateOrLZWDecode(bool bLZW,
791 const uint8_t* src_buf, 791 const uint8_t* src_buf,
792 uint32_t src_size, 792 uint32_t src_size,
793 FX_BOOL bEarlyChange, 793 bool bEarlyChange,
794 int predictor, 794 int predictor,
795 int Colors, 795 int Colors,
796 int BitsPerComponent, 796 int BitsPerComponent,
797 int Columns, 797 int Columns,
798 uint32_t estimated_size, 798 uint32_t estimated_size,
799 uint8_t*& dest_buf, 799 uint8_t*& dest_buf,
800 uint32_t& dest_size) { 800 uint32_t& dest_size) {
801 dest_buf = nullptr; 801 dest_buf = nullptr;
802 uint32_t offset = 0; 802 uint32_t offset = 0;
803 int predictor_type = 0; 803 int predictor_type = 0;
(...skipping 21 matching lines...) Expand all
825 dest_buf[dest_size] = '\0'; 825 dest_buf[dest_size] = '\0';
826 decoder->Decode(dest_buf, dest_size, src_buf, offset, bEarlyChange); 826 decoder->Decode(dest_buf, dest_size, src_buf, offset, bEarlyChange);
827 } 827 }
828 } else { 828 } else {
829 FlateUncompress(src_buf, src_size, estimated_size, dest_buf, dest_size, 829 FlateUncompress(src_buf, src_size, estimated_size, dest_buf, dest_size,
830 offset); 830 offset);
831 } 831 }
832 if (predictor_type == 0) { 832 if (predictor_type == 0) {
833 return offset; 833 return offset;
834 } 834 }
835 FX_BOOL ret = TRUE; 835 bool ret = true;
836 if (predictor_type == 2) { 836 if (predictor_type == 2) {
837 ret = PNG_Predictor(dest_buf, dest_size, Colors, BitsPerComponent, Columns); 837 ret = PNG_Predictor(dest_buf, dest_size, Colors, BitsPerComponent, Columns);
838 } else if (predictor_type == 1) { 838 } else if (predictor_type == 1) {
839 ret = 839 ret =
840 TIFF_Predictor(dest_buf, dest_size, Colors, BitsPerComponent, Columns); 840 TIFF_Predictor(dest_buf, dest_size, Colors, BitsPerComponent, Columns);
841 } 841 }
842 return ret ? offset : FX_INVALID_OFFSET; 842 return ret ? offset : FX_INVALID_OFFSET;
843 } 843 }
844 844
845 bool CCodec_FlateModule::Encode(const uint8_t* src_buf, 845 bool CCodec_FlateModule::Encode(const uint8_t* src_buf,
(...skipping 14 matching lines...) Expand all
860 uint32_t src_size, 860 uint32_t src_size,
861 uint8_t** dest_buf, 861 uint8_t** dest_buf,
862 uint32_t* dest_size) { 862 uint32_t* dest_size) {
863 uint8_t* pSrcBuf = FX_Alloc(uint8_t, src_size); 863 uint8_t* pSrcBuf = FX_Alloc(uint8_t, src_size);
864 FXSYS_memcpy(pSrcBuf, src_buf, src_size); 864 FXSYS_memcpy(pSrcBuf, src_buf, src_size);
865 PNG_PredictorEncode(&pSrcBuf, &src_size); 865 PNG_PredictorEncode(&pSrcBuf, &src_size);
866 bool ret = Encode(pSrcBuf, src_size, dest_buf, dest_size); 866 bool ret = Encode(pSrcBuf, src_size, dest_buf, dest_size);
867 FX_Free(pSrcBuf); 867 FX_Free(pSrcBuf);
868 return ret; 868 return ret;
869 } 869 }
OLDNEW
« no previous file with comments | « core/fxcodec/codec/fx_codec_fax.cpp ('k') | core/fxcodec/codec/fx_codec_gif.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698