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;