[poppler] splash/Splash.cc
Albert Astals Cid
aacid at kemper.freedesktop.org
Thu Jul 5 14:10:32 UTC 2018
splash/Splash.cc | 28 +++++++++++++++++++---------
1 file changed, 19 insertions(+), 9 deletions(-)
New commits:
commit e607d9c4a0057c390c59e306f6dc010aea2125ee
Author: Stefan BrĂ¼ns <stefan.bruens at rwth-aachen.de>
Date: Sun May 20 19:31:53 2018 +0200
Small optimization for AABGR8 pipes
Skip some computations if both src and dest alpha are zero, or if
src is fully opaque. Equivalent to Commit f47936af7508A
("Small optimization for AAXRGB8 pipes").
diff --git a/splash/Splash.cc b/splash/Splash.cc
index 31896066..90cdf126 100644
--- a/splash/Splash.cc
+++ b/splash/Splash.cc
@@ -1191,25 +1191,35 @@ void Splash::pipeRunAABGR8(SplashPipe *pipe) {
SplashColor cDest;
Guchar cResult0, cResult1, cResult2;
- //----- read destination pixel
- cDest[0] = pipe->destColorPtr[2];
- cDest[1] = pipe->destColorPtr[1];
- cDest[2] = pipe->destColorPtr[0];
+ //----- read destination alpha
aDest = *pipe->destAlphaPtr;
//----- source alpha
aSrc = div255(pipe->aInput * pipe->shape);
- //----- result alpha and non-isolated group element correction
- aResult = aSrc + aDest - div255(aSrc * aDest);
- alpha2 = aResult;
-
//----- result color
- if (alpha2 == 0) {
+ if (aSrc == 255) {
+ cResult0 = state->rgbTransferR[pipe->cSrc[0]];
+ cResult1 = state->rgbTransferG[pipe->cSrc[1]];
+ cResult2 = state->rgbTransferB[pipe->cSrc[2]];
+ aResult = 255;
+
+ } else if (aSrc == 0 && aDest == 0) {
cResult0 = 0;
cResult1 = 0;
cResult2 = 0;
+ aResult = 0;
+
} else {
+ //----- read destination color
+ cDest[0] = pipe->destColorPtr[2];
+ cDest[1] = pipe->destColorPtr[1];
+ cDest[2] = pipe->destColorPtr[0];
+
+ //----- result alpha and non-isolated group element correction
+ aResult = aSrc + aDest - div255(aSrc * aDest);
+ alpha2 = aResult;
+
cResult0 = state->rgbTransferR[(Guchar)(((alpha2 - aSrc) * cDest[0] +
aSrc * pipe->cSrc[0]) / alpha2)];
cResult1 = state->rgbTransferG[(Guchar)(((alpha2 - aSrc) * cDest[1] +
More information about the poppler
mailing list