Remove some dead code in CFX_ScanlineCompositor. No FXDIB_Format has a bpp of 8 and an alpha channel. The only FXDIB_Format with an alpha channel is `FXDIB_Format::kArgb`. Delete code in cfx_scanlinecompositor.cpp that goes against these constraints. Change-Id: I894b5c34fae32a0c03e190fa1d4245a0c44cdbea Reviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/101891 Reviewed-by: Tom Sepez <tsepez@chromium.org> Commit-Queue: Lei Zhang <thestig@chromium.org>
diff --git a/core/fxge/dib/cfx_scanlinecompositor.cpp b/core/fxge/dib/cfx_scanlinecompositor.cpp index af9e4ce..70b7936 100644 --- a/core/fxge/dib/cfx_scanlinecompositor.cpp +++ b/core/fxge/dib/cfx_scanlinecompositor.cpp
@@ -12,6 +12,7 @@ #include "core/fxge/dib/fx_dib.h" #include "third_party/base/check.h" +#include "third_party/base/check_op.h" #define FXDIB_ALPHA_UNION(dest, src) ((dest) + (src) - (dest) * (src) / 255) #define FXARGB_RGBORDERCOPY(dest, src) \ @@ -259,58 +260,6 @@ return gray; } -void CompositeRow_Argb2Graya(pdfium::span<uint8_t> dest_span, - pdfium::span<const uint8_t> src_span, - int pixel_count, - BlendMode blend_type, - pdfium::span<const uint8_t> clip_span, - pdfium::span<const uint8_t> src_alpha_span, - pdfium::span<uint8_t> dst_alpha_span) { - uint8_t* dest_scan = dest_span.data(); - const uint8_t* src_scan = src_span.data(); - const uint8_t* clip_scan = clip_span.data(); - const uint8_t* src_alpha_scan = src_alpha_span.data(); - uint8_t* dst_alpha_scan = dst_alpha_span.data(); - uint8_t offset = src_alpha_scan ? 3 : 4; - for (int col = 0; col < pixel_count; ++col) { - const uint8_t* alpha_scan = - src_alpha_scan ? src_alpha_scan++ : &src_scan[3]; - uint8_t back_alpha = *dst_alpha_scan; - if (back_alpha == 0) { - int src_alpha = GetAlpha(*alpha_scan, clip_scan, col); - if (src_alpha) { - *dest_scan = GetGray(src_scan); - *dst_alpha_scan = src_alpha; - } - ++dest_scan; - ++dst_alpha_scan; - src_scan += offset; - continue; - } - uint8_t src_alpha = GetAlpha(*alpha_scan, clip_scan, col); - if (src_alpha == 0) { - ++dest_scan; - ++dst_alpha_scan; - src_scan += offset; - continue; - } - *dst_alpha_scan = FXDIB_ALPHA_UNION(back_alpha, src_alpha); - int alpha_ratio = src_alpha * 255 / (*dst_alpha_scan); - uint8_t gray = GetGray(src_scan); - // TODO(npm): Does this if really need src_alpha_scan or was that a bug? - if (blend_type != BlendMode::kNormal && src_alpha_scan) { - if (IsNonSeparableBlendMode(blend_type)) - gray = blend_type == BlendMode::kLuminosity ? gray : *dest_scan; - else - gray = Blend(blend_type, *dest_scan, gray); - } - *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, gray, alpha_ratio); - ++dest_scan; - ++dst_alpha_scan; - src_scan += offset; - } -} - void CompositeRow_Argb2Gray(pdfium::span<uint8_t> dest_span, pdfium::span<const uint8_t> src_span, int pixel_count, @@ -355,52 +304,6 @@ } } -void CompositeRow_Rgb2Graya(pdfium::span<uint8_t> dest_span, - pdfium::span<const uint8_t> src_span, - int src_Bpp, - int pixel_count, - BlendMode blend_type, - pdfium::span<const uint8_t> clip_span, - pdfium::span<uint8_t> dest_alpha_span) { - uint8_t* dest_scan = dest_span.data(); - const uint8_t* src_scan = src_span.data(); - const uint8_t* clip_scan = clip_span.data(); - uint8_t* dest_alpha_scan = dest_alpha_span.data(); - for (int col = 0; col < pixel_count; ++col) { - if (blend_type != BlendMode::kNormal && *dest_alpha_scan == 0) { - *dest_scan = GetGray(src_scan); - ++dest_scan; - ++dest_alpha_scan; - src_scan += src_Bpp; - continue; - } - int src_alpha = clip_scan ? clip_scan[col] : 255; - if (src_alpha == 255) { - *dest_scan = GetGrayWithBlend(src_scan, dest_scan, blend_type); - ++dest_scan; - *dest_alpha_scan = 255; - ++dest_alpha_scan; - src_scan += src_Bpp; - continue; - } - if (src_alpha == 0) { - ++dest_scan; - ++dest_alpha_scan; - src_scan += src_Bpp; - continue; - } - int back_alpha = *dest_alpha_scan; - uint8_t dest_alpha = back_alpha + src_alpha - back_alpha * src_alpha / 255; - *dest_alpha_scan = dest_alpha; - ++dest_alpha_scan; - int alpha_ratio = src_alpha * 255 / dest_alpha; - uint8_t gray = GetGrayWithBlend(src_scan, dest_scan, blend_type); - *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, gray, alpha_ratio); - ++dest_scan; - src_scan += src_Bpp; - } -} - void CompositeRow_Argb2Argb(pdfium::span<uint8_t> dest_span, pdfium::span<const uint8_t> src_span, int pixel_count, @@ -1027,138 +930,6 @@ } } -void CompositeRow_8bppPal2Graya(pdfium::span<uint8_t> dest_span, - pdfium::span<const uint8_t> src_span, - pdfium::span<const uint8_t> palette_span, - int pixel_count, - BlendMode blend_type, - pdfium::span<const uint8_t> clip_span, - pdfium::span<uint8_t> dest_alpha_span, - pdfium::span<const uint8_t> src_alpha_span) { - uint8_t* dest_scan = dest_span.data(); - const uint8_t* src_scan = src_span.data(); - const uint8_t* pPalette = palette_span.data(); - const uint8_t* clip_scan = clip_span.data(); - const uint8_t* src_alpha_scan = src_alpha_span.data(); - uint8_t* dest_alpha_scan = dest_alpha_span.data(); - if (src_alpha_scan) { - if (blend_type != BlendMode::kNormal) { - bool bNonseparableBlend = IsNonSeparableBlendMode(blend_type); - for (int col = 0; col < pixel_count; col++) { - uint8_t gray = pPalette[*src_scan]; - src_scan++; - uint8_t back_alpha = *dest_alpha_scan; - if (back_alpha == 0) { - int src_alpha = GetAlpha(*src_alpha_scan++, clip_scan, col); - if (src_alpha) { - *dest_scan = gray; - *dest_alpha_scan = src_alpha; - } - dest_scan++; - dest_alpha_scan++; - continue; - } - uint8_t src_alpha = GetAlpha(*src_alpha_scan++, clip_scan, col); - if (src_alpha == 0) { - dest_scan++; - dest_alpha_scan++; - continue; - } - *dest_alpha_scan = - back_alpha + src_alpha - back_alpha * src_alpha / 255; - int alpha_ratio = src_alpha * 255 / (*dest_alpha_scan); - if (bNonseparableBlend) - gray = blend_type == BlendMode::kLuminosity ? gray : *dest_scan; - else - gray = Blend(blend_type, *dest_scan, gray); - *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, gray, alpha_ratio); - dest_alpha_scan++; - dest_scan++; - } - return; - } - for (int col = 0; col < pixel_count; col++) { - uint8_t gray = pPalette[*src_scan]; - src_scan++; - uint8_t back_alpha = *dest_alpha_scan; - if (back_alpha == 0) { - int src_alpha = GetAlpha(*src_alpha_scan++, clip_scan, col); - if (src_alpha) { - *dest_scan = gray; - *dest_alpha_scan = src_alpha; - } - dest_scan++; - dest_alpha_scan++; - continue; - } - uint8_t src_alpha = GetAlpha(*src_alpha_scan++, clip_scan, col); - if (src_alpha == 0) { - dest_scan++; - dest_alpha_scan++; - continue; - } - *dest_alpha_scan = back_alpha + src_alpha - back_alpha * src_alpha / 255; - int alpha_ratio = src_alpha * 255 / (*dest_alpha_scan); - dest_alpha_scan++; - *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, gray, alpha_ratio); - dest_scan++; - } - } else { - if (blend_type != BlendMode::kNormal) { - bool bNonseparableBlend = IsNonSeparableBlendMode(blend_type); - for (int col = 0; col < pixel_count; col++) { - uint8_t gray = pPalette[*src_scan]; - src_scan++; - if (!clip_scan || clip_scan[col] == 255) { - *dest_scan++ = gray; - *dest_alpha_scan++ = 255; - continue; - } - int src_alpha = clip_scan[col]; - if (src_alpha == 0) { - dest_scan++; - dest_alpha_scan++; - continue; - } - int back_alpha = *dest_alpha_scan; - uint8_t dest_alpha = - back_alpha + src_alpha - back_alpha * src_alpha / 255; - *dest_alpha_scan++ = dest_alpha; - int alpha_ratio = src_alpha * 255 / dest_alpha; - if (bNonseparableBlend) - gray = blend_type == BlendMode::kLuminosity ? gray : *dest_scan; - else - gray = Blend(blend_type, *dest_scan, gray); - *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, gray, alpha_ratio); - dest_scan++; - } - return; - } - for (int col = 0; col < pixel_count; col++) { - uint8_t gray = pPalette[*src_scan]; - src_scan++; - if (!clip_scan || clip_scan[col] == 255) { - *dest_scan++ = gray; - *dest_alpha_scan++ = 255; - continue; - } - int src_alpha = clip_scan[col]; - if (src_alpha == 0) { - dest_scan++; - dest_alpha_scan++; - continue; - } - int back_alpha = *dest_alpha_scan; - uint8_t dest_alpha = - back_alpha + src_alpha - back_alpha * src_alpha / 255; - *dest_alpha_scan++ = dest_alpha; - int alpha_ratio = src_alpha * 255 / dest_alpha; - *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, gray, alpha_ratio); - dest_scan++; - } - } -} - void CompositeRow_1bppPal2Gray(pdfium::span<uint8_t> dest_span, pdfium::span<const uint8_t> src_span, int src_left, @@ -1205,77 +976,6 @@ } } -void CompositeRow_1bppPal2Graya(pdfium::span<uint8_t> dest_span, - pdfium::span<const uint8_t> src_span, - int src_left, - pdfium::span<const uint8_t> src_palette, - int pixel_count, - BlendMode blend_type, - pdfium::span<const uint8_t> clip_span, - pdfium::span<uint8_t> dest_alpha_span) { - uint8_t* dest_scan = dest_span.data(); - const uint8_t* src_scan = src_span.data(); - const uint8_t* clip_scan = clip_span.data(); - uint8_t* dest_alpha_scan = dest_alpha_span.data(); - 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++) { - uint8_t gray = - (src_scan[(col + src_left) / 8] & (1 << (7 - (col + src_left) % 8))) - ? set_gray - : reset_gray; - if (!clip_scan || clip_scan[col] == 255) { - *dest_scan++ = gray; - *dest_alpha_scan++ = 255; - continue; - } - int src_alpha = clip_scan[col]; - if (src_alpha == 0) { - dest_scan++; - dest_alpha_scan++; - continue; - } - int back_alpha = *dest_alpha_scan; - uint8_t dest_alpha = - back_alpha + src_alpha - back_alpha * src_alpha / 255; - *dest_alpha_scan++ = dest_alpha; - int alpha_ratio = src_alpha * 255 / dest_alpha; - if (bNonseparableBlend) - gray = blend_type == BlendMode::kLuminosity ? gray : *dest_scan; - else - gray = Blend(blend_type, *dest_scan, gray); - *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, gray, alpha_ratio); - dest_scan++; - } - return; - } - for (int col = 0; col < pixel_count; col++) { - uint8_t gray = - (src_scan[(col + src_left) / 8] & (1 << (7 - (col + src_left) % 8))) - ? set_gray - : reset_gray; - if (!clip_scan || clip_scan[col] == 255) { - *dest_scan++ = gray; - *dest_alpha_scan++ = 255; - continue; - } - int src_alpha = clip_scan[col]; - if (src_alpha == 0) { - dest_scan++; - dest_alpha_scan++; - continue; - } - int back_alpha = *dest_alpha_scan; - uint8_t dest_alpha = back_alpha + src_alpha - back_alpha * src_alpha / 255; - *dest_alpha_scan++ = dest_alpha; - int alpha_ratio = src_alpha * 255 / dest_alpha; - *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, gray, alpha_ratio); - dest_scan++; - } -} - void CompositeRow_8bppRgb2Rgb_NoBlend( pdfium::span<uint8_t> dest_span, pdfium::span<const uint8_t> src_span, @@ -1746,38 +1446,6 @@ } } -void CompositeRow_ByteMask2Graya(pdfium::span<uint8_t> dest_span, - pdfium::span<const uint8_t> src_span, - int mask_alpha, - int src_gray, - int pixel_count, - pdfium::span<const uint8_t> clip_span, - pdfium::span<uint8_t> dest_alpha_span) { - uint8_t* dest_scan = dest_span.data(); - const uint8_t* src_scan = src_span.data(); - const uint8_t* clip_scan = clip_span.data(); - uint8_t* dest_alpha_scan = dest_alpha_span.data(); - for (int col = 0; col < pixel_count; col++) { - int src_alpha = GetAlphaWithSrc(mask_alpha, clip_scan, src_scan, col); - uint8_t back_alpha = *dest_alpha_scan; - if (back_alpha == 0) { - *dest_scan++ = src_gray; - *dest_alpha_scan++ = src_alpha; - continue; - } - if (src_alpha == 0) { - dest_scan++; - dest_alpha_scan++; - continue; - } - uint8_t dest_alpha = back_alpha + src_alpha - back_alpha * src_alpha / 255; - *dest_alpha_scan++ = dest_alpha; - int alpha_ratio = src_alpha * 255 / dest_alpha; - *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, src_gray, alpha_ratio); - dest_scan++; - } -} - void CompositeRow_BitMask2Argb(pdfium::span<uint8_t> dest_span, pdfium::span<const uint8_t> src_span, int mask_alpha, @@ -1967,44 +1635,6 @@ } } -void CompositeRow_BitMask2Graya(pdfium::span<uint8_t> dest_span, - pdfium::span<const uint8_t> src_span, - int mask_alpha, - int src_gray, - int src_left, - int pixel_count, - pdfium::span<const uint8_t> clip_span, - pdfium::span<uint8_t> dest_alpha_span) { - uint8_t* dest_scan = dest_span.data(); - const uint8_t* src_scan = src_span.data(); - const uint8_t* clip_scan = clip_span.data(); - uint8_t* dest_alpha_scan = dest_alpha_span.data(); - for (int col = 0; col < pixel_count; col++) { - if (!(src_scan[(src_left + col) / 8] & (1 << (7 - (src_left + col) % 8)))) { - dest_scan++; - dest_alpha_scan++; - continue; - } - int src_alpha = GetAlpha(mask_alpha, clip_scan, col); - uint8_t back_alpha = *dest_alpha_scan; - if (back_alpha == 0) { - *dest_scan++ = src_gray; - *dest_alpha_scan++ = src_alpha; - continue; - } - if (src_alpha == 0) { - dest_scan++; - dest_alpha_scan++; - continue; - } - uint8_t dest_alpha = back_alpha + src_alpha - back_alpha * src_alpha / 255; - *dest_alpha_scan++ = dest_alpha; - int alpha_ratio = src_alpha * 255 / dest_alpha; - *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, src_gray, alpha_ratio); - dest_scan++; - } -} - void CompositeRow_Argb2Argb_RgbByteOrder( pdfium::span<uint8_t> dest_span, pdfium::span<const uint8_t> src_span, @@ -3035,35 +2665,20 @@ } if (m_DestFormat == FXDIB_Format::k8bppMask) { if (GetIsAlphaFromFormat(m_SrcFormat)) { - if (m_SrcFormat == FXDIB_Format::kArgb) { - CompositeRow_AlphaToMask(dest_scan, src_scan, width, clip_scan, 4); - } else { - // TODO(thestig): Check if empty span argument is always empty. - CompositeRow_AlphaToMask(dest_scan, {}, width, clip_scan, 1); - } + DCHECK_EQ(m_SrcFormat, FXDIB_Format::kArgb); + CompositeRow_AlphaToMask(dest_scan, src_scan, width, clip_scan, 4); } else { CompositeRow_Rgb2Mask(dest_scan, width, clip_scan); } } else if (GetBppFromFormat(m_DestFormat) == 8) { + DCHECK(!GetIsAlphaFromFormat(m_DestFormat)); if (GetIsAlphaFromFormat(m_SrcFormat)) { - if (GetIsAlphaFromFormat(m_DestFormat)) { - // TODO(thestig): Check if empty span arguments are always empty. - CompositeRow_Argb2Graya(dest_scan, src_scan, width, m_BlendType, - clip_scan, {}, {}); - } else { - // TODO(thestig): Check if empty span argument is always empty. - CompositeRow_Argb2Gray(dest_scan, src_scan, width, m_BlendType, - clip_scan, {}); - } + // TODO(thestig): Check if empty span argument is always empty. + CompositeRow_Argb2Gray(dest_scan, src_scan, width, m_BlendType, clip_scan, + {}); } else { - if (GetIsAlphaFromFormat(m_DestFormat)) { - // TODO(thestig): Check if empty span argument is always empty. - CompositeRow_Rgb2Graya(dest_scan, src_scan, src_Bpp, width, m_BlendType, - clip_scan, {}); - } else { - CompositeRow_Rgb2Gray(dest_scan, src_scan, src_Bpp, width, m_BlendType, - clip_scan); - } + CompositeRow_Rgb2Gray(dest_scan, src_scan, src_Bpp, width, m_BlendType, + clip_scan); } } else { switch (m_iTransparency) { @@ -3168,29 +2783,16 @@ return; } if (GetBppFromFormat(m_DestFormat) == 8) { + DCHECK(!GetIsAlphaFromFormat(m_DestFormat)); if (m_iTransparency & 8) { - if (GetIsAlphaFromFormat(m_DestFormat)) { - // TODO(thestig): Check if empty span argument is always empty. - CompositeRow_1bppPal2Graya(dest_scan, src_scan, src_left, - m_SrcPalette.Get8BitPalette(), width, - m_BlendType, clip_scan, {}); - } else { - CompositeRow_1bppPal2Gray(dest_scan, src_scan, src_left, - m_SrcPalette.Get8BitPalette(), width, - m_BlendType, clip_scan); - } + CompositeRow_1bppPal2Gray(dest_scan, src_scan, src_left, + m_SrcPalette.Get8BitPalette(), width, + m_BlendType, clip_scan); } else { - if (GetIsAlphaFromFormat(m_DestFormat)) { - // TODO(thestig): Check if empty span arguments are always empty. - CompositeRow_8bppPal2Graya(dest_scan, src_scan, - m_SrcPalette.Get8BitPalette(), width, - m_BlendType, clip_scan, {}, {}); - } else { - // TODO(thestig): Check if empty span argument is always empty. - CompositeRow_8bppPal2Gray(dest_scan, src_scan, - m_SrcPalette.Get8BitPalette(), width, - m_BlendType, clip_scan, {}); - } + // TODO(thestig): Check if empty span argument is always empty. + CompositeRow_8bppPal2Gray(dest_scan, src_scan, + m_SrcPalette.Get8BitPalette(), width, + m_BlendType, clip_scan, {}); } } else { switch (m_iTransparency) { @@ -3241,14 +2843,9 @@ CompositeRow_ByteMask2Mask(dest_scan, src_scan, m_MaskAlpha, width, clip_scan); } else if (GetBppFromFormat(m_DestFormat) == 8) { - if (GetIsAlphaFromFormat(m_DestFormat)) { - // TODO(thestig): Check if empty span argument is always empty. - CompositeRow_ByteMask2Graya(dest_scan, src_scan, m_MaskAlpha, m_MaskRed, - width, clip_scan, {}); - } else { - CompositeRow_ByteMask2Gray(dest_scan, src_scan, m_MaskAlpha, m_MaskRed, - width, clip_scan); - } + DCHECK(!GetIsAlphaFromFormat(m_DestFormat)); + CompositeRow_ByteMask2Gray(dest_scan, src_scan, m_MaskAlpha, m_MaskRed, + width, clip_scan); } else if (m_bRgbByteOrder) { if (m_DestFormat == FXDIB_Format::kArgb) { CompositeRow_ByteMask2Argb_RgbByteOrder( @@ -3281,14 +2878,9 @@ CompositeRow_BitMask2Mask(dest_scan, src_scan, m_MaskAlpha, src_left, width, clip_scan); } else if (GetBppFromFormat(m_DestFormat) == 8) { - if (GetIsAlphaFromFormat(m_DestFormat)) { - // TODO(thestig): Check if empty span argument is always empty. - CompositeRow_BitMask2Graya(dest_scan, src_scan, m_MaskAlpha, m_MaskRed, - src_left, width, clip_scan, {}); - } else { - CompositeRow_BitMask2Gray(dest_scan, src_scan, m_MaskAlpha, m_MaskRed, - src_left, width, clip_scan); - } + DCHECK(!GetIsAlphaFromFormat(m_DestFormat)); + CompositeRow_BitMask2Gray(dest_scan, src_scan, m_MaskAlpha, m_MaskRed, + src_left, width, clip_scan); } else if (m_bRgbByteOrder) { if (m_DestFormat == FXDIB_Format::kArgb) { CompositeRow_BitMask2Argb_RgbByteOrder(