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

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

Issue 2224623002: Add CPDF_ImageObject::GetImage(). (Closed) Base URL: https://pdfium.googlesource.com/pdfium@master
Patch Set: merge failure handlers Created 4 years, 4 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/fpdfapi/fpdf_render/fpdf_render_image.cpp ('k') | core/fpdfapi/fpdf_render/render_int.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/fpdfapi/fpdf_render/render_int.h" 7 #include "core/fpdfapi/fpdf_render/render_int.h"
8 8
9 #include <algorithm> 9 #include <algorithm>
10 #include <memory> 10 #include <memory>
(...skipping 10 matching lines...) Expand all
21 #include "core/fxcodec/include/fx_codec.h" 21 #include "core/fxcodec/include/fx_codec.h"
22 #include "core/fxcrt/include/fx_safe_types.h" 22 #include "core/fxcrt/include/fx_safe_types.h"
23 #include "core/fxge/include/fx_ge.h" 23 #include "core/fxge/include/fx_ge.h"
24 24
25 namespace { 25 namespace {
26 26
27 unsigned int GetBits8(const uint8_t* pData, uint64_t bitpos, size_t nbits) { 27 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); 28 ASSERT(nbits == 1 || nbits == 2 || nbits == 4 || nbits == 8 || nbits == 16);
29 ASSERT((bitpos & (nbits - 1)) == 0); 29 ASSERT((bitpos & (nbits - 1)) == 0);
30 unsigned int byte = pData[bitpos / 8]; 30 unsigned int byte = pData[bitpos / 8];
31 if (nbits == 8) { 31 if (nbits == 8)
32 return byte; 32 return byte;
33 } else if (nbits == 16) { 33
34 if (nbits == 16)
34 return byte * 256 + pData[bitpos / 8 + 1]; 35 return byte * 256 + pData[bitpos / 8 + 1];
35 }
36 36
37 return (byte >> (8 - nbits - (bitpos % 8))) & ((1 << nbits) - 1); 37 return (byte >> (8 - nbits - (bitpos % 8))) & ((1 << nbits) - 1);
38 } 38 }
39 39
40 FX_SAFE_UINT32 CalculatePitch8(uint32_t bpc, uint32_t components, int width) { 40 FX_SAFE_UINT32 CalculatePitch8(uint32_t bpc, uint32_t components, int width) {
41 FX_SAFE_UINT32 pitch = bpc; 41 FX_SAFE_UINT32 pitch = bpc;
42 pitch *= components; 42 pitch *= components;
43 pitch *= width; 43 pitch *= width;
44 pitch += 7; 44 pitch += 7;
45 pitch /= 8; 45 pitch /= 8;
(...skipping 1439 matching lines...) Expand 10 before | Expand all | Expand 10 after
1485 CPDF_RenderStatus* pRenderStatus, 1485 CPDF_RenderStatus* pRenderStatus,
1486 int32_t nDownsampleWidth, 1486 int32_t nDownsampleWidth,
1487 int32_t nDownsampleHeight) { 1487 int32_t nDownsampleHeight) {
1488 m_pImageLoader = pImageLoader; 1488 m_pImageLoader = pImageLoader;
1489 m_pCache = pCache; 1489 m_pCache = pCache;
1490 m_pImage = const_cast<CPDF_ImageObject*>(pImage); 1490 m_pImage = const_cast<CPDF_ImageObject*>(pImage);
1491 m_nDownsampleWidth = nDownsampleWidth; 1491 m_nDownsampleWidth = nDownsampleWidth;
1492 m_nDownsampleHeight = nDownsampleHeight; 1492 m_nDownsampleHeight = nDownsampleHeight;
1493 FX_BOOL ret; 1493 FX_BOOL ret;
1494 if (pCache) { 1494 if (pCache) {
1495 ret = pCache->StartGetCachedBitmap(pImage->m_pImage->GetStream(), bStdCS, 1495 ret = pCache->StartGetCachedBitmap(
1496 GroupFamily, bLoadMask, pRenderStatus, 1496 m_pImage->GetImage()->GetStream(), bStdCS, GroupFamily, bLoadMask,
1497 m_nDownsampleWidth, m_nDownsampleHeight); 1497 pRenderStatus, m_nDownsampleWidth, m_nDownsampleHeight);
1498 if (!ret) {
1499 m_pImageLoader->m_bCached = TRUE;
1500 m_pImageLoader->m_pBitmap =
1501 pCache->GetCurImageCacheEntry()->DetachBitmap();
1502 m_pImageLoader->m_pMask = pCache->GetCurImageCacheEntry()->DetachMask();
1503 m_pImageLoader->m_MatteColor =
1504 pCache->GetCurImageCacheEntry()->m_MatteColor;
1505 }
1506 } else { 1498 } else {
1507 ret = pImage->m_pImage->StartLoadDIBSource(pRenderStatus->m_pFormResource, 1499 ret = m_pImage->GetImage()->StartLoadDIBSource(
1508 pRenderStatus->m_pPageResource, 1500 pRenderStatus->m_pFormResource, pRenderStatus->m_pPageResource, bStdCS,
1509 bStdCS, GroupFamily, bLoadMask); 1501 GroupFamily, bLoadMask);
1510 if (!ret) {
1511 m_pImageLoader->m_bCached = FALSE;
1512 m_pImageLoader->m_pBitmap = m_pImage->m_pImage->DetachBitmap();
1513 m_pImageLoader->m_pMask = m_pImage->m_pImage->DetachMask();
1514 m_pImageLoader->m_MatteColor = m_pImage->m_pImage->m_MatteColor;
1515 }
1516 } 1502 }
1503 if (!ret)
1504 HandleFailure();
1517 return ret; 1505 return ret;
1518 } 1506 }
1519 1507
1520 FX_BOOL CPDF_ImageLoaderHandle::Continue(IFX_Pause* pPause) { 1508 FX_BOOL CPDF_ImageLoaderHandle::Continue(IFX_Pause* pPause) {
1521 FX_BOOL ret; 1509 FX_BOOL ret = m_pCache ? m_pCache->Continue(pPause)
1522 if (m_pCache) { 1510 : m_pImage->GetImage()->Continue(pPause);
1523 ret = m_pCache->Continue(pPause); 1511 if (!ret)
1524 if (!ret) { 1512 HandleFailure();
1525 m_pImageLoader->m_bCached = TRUE;
1526 m_pImageLoader->m_pBitmap =
1527 m_pCache->GetCurImageCacheEntry()->DetachBitmap();
1528 m_pImageLoader->m_pMask = m_pCache->GetCurImageCacheEntry()->DetachMask();
1529 m_pImageLoader->m_MatteColor =
1530 m_pCache->GetCurImageCacheEntry()->m_MatteColor;
1531 }
1532 } else {
1533 ret = m_pImage->m_pImage->Continue(pPause);
1534 if (!ret) {
1535 m_pImageLoader->m_bCached = FALSE;
1536 m_pImageLoader->m_pBitmap = m_pImage->m_pImage->DetachBitmap();
1537 m_pImageLoader->m_pMask = m_pImage->m_pImage->DetachMask();
1538 m_pImageLoader->m_MatteColor = m_pImage->m_pImage->m_MatteColor;
1539 }
1540 }
1541 return ret; 1513 return ret;
1542 } 1514 }
1543 1515
1516 void CPDF_ImageLoaderHandle::HandleFailure() {
1517 if (m_pCache) {
1518 CPDF_ImageCacheEntry* entry = m_pCache->GetCurImageCacheEntry();
1519 m_pImageLoader->m_bCached = TRUE;
1520 m_pImageLoader->m_pBitmap = entry->DetachBitmap();
1521 m_pImageLoader->m_pMask = entry->DetachMask();
1522 m_pImageLoader->m_MatteColor = entry->m_MatteColor;
1523 } else {
1524 CPDF_Image* pImage = m_pImage->GetImage();
1525 m_pImageLoader->m_bCached = FALSE;
1526 m_pImageLoader->m_pBitmap = pImage->DetachBitmap();
1527 m_pImageLoader->m_pMask = pImage->DetachMask();
1528 m_pImageLoader->m_MatteColor = pImage->m_MatteColor;
1529 }
1530 }
1531
1544 FX_BOOL CPDF_ImageLoader::Start( 1532 FX_BOOL CPDF_ImageLoader::Start(
1545 const CPDF_ImageObject* pImage, 1533 const CPDF_ImageObject* pImage,
1546 CPDF_PageRenderCache* pCache, 1534 CPDF_PageRenderCache* pCache,
1547 std::unique_ptr<CPDF_ImageLoaderHandle>* pLoadHandle, 1535 std::unique_ptr<CPDF_ImageLoaderHandle>* pLoadHandle,
1548 FX_BOOL bStdCS, 1536 FX_BOOL bStdCS,
1549 uint32_t GroupFamily, 1537 uint32_t GroupFamily,
1550 FX_BOOL bLoadMask, 1538 FX_BOOL bLoadMask,
1551 CPDF_RenderStatus* pRenderStatus, 1539 CPDF_RenderStatus* pRenderStatus,
1552 int32_t nDownsampleWidth, 1540 int32_t nDownsampleWidth,
1553 int32_t nDownsampleHeight) { 1541 int32_t nDownsampleHeight) {
1554 m_nDownsampleWidth = nDownsampleWidth; 1542 m_nDownsampleWidth = nDownsampleWidth;
1555 m_nDownsampleHeight = nDownsampleHeight; 1543 m_nDownsampleHeight = nDownsampleHeight;
1556 pLoadHandle->reset(new CPDF_ImageLoaderHandle); 1544 pLoadHandle->reset(new CPDF_ImageLoaderHandle);
1557 return (*pLoadHandle) 1545 return (*pLoadHandle)
1558 ->Start(this, pImage, pCache, bStdCS, GroupFamily, bLoadMask, 1546 ->Start(this, pImage, pCache, bStdCS, GroupFamily, bLoadMask,
1559 pRenderStatus, m_nDownsampleWidth, m_nDownsampleHeight); 1547 pRenderStatus, m_nDownsampleWidth, m_nDownsampleHeight);
1560 } 1548 }
1561 1549
1562 FX_BOOL CPDF_ImageLoader::Continue(CPDF_ImageLoaderHandle* LoadHandle, 1550 FX_BOOL CPDF_ImageLoader::Continue(CPDF_ImageLoaderHandle* LoadHandle,
1563 IFX_Pause* pPause) { 1551 IFX_Pause* pPause) {
1564 return LoadHandle->Continue(pPause); 1552 return LoadHandle->Continue(pPause);
1565 } 1553 }
1566 1554
1567 CPDF_ImageLoader::~CPDF_ImageLoader() { 1555 CPDF_ImageLoader::~CPDF_ImageLoader() {
1568 if (!m_bCached) { 1556 if (!m_bCached) {
1569 delete m_pBitmap; 1557 delete m_pBitmap;
1570 delete m_pMask; 1558 delete m_pMask;
1571 } 1559 }
1572 } 1560 }
OLDNEW
« no previous file with comments | « core/fpdfapi/fpdf_render/fpdf_render_image.cpp ('k') | core/fpdfapi/fpdf_render/render_int.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698