diff --git a/core/fxcodec/flate/flatemodule.cpp b/core/fxcodec/flate/flatemodule.cpp
index 95b5d8e..23e4660 100644
--- a/core/fxcodec/flate/flatemodule.cpp
+++ b/core/fxcodec/flate/flatemodule.cpp
@@ -335,14 +335,11 @@
 void PNG_PredictLine(pdfium::span<uint8_t> dest_span,
                      pdfium::span<const uint8_t> src_span,
                      pdfium::span<const uint8_t> last_span,
-                     int bpc,
-                     int nColors,
-                     int nPixels) {
-  const uint32_t row_size = fxge::CalculatePitch8OrDie(bpc, nColors, nPixels);
+                     uint32_t row_size,
+                     uint32_t bytes_per_pixel) {
   const uint8_t tag = src_span.front();
   pdfium::span<const uint8_t> remaining_src_span =
       src_span.subspan(1, row_size);
-  const uint32_t bytes_per_pixel = (bpc * nColors + 7) / 8;
   switch (tag) {
     case 1: {
       for (size_t i = 0; i < remaining_src_span.size(); ++i) {
@@ -764,19 +761,25 @@
 
 void FlatePredictorScanlineDecoder::GetNextLineWithPredictedPitch() {
   switch (m_Predictor) {
-    case PredictorType::kPng:
+    case PredictorType::kPng: {
+      const uint32_t row_size =
+          fxge::CalculatePitch8OrDie(m_BitsPerComponent, m_Colors, m_Columns);
+      const uint32_t bytes_per_pixel = (m_BitsPerComponent * m_Colors + 7) / 8;
       FlateOutput(m_pFlate.get(), m_PredictRaw.data(), m_PredictPitch + 1);
-      PNG_PredictLine(m_Scanline, m_PredictRaw, m_LastLine, m_BitsPerComponent,
-                      m_Colors, m_Columns);
+      PNG_PredictLine(m_Scanline, m_PredictRaw, m_LastLine, row_size,
+                      bytes_per_pixel);
       FXSYS_memcpy(m_LastLine.data(), m_Scanline.data(), m_PredictPitch);
       break;
-    case PredictorType::kFlate:
+    }
+    case PredictorType::kFlate: {
       FlateOutput(m_pFlate.get(), m_Scanline.data(), m_Pitch);
       TIFF_PredictLine(pdfium::make_span(m_Scanline).first(m_PredictPitch),
                        m_bpc, m_nComps, m_OutputWidth);
       break;
-    case PredictorType::kNone:
+    }
+    case PredictorType::kNone: {
       NOTREACHED_NORETURN();
+    }
   }
 }
 
@@ -789,21 +792,27 @@
     m_LeftOver -= read_leftover;
     bytes_to_go -= read_leftover;
   }
+  const uint32_t row_size =
+      fxge::CalculatePitch8OrDie(m_BitsPerComponent, m_Colors, m_Columns);
+  const uint32_t bytes_per_pixel = (m_BitsPerComponent * m_Colors + 7) / 8;
   while (bytes_to_go) {
     switch (m_Predictor) {
-      case PredictorType::kPng:
+      case PredictorType::kPng: {
         FlateOutput(m_pFlate.get(), m_PredictRaw.data(), m_PredictPitch + 1);
-        PNG_PredictLine(m_PredictBuffer, m_PredictRaw, m_LastLine,
-                        m_BitsPerComponent, m_Colors, m_Columns);
+        PNG_PredictLine(m_PredictBuffer, m_PredictRaw, m_LastLine, row_size,
+                        bytes_per_pixel);
         FXSYS_memcpy(m_LastLine.data(), m_PredictBuffer.data(), m_PredictPitch);
         break;
-      case PredictorType::kFlate:
+      }
+      case PredictorType::kFlate: {
         FlateOutput(m_pFlate.get(), m_PredictBuffer.data(), m_PredictPitch);
         TIFF_PredictLine(m_PredictBuffer, m_BitsPerComponent, m_Colors,
                          m_Columns);
         break;
-      case PredictorType::kNone:
+      }
+      case PredictorType::kNone: {
         NOTREACHED_NORETURN();
+      }
     }
     size_t read_bytes =
         m_PredictPitch > bytes_to_go ? bytes_to_go : m_PredictPitch;
