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

Side by Side Diff: core/fpdfapi/render/fpdf_render_loadimage.cpp

Issue 2572843002: Return unique_ptr<>s from fxcodec/ (Closed)
Patch Set: std::move it Created 4 years 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
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/fpdfapi/render/render_int.h" 7 #include "core/fpdfapi/render/render_int.h"
8 8
9 #include <algorithm> 9 #include <algorithm>
10 #include <memory> 10 #include <memory>
11 #include <vector> 11 #include <vector>
12 12
13 #include "core/fpdfapi/cpdf_modulemgr.h" 13 #include "core/fpdfapi/cpdf_modulemgr.h"
14 #include "core/fpdfapi/page/cpdf_docpagedata.h" 14 #include "core/fpdfapi/page/cpdf_docpagedata.h"
15 #include "core/fpdfapi/page/cpdf_image.h" 15 #include "core/fpdfapi/page/cpdf_image.h"
16 #include "core/fpdfapi/page/cpdf_imageobject.h" 16 #include "core/fpdfapi/page/cpdf_imageobject.h"
17 #include "core/fpdfapi/parser/cpdf_array.h" 17 #include "core/fpdfapi/parser/cpdf_array.h"
18 #include "core/fpdfapi/parser/cpdf_dictionary.h" 18 #include "core/fpdfapi/parser/cpdf_dictionary.h"
19 #include "core/fpdfapi/parser/cpdf_document.h" 19 #include "core/fpdfapi/parser/cpdf_document.h"
20 #include "core/fpdfapi/parser/fpdf_parser_decode.h"
20 #include "core/fpdfapi/render/cpdf_pagerendercache.h" 21 #include "core/fpdfapi/render/cpdf_pagerendercache.h"
21 #include "core/fpdfapi/render/cpdf_renderstatus.h" 22 #include "core/fpdfapi/render/cpdf_renderstatus.h"
22 #include "core/fxcodec/fx_codec.h" 23 #include "core/fxcodec/fx_codec.h"
23 #include "core/fxcrt/fx_safe_types.h" 24 #include "core/fxcrt/fx_safe_types.h"
24 25
25 namespace { 26 namespace {
26 27
27 unsigned int GetBits8(const uint8_t* pData, uint64_t bitpos, size_t nbits) { 28 unsigned int GetBits8(const uint8_t* pData, uint64_t bitpos, size_t nbits) {
28 ASSERT(nbits == 1 || nbits == 2 || nbits == 4 || nbits == 8 || nbits == 16); 29 ASSERT(nbits == 1 || nbits == 2 || nbits == 4 || nbits == 8 || nbits == 16);
29 ASSERT((bitpos & (nbits - 1)) == 0); 30 ASSERT((bitpos & (nbits - 1)) == 0);
(...skipping 476 matching lines...) Expand 10 before | Expand all | Expand 10 after
506 pCompData[i].m_ColorKeyMin = std::max(min_num, 0); 507 pCompData[i].m_ColorKeyMin = std::max(min_num, 0);
507 pCompData[i].m_ColorKeyMax = std::min(max_num, max_data); 508 pCompData[i].m_ColorKeyMax = std::min(max_num, max_data);
508 } 509 }
509 } 510 }
510 bColorKey = true; 511 bColorKey = true;
511 } 512 }
512 } 513 }
513 return pCompData; 514 return pCompData;
514 } 515 }
515 516
516 CCodec_ScanlineDecoder* FPDFAPI_CreateFaxDecoder(
Tom Sepez 2016/12/13 19:21:20 Note: same thing moved to header, sheesh.
517 const uint8_t* src_buf,
518 uint32_t src_size,
519 int width,
520 int height,
521 const CPDF_Dictionary* pParams);
522
523 CCodec_ScanlineDecoder* FPDFAPI_CreateFlateDecoder(
524 const uint8_t* src_buf,
525 uint32_t src_size,
526 int width,
527 int height,
528 int nComps,
529 int bpc,
530 const CPDF_Dictionary* pParams);
531
532 int CPDF_DIBSource::CreateDecoder() { 517 int CPDF_DIBSource::CreateDecoder() {
533 const CFX_ByteString& decoder = m_pStreamAcc->GetImageDecoder(); 518 const CFX_ByteString& decoder = m_pStreamAcc->GetImageDecoder();
534 if (decoder.IsEmpty()) 519 if (decoder.IsEmpty())
535 return 1; 520 return 1;
536 521
537 if (m_bDoBpcCheck && m_bpc == 0) 522 if (m_bDoBpcCheck && m_bpc == 0)
538 return 0; 523 return 0;
539 524
540 if (decoder == "JPXDecode") { 525 if (decoder == "JPXDecode") {
541 LoadJpxBitmap(); 526 LoadJpxBitmap();
542 return m_pCachedBitmap ? 1 : 0; 527 return m_pCachedBitmap ? 1 : 0;
543 } 528 }
544 if (decoder == "JBIG2Decode") { 529 if (decoder == "JBIG2Decode") {
545 m_pCachedBitmap = pdfium::MakeUnique<CFX_DIBitmap>(); 530 m_pCachedBitmap = pdfium::MakeUnique<CFX_DIBitmap>();
546 if (!m_pCachedBitmap->Create( 531 if (!m_pCachedBitmap->Create(
547 m_Width, m_Height, m_bImageMask ? FXDIB_1bppMask : FXDIB_1bppRgb)) { 532 m_Width, m_Height, m_bImageMask ? FXDIB_1bppMask : FXDIB_1bppRgb)) {
548 m_pCachedBitmap.reset(); 533 m_pCachedBitmap.reset();
549 return 0; 534 return 0;
550 } 535 }
551 m_Status = 1; 536 m_Status = 1;
552 return 2; 537 return 2;
553 } 538 }
554 539
555 const uint8_t* src_data = m_pStreamAcc->GetData(); 540 const uint8_t* src_data = m_pStreamAcc->GetData();
556 uint32_t src_size = m_pStreamAcc->GetSize(); 541 uint32_t src_size = m_pStreamAcc->GetSize();
557 const CPDF_Dictionary* pParams = m_pStreamAcc->GetImageParam(); 542 const CPDF_Dictionary* pParams = m_pStreamAcc->GetImageParam();
558 if (decoder == "CCITTFaxDecode") { 543 if (decoder == "CCITTFaxDecode") {
559 m_pDecoder.reset(FPDFAPI_CreateFaxDecoder(src_data, src_size, m_Width, 544 m_pDecoder = FPDFAPI_CreateFaxDecoder(src_data, src_size, m_Width, m_Height,
560 m_Height, pParams)); 545 pParams);
561 } else if (decoder == "FlateDecode") { 546 } else if (decoder == "FlateDecode") {
562 m_pDecoder.reset(FPDFAPI_CreateFlateDecoder( 547 m_pDecoder = FPDFAPI_CreateFlateDecoder(
563 src_data, src_size, m_Width, m_Height, m_nComponents, m_bpc, pParams)); 548 src_data, src_size, m_Width, m_Height, m_nComponents, m_bpc, pParams);
564 } else if (decoder == "RunLengthDecode") { 549 } else if (decoder == "RunLengthDecode") {
565 m_pDecoder.reset(CPDF_ModuleMgr::Get() 550 m_pDecoder = CPDF_ModuleMgr::Get()
566 ->GetCodecModule() 551 ->GetCodecModule()
567 ->GetBasicModule() 552 ->GetBasicModule()
568 ->CreateRunLengthDecoder(src_data, src_size, m_Width, 553 ->CreateRunLengthDecoder(src_data, src_size, m_Width,
569 m_Height, m_nComponents, 554 m_Height, m_nComponents, m_bpc);
570 m_bpc));
571 } else if (decoder == "DCTDecode") { 555 } else if (decoder == "DCTDecode") {
572 m_pDecoder.reset(CPDF_ModuleMgr::Get()->GetJpegModule()->CreateDecoder( 556 m_pDecoder = CPDF_ModuleMgr::Get()->GetJpegModule()->CreateDecoder(
573 src_data, src_size, m_Width, m_Height, m_nComponents, 557 src_data, src_size, m_Width, m_Height, m_nComponents,
574 !pParams || pParams->GetIntegerFor("ColorTransform", 1))); 558 !pParams || pParams->GetIntegerFor("ColorTransform", 1));
575 if (!m_pDecoder) { 559 if (!m_pDecoder) {
576 bool bTransform = false; 560 bool bTransform = false;
577 int comps; 561 int comps;
578 int bpc; 562 int bpc;
579 CCodec_JpegModule* pJpegModule = CPDF_ModuleMgr::Get()->GetJpegModule(); 563 CCodec_JpegModule* pJpegModule = CPDF_ModuleMgr::Get()->GetJpegModule();
580 if (pJpegModule->LoadInfo(src_data, src_size, &m_Width, &m_Height, &comps, 564 if (pJpegModule->LoadInfo(src_data, src_size, &m_Width, &m_Height, &comps,
581 &bpc, &bTransform)) { 565 &bpc, &bTransform)) {
582 if (m_nComponents != static_cast<uint32_t>(comps)) { 566 if (m_nComponents != static_cast<uint32_t>(comps)) {
583 FX_Free(m_pCompData); 567 FX_Free(m_pCompData);
584 m_pCompData = nullptr; 568 m_pCompData = nullptr;
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after
616 } 600 }
617 } else { 601 } else {
618 if (m_Family == PDFCS_LAB && m_nComponents != 3) 602 if (m_Family == PDFCS_LAB && m_nComponents != 3)
619 return 0; 603 return 0;
620 } 604 }
621 m_pCompData = GetDecodeAndMaskArray(m_bDefaultDecode, m_bColorKey); 605 m_pCompData = GetDecodeAndMaskArray(m_bDefaultDecode, m_bColorKey);
622 if (!m_pCompData) 606 if (!m_pCompData)
623 return 0; 607 return 0;
624 } 608 }
625 m_bpc = bpc; 609 m_bpc = bpc;
626 m_pDecoder.reset(CPDF_ModuleMgr::Get()->GetJpegModule()->CreateDecoder( 610 m_pDecoder = CPDF_ModuleMgr::Get()->GetJpegModule()->CreateDecoder(
627 src_data, src_size, m_Width, m_Height, m_nComponents, bTransform)); 611 src_data, src_size, m_Width, m_Height, m_nComponents, bTransform);
628 } 612 }
629 } 613 }
630 } 614 }
631 if (!m_pDecoder) 615 if (!m_pDecoder)
632 return 0; 616 return 0;
633 617
634 FX_SAFE_UINT32 requested_pitch = 618 FX_SAFE_UINT32 requested_pitch =
635 CalculatePitch8(m_bpc, m_nComponents, m_Width); 619 CalculatePitch8(m_bpc, m_nComponents, m_Width);
636 if (!requested_pitch.IsValid()) 620 if (!requested_pitch.IsValid())
637 return 0; 621 return 0;
(...skipping 848 matching lines...) Expand 10 before | Expand all | Expand 10 after
1486 *pDestPixel++ = FXARGB_G(argb); 1470 *pDestPixel++ = FXARGB_G(argb);
1487 *pDestPixel = FXARGB_R(argb); 1471 *pDestPixel = FXARGB_R(argb);
1488 } 1472 }
1489 } 1473 }
1490 } 1474 }
1491 1475
1492 bool CPDF_DIBSource::TransMask() const { 1476 bool CPDF_DIBSource::TransMask() const {
1493 return m_bLoadMask && m_GroupFamily == PDFCS_DEVICECMYK && 1477 return m_bLoadMask && m_GroupFamily == PDFCS_DEVICECMYK &&
1494 m_Family == PDFCS_DEVICECMYK; 1478 m_Family == PDFCS_DEVICECMYK;
1495 } 1479 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698