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

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

Issue 1252613002: FX_BOOL considered harmful. (Closed) Base URL: https://pdfium.googlesource.com/pdfium.git@master
Patch Set: Manual edits. Created 5 years, 5 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/codec/fx_codec_fax.cpp ('k') | core/src/fxcodec/codec/fx_codec_icc.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 "../../../../third_party/base/nonstd_unique_ptr.h" 7 #include "../../../../third_party/base/nonstd_unique_ptr.h"
8 #include "../../../../third_party/zlib_v128/zlib.h" 8 #include "../../../../third_party/zlib_v128/zlib.h"
9 #include "../../../include/fxcodec/fx_codec.h" 9 #include "../../../include/fxcodec/fx_codec.h"
10 #include "../../../include/fxcodec/fx_codec_flate.h" 10 #include "../../../include/fxcodec/fx_codec_flate.h"
(...skipping 66 matching lines...) Expand 10 before | Expand all | Expand 10 after
77 void FPDFAPI_FlateEnd(void* context) 77 void FPDFAPI_FlateEnd(void* context)
78 { 78 {
79 inflateEnd((z_stream*)context); 79 inflateEnd((z_stream*)context);
80 ((z_stream*)context)->zfree(0, context); 80 ((z_stream*)context)->zfree(0, context);
81 } 81 }
82 } // extern "C" 82 } // extern "C"
83 83
84 class CLZWDecoder 84 class CLZWDecoder
85 { 85 {
86 public: 86 public:
87 FX_BOOL Decode(uint8_t* output, FX_DWORD& outlen, const uint8_t* input, FX_D WORD& size, FX_BOOL bEarlyChange); 87 int Decode(uint8_t* output, FX_DWORD& outlen, const uint8_t* input, FX_DWORD & size, bool bEarlyChange);
88
88 private: 89 private:
90 void AddCode(FX_DWORD prefix_code, uint8_t append_char);
91 void DecodeString(FX_DWORD code);
92
89 FX_DWORD m_InPos; 93 FX_DWORD m_InPos;
90 FX_DWORD m_OutPos; 94 FX_DWORD m_OutPos;
91 uint8_t* m_pOutput; 95 uint8_t* m_pOutput;
92 const uint8_t* m_pInput; 96 const uint8_t* m_pInput;
93 FX_BOOL» » m_Early; 97 bool» » m_Early;
94 void» » AddCode(FX_DWORD prefix_code, uint8_t append_char);
95 FX_DWORD m_CodeArray[5021]; 98 FX_DWORD m_CodeArray[5021];
96 FX_DWORD m_nCodes; 99 FX_DWORD m_nCodes;
97 uint8_t m_DecodeStack[4000]; 100 uint8_t m_DecodeStack[4000];
98 FX_DWORD m_StackLen; 101 FX_DWORD m_StackLen;
99 void DecodeString(FX_DWORD code);
100 int m_CodeLen; 102 int m_CodeLen;
101 }; 103 };
102 void CLZWDecoder::AddCode(FX_DWORD prefix_code, uint8_t append_char) 104 void CLZWDecoder::AddCode(FX_DWORD prefix_code, uint8_t append_char)
103 { 105 {
104 if (m_nCodes + m_Early == 4094) { 106 if (m_nCodes + m_Early == 4094) {
105 return; 107 return;
106 } 108 }
107 m_CodeArray[m_nCodes ++] = (prefix_code << 16) | append_char; 109 m_CodeArray[m_nCodes ++] = (prefix_code << 16) | append_char;
108 if (m_nCodes + m_Early == 512 - 258) { 110 if (m_nCodes + m_Early == 512 - 258) {
109 m_CodeLen = 10; 111 m_CodeLen = 10;
(...skipping 15 matching lines...) Expand all
125 return; 127 return;
126 } 128 }
127 m_DecodeStack[m_StackLen++] = (uint8_t)data; 129 m_DecodeStack[m_StackLen++] = (uint8_t)data;
128 code = data >> 16; 130 code = data >> 16;
129 } 131 }
130 if (m_StackLen >= sizeof(m_DecodeStack)) { 132 if (m_StackLen >= sizeof(m_DecodeStack)) {
131 return; 133 return;
132 } 134 }
133 m_DecodeStack[m_StackLen++] = (uint8_t)code; 135 m_DecodeStack[m_StackLen++] = (uint8_t)code;
134 } 136 }
135 int CLZWDecoder::Decode(uint8_t* dest_buf, FX_DWORD& dest_size, const uint8_t* s rc_buf, FX_DWORD& src_size, FX_BOOL bEarlyChange) 137 int CLZWDecoder::Decode(uint8_t* dest_buf, FX_DWORD& dest_size, const uint8_t* s rc_buf, FX_DWORD& src_size, bool bEarlyChange)
136 { 138 {
137 m_CodeLen = 9; 139 m_CodeLen = 9;
138 m_InPos = 0; 140 m_InPos = 0;
139 m_OutPos = 0; 141 m_OutPos = 0;
140 m_pInput = src_buf; 142 m_pInput = src_buf;
141 m_pOutput = dest_buf; 143 m_pOutput = dest_buf;
142 m_Early = bEarlyChange ? 1 : 0; 144 m_Early = bEarlyChange ? 1 : 0;
143 m_nCodes = 0; 145 m_nCodes = 0;
144 FX_DWORD old_code = (FX_DWORD) - 1; 146 FX_DWORD old_code = (FX_DWORD) - 1;
145 uint8_t last_char; 147 uint8_t last_char;
(...skipping 83 matching lines...) Expand 10 before | Expand all | Expand 10 after
229 int pb = FXSYS_abs(p - b); 231 int pb = FXSYS_abs(p - b);
230 int pc = FXSYS_abs(p - c); 232 int pc = FXSYS_abs(p - c);
231 if (pa <= pb && pa <= pc) { 233 if (pa <= pb && pa <= pc) {
232 return (uint8_t)a; 234 return (uint8_t)a;
233 } 235 }
234 if (pb <= pc) { 236 if (pb <= pc) {
235 return (uint8_t)b; 237 return (uint8_t)b;
236 } 238 }
237 return (uint8_t)c; 239 return (uint8_t)c;
238 } 240 }
239 static FX_BOOL PNG_PredictorEncode(uint8_t*& data_buf, FX_DWORD& data_size, 241 static bool PNG_PredictorEncode(uint8_t*& data_buf, FX_DWORD& data_size,
240 int predictor, int Colors, 242 int predictor, int Colors,
241 int BitsPerComponent, int Columns) 243 int BitsPerComponent, int Columns)
242 { 244 {
243 const int BytesPerPixel = (Colors * BitsPerComponent + 7) / 8; 245 const int BytesPerPixel = (Colors * BitsPerComponent + 7) / 8;
244 const int row_size = (Colors * BitsPerComponent * Columns + 7) / 8; 246 const int row_size = (Colors * BitsPerComponent * Columns + 7) / 8;
245 if (row_size <= 0) 247 if (row_size <= 0)
246 return FALSE; 248 return false;
247 const int row_count = (data_size + row_size - 1) / row_size; 249 const int row_count = (data_size + row_size - 1) / row_size;
248 const int last_row_size = data_size % row_size; 250 const int last_row_size = data_size % row_size;
249 uint8_t* dest_buf = FX_Alloc2D(uint8_t, row_size + 1, row_count); 251 uint8_t* dest_buf = FX_Alloc2D(uint8_t, row_size + 1, row_count);
250 int byte_cnt = 0; 252 int byte_cnt = 0;
251 uint8_t* pSrcData = data_buf; 253 uint8_t* pSrcData = data_buf;
252 uint8_t* pDestData = dest_buf; 254 uint8_t* pDestData = dest_buf;
253 for (int row = 0; row < row_count; row++) { 255 for (int row = 0; row < row_count; row++) {
254 if (predictor == 10) { 256 if (predictor == 10) {
255 pDestData[0] = 0; 257 pDestData[0] = 0;
256 int move_size = row_size; 258 int move_size = row_size;
(...skipping 62 matching lines...) Expand 10 before | Expand all | Expand 10 after
319 break; 321 break;
320 } 322 }
321 byte_cnt++; 323 byte_cnt++;
322 } 324 }
323 pDestData += (row_size + 1); 325 pDestData += (row_size + 1);
324 pSrcData += row_size; 326 pSrcData += row_size;
325 } 327 }
326 FX_Free(data_buf); 328 FX_Free(data_buf);
327 data_buf = dest_buf; 329 data_buf = dest_buf;
328 data_size = (row_size + 1) * row_count - (last_row_size > 0 ? (row_size - la st_row_size) : 0); 330 data_size = (row_size + 1) * row_count - (last_row_size > 0 ? (row_size - la st_row_size) : 0);
329 return TRUE; 331 return true;
330 } 332 }
331 static void PNG_PredictLine(uint8_t* pDestData, const uint8_t* pSrcData, const u int8_t* pLastLine, 333 static void PNG_PredictLine(uint8_t* pDestData, const uint8_t* pSrcData, const u int8_t* pLastLine,
332 int bpc, int nColors, int nPixels) 334 int bpc, int nColors, int nPixels)
333 { 335 {
334 int row_size = (nPixels * bpc * nColors + 7) / 8; 336 int row_size = (nPixels * bpc * nColors + 7) / 8;
335 int BytesPerPixel = (bpc * nColors + 7) / 8; 337 int BytesPerPixel = (bpc * nColors + 7) / 8;
336 uint8_t tag = pSrcData[0]; 338 uint8_t tag = pSrcData[0];
337 if (tag == 0) { 339 if (tag == 0) {
338 FXSYS_memmove(pDestData, pSrcData + 1, row_size); 340 FXSYS_memmove(pDestData, pSrcData + 1, row_size);
339 return; 341 return;
(...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after
384 } 386 }
385 pDestData[byte] = raw_byte + PaethPredictor(left, up, upper_ left); 387 pDestData[byte] = raw_byte + PaethPredictor(left, up, upper_ left);
386 break; 388 break;
387 } 389 }
388 default: 390 default:
389 pDestData[byte] = raw_byte; 391 pDestData[byte] = raw_byte;
390 break; 392 break;
391 } 393 }
392 } 394 }
393 } 395 }
394 static FX_BOOL PNG_Predictor(uint8_t*& data_buf, FX_DWORD& data_size, 396 static bool PNG_Predictor(uint8_t*& data_buf, FX_DWORD& data_size,
395 int Colors, int BitsPerComponent, int Columns) 397 int Colors, int BitsPerComponent, int Columns)
396 { 398 {
397 const int BytesPerPixel = (Colors * BitsPerComponent + 7) / 8; 399 const int BytesPerPixel = (Colors * BitsPerComponent + 7) / 8;
398 const int row_size = (Colors * BitsPerComponent * Columns + 7) / 8; 400 const int row_size = (Colors * BitsPerComponent * Columns + 7) / 8;
399 if (row_size <= 0) 401 if (row_size <= 0)
400 return FALSE; 402 return false;
401 const int row_count = (data_size + row_size) / (row_size + 1); 403 const int row_count = (data_size + row_size) / (row_size + 1);
402 const int last_row_size = data_size % (row_size + 1); 404 const int last_row_size = data_size % (row_size + 1);
403 uint8_t* dest_buf = FX_Alloc2D(uint8_t, row_size, row_count); 405 uint8_t* dest_buf = FX_Alloc2D(uint8_t, row_size, row_count);
404 int byte_cnt = 0; 406 int byte_cnt = 0;
405 uint8_t* pSrcData = data_buf; 407 uint8_t* pSrcData = data_buf;
406 uint8_t* pDestData = dest_buf; 408 uint8_t* pDestData = dest_buf;
407 for (int row = 0; row < row_count; row ++) { 409 for (int row = 0; row < row_count; row ++) {
408 uint8_t tag = pSrcData[0]; 410 uint8_t tag = pSrcData[0];
409 byte_cnt++; 411 byte_cnt++;
410 if (tag == 0) { 412 if (tag == 0) {
(...skipping 59 matching lines...) Expand 10 before | Expand all | Expand 10 after
470 break; 472 break;
471 } 473 }
472 byte_cnt++; 474 byte_cnt++;
473 } 475 }
474 pSrcData += row_size + 1; 476 pSrcData += row_size + 1;
475 pDestData += row_size; 477 pDestData += row_size;
476 } 478 }
477 FX_Free(data_buf); 479 FX_Free(data_buf);
478 data_buf = dest_buf; 480 data_buf = dest_buf;
479 data_size = row_size * row_count - (last_row_size > 0 ? (row_size + 1 - last _row_size) : 0); 481 data_size = row_size * row_count - (last_row_size > 0 ? (row_size + 1 - last _row_size) : 0);
480 return TRUE; 482 return true;
481 } 483 }
482 static void TIFF_PredictorEncodeLine(uint8_t* dest_buf, int row_size, int BitsPe rComponent, int Colors, int Columns) 484 static void TIFF_PredictorEncodeLine(uint8_t* dest_buf, int row_size, int BitsPe rComponent, int Colors, int Columns)
483 { 485 {
484 int BytesPerPixel = BitsPerComponent * Colors / 8; 486 int BytesPerPixel = BitsPerComponent * Colors / 8;
485 if (BitsPerComponent < 8) { 487 if (BitsPerComponent < 8) {
486 uint8_t mask = 0x01; 488 uint8_t mask = 0x01;
487 if (BitsPerComponent == 2) { 489 if (BitsPerComponent == 2) {
488 mask = 0x03; 490 mask = 0x03;
489 } else if (BitsPerComponent == 4) { 491 } else if (BitsPerComponent == 4) {
490 mask = 0x0F; 492 mask = 0x0F;
(...skipping 18 matching lines...) Expand all
509 } 511 }
510 } else { 512 } else {
511 for (int i = row_size - BytesPerPixel; i >= BytesPerPixel; i -= BytesPer Pixel) { 513 for (int i = row_size - BytesPerPixel; i >= BytesPerPixel; i -= BytesPer Pixel) {
512 FX_WORD pixel = (dest_buf[i] << 8) | dest_buf[i + 1]; 514 FX_WORD pixel = (dest_buf[i] << 8) | dest_buf[i + 1];
513 pixel -= (dest_buf[i - BytesPerPixel] << 8) | dest_buf[i - BytesPerP ixel + 1]; 515 pixel -= (dest_buf[i - BytesPerPixel] << 8) | dest_buf[i - BytesPerP ixel + 1];
514 dest_buf[i] = pixel >> 8; 516 dest_buf[i] = pixel >> 8;
515 dest_buf[i + 1] = (uint8_t)pixel; 517 dest_buf[i + 1] = (uint8_t)pixel;
516 } 518 }
517 } 519 }
518 } 520 }
519 static FX_BOOL TIFF_PredictorEncode(uint8_t*& data_buf, FX_DWORD& data_size, 521 static bool TIFF_PredictorEncode(uint8_t*& data_buf, FX_DWORD& data_size,
520 int Colors, int BitsPerComponent, int Column s) 522 int Colors, int BitsPerComponent, int Column s)
521 { 523 {
522 int row_size = (Colors * BitsPerComponent * Columns + 7) / 8; 524 int row_size = (Colors * BitsPerComponent * Columns + 7) / 8;
523 if (row_size == 0) 525 if (row_size == 0)
524 return FALSE; 526 return false;
525 const int row_count = (data_size + row_size - 1) / row_size; 527 const int row_count = (data_size + row_size - 1) / row_size;
526 const int last_row_size = data_size % row_size; 528 const int last_row_size = data_size % row_size;
527 for (int row = 0; row < row_count; row++) { 529 for (int row = 0; row < row_count; row++) {
528 uint8_t* scan_line = data_buf + row * row_size; 530 uint8_t* scan_line = data_buf + row * row_size;
529 if ((row + 1) * row_size > (int)data_size) { 531 if ((row + 1) * row_size > (int)data_size) {
530 row_size = last_row_size; 532 row_size = last_row_size;
531 } 533 }
532 TIFF_PredictorEncodeLine(scan_line, row_size, BitsPerComponent, Colors, Columns); 534 TIFF_PredictorEncodeLine(scan_line, row_size, BitsPerComponent, Colors, Columns);
533 } 535 }
534 return TRUE; 536 return true;
535 } 537 }
536 static void TIFF_PredictLine(uint8_t* dest_buf, int row_size, int BitsPerCompone nt, int Colors, int Columns) 538 static void TIFF_PredictLine(uint8_t* dest_buf, int row_size, int BitsPerCompone nt, int Colors, int Columns)
537 { 539 {
538 if (BitsPerComponent == 1) { 540 if (BitsPerComponent == 1) {
539 int row_bits = FX_MIN(BitsPerComponent * Colors * Columns, row_size * 8) ; 541 int row_bits = FX_MIN(BitsPerComponent * Colors * Columns, row_size * 8) ;
540 int index_pre = 0; 542 int index_pre = 0;
541 int col_pre = 0; 543 int col_pre = 0;
542 for(int i = 1; i < row_bits; i ++) { 544 for(int i = 1; i < row_bits; i ++) {
543 int col = i % 8; 545 int col = i % 8;
544 int index = i / 8; 546 int index = i / 8;
(...skipping 14 matching lines...) Expand all
559 pixel += (dest_buf[i] << 8) | dest_buf[i + 1]; 561 pixel += (dest_buf[i] << 8) | dest_buf[i + 1];
560 dest_buf[i] = pixel >> 8; 562 dest_buf[i] = pixel >> 8;
561 dest_buf[i + 1] = (uint8_t)pixel; 563 dest_buf[i + 1] = (uint8_t)pixel;
562 } 564 }
563 } else { 565 } else {
564 for (int i = BytesPerPixel; i < row_size; i ++) { 566 for (int i = BytesPerPixel; i < row_size; i ++) {
565 dest_buf[i] += dest_buf[i - BytesPerPixel]; 567 dest_buf[i] += dest_buf[i - BytesPerPixel];
566 } 568 }
567 } 569 }
568 } 570 }
569 static FX_BOOL TIFF_Predictor(uint8_t*& data_buf, FX_DWORD& data_size, 571 static bool TIFF_Predictor(uint8_t*& data_buf, FX_DWORD& data_size,
570 int Colors, int BitsPerComponent, int Columns) 572 int Colors, int BitsPerComponent, int Columns)
571 { 573 {
572 int row_size = (Colors * BitsPerComponent * Columns + 7) / 8; 574 int row_size = (Colors * BitsPerComponent * Columns + 7) / 8;
573 if (row_size == 0) 575 if (row_size == 0)
574 return FALSE; 576 return false;
575 const int row_count = (data_size + row_size - 1) / row_size; 577 const int row_count = (data_size + row_size - 1) / row_size;
576 const int last_row_size = data_size % row_size; 578 const int last_row_size = data_size % row_size;
577 for (int row = 0; row < row_count; row ++) { 579 for (int row = 0; row < row_count; row ++) {
578 uint8_t* scan_line = data_buf + row * row_size; 580 uint8_t* scan_line = data_buf + row * row_size;
579 if ((row + 1) * row_size > (int)data_size) { 581 if ((row + 1) * row_size > (int)data_size) {
580 row_size = last_row_size; 582 row_size = last_row_size;
581 } 583 }
582 TIFF_PredictLine(scan_line, row_size, BitsPerComponent, Colors, Columns) ; 584 TIFF_PredictLine(scan_line, row_size, BitsPerComponent, Colors, Columns) ;
583 } 585 }
584 return TRUE; 586 return true;
585 } 587 }
586 class CCodec_FlateScanlineDecoder : public CCodec_ScanlineDecoder 588 class CCodec_FlateScanlineDecoder : public CCodec_ScanlineDecoder
587 { 589 {
588 public: 590 public:
589 CCodec_FlateScanlineDecoder(); 591 CCodec_FlateScanlineDecoder();
590 ~CCodec_FlateScanlineDecoder(); 592 ~CCodec_FlateScanlineDecoder();
591 void Create(const uint8_t* src_buf, FX_DWORD src_size, int width, int height , int nComps, int bpc, 593 void Create(const uint8_t* src_buf, FX_DWORD src_size, int width, int height , int nComps, int bpc,
592 int predictor, int Colors, int BitsPerComponent, int Columns); 594 int predictor, int Colors, int BitsPerComponent, int Columns);
593 virtual void Destroy() 595 virtual void Destroy()
594 { 596 {
595 delete this; 597 delete this;
596 } 598 }
597 virtual void v_DownScale(int dest_width, int dest_height) {} 599 virtual void v_DownScale(int dest_width, int dest_height) {}
598 virtual FX_BOOL» » v_Rewind(); 600 virtual bool» » v_Rewind();
599 virtual uint8_t* v_GetNextLine(); 601 virtual uint8_t* v_GetNextLine();
600 virtual FX_DWORD GetSrcOffset(); 602 virtual FX_DWORD GetSrcOffset();
601 void* m_pFlate; 603 void* m_pFlate;
602 const uint8_t* m_SrcBuf; 604 const uint8_t* m_SrcBuf;
603 FX_DWORD m_SrcSize; 605 FX_DWORD m_SrcSize;
604 uint8_t* m_pScanline; 606 uint8_t* m_pScanline;
605 uint8_t* m_pLastLine; 607 uint8_t* m_pLastLine;
606 uint8_t* m_pPredictBuffer; 608 uint8_t* m_pPredictBuffer;
607 uint8_t* m_pPredictRaw; 609 uint8_t* m_pPredictRaw;
608 int m_Predictor; 610 int m_Predictor;
(...skipping 28 matching lines...) Expand all
637 } 639 }
638 void CCodec_FlateScanlineDecoder::Create(const uint8_t* src_buf, FX_DWORD src_si ze, int width, int height, 640 void CCodec_FlateScanlineDecoder::Create(const uint8_t* src_buf, FX_DWORD src_si ze, int width, int height,
639 int nComps, int bpc, int predictor, int Colors, int BitsPerComponent, in t Columns) 641 int nComps, int bpc, int predictor, int Colors, int BitsPerComponent, in t Columns)
640 { 642 {
641 m_SrcBuf = src_buf; 643 m_SrcBuf = src_buf;
642 m_SrcSize = src_size; 644 m_SrcSize = src_size;
643 m_OutputWidth = m_OrigWidth = width; 645 m_OutputWidth = m_OrigWidth = width;
644 m_OutputHeight = m_OrigHeight = height; 646 m_OutputHeight = m_OrigHeight = height;
645 m_nComps = nComps; 647 m_nComps = nComps;
646 m_bpc = bpc; 648 m_bpc = bpc;
647 m_bColorTransformed = FALSE; 649 m_bColorTransformed = false;
648 m_Pitch = (width * nComps * bpc + 7) / 8; 650 m_Pitch = (width * nComps * bpc + 7) / 8;
649 m_pScanline = FX_Alloc(uint8_t, m_Pitch); 651 m_pScanline = FX_Alloc(uint8_t, m_Pitch);
650 m_Predictor = 0; 652 m_Predictor = 0;
651 if (predictor) { 653 if (predictor) {
652 if (predictor >= 10) { 654 if (predictor >= 10) {
653 m_Predictor = 2; 655 m_Predictor = 2;
654 } else if (predictor == 2) { 656 } else if (predictor == 2) {
655 m_Predictor = 1; 657 m_Predictor = 1;
656 } 658 }
657 if (m_Predictor) { 659 if (m_Predictor) {
658 if (BitsPerComponent * Colors * Columns == 0) { 660 if (BitsPerComponent * Colors * Columns == 0) {
659 BitsPerComponent = m_bpc; 661 BitsPerComponent = m_bpc;
660 Colors = m_nComps; 662 Colors = m_nComps;
661 Columns = m_OrigWidth; 663 Columns = m_OrigWidth;
662 } 664 }
663 m_Colors = Colors; 665 m_Colors = Colors;
664 m_BitsPerComponent = BitsPerComponent; 666 m_BitsPerComponent = BitsPerComponent;
665 m_Columns = Columns; 667 m_Columns = Columns;
666 m_PredictPitch = (m_BitsPerComponent * m_Colors * m_Columns + 7) / 8 ; 668 m_PredictPitch = (m_BitsPerComponent * m_Colors * m_Columns + 7) / 8 ;
667 m_pLastLine = FX_Alloc(uint8_t, m_PredictPitch); 669 m_pLastLine = FX_Alloc(uint8_t, m_PredictPitch);
668 m_pPredictRaw = FX_Alloc(uint8_t, m_PredictPitch + 1); 670 m_pPredictRaw = FX_Alloc(uint8_t, m_PredictPitch + 1);
669 m_pPredictBuffer = FX_Alloc(uint8_t, m_PredictPitch); 671 m_pPredictBuffer = FX_Alloc(uint8_t, m_PredictPitch);
670 } 672 }
671 } 673 }
672 } 674 }
673 FX_BOOL CCodec_FlateScanlineDecoder::v_Rewind() 675 bool CCodec_FlateScanlineDecoder::v_Rewind()
674 { 676 {
675 if (m_pFlate) { 677 if (m_pFlate) {
676 FPDFAPI_FlateEnd(m_pFlate); 678 FPDFAPI_FlateEnd(m_pFlate);
677 } 679 }
678 m_pFlate = FPDFAPI_FlateInit(my_alloc_func, my_free_func); 680 m_pFlate = FPDFAPI_FlateInit(my_alloc_func, my_free_func);
679 if (m_pFlate == NULL) { 681 if (m_pFlate == NULL) {
680 return FALSE; 682 return false;
681 } 683 }
682 FPDFAPI_FlateInput(m_pFlate, m_SrcBuf, m_SrcSize); 684 FPDFAPI_FlateInput(m_pFlate, m_SrcBuf, m_SrcSize);
683 m_LeftOver = 0; 685 m_LeftOver = 0;
684 return TRUE; 686 return true;
685 } 687 }
686 uint8_t* CCodec_FlateScanlineDecoder::v_GetNextLine() 688 uint8_t* CCodec_FlateScanlineDecoder::v_GetNextLine()
687 { 689 {
688 if (m_Predictor) { 690 if (m_Predictor) {
689 if (m_Pitch == m_PredictPitch) { 691 if (m_Pitch == m_PredictPitch) {
690 if (m_Predictor == 2) { 692 if (m_Predictor == 2) {
691 FPDFAPI_FlateOutput(m_pFlate, m_pPredictRaw, m_PredictPitch + 1) ; 693 FPDFAPI_FlateOutput(m_pFlate, m_pPredictRaw, m_PredictPitch + 1) ;
692 PNG_PredictLine(m_pScanline, m_pPredictRaw, m_pLastLine, m_BitsP erComponent, m_Colors, m_Columns); 694 PNG_PredictLine(m_pScanline, m_pPredictRaw, m_pLastLine, m_BitsP erComponent, m_Colors, m_Columns);
693 FXSYS_memcpy(m_pLastLine, m_pScanline, m_PredictPitch); 695 FXSYS_memcpy(m_pLastLine, m_pScanline, m_PredictPitch);
694 } else { 696 } else {
(...skipping 28 matching lines...) Expand all
723 } 725 }
724 return m_pScanline; 726 return m_pScanline;
725 } 727 }
726 FX_DWORD CCodec_FlateScanlineDecoder::GetSrcOffset() 728 FX_DWORD CCodec_FlateScanlineDecoder::GetSrcOffset()
727 { 729 {
728 return FPDFAPI_FlateGetTotalIn(m_pFlate); 730 return FPDFAPI_FlateGetTotalIn(m_pFlate);
729 } 731 }
730 static void FlateUncompress(const uint8_t* src_buf, FX_DWORD src_size, FX_DWORD orig_size, 732 static void FlateUncompress(const uint8_t* src_buf, FX_DWORD src_size, FX_DWORD orig_size,
731 uint8_t*& dest_buf, FX_DWORD& dest_size, FX_DWORD& o ffset) 733 uint8_t*& dest_buf, FX_DWORD& dest_size, FX_DWORD& o ffset)
732 { 734 {
733 const FX_BOOL useOldImpl = src_size < 10240; 735 const bool useOldImpl = src_size < 10240;
734 FX_DWORD guess_size = orig_size ? orig_size : src_size * 2; 736 FX_DWORD guess_size = orig_size ? orig_size : src_size * 2;
735 FX_DWORD alloc_step = orig_size ? 10240 : (src_size < 10240 ? 10240 : src_si ze); 737 FX_DWORD alloc_step = orig_size ? 10240 : (src_size < 10240 ? 10240 : src_si ze);
736 static const FX_DWORD kMaxInitialAllocSize = 10000000; 738 static const FX_DWORD kMaxInitialAllocSize = 10000000;
737 if (guess_size > kMaxInitialAllocSize) { 739 if (guess_size > kMaxInitialAllocSize) {
738 guess_size = kMaxInitialAllocSize; 740 guess_size = kMaxInitialAllocSize;
739 alloc_step = kMaxInitialAllocSize; 741 alloc_step = kMaxInitialAllocSize;
740 } 742 }
741 FX_DWORD buf_size = guess_size; 743 FX_DWORD buf_size = guess_size;
742 FX_DWORD last_buf_size = buf_size; 744 FX_DWORD last_buf_size = buf_size;
743 void* context = nullptr; 745 void* context = nullptr;
(...skipping 86 matching lines...) Expand 10 before | Expand all | Expand 10 after
830 dest_size = 0; 832 dest_size = 0;
831 return; 833 return;
832 } 834 }
833 ICodec_ScanlineDecoder* CCodec_FlateModule::CreateDecoder(const uint8_t* src_buf , FX_DWORD src_size, int width, int height, 835 ICodec_ScanlineDecoder* CCodec_FlateModule::CreateDecoder(const uint8_t* src_buf , FX_DWORD src_size, int width, int height,
834 int nComps, int bpc, int predictor, int Colors, int BitsPerComponent, in t Columns) 836 int nComps, int bpc, int predictor, int Colors, int BitsPerComponent, in t Columns)
835 { 837 {
836 CCodec_FlateScanlineDecoder* pDecoder = new CCodec_FlateScanlineDecoder; 838 CCodec_FlateScanlineDecoder* pDecoder = new CCodec_FlateScanlineDecoder;
837 pDecoder->Create(src_buf, src_size, width, height, nComps, bpc, predictor, C olors, BitsPerComponent, Columns); 839 pDecoder->Create(src_buf, src_size, width, height, nComps, bpc, predictor, C olors, BitsPerComponent, Columns);
838 return pDecoder; 840 return pDecoder;
839 } 841 }
840 FX_DWORD CCodec_FlateModule::FlateOrLZWDecode(FX_BOOL bLZW, const uint8_t* src_b uf, FX_DWORD src_size, FX_BOOL bEarlyChange, 842 FX_DWORD CCodec_FlateModule::FlateOrLZWDecode(bool bLZW, const uint8_t* src_buf, FX_DWORD src_size, bool bEarlyChange,
841 int predictor, int Colors, int BitsPerComponent, int Columns, 843 int predictor, int Colors, int BitsPerComponent, int Columns,
842 FX_DWORD estimated_size, uint8_t*& dest_buf, FX_DWORD& dest_size) 844 FX_DWORD estimated_size, uint8_t*& dest_buf, FX_DWORD& dest_size)
843 { 845 {
844 dest_buf = NULL; 846 dest_buf = NULL;
845 FX_DWORD offset = 0; 847 FX_DWORD offset = 0;
846 int predictor_type = 0; 848 int predictor_type = 0;
847 if (predictor) { 849 if (predictor) {
848 if (predictor >= 10) { 850 if (predictor >= 10) {
849 predictor_type = 2; 851 predictor_type = 2;
850 } else if (predictor == 2) { 852 } else if (predictor == 2) {
(...skipping 16 matching lines...) Expand all
867 dest_buf = FX_Alloc( uint8_t, dest_size + 1); 869 dest_buf = FX_Alloc( uint8_t, dest_size + 1);
868 dest_buf[dest_size] = '\0'; 870 dest_buf[dest_size] = '\0';
869 decoder->Decode(dest_buf, dest_size, src_buf, offset, bEarlyChange); 871 decoder->Decode(dest_buf, dest_size, src_buf, offset, bEarlyChange);
870 } 872 }
871 } else { 873 } else {
872 FlateUncompress(src_buf, src_size, estimated_size, dest_buf, dest_size, offset); 874 FlateUncompress(src_buf, src_size, estimated_size, dest_buf, dest_size, offset);
873 } 875 }
874 if (predictor_type == 0) { 876 if (predictor_type == 0) {
875 return offset; 877 return offset;
876 } 878 }
877 FX_BOOL ret = TRUE; 879 bool ret = true;
878 if (predictor_type == 2) { 880 if (predictor_type == 2) {
879 ret = PNG_Predictor(dest_buf, dest_size, Colors, BitsPerComponent, 881 ret = PNG_Predictor(dest_buf, dest_size, Colors, BitsPerComponent,
880 Columns); 882 Columns);
881 } else if (predictor_type == 1) { 883 } else if (predictor_type == 1) {
882 ret = TIFF_Predictor(dest_buf, dest_size, Colors, BitsPerComponent, 884 ret = TIFF_Predictor(dest_buf, dest_size, Colors, BitsPerComponent,
883 Columns); 885 Columns);
884 } 886 }
885 return ret ? offset : -1; 887 return ret ? offset : -1;
886 } 888 }
887 FX_BOOL CCodec_FlateModule::Encode(const uint8_t* src_buf, FX_DWORD src_size, 889 bool CCodec_FlateModule::Encode(const uint8_t* src_buf, FX_DWORD src_size,
888 int predictor, int Colors, int BitsPerCompone nt, int Columns, 890 int predictor, int Colors, int BitsPerCompone nt, int Columns,
889 uint8_t*& dest_buf, FX_DWORD& dest_size) 891 uint8_t*& dest_buf, FX_DWORD& dest_size)
890 { 892 {
891 if (predictor != 2 && predictor < 10) { 893 if (predictor != 2 && predictor < 10) {
892 return Encode(src_buf, src_size, dest_buf, dest_size); 894 return Encode(src_buf, src_size, dest_buf, dest_size);
893 } 895 }
894 uint8_t* pSrcBuf = NULL; 896 uint8_t* pSrcBuf = NULL;
895 pSrcBuf = FX_Alloc(uint8_t, src_size); 897 pSrcBuf = FX_Alloc(uint8_t, src_size);
896 FXSYS_memcpy(pSrcBuf, src_buf, src_size); 898 FXSYS_memcpy(pSrcBuf, src_buf, src_size);
897 FX_BOOL ret = TRUE; 899 bool ret = true;
898 if (predictor == 2) { 900 if (predictor == 2) {
899 ret = TIFF_PredictorEncode(pSrcBuf, src_size, Colors, BitsPerComponent, 901 ret = TIFF_PredictorEncode(pSrcBuf, src_size, Colors, BitsPerComponent,
900 Columns); 902 Columns);
901 } else if (predictor >= 10) { 903 } else if (predictor >= 10) {
902 ret = PNG_PredictorEncode(pSrcBuf, src_size, predictor, Colors, 904 ret = PNG_PredictorEncode(pSrcBuf, src_size, predictor, Colors,
903 BitsPerComponent, Columns); 905 BitsPerComponent, Columns);
904 } 906 }
905 if (ret) 907 if (ret)
906 ret = Encode(pSrcBuf, src_size, dest_buf, dest_size); 908 ret = Encode(pSrcBuf, src_size, dest_buf, dest_size);
907 FX_Free(pSrcBuf); 909 FX_Free(pSrcBuf);
908 return ret; 910 return ret;
909 } 911 }
910 FX_BOOL CCodec_FlateModule::Encode(const uint8_t* src_buf, FX_DWORD src_size, ui nt8_t*& dest_buf, FX_DWORD& dest_size) 912 bool CCodec_FlateModule::Encode(const uint8_t* src_buf, FX_DWORD src_size, uint8 _t*& dest_buf, FX_DWORD& dest_size)
911 { 913 {
912 dest_size = src_size + src_size / 1000 + 12; 914 dest_size = src_size + src_size / 1000 + 12;
913 dest_buf = FX_Alloc( uint8_t, dest_size); 915 dest_buf = FX_Alloc( uint8_t, dest_size);
914 unsigned long temp_size = dest_size; 916 unsigned long temp_size = dest_size;
915 FPDFAPI_FlateCompress(dest_buf, &temp_size, src_buf, src_size); 917 FPDFAPI_FlateCompress(dest_buf, &temp_size, src_buf, src_size);
916 dest_size = (FX_DWORD)temp_size; 918 dest_size = (FX_DWORD)temp_size;
917 return TRUE; 919 return true;
918 } 920 }
OLDNEW
« no previous file with comments | « core/src/fxcodec/codec/fx_codec_fax.cpp ('k') | core/src/fxcodec/codec/fx_codec_icc.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698