| 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..2fe6730479cefaa631d0e08b7c0f2c51b215046c 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,53 +1492,41 @@ 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);
|
| } 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)
|
| + HandleFailure();
|
| return ret;
|
| }
|
|
|
| FX_BOOL CPDF_ImageLoaderHandle::Continue(IFX_Pause* pPause) {
|
| - FX_BOOL ret;
|
| + FX_BOOL ret = m_pCache ? m_pCache->Continue(pPause)
|
| + : m_pImage->GetImage()->Continue(pPause);
|
| + if (!ret)
|
| + HandleFailure();
|
| + return ret;
|
| +}
|
| +
|
| +void CPDF_ImageLoaderHandle::HandleFailure() {
|
| 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;
|
| - }
|
| + CPDF_ImageCacheEntry* entry = m_pCache->GetCurImageCacheEntry();
|
| + m_pImageLoader->m_bCached = TRUE;
|
| + m_pImageLoader->m_pBitmap = entry->DetachBitmap();
|
| + m_pImageLoader->m_pMask = entry->DetachMask();
|
| + m_pImageLoader->m_MatteColor = entry->m_MatteColor;
|
| } 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;
|
| - }
|
| + 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;
|
| }
|
| - return ret;
|
| }
|
|
|
| FX_BOOL CPDF_ImageLoader::Start(
|
|
|