Use more spans in CFX_ScanlineCompositor for palette data.
Convert helper functions that only access fixed indices to take the
palette data as spans.
Change-Id: I486f9909235c7404e9c7bc1c7d7b38b535697f45
Reviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/75274
Commit-Queue: Lei Zhang <thestig@chromium.org>
Reviewed-by: Tom Sepez <tsepez@chromium.org>
diff --git a/core/fxge/dib/cfx_scanlinecompositor.cpp b/core/fxge/dib/cfx_scanlinecompositor.cpp
index cb116ea..3ae80ef 100644
--- a/core/fxge/dib/cfx_scanlinecompositor.cpp
+++ b/core/fxge/dib/cfx_scanlinecompositor.cpp
@@ -1094,12 +1094,12 @@
void CompositeRow_1bppPal2Gray(uint8_t* dest_scan,
const uint8_t* src_scan,
int src_left,
- const uint8_t* pPalette,
+ pdfium::span<const uint8_t> src_palette,
int pixel_count,
BlendMode blend_type,
const uint8_t* clip_scan) {
- int reset_gray = pPalette[0];
- int set_gray = pPalette[1];
+ int reset_gray = src_palette[0];
+ int set_gray = src_palette[1];
if (blend_type != BlendMode::kNormal) {
bool bNonseparableBlend = IsNonSeparableBlendMode(blend_type);
for (int col = 0; col < pixel_count; col++) {
@@ -1137,13 +1137,13 @@
void CompositeRow_1bppPal2Graya(uint8_t* dest_scan,
const uint8_t* src_scan,
int src_left,
- const uint8_t* pPalette,
+ pdfium::span<const uint8_t> src_palette,
int pixel_count,
BlendMode blend_type,
const uint8_t* clip_scan,
uint8_t* dest_alpha_scan) {
- int reset_gray = pPalette[0];
- int set_gray = pPalette[1];
+ int reset_gray = src_palette[0];
+ int set_gray = src_palette[1];
if (blend_type != BlendMode::kNormal) {
bool bNonseparableBlend = IsNonSeparableBlendMode(blend_type);
for (int col = 0; col < pixel_count; col++) {
@@ -1272,16 +1272,16 @@
void CompositeRow_1bppRgb2Rgb_NoBlend(uint8_t* dest_scan,
const uint8_t* src_scan,
int src_left,
- const uint32_t* pPalette,
+ pdfium::span<const uint32_t> src_palette,
int pixel_count,
int DestBpp,
const uint8_t* clip_scan) {
- int reset_r = FXARGB_R(pPalette[0]);
- int reset_g = FXARGB_G(pPalette[0]);
- int reset_b = FXARGB_B(pPalette[0]);
- int set_r = FXARGB_R(pPalette[1]);
- int set_g = FXARGB_G(pPalette[1]);
- int set_b = FXARGB_B(pPalette[1]);
+ int reset_r = FXARGB_R(src_palette[0]);
+ int reset_g = FXARGB_G(src_palette[0]);
+ int reset_b = FXARGB_B(src_palette[0]);
+ int set_r = FXARGB_R(src_palette[1]);
+ int set_g = FXARGB_G(src_palette[1]);
+ int set_b = FXARGB_B(src_palette[1]);
for (int col = 0; col < pixel_count; col++) {
int src_r;
int src_g;
@@ -1398,14 +1398,14 @@
const uint8_t* src_scan,
int src_left,
int width,
- const uint32_t* pPalette,
+ pdfium::span<const uint32_t> src_palette,
const uint8_t* clip_scan) {
- int reset_r = FXARGB_R(pPalette[0]);
- int reset_g = FXARGB_G(pPalette[0]);
- int reset_b = FXARGB_B(pPalette[0]);
- int set_r = FXARGB_R(pPalette[1]);
- int set_g = FXARGB_G(pPalette[1]);
- int set_b = FXARGB_B(pPalette[1]);
+ int reset_r = FXARGB_R(src_palette[0]);
+ int reset_g = FXARGB_G(src_palette[0]);
+ int reset_b = FXARGB_B(src_palette[0]);
+ int set_r = FXARGB_R(src_palette[1]);
+ int set_g = FXARGB_G(src_palette[1]);
+ int set_b = FXARGB_B(src_palette[1]);
for (int col = 0; col < width; col++) {
int src_r;
int src_g;
@@ -1449,15 +1449,15 @@
const uint8_t* src_scan,
int src_left,
int width,
- const uint32_t* pPalette,
+ pdfium::span<const uint32_t> src_palette,
const uint8_t* clip_scan,
uint8_t* dest_alpha_scan) {
- int reset_r = FXARGB_R(pPalette[0]);
- int reset_g = FXARGB_G(pPalette[0]);
- int reset_b = FXARGB_B(pPalette[0]);
- int set_r = FXARGB_R(pPalette[1]);
- int set_g = FXARGB_G(pPalette[1]);
- int set_b = FXARGB_B(pPalette[1]);
+ int reset_r = FXARGB_R(src_palette[0]);
+ int reset_g = FXARGB_G(src_palette[0]);
+ int reset_b = FXARGB_B(src_palette[0]);
+ int set_r = FXARGB_R(src_palette[1]);
+ int set_g = FXARGB_G(src_palette[1]);
+ int set_b = FXARGB_B(src_palette[1]);
for (int col = 0; col < width; col++) {
int src_r;
int src_g;
@@ -2272,26 +2272,27 @@
}
}
-void CompositeRow_1bppRgb2Rgb_NoBlend_RgbByteOrder(uint8_t* dest_scan,
- const uint8_t* src_scan,
- int src_left,
- const FX_ARGB* pPalette,
- int pixel_count,
- int DestBpp,
- const uint8_t* clip_scan) {
+void CompositeRow_1bppRgb2Rgb_NoBlend_RgbByteOrder(
+ uint8_t* dest_scan,
+ const uint8_t* src_scan,
+ int src_left,
+ pdfium::span<const FX_ARGB> src_palette,
+ int pixel_count,
+ int DestBpp,
+ const uint8_t* clip_scan) {
int reset_r;
int reset_g;
int reset_b;
int set_r;
int set_g;
int set_b;
- if (pPalette) {
- reset_r = FXARGB_R(pPalette[0]);
- reset_g = FXARGB_G(pPalette[0]);
- reset_b = FXARGB_B(pPalette[0]);
- set_r = FXARGB_R(pPalette[1]);
- set_g = FXARGB_G(pPalette[1]);
- set_b = FXARGB_B(pPalette[1]);
+ if (!src_palette.empty()) {
+ reset_r = FXARGB_R(src_palette[0]);
+ reset_g = FXARGB_G(src_palette[0]);
+ reset_b = FXARGB_B(src_palette[0]);
+ set_r = FXARGB_R(src_palette[1]);
+ set_g = FXARGB_G(src_palette[1]);
+ set_b = FXARGB_B(src_palette[1]);
} else {
reset_r = reset_g = reset_b = 0;
set_r = set_g = set_b = 255;
@@ -2366,25 +2367,26 @@
}
}
-void CompositeRow_1bppRgb2Argb_NoBlend_RgbByteOrder(uint8_t* dest_scan,
- const uint8_t* src_scan,
- int src_left,
- int width,
- const FX_ARGB* pPalette,
- const uint8_t* clip_scan) {
+void CompositeRow_1bppRgb2Argb_NoBlend_RgbByteOrder(
+ uint8_t* dest_scan,
+ const uint8_t* src_scan,
+ int src_left,
+ int width,
+ pdfium::span<const FX_ARGB> src_palette,
+ const uint8_t* clip_scan) {
int reset_r;
int reset_g;
int reset_b;
int set_r;
int set_g;
int set_b;
- if (pPalette) {
- reset_r = FXARGB_R(pPalette[0]);
- reset_g = FXARGB_G(pPalette[0]);
- reset_b = FXARGB_B(pPalette[0]);
- set_r = FXARGB_R(pPalette[1]);
- set_g = FXARGB_G(pPalette[1]);
- set_b = FXARGB_B(pPalette[1]);
+ if (!src_palette.empty()) {
+ reset_r = FXARGB_R(src_palette[0]);
+ reset_g = FXARGB_G(src_palette[0]);
+ reset_b = FXARGB_B(src_palette[0]);
+ set_r = FXARGB_R(src_palette[1]);
+ set_g = FXARGB_G(src_palette[1]);
+ set_b = FXARGB_B(src_palette[1]);
} else {
reset_r = reset_g = reset_b = 0;
set_r = set_g = set_b = 255;
@@ -2932,12 +2934,11 @@
if (m_DestFormat == FXDIB_Format::kArgb) {
CompositeRow_1bppRgb2Argb_NoBlend_RgbByteOrder(
dest_scan, src_scan, src_left, width,
- m_SrcPalette.Get32BitPalette().data(), clip_scan);
+ m_SrcPalette.Get32BitPalette(), clip_scan);
} else {
CompositeRow_1bppRgb2Rgb_NoBlend_RgbByteOrder(
- dest_scan, src_scan, src_left,
- m_SrcPalette.Get32BitPalette().data(), width,
- GetCompsFromFormat(m_DestFormat), clip_scan);
+ dest_scan, src_scan, src_left, m_SrcPalette.Get32BitPalette(),
+ width, GetCompsFromFormat(m_DestFormat), clip_scan);
}
} else {
if (m_DestFormat == FXDIB_Format::k8bppRgb) {
@@ -2963,11 +2964,11 @@
if (m_iTransparency & 8) {
if (GetIsAlphaFromFormat(m_DestFormat)) {
CompositeRow_1bppPal2Graya(dest_scan, src_scan, src_left,
- m_SrcPalette.Get8BitPalette().data(), width,
+ m_SrcPalette.Get8BitPalette(), width,
m_BlendType, clip_scan, dst_extra_alpha);
} else {
CompositeRow_1bppPal2Gray(dest_scan, src_scan, src_left,
- m_SrcPalette.Get8BitPalette().data(), width,
+ m_SrcPalette.Get8BitPalette(), width,
m_BlendType, clip_scan);
}
} else {
@@ -2990,7 +2991,7 @@
break;
case 1 + 2 + 8:
CompositeRow_1bppRgb2Argb_NoBlend(dest_scan, src_scan, src_left, width,
- m_SrcPalette.Get32BitPalette().data(),
+ m_SrcPalette.Get32BitPalette(),
clip_scan);
break;
case 0:
@@ -3000,9 +3001,8 @@
break;
case 0 + 8:
CompositeRow_1bppRgb2Rgb_NoBlend(
- dest_scan, src_scan, src_left,
- m_SrcPalette.Get32BitPalette().data(), width,
- GetCompsFromFormat(m_DestFormat), clip_scan);
+ dest_scan, src_scan, src_left, m_SrcPalette.Get32BitPalette(),
+ width, GetCompsFromFormat(m_DestFormat), clip_scan);
break;
case 0 + 2:
CompositeRow_8bppRgb2Rgb_NoBlend(
@@ -3011,7 +3011,7 @@
break;
case 0 + 2 + 8:
CompositeRow_1bppRgb2Rgba_NoBlend(dest_scan, src_scan, src_left, width,
- m_SrcPalette.Get32BitPalette().data(),
+ m_SrcPalette.Get32BitPalette(),
clip_scan, dst_extra_alpha);
break;
}