CPDF_RenderOptions::bForceDownSample is always false. So remove it. In turn, FXDIB_ResampleOptions::bInterpolateDownsample is now always false, so remove it. In turn, StartQuickStrech() and ContinueQuickStretch() are now unused, so remove them. In turn, m_bFlipX, m_bFlipY, and m_LineIndex are now unused, so remove them. It is just as well since forced downsampling without any interpolation always looks terrible ... Change-Id: I798bec7494d0ffa0744a80b220dc29276b2de220 Reviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/64930 Reviewed-by: Lei Zhang <thestig@chromium.org> Commit-Queue: Tom Sepez <tsepez@chromium.org>
diff --git a/core/fpdfapi/render/cpdf_imagerenderer.cpp b/core/fpdfapi/render/cpdf_imagerenderer.cpp index 3277949..4f5dde2 100644 --- a/core/fpdfapi/render/cpdf_imagerenderer.cpp +++ b/core/fpdfapi/render/cpdf_imagerenderer.cpp
@@ -110,9 +110,7 @@ m_pDIBBase = pClone; } m_ResampleOptions = FXDIB_ResampleOptions(); - if (GetRenderOptions().GetOptions().bForceDownsample) - m_ResampleOptions.bInterpolateDownsample = true; - else if (GetRenderOptions().GetOptions().bForceHalftone) + if (GetRenderOptions().GetOptions().bForceHalftone) m_ResampleOptions.bHalftone = true; if (m_pRenderStatus->GetRenderDevice()->GetDeviceType() != @@ -377,7 +375,7 @@ } bool CPDF_ImageRenderer::StartDIBBase() { - if (!m_ResampleOptions.bInterpolateDownsample && m_pDIBBase->GetBPP() > 1) { + if (m_pDIBBase->GetBPP() > 1) { FX_SAFE_SIZE_T image_size = m_pDIBBase->GetBPP(); image_size /= 8; image_size *= m_pDIBBase->GetWidth();
diff --git a/core/fpdfapi/render/cpdf_renderoptions.h b/core/fpdfapi/render/cpdf_renderoptions.h index 8efeb40..84f7e4c 100644 --- a/core/fpdfapi/render/cpdf_renderoptions.h +++ b/core/fpdfapi/render/cpdf_renderoptions.h
@@ -22,7 +22,6 @@ bool bClearType = false; bool bPrintGraphicText = false; - bool bForceDownsample = false; bool bPrintPreview = false; bool bBGRStripe = false; bool bNoNativeText = false;
diff --git a/core/fpdfapi/render/cpdf_renderstatus.cpp b/core/fpdfapi/render/cpdf_renderstatus.cpp index 2b305f4..b72602a 100644 --- a/core/fpdfapi/render/cpdf_renderstatus.cpp +++ b/core/fpdfapi/render/cpdf_renderstatus.cpp
@@ -999,7 +999,6 @@ CPDF_RenderOptions options = m_Options; options.GetOptions().bForceHalftone = true; options.GetOptions().bRectAA = true; - options.GetOptions().bForceDownsample = false; const auto* pForm = static_cast<const CPDF_Form*>(pType3Char->form()); const CPDF_Dictionary* pFormResource =
diff --git a/core/fxge/dib/cfx_imagestretcher.cpp b/core/fxge/dib/cfx_imagestretcher.cpp index 3e97563..1499e8a 100644 --- a/core/fxge/dib/cfx_imagestretcher.cpp +++ b/core/fxge/dib/cfx_imagestretcher.cpp
@@ -53,14 +53,11 @@ : m_pDest(pDest), m_pSource(pSource), m_ResampleOptions(options), - m_bFlipX(false), - m_bFlipY(false), m_DestWidth(dest_width), m_DestHeight(dest_height), m_ClipRect(bitmap_rect), m_DestFormat(GetStretchedFormat(*pSource)), - m_DestBPP(GetBppFromFormat(m_DestFormat)), - m_LineIndex(0) { + m_DestBPP(GetBppFromFormat(m_DestFormat)) { ASSERT(m_ClipRect.Valid()); } @@ -121,15 +118,10 @@ m_DestFormat, nullptr)) { return false; } - - if (m_ResampleOptions.bInterpolateDownsample) - return StartQuickStretch(); return StartStretch(); } bool CFX_ImageStretcher::Continue(PauseIndicatorIface* pPause) { - if (m_ResampleOptions.bInterpolateDownsample) - return ContinueQuickStretch(pPause); return ContinueStretch(pPause); } @@ -152,76 +144,3 @@ bool CFX_ImageStretcher::ContinueStretch(PauseIndicatorIface* pPause) { return m_pStretchEngine && m_pStretchEngine->Continue(pPause); } - -bool CFX_ImageStretcher::StartQuickStretch() { - if (m_DestWidth < 0) { - m_bFlipX = true; - m_DestWidth = -m_DestWidth; - } - if (m_DestHeight < 0) { - m_bFlipY = true; - m_DestHeight = -m_DestHeight; - } - uint32_t size = m_ClipRect.Width(); - if (size && m_DestBPP > static_cast<int>(INT_MAX / size)) - return false; - - size *= m_DestBPP; - m_pScanline.reset(FX_Alloc(uint8_t, FxAlignToBoundary<4>(size / 8))); - if (m_pSource->m_pAlphaMask) { - m_pMaskScanline.reset( - FX_Alloc(uint8_t, FxAlignToBoundary<4>(m_ClipRect.Width()))); - } - if (SourceSizeWithinLimit(m_pSource->GetWidth(), m_pSource->GetHeight())) { - ContinueQuickStretch(nullptr); - return false; - } - return true; -} - -bool CFX_ImageStretcher::ContinueQuickStretch(PauseIndicatorIface* pPause) { - if (!m_pScanline) - return false; - - int result_width = m_ClipRect.Width(); - int result_height = m_ClipRect.Height(); - int src_height = m_pSource->GetHeight(); - for (; m_LineIndex < result_height; ++m_LineIndex) { - int dest_y; - FX_SAFE_INT64 calc_buf; - if (m_bFlipY) { - dest_y = result_height - m_LineIndex - 1; - calc_buf = m_DestHeight; - calc_buf -= dest_y; - calc_buf -= m_ClipRect.top; - calc_buf -= 1; - calc_buf *= src_height; - calc_buf /= m_DestHeight; - } else { - dest_y = m_LineIndex; - calc_buf = dest_y; - calc_buf += m_ClipRect.top; - calc_buf *= src_height; - calc_buf /= m_DestHeight; - } - - int src_y; - if (!calc_buf.AssignIfValid(&src_y)) - return false; - - src_y = pdfium::clamp(src_y, 0, src_height - 1); - if (m_pSource->SkipToScanline(src_y, pPause)) - return true; - - m_pSource->DownSampleScanline(src_y, m_pScanline.get(), m_DestBPP, - m_DestWidth, m_bFlipX, m_ClipRect.left, - result_width); - if (m_pMaskScanline) { - m_pSource->m_pAlphaMask->DownSampleScanline( - src_y, m_pMaskScanline.get(), 1, m_DestWidth, m_bFlipX, - m_ClipRect.left, result_width); - } - m_pDest->ComposeScanline(dest_y, m_pScanline.get(), m_pMaskScanline.get()); - } - return false; -}
diff --git a/core/fxge/dib/cfx_imagestretcher.h b/core/fxge/dib/cfx_imagestretcher.h index 1086a85..1ed9695 100644 --- a/core/fxge/dib/cfx_imagestretcher.h +++ b/core/fxge/dib/cfx_imagestretcher.h
@@ -36,9 +36,7 @@ RetainPtr<CFX_DIBBase> source(); private: - bool StartQuickStretch(); bool StartStretch(); - bool ContinueQuickStretch(PauseIndicatorIface* pPause); bool ContinueStretch(PauseIndicatorIface* pPause); UnownedPtr<ScanlineComposerIface> const m_pDest; @@ -47,14 +45,11 @@ std::unique_ptr<uint8_t, FxFreeDeleter> m_pScanline; std::unique_ptr<uint8_t, FxFreeDeleter> m_pMaskScanline; const FXDIB_ResampleOptions m_ResampleOptions; - bool m_bFlipX; - bool m_bFlipY; int m_DestWidth; int m_DestHeight; const FX_RECT m_ClipRect; const FXDIB_Format m_DestFormat; const int m_DestBPP; - int m_LineIndex; }; #endif // CORE_FXGE_DIB_CFX_IMAGESTRETCHER_H_
diff --git a/core/fxge/dib/cfx_imagetransformer.cpp b/core/fxge/dib/cfx_imagetransformer.cpp index 446b881..3c02603 100644 --- a/core/fxge/dib/cfx_imagetransformer.cpp +++ b/core/fxge/dib/cfx_imagetransformer.cpp
@@ -584,7 +584,7 @@ } bool CFX_ImageTransformer::IsBilinear() const { - return !m_ResampleOptions.bInterpolateDownsample && !IsBiCubic(); + return !IsBiCubic(); } bool CFX_ImageTransformer::IsBiCubic() const {
diff --git a/core/fxge/dib/cstretchengine.cpp b/core/fxge/dib/cstretchengine.cpp index 827a2c9..8636430 100644 --- a/core/fxge/dib/cstretchengine.cpp +++ b/core/fxge/dib/cstretchengine.cpp
@@ -255,7 +255,6 @@ m_ExtraMaskPitch = GetPitchRoundUpTo4Bytes(m_DestClip.Width() * 8); if (options.bNoSmoothing) { m_ResampleOptions.bNoSmoothing = true; - m_ResampleOptions.bInterpolateDownsample = options.bInterpolateDownsample; } else { bool bInterpol = options.bInterpolateBilinear || options.bInterpolateBicubic;
diff --git a/core/fxge/dib/cstretchengine_unittest.cpp b/core/fxge/dib/cstretchengine_unittest.cpp index bd783d6..5bd92a0 100644 --- a/core/fxge/dib/cstretchengine_unittest.cpp +++ b/core/fxge/dib/cstretchengine_unittest.cpp
@@ -26,7 +26,6 @@ dib_source->Load(nullptr, stream.Get()); CStretchEngine engine(nullptr, FXDIB_8bppRgb, 500, 500, clip_rect, dib_source, FXDIB_ResampleOptions()); - EXPECT_FALSE(engine.m_ResampleOptions.bInterpolateDownsample); EXPECT_TRUE(engine.m_ResampleOptions.bInterpolateBilinear); EXPECT_FALSE(engine.m_ResampleOptions.bInterpolateBicubic); EXPECT_FALSE(engine.m_ResampleOptions.bHalftone);
diff --git a/core/fxge/dib/fx_dib_main.cpp b/core/fxge/dib/fx_dib_main.cpp index 4b3510e..031fe65 100644 --- a/core/fxge/dib/fx_dib_main.cpp +++ b/core/fxge/dib/fx_dib_main.cpp
@@ -58,8 +58,8 @@ FXDIB_ResampleOptions::FXDIB_ResampleOptions() = default; bool FXDIB_ResampleOptions::HasAnyOptions() const { - return bInterpolateDownsample || bInterpolateBilinear || - bInterpolateBicubic || bHalftone || bNoSmoothing || bLossy; + return bInterpolateBilinear || bInterpolateBicubic || bHalftone || + bNoSmoothing || bLossy; } FX_RECT FXDIB_SwapClipBox(const FX_RECT& clip,
diff --git a/core/fxge/fx_dib.h b/core/fxge/fx_dib.h index e16957c..662ede9 100644 --- a/core/fxge/fx_dib.h +++ b/core/fxge/fx_dib.h
@@ -51,7 +51,6 @@ bool HasAnyOptions() const; - bool bInterpolateDownsample = false; bool bInterpolateBilinear = false; bool bInterpolateBicubic = false; bool bHalftone = false;