[rust png] Extract reusable `PngDecoderDelegate::GetNumberOfComponents`.
This CL just moves `GetNumberOfSrcComponents` from
`progressive_decoder.cpp` into `png_decoder_delegate.cpp`. This makes
it possible to reuse this little helper in follow-up CLs, where it will
be needed for implementing a Skia-based PNG decoder.
Bug: 444045690
Change-Id: I105021b0fea71e97ba182f84415f04e6af9dd2c9
Reviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/136090
Reviewed-by: Lei Zhang <thestig@chromium.org>
Commit-Queue: Ćukasz Anforowicz <lukasza@google.com>
diff --git a/core/fxcodec/BUILD.gn b/core/fxcodec/BUILD.gn
index 85733fd..e61f710 100644
--- a/core/fxcodec/BUILD.gn
+++ b/core/fxcodec/BUILD.gn
@@ -122,6 +122,8 @@
sources += [
"png/png_decoder.cpp",
"png/png_decoder.h",
+ "png/png_decoder_delegate.cpp",
+ "png/png_decoder_delegate.h",
]
deps += [ "../../third_party:png" ]
}
diff --git a/core/fxcodec/png/png_decoder_delegate.cpp b/core/fxcodec/png/png_decoder_delegate.cpp
new file mode 100644
index 0000000..f6a210a
--- /dev/null
+++ b/core/fxcodec/png/png_decoder_delegate.cpp
@@ -0,0 +1,27 @@
+// Copyright 2025 The PDFium Authors
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "core/fxcodec/png/png_decoder_delegate.h"
+
+#include "core/fxcrt/notreached.h"
+
+namespace fxcodec {
+
+// static
+int PngDecoderDelegate::GetNumberOfComponents(EncodedColorType color_type) {
+ switch (color_type) {
+ case EncodedColorType::kGrayscale:
+ return 1;
+ case EncodedColorType::kGrayscaleWithAlpha:
+ return 2;
+ case EncodedColorType::kTruecolor:
+ return 3;
+ case EncodedColorType::kIndexedColor:
+ case EncodedColorType::kTruecolorWithAlpha:
+ return 4;
+ }
+ NOTREACHED();
+}
+
+} // namespace fxcodec
diff --git a/core/fxcodec/png/png_decoder_delegate.h b/core/fxcodec/png/png_decoder_delegate.h
index a28e18c..a158da5 100644
--- a/core/fxcodec/png/png_decoder_delegate.h
+++ b/core/fxcodec/png/png_decoder_delegate.h
@@ -68,6 +68,11 @@
// Called by `PngDecoder` Communicates that `line`th row has been decoded
// enough to be displayed.
virtual void PngFillScanlineBufCompleted(int line) = 0;
+
+ // Helper to get the number of components in the given `color_type`. For
+ // example, when called with `EncodedColorType::kTruecolor` (RGB) the helper
+ // will return `3`.
+ static int GetNumberOfComponents(EncodedColorType color_type);
};
} // namespace fxcodec
diff --git a/core/fxcodec/progressive_decoder.cpp b/core/fxcodec/progressive_decoder.cpp
index 6104534..25c5355 100644
--- a/core/fxcodec/progressive_decoder.cpp
+++ b/core/fxcodec/progressive_decoder.cpp
@@ -39,6 +39,7 @@
#ifdef PDF_ENABLE_XFA_PNG
#include "core/fxcodec/png/png_decoder.h"
+#include "core/fxcodec/png/png_decoder_delegate.h"
#endif // PDF_ENABLE_XFA_PNG
#ifdef PDF_ENABLE_XFA_TIFF
@@ -76,23 +77,6 @@
}
}
-#ifdef PDF_ENABLE_XFA_PNG
-int GetNumberOfSrcComponents(PngEncodedColorType color_type) {
- switch (color_type) {
- case PngEncodedColorType::kGrayscale:
- return 1;
- case PngEncodedColorType::kGrayscaleWithAlpha:
- return 2;
- case PngEncodedColorType::kTruecolor:
- return 3;
- case PngEncodedColorType::kIndexedColor:
- case PngEncodedColorType::kTruecolorWithAlpha:
- return 4;
- }
- NOTREACHED();
-}
-#endif
-
} // namespace
ProgressiveDecoder::ProgressiveDecoder() = default;
@@ -112,7 +96,7 @@
src_height_ = height;
src_bpc_ = bpc;
src_pass_number_ = pass;
- src_components_ = GetNumberOfSrcComponents(src_color_type);
+ src_components_ = PngDecoderDelegate::GetNumberOfComponents(src_color_type);
return false;
}
switch (device_bitmap_->GetFormat()) {