Chromium Code Reviews| Index: core/fpdfapi/fpdf_render/fpdf_render_loadimage.cpp |
| diff --git a/core/fpdfapi/fpdf_render/fpdf_render_loadimage.cpp b/core/fpdfapi/fpdf_render/fpdf_render_loadimage.cpp |
| index 3edfe58f07be42202dc26e37ff13806811ee2432..c74edf5fd7e5d3bbfb7c4f27c2e54e090ea7c171 100644 |
| --- a/core/fpdfapi/fpdf_render/fpdf_render_loadimage.cpp |
| +++ b/core/fpdfapi/fpdf_render/fpdf_render_loadimage.cpp |
| @@ -28,11 +28,11 @@ unsigned int GetBits8(const uint8_t* pData, uint64_t bitpos, size_t nbits) { |
| ASSERT(nbits == 1 || nbits == 2 || nbits == 4 || nbits == 8 || nbits == 16); |
| ASSERT((bitpos & (nbits - 1)) == 0); |
| unsigned int byte = pData[bitpos / 8]; |
| - if (nbits == 8) { |
| + if (nbits == 8) |
| return byte; |
| - } else if (nbits == 16) { |
| + |
| + if (nbits == 16) |
| return byte * 256 + pData[bitpos / 8 + 1]; |
| - } |
| return (byte >> (8 - nbits - (bitpos % 8))) & ((1 << nbits) - 1); |
| } |
| @@ -1492,27 +1492,17 @@ FX_BOOL CPDF_ImageLoaderHandle::Start(CPDF_ImageLoader* pImageLoader, |
| m_nDownsampleHeight = nDownsampleHeight; |
| FX_BOOL ret; |
| if (pCache) { |
| - ret = pCache->StartGetCachedBitmap(pImage->m_pImage->GetStream(), bStdCS, |
| - GroupFamily, bLoadMask, pRenderStatus, |
| - m_nDownsampleWidth, m_nDownsampleHeight); |
| - if (!ret) { |
| - m_pImageLoader->m_bCached = TRUE; |
| - m_pImageLoader->m_pBitmap = |
| - pCache->GetCurImageCacheEntry()->DetachBitmap(); |
| - m_pImageLoader->m_pMask = pCache->GetCurImageCacheEntry()->DetachMask(); |
| - m_pImageLoader->m_MatteColor = |
| - pCache->GetCurImageCacheEntry()->m_MatteColor; |
| - } |
| + ret = pCache->StartGetCachedBitmap( |
| + m_pImage->GetImage()->GetStream(), bStdCS, GroupFamily, bLoadMask, |
| + pRenderStatus, m_nDownsampleWidth, m_nDownsampleHeight); |
| + if (!ret) |
| + HandleFailureWithCache(); |
| } else { |
| - ret = pImage->m_pImage->StartLoadDIBSource(pRenderStatus->m_pFormResource, |
| - pRenderStatus->m_pPageResource, |
| - bStdCS, GroupFamily, bLoadMask); |
| - if (!ret) { |
| - m_pImageLoader->m_bCached = FALSE; |
| - m_pImageLoader->m_pBitmap = m_pImage->m_pImage->DetachBitmap(); |
| - m_pImageLoader->m_pMask = m_pImage->m_pImage->DetachMask(); |
| - m_pImageLoader->m_MatteColor = m_pImage->m_pImage->m_MatteColor; |
| - } |
| + ret = m_pImage->GetImage()->StartLoadDIBSource( |
| + pRenderStatus->m_pFormResource, pRenderStatus->m_pPageResource, bStdCS, |
| + GroupFamily, bLoadMask); |
| + if (!ret) |
| + HandleFailureWithoutCache(); |
| } |
| return ret; |
| } |
| @@ -1521,26 +1511,32 @@ FX_BOOL CPDF_ImageLoaderHandle::Continue(IFX_Pause* pPause) { |
| FX_BOOL ret; |
| if (m_pCache) { |
| ret = m_pCache->Continue(pPause); |
| - if (!ret) { |
| - m_pImageLoader->m_bCached = TRUE; |
| - m_pImageLoader->m_pBitmap = |
| - m_pCache->GetCurImageCacheEntry()->DetachBitmap(); |
| - m_pImageLoader->m_pMask = m_pCache->GetCurImageCacheEntry()->DetachMask(); |
| - m_pImageLoader->m_MatteColor = |
| - m_pCache->GetCurImageCacheEntry()->m_MatteColor; |
| - } |
| + if (!ret) |
| + HandleFailureWithCache(); |
| } else { |
| - ret = m_pImage->m_pImage->Continue(pPause); |
| - if (!ret) { |
| - m_pImageLoader->m_bCached = FALSE; |
| - m_pImageLoader->m_pBitmap = m_pImage->m_pImage->DetachBitmap(); |
| - m_pImageLoader->m_pMask = m_pImage->m_pImage->DetachMask(); |
| - m_pImageLoader->m_MatteColor = m_pImage->m_pImage->m_MatteColor; |
| - } |
| + ret = m_pImage->GetImage()->Continue(pPause); |
| + if (!ret) |
| + HandleFailureWithoutCache(); |
| } |
| return ret; |
| } |
| +void CPDF_ImageLoaderHandle::HandleFailureWithCache() { |
|
Wei Li
2016/08/05 22:58:21
Use HandleFailure(bool cached) to reduce to one fu
Lei Zhang
2016/08/06 05:34:25
Done.
|
| + m_pImageLoader->m_bCached = TRUE; |
| + m_pImageLoader->m_pBitmap = m_pCache->GetCurImageCacheEntry()->DetachBitmap(); |
| + m_pImageLoader->m_pMask = m_pCache->GetCurImageCacheEntry()->DetachMask(); |
| + m_pImageLoader->m_MatteColor = |
| + m_pCache->GetCurImageCacheEntry()->m_MatteColor; |
| +} |
| + |
| +void CPDF_ImageLoaderHandle::HandleFailureWithoutCache() { |
| + CPDF_Image* pImage = m_pImage->GetImage(); |
| + m_pImageLoader->m_bCached = FALSE; |
| + m_pImageLoader->m_pBitmap = pImage->DetachBitmap(); |
| + m_pImageLoader->m_pMask = pImage->DetachMask(); |
| + m_pImageLoader->m_MatteColor = pImage->m_MatteColor; |
| +} |
| + |
| FX_BOOL CPDF_ImageLoader::Start( |
| const CPDF_ImageObject* pImage, |
| CPDF_PageRenderCache* pCache, |