Remove ProgressiveDecoder::HorzTable
Without scaling, the remaining weight calculations it is used for
essentially boils down to multiplying by 1.
Change-Id: I4cfeb1ad40c87911b2b134327db3c9b3837f7bf2
Reviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/122592
Reviewed-by: Tom Sepez <tsepez@chromium.org>
Reviewed-by: Tom Sepez <tsepez@google.com>
Commit-Queue: Lei Zhang <thestig@chromium.org>
diff --git a/core/fxcodec/progressive_decoder.cpp b/core/fxcodec/progressive_decoder.cpp
index 3f51bd2..b65425d 100644
--- a/core/fxcodec/progressive_decoder.cpp
+++ b/core/fxcodec/progressive_decoder.cpp
@@ -71,26 +71,6 @@
} // namespace
-ProgressiveDecoder::HorzTable::HorzTable() = default;
-
-ProgressiveDecoder::HorzTable::~HorzTable() = default;
-
-void ProgressiveDecoder::HorzTable::CalculateWeights(int width) {
- CHECK_GE(width, 0);
- m_ItemSize =
- pdfium::checked_cast<int>(PixelWeight::TotalBytesForWeightCount(1));
- FX_SAFE_SIZE_T safe_size = m_ItemSize;
- safe_size *= width;
- m_pWeightTables.resize(safe_size.ValueOrDie(), 0);
- for (int col = 0; col < width; col++) {
- PixelWeight* pWeight = GetPixelWeight(col);
- pWeight->m_SrcStart = pWeight->m_SrcEnd = col;
- UNSAFE_TODO({
- pWeight->m_Weights[0] = CStretchEngine::kFixedPointOne;
- });
- }
-}
-
ProgressiveDecoder::ProgressiveDecoder() = default;
ProgressiveDecoder::~ProgressiveDecoder() = default;
@@ -172,35 +152,27 @@
case FXDIB_Format::kRgb:
case FXDIB_Format::kRgb32:
for (int32_t src_col = 0; src_col < m_SrcWidth; src_col++) {
- PixelWeight* pPixelWeights = m_WeightHorzOO.GetPixelWeight(src_col);
- if (pPixelWeights->m_SrcStart != pPixelWeights->m_SrcEnd) {
- continue;
- }
const uint8_t* p = src_scan + src_col * src_Bpp;
- uint32_t dest_b = pPixelWeights->m_Weights[0] * (*p++);
- uint32_t dest_g = pPixelWeights->m_Weights[0] * (*p++);
- uint32_t dest_r = pPixelWeights->m_Weights[0] * (*p);
- uint8_t* pDes = &dest_scan[pPixelWeights->m_SrcStart * dest_Bpp];
- *pDes++ = CStretchEngine::PixelFromFixed(dest_b);
- *pDes++ = CStretchEngine::PixelFromFixed(dest_g);
- *pDes = CStretchEngine::PixelFromFixed(dest_r);
+ uint8_t dest_b = *p++;
+ uint8_t dest_g = *p++;
+ uint8_t dest_r = *p;
+ uint8_t* pDes = &dest_scan[src_col * dest_Bpp];
+ *pDes++ = dest_b;
+ *pDes++ = dest_g;
+ *pDes = dest_r;
}
return true;
case FXDIB_Format::kArgb:
for (int32_t src_col = 0; src_col < m_SrcWidth; src_col++) {
- PixelWeight* pPixelWeights = m_WeightHorzOO.GetPixelWeight(src_col);
- if (pPixelWeights->m_SrcStart != pPixelWeights->m_SrcEnd) {
- continue;
- }
const uint8_t* p = src_scan + src_col * src_Bpp;
- uint32_t dest_b = pPixelWeights->m_Weights[0] * (*p++);
- uint32_t dest_g = pPixelWeights->m_Weights[0] * (*p++);
- uint32_t dest_r = pPixelWeights->m_Weights[0] * (*p++);
+ uint8_t dest_b = *p++;
+ uint8_t dest_g = *p++;
+ uint8_t dest_r = *p++;
uint8_t dest_a = *p;
- uint8_t* pDes = &dest_scan[pPixelWeights->m_SrcStart * dest_Bpp];
- *pDes++ = CStretchEngine::PixelFromFixed(dest_b);
- *pDes++ = CStretchEngine::PixelFromFixed(dest_g);
- *pDes++ = CStretchEngine::PixelFromFixed(dest_r);
+ uint8_t* pDes = &dest_scan[src_col * dest_Bpp];
+ *pDes++ = dest_b;
+ *pDes++ = dest_g;
+ *pDes++ = dest_r;
*pDes = dest_a;
}
return true;
@@ -694,29 +666,27 @@
case FXDIB_Format::kRgb:
case FXDIB_Format::kRgb32:
for (int32_t dest_col = 0; dest_col < m_SrcWidth; dest_col++) {
- PixelWeight* pPixelWeights = m_WeightHorzOO.GetPixelWeight(dest_col);
- const uint8_t* p = src_scan + pPixelWeights->m_SrcStart * src_Bpp;
- uint32_t dest_b = pPixelWeights->m_Weights[0] * (*p++);
- uint32_t dest_g = pPixelWeights->m_Weights[0] * (*p++);
- uint32_t dest_r = pPixelWeights->m_Weights[0] * (*p);
- *dest_scan++ = CStretchEngine::PixelFromFixed(dest_b);
- *dest_scan++ = CStretchEngine::PixelFromFixed(dest_g);
- *dest_scan++ = CStretchEngine::PixelFromFixed(dest_r);
+ const uint8_t* p = src_scan + dest_col * src_Bpp;
+ uint8_t dest_b = *p++;
+ uint8_t dest_g = *p++;
+ uint8_t dest_r = *p;
+ *dest_scan++ = dest_b;
+ *dest_scan++ = dest_g;
+ *dest_scan++ = dest_r;
dest_scan += dest_Bpp - 3;
}
break;
case FXDIB_Format::kArgb:
for (int32_t dest_col = 0; dest_col < m_SrcWidth; dest_col++) {
- PixelWeight* pPixelWeights = m_WeightHorzOO.GetPixelWeight(dest_col);
- const uint8_t* p = src_scan + pPixelWeights->m_SrcStart * src_Bpp;
- uint32_t dest_b = pPixelWeights->m_Weights[0] * (*p++);
- uint32_t dest_g = pPixelWeights->m_Weights[0] * (*p++);
- uint32_t dest_r = pPixelWeights->m_Weights[0] * (*p++);
- uint32_t dest_a = pPixelWeights->m_Weights[0] * (*p);
- *dest_scan++ = CStretchEngine::PixelFromFixed(dest_b);
- *dest_scan++ = CStretchEngine::PixelFromFixed(dest_g);
- *dest_scan++ = CStretchEngine::PixelFromFixed(dest_r);
- *dest_scan++ = CStretchEngine::PixelFromFixed(dest_a);
+ const uint8_t* p = src_scan + dest_col * src_Bpp;
+ uint8_t dest_b = *p++;
+ uint8_t dest_g = *p++;
+ uint8_t dest_r = *p++;
+ uint8_t dest_a = *p;
+ *dest_scan++ = dest_b;
+ *dest_scan++ = dest_g;
+ *dest_scan++ = dest_r;
+ *dest_scan++ = dest_a;
}
break;
}
@@ -786,7 +756,6 @@
SetTransMethod();
int scanline_size = FxAlignToBoundary<4>(m_SrcWidth * m_SrcComponents);
m_DecodeBuf.resize(scanline_size);
- m_WeightHorzOO.CalculateWeights(m_SrcWidth);
m_status = FXCODEC_STATUS::kDecodeToBeContinued;
return m_status;
}
@@ -1175,7 +1144,8 @@
int src_bytes_per_pixel = (src_format & 0xff) / 8;
int dest_bytes_per_pixel = pDeviceBitmap->GetBPP() / 8;
for (int dest_col = 0; dest_col < m_SrcWidth; dest_col++) {
- PixelWeight* pPixelWeights = m_WeightHorz.GetPixelWeight(dest_col);
+ CStretchEngine::PixelWeight* pPixelWeights =
+ m_WeightHorz.GetPixelWeight(dest_col);
switch (m_TransMethod) {
case TransformMethod::kInvalid:
return;
diff --git a/core/fxcodec/progressive_decoder.h b/core/fxcodec/progressive_decoder.h
index 1450eef..9c7505d 100644
--- a/core/fxcodec/progressive_decoder.h
+++ b/core/fxcodec/progressive_decoder.h
@@ -116,7 +116,6 @@
private:
using WeightTable = CStretchEngine::WeightTable;
- using PixelWeight = CStretchEngine::PixelWeight;
enum class TransformMethod : uint8_t {
kInvalid,
@@ -128,23 +127,6 @@
kArgbToArgb,
};
- class HorzTable {
- public:
- HorzTable();
- ~HorzTable();
-
- void CalculateWeights(int width);
- PixelWeight* GetPixelWeight(int pixel) {
- return reinterpret_cast<PixelWeight*>(pdfium::make_span(m_pWeightTables)
- .subspan(pixel * m_ItemSize)
- .data());
- }
-
- private:
- int m_ItemSize = 0;
- DataVector<uint8_t> m_pWeightTables;
- };
-
#ifdef PDF_ENABLE_XFA_BMP
bool BmpReadMoreData(ProgressiveDecoderIface::Context* pBmpContext,
FXCODEC_STATUS* err_status);
@@ -220,7 +202,6 @@
uint32_t m_offSet = 0;
int m_ScanlineSize = 0;
WeightTable m_WeightHorz;
- HorzTable m_WeightHorzOO;
int m_SrcWidth = 0;
int m_SrcHeight = 0;
int m_SrcComponents = 0;