ProgressiveDecoder: switch over loop, part 2
Duplicates some code but allows for tighter inner loops. Switching
once per line is usually fine; once per pixel, not so much.
Change-Id: I8734d7ee4f43ad8dffa8269ba7b6cfab8923cd7c
Reviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/81974
Commit-Queue: Tom Sepez <tsepez@chromium.org>
Reviewed-by: Lei Zhang <thestig@chromium.org>
diff --git a/core/fxcodec/progressive_decoder.cpp b/core/fxcodec/progressive_decoder.cpp
index 427ab65..501ca0b 100644
--- a/core/fxcodec/progressive_decoder.cpp
+++ b/core/fxcodec/progressive_decoder.cpp
@@ -647,24 +647,25 @@
const uint8_t* scan_src2 =
pDeviceBitmap->GetScanline(pWeight->m_SrcEnd + dest_top) +
dest_ScanOffet;
- for (int dest_col = 0; dest_col < m_sizeX; dest_col++) {
- switch (pDeviceBitmap->GetFormat()) {
- case FXDIB_Format::kInvalid:
- case FXDIB_Format::k1bppMask:
- case FXDIB_Format::k1bppRgb:
+ switch (pDeviceBitmap->GetFormat()) {
+ case FXDIB_Format::kInvalid:
+ case FXDIB_Format::k1bppMask:
+ case FXDIB_Format::k1bppRgb:
+ return;
+ case FXDIB_Format::k8bppMask:
+ case FXDIB_Format::k8bppRgb:
+ if (pDeviceBitmap->HasPalette())
return;
- case FXDIB_Format::k8bppMask:
- case FXDIB_Format::k8bppRgb: {
- if (pDeviceBitmap->HasPalette())
- return;
-
+ for (int dest_col = 0; dest_col < m_sizeX; dest_col++) {
uint32_t dest_g = 0;
dest_g += pWeight->m_Weights[0] * (*scan_src1++);
dest_g += pWeight->m_Weights[1] * (*scan_src2++);
*scan_des++ = (uint8_t)(dest_g >> 16);
- } break;
- case FXDIB_Format::kRgb:
- case FXDIB_Format::kRgb32: {
+ }
+ break;
+ case FXDIB_Format::kRgb:
+ case FXDIB_Format::kRgb32:
+ for (int dest_col = 0; dest_col < m_sizeX; dest_col++) {
uint32_t dest_b = 0;
uint32_t dest_g = 0;
uint32_t dest_r = 0;
@@ -680,8 +681,10 @@
*scan_des++ = (uint8_t)((dest_g) >> 16);
*scan_des++ = (uint8_t)((dest_r) >> 16);
scan_des += dest_Bpp - 3;
- } break;
- case FXDIB_Format::kArgb: {
+ }
+ break;
+ case FXDIB_Format::kArgb:
+ for (int dest_col = 0; dest_col < m_sizeX; dest_col++) {
uint32_t dest_a = 0;
uint32_t dest_b = 0;
uint32_t dest_g = 0;
@@ -698,10 +701,10 @@
*scan_des++ = (uint8_t)((dest_g) >> 16);
*scan_des++ = (uint8_t)((dest_r) >> 16);
*scan_des++ = (uint8_t)((dest_a) >> 16);
- } break;
- default:
- return;
- }
+ }
+ break;
+ default:
+ return;
}
}
}