summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--core/fpdfapi/fpdf_render/cpdf_pagerendercache.h1
-rw-r--r--core/fpdfapi/fpdf_render/fpdf_render_cache.cpp10
-rw-r--r--core/fpdfapi/fpdf_render/fpdf_render_loadimage.cpp14
-rw-r--r--core/fpdfapi/fpdf_render/render_int.h4
-rw-r--r--core/fxcodec/codec/codec_int.h31
-rw-r--r--core/fxcodec/codec/fx_codec.cpp75
-rw-r--r--core/fxcodec/codec/fx_codec_fax.cpp2
-rw-r--r--core/fxcodec/codec/fx_codec_flate.cpp2
-rw-r--r--core/fxcodec/codec/fx_codec_jpeg.cpp41
-rw-r--r--core/include/fxcodec/fx_codec.h6
-rw-r--r--core/include/fxge/fx_dib.h1
11 files changed, 7 insertions, 180 deletions
diff --git a/core/fpdfapi/fpdf_render/cpdf_pagerendercache.h b/core/fpdfapi/fpdf_render/cpdf_pagerendercache.h
index 4e47e019b4..4f9ea1fe46 100644
--- a/core/fpdfapi/fpdf_render/cpdf_pagerendercache.h
+++ b/core/fpdfapi/fpdf_render/cpdf_pagerendercache.h
@@ -28,7 +28,6 @@ class CPDF_PageRenderCache {
m_nCacheSize(0),
m_bCurFindCache(FALSE) {}
~CPDF_PageRenderCache();
- void ClearImageData();
uint32_t EstimateSize();
void CacheOptimization(int32_t dwLimitCacheSize);
diff --git a/core/fpdfapi/fpdf_render/fpdf_render_cache.cpp b/core/fpdfapi/fpdf_render/fpdf_render_cache.cpp
index f5bc584348..a2592004e7 100644
--- a/core/fpdfapi/fpdf_render/fpdf_render_cache.cpp
+++ b/core/fpdfapi/fpdf_render/fpdf_render_cache.cpp
@@ -188,15 +188,7 @@ void CPDF_ImageCacheEntry::Reset(const CFX_DIBitmap* pBitmap) {
}
CalcSize();
}
-void CPDF_PageRenderCache::ClearImageData() {
- for (const auto& it : m_ImageCache)
- it.second->ClearImageData();
-}
-void CPDF_ImageCacheEntry::ClearImageData() {
- if (m_pCachedBitmap && !m_pCachedBitmap->GetBuffer()) {
- ((CPDF_DIBSource*)m_pCachedBitmap)->ClearImageData();
- }
-}
+
static uint32_t FPDF_ImageCache_EstimateImageSize(const CFX_DIBSource* pDIB) {
return pDIB && pDIB->GetBuffer()
? (uint32_t)pDIB->GetHeight() * pDIB->GetPitch() +
diff --git a/core/fpdfapi/fpdf_render/fpdf_render_loadimage.cpp b/core/fpdfapi/fpdf_render/fpdf_render_loadimage.cpp
index 144de779e9..7a4a36e1cf 100644
--- a/core/fpdfapi/fpdf_render/fpdf_render_loadimage.cpp
+++ b/core/fpdfapi/fpdf_render/fpdf_render_loadimage.cpp
@@ -1474,20 +1474,6 @@ FX_BOOL CPDF_DIBSource::TransMask() const {
m_Family == PDFCS_DEVICECMYK;
}
-void CPDF_DIBSource::SetDownSampleSize(int dest_width, int dest_height) {
- if (m_pDecoder) {
- m_pDecoder->DownScale(dest_width, dest_height);
- m_Width = m_pDecoder->GetWidth();
- m_Height = m_pDecoder->GetHeight();
- }
-}
-
-void CPDF_DIBSource::ClearImageData() {
- if (m_pDecoder) {
- m_pDecoder->ClearImageData();
- }
-}
-
CPDF_ImageLoaderHandle::CPDF_ImageLoaderHandle() {
m_pImageLoader = nullptr;
m_pCache = nullptr;
diff --git a/core/fpdfapi/fpdf_render/render_int.h b/core/fpdfapi/fpdf_render/render_int.h
index b22b9fc39b..eab6c9ff21 100644
--- a/core/fpdfapi/fpdf_render/render_int.h
+++ b/core/fpdfapi/fpdf_render/render_int.h
@@ -443,7 +443,7 @@ class CPDF_ImageCacheEntry {
public:
CPDF_ImageCacheEntry(CPDF_Document* pDoc, CPDF_Stream* pStream);
~CPDF_ImageCacheEntry();
- void ClearImageData();
+
void Reset(const CFX_DIBitmap* pBitmap);
FX_BOOL GetCachedBitmap(CFX_DIBSource*& pBitmap,
CFX_DIBSource*& pMask,
@@ -521,11 +521,9 @@ class CPDF_DIBSource : public CFX_DIBSource {
FX_BOOL bFlipX,
int clip_left,
int clip_width) const override;
- void SetDownSampleSize(int dest_width, int dest_height) override;
CFX_DIBitmap* GetBitmap() const;
void ReleaseBitmap(CFX_DIBitmap* pBitmap) const;
- void ClearImageData();
uint32_t GetMatteColor() const { return m_MatteColor; }
int StartLoadDIBSource(CPDF_Document* pDoc,
diff --git a/core/fxcodec/codec/codec_int.h b/core/fxcodec/codec/codec_int.h
index c7bd9fc6fe..7f0aaef379 100644
--- a/core/fxcodec/codec/codec_int.h
+++ b/core/fxcodec/codec/codec_int.h
@@ -47,59 +47,28 @@ class CCodec_ScanlineDecoder : public ICodec_ScanlineDecoder {
~CCodec_ScanlineDecoder() override;
// ICodec_ScanlineDecoder
- void DownScale(int dest_width, int dest_height) override;
const uint8_t* GetScanline(int line) override;
FX_BOOL SkipToScanline(int line, IFX_Pause* pPause) override;
int GetWidth() override { return m_OutputWidth; }
int GetHeight() override { return m_OutputHeight; }
int CountComps() override { return m_nComps; }
int GetBPC() override { return m_bpc; }
- FX_BOOL IsColorTransformed() override { return m_bColorTransformed; }
- void ClearImageData() override { m_pDataCache.reset(); }
protected:
- class ImageDataCache {
- public:
- ImageDataCache(int width, int height, uint32_t pitch);
- ~ImageDataCache();
-
- bool AllocateCache();
- void AppendLine(const uint8_t* line);
-
- int NumLines() const { return m_nCachedLines; }
- const uint8_t* GetLine(int line) const;
- bool IsSameDimensions(int width, int height) const {
- return width == m_Width && height == m_Height;
- }
-
- private:
- bool IsValid() const { return m_Data.get() != nullptr; }
-
- const int m_Width;
- const int m_Height;
- const uint32_t m_Pitch;
- int m_nCachedLines;
- std::unique_ptr<uint8_t, FxFreeDeleter> m_Data;
- };
-
virtual FX_BOOL v_Rewind() = 0;
virtual uint8_t* v_GetNextLine() = 0;
- virtual void v_DownScale(int dest_width, int dest_height) = 0;
uint8_t* ReadNextLine();
int m_OrigWidth;
int m_OrigHeight;
- int m_DownScale;
int m_OutputWidth;
int m_OutputHeight;
int m_nComps;
int m_bpc;
uint32_t m_Pitch;
- FX_BOOL m_bColorTransformed;
int m_NextLine;
uint8_t* m_pLastScanline;
- std::unique_ptr<ImageDataCache> m_pDataCache;
};
class CCodec_FaxModule : public ICodec_FaxModule {
diff --git a/core/fxcodec/codec/fx_codec.cpp b/core/fxcodec/codec/fx_codec.cpp
index 0952c809ac..79e5da27c8 100644
--- a/core/fxcodec/codec/fx_codec.cpp
+++ b/core/fxcodec/codec/fx_codec.cpp
@@ -30,55 +30,12 @@ CCodec_ModuleMgr::CCodec_ModuleMgr()
m_pFlateModule(new CCodec_FlateModule) {
}
-CCodec_ScanlineDecoder::ImageDataCache::ImageDataCache(int width,
- int height,
- uint32_t pitch)
- : m_Width(width), m_Height(height), m_Pitch(pitch), m_nCachedLines(0) {}
-
-CCodec_ScanlineDecoder::ImageDataCache::~ImageDataCache() {}
-
-bool CCodec_ScanlineDecoder::ImageDataCache::AllocateCache() {
- if (m_Pitch == 0 || m_Height < 0)
- return false;
-
- FX_SAFE_SIZE_T size = m_Pitch;
- size *= m_Height;
- if (!size.IsValid())
- return false;
-
- m_Data.reset(FX_TryAlloc(uint8_t, size.ValueOrDie()));
- return IsValid();
-}
-
-void CCodec_ScanlineDecoder::ImageDataCache::AppendLine(const uint8_t* line) {
- // If the callers adds more lines than there is room, fail.
- if (m_Pitch == 0 || m_nCachedLines >= m_Height) {
- NOTREACHED();
- return;
- }
-
- size_t offset = m_Pitch;
- FXSYS_memcpy(m_Data.get() + offset * m_nCachedLines, line, m_Pitch);
- ++m_nCachedLines;
-}
-
-const uint8_t* CCodec_ScanlineDecoder::ImageDataCache::GetLine(int line) const {
- if (m_Pitch == 0 || line < 0 || line >= m_nCachedLines)
- return nullptr;
-
- size_t offset = m_Pitch;
- return m_Data.get() + offset * line;
-}
-
CCodec_ScanlineDecoder::CCodec_ScanlineDecoder()
: m_NextLine(-1), m_pLastScanline(nullptr) {}
CCodec_ScanlineDecoder::~CCodec_ScanlineDecoder() {}
const uint8_t* CCodec_ScanlineDecoder::GetScanline(int line) {
- if (m_pDataCache && line < m_pDataCache->NumLines())
- return m_pDataCache->GetLine(line);
-
if (m_NextLine == line + 1)
return m_pLastScanline;
@@ -97,9 +54,6 @@ const uint8_t* CCodec_ScanlineDecoder::GetScanline(int line) {
}
FX_BOOL CCodec_ScanlineDecoder::SkipToScanline(int line, IFX_Pause* pPause) {
- if (m_pDataCache && line < m_pDataCache->NumLines())
- return FALSE;
-
if (m_NextLine == line || m_NextLine == line + 1)
return FALSE;
@@ -119,31 +73,7 @@ FX_BOOL CCodec_ScanlineDecoder::SkipToScanline(int line, IFX_Pause* pPause) {
}
uint8_t* CCodec_ScanlineDecoder::ReadNextLine() {
- uint8_t* pLine = v_GetNextLine();
- if (!pLine)
- return nullptr;
-
- if (m_pDataCache && m_NextLine == m_pDataCache->NumLines())
- m_pDataCache->AppendLine(pLine);
- return pLine;
-}
-
-void CCodec_ScanlineDecoder::DownScale(int dest_width, int dest_height) {
- dest_width = std::abs(dest_width);
- dest_height = std::abs(dest_height);
- v_DownScale(dest_width, dest_height);
-
- if (m_pDataCache &&
- m_pDataCache->IsSameDimensions(m_OutputWidth, m_OutputHeight)) {
- return;
- }
-
- std::unique_ptr<ImageDataCache> cache(
- new ImageDataCache(m_OutputWidth, m_OutputHeight, m_Pitch));
- if (!cache->AllocateCache())
- return;
-
- m_pDataCache = std::move(cache);
+ return v_GetNextLine();
}
FX_BOOL CCodec_BasicModule::RunLengthEncode(const uint8_t* src_buf,
@@ -294,7 +224,6 @@ class CCodec_RLScanlineDecoder : public CCodec_ScanlineDecoder {
int bpc);
// CCodec_ScanlineDecoder
- void v_DownScale(int dest_width, int dest_height) override {}
FX_BOOL v_Rewind() override;
uint8_t* v_GetNextLine() override;
uint32_t GetSrcOffset() override { return m_SrcOffset; }
@@ -364,8 +293,6 @@ FX_BOOL CCodec_RLScanlineDecoder::Create(const uint8_t* src_buf,
m_OutputHeight = m_OrigHeight = height;
m_nComps = nComps;
m_bpc = bpc;
- m_bColorTransformed = FALSE;
- m_DownScale = 1;
// Aligning the pitch to 4 bytes requires an integer overflow check.
FX_SAFE_DWORD pitch = width;
pitch *= nComps;
diff --git a/core/fxcodec/codec/fx_codec_fax.cpp b/core/fxcodec/codec/fx_codec_fax.cpp
index 0ccebba14e..6b90b15e51 100644
--- a/core/fxcodec/codec/fx_codec_fax.cpp
+++ b/core/fxcodec/codec/fx_codec_fax.cpp
@@ -613,7 +613,6 @@ class CCodec_FaxDecoder : public CCodec_ScanlineDecoder {
int Rows);
// CCodec_ScanlineDecoder
- void v_DownScale(int dest_width, int dest_height) override {}
FX_BOOL v_Rewind() override;
uint8_t* v_GetNextLine() override;
uint32_t GetSrcOffset() override;
@@ -666,7 +665,6 @@ FX_BOOL CCodec_FaxDecoder::Create(const uint8_t* src_buf,
m_SrcSize = src_size;
m_nComps = 1;
m_bpc = 1;
- m_bColorTransformed = FALSE;
return TRUE;
}
FX_BOOL CCodec_FaxDecoder::v_Rewind() {
diff --git a/core/fxcodec/codec/fx_codec_flate.cpp b/core/fxcodec/codec/fx_codec_flate.cpp
index 6961dcccb3..2350eb1a88 100644
--- a/core/fxcodec/codec/fx_codec_flate.cpp
+++ b/core/fxcodec/codec/fx_codec_flate.cpp
@@ -753,7 +753,6 @@ class CCodec_FlateScanlineDecoder : public CCodec_ScanlineDecoder {
void Destroy() { delete this; }
// CCodec_ScanlineDecoder
- void v_DownScale(int dest_width, int dest_height) override {}
FX_BOOL v_Rewind() override;
uint8_t* v_GetNextLine() override;
uint32_t GetSrcOffset() override;
@@ -806,7 +805,6 @@ void CCodec_FlateScanlineDecoder::Create(const uint8_t* src_buf,
m_OutputHeight = m_OrigHeight = height;
m_nComps = nComps;
m_bpc = bpc;
- m_bColorTransformed = FALSE;
m_Pitch = (static_cast<uint32_t>(width) * nComps * bpc + 7) / 8;
m_pScanline = FX_Alloc(uint8_t, m_Pitch);
m_Predictor = 0;
diff --git a/core/fxcodec/codec/fx_codec_jpeg.cpp b/core/fxcodec/codec/fx_codec_jpeg.cpp
index a81926e053..553e237b32 100644
--- a/core/fxcodec/codec/fx_codec_jpeg.cpp
+++ b/core/fxcodec/codec/fx_codec_jpeg.cpp
@@ -321,7 +321,6 @@ class CCodec_JpegDecoder : public CCodec_ScanlineDecoder {
void Destroy() { delete this; }
// CCodec_ScanlineDecoder
- void v_DownScale(int dest_width, int dest_height) override;
FX_BOOL v_Rewind() override;
uint8_t* v_GetNextLine() override;
uint32_t GetSrcOffset() override;
@@ -346,7 +345,6 @@ class CCodec_JpegDecoder : public CCodec_ScanlineDecoder {
CCodec_JpegDecoder::CCodec_JpegDecoder() {
m_pScanlineBuf = NULL;
- m_DownScale = 1;
m_bStarted = FALSE;
m_bInited = FALSE;
FXSYS_memset(&cinfo, 0, sizeof(cinfo));
@@ -437,41 +435,10 @@ FX_BOOL CCodec_JpegDecoder::Create(const uint8_t* src_buf,
m_pScanlineBuf = FX_Alloc(uint8_t, m_Pitch);
m_nComps = cinfo.num_components;
m_bpc = 8;
- m_bColorTransformed = FALSE;
m_bStarted = FALSE;
return TRUE;
}
-extern "C" {
-int32_t FX_GetDownsampleRatio(int32_t originWidth,
- int32_t originHeight,
- int32_t downsampleWidth,
- int32_t downsampleHeight) {
- int iratio_w = originWidth / downsampleWidth;
- int iratio_h = originHeight / downsampleHeight;
- int ratio = (iratio_w > iratio_h) ? iratio_h : iratio_w;
- if (ratio >= 8) {
- return 8;
- }
- if (ratio >= 4) {
- return 4;
- }
- if (ratio >= 2) {
- return 2;
- }
- return 1;
-}
-}
-void CCodec_JpegDecoder::v_DownScale(int dest_width, int dest_height) {
- int old_scale = m_DownScale;
- m_DownScale =
- FX_GetDownsampleRatio(m_OrigWidth, m_OrigHeight, dest_width, dest_height);
- m_OutputWidth = (m_OrigWidth + m_DownScale - 1) / m_DownScale;
- m_OutputHeight = (m_OrigHeight + m_DownScale - 1) / m_DownScale;
- m_Pitch = (static_cast<uint32_t>(m_OutputWidth) * m_nComps + 3) / 4 * 4;
- if (old_scale != m_DownScale) {
- m_NextLine = -1;
- }
-}
+
FX_BOOL CCodec_JpegDecoder::v_Rewind() {
if (m_bStarted) {
jpeg_destroy_decompress(&cinfo);
@@ -482,9 +449,9 @@ FX_BOOL CCodec_JpegDecoder::v_Rewind() {
if (setjmp(m_JmpBuf) == -1) {
return FALSE;
}
- cinfo.scale_denom = m_nDefaultScaleDenom * m_DownScale;
- m_OutputWidth = (m_OrigWidth + m_DownScale - 1) / m_DownScale;
- m_OutputHeight = (m_OrigHeight + m_DownScale - 1) / m_DownScale;
+ cinfo.scale_denom = m_nDefaultScaleDenom;
+ m_OutputWidth = m_OrigWidth;
+ m_OutputHeight = m_OrigHeight;
if (!jpeg_start_decompress(&cinfo)) {
jpeg_destroy_decompress(&cinfo);
return FALSE;
diff --git a/core/include/fxcodec/fx_codec.h b/core/include/fxcodec/fx_codec.h
index a674eb7290..9db5e8c34b 100644
--- a/core/include/fxcodec/fx_codec.h
+++ b/core/include/fxcodec/fx_codec.h
@@ -118,8 +118,6 @@ class ICodec_ScanlineDecoder {
virtual uint32_t GetSrcOffset() = 0;
- virtual void DownScale(int dest_width, int dest_height) = 0;
-
virtual const uint8_t* GetScanline(int line) = 0;
virtual FX_BOOL SkipToScanline(int line, IFX_Pause* pPause) = 0;
@@ -131,10 +129,6 @@ class ICodec_ScanlineDecoder {
virtual int CountComps() = 0;
virtual int GetBPC() = 0;
-
- virtual FX_BOOL IsColorTransformed() = 0;
-
- virtual void ClearImageData() = 0;
};
class ICodec_FlateModule {
diff --git a/core/include/fxge/fx_dib.h b/core/include/fxge/fx_dib.h
index 09081786ef..59a494182c 100644
--- a/core/include/fxge/fx_dib.h
+++ b/core/include/fxge/fx_dib.h
@@ -181,7 +181,6 @@ class CFX_DIBSource {
FX_BOOL bFlipX,
int clip_left,
int clip_width) const = 0;
- virtual void SetDownSampleSize(int width, int height) {}
int GetBPP() const { return m_bpp; }