[Pkg-javascript-commits] [pdf.js] 224/246: CalRGB: optimize CalRGB calculations

David Prévot taffit at moszumanska.debian.org
Sun Sep 7 15:36:43 UTC 2014


This is an automated email from the git hooks/post-receive script.

taffit pushed a commit to branch master
in repository pdf.js.

commit 0c5525dc8ab8e47e0ed3ab8181da77c538804bf5
Author: Kalervo Kujala <kkujala at com>
Date:   Sat Aug 16 11:37:52 2014 +0300

    CalRGB: optimize CalRGB calculations
    
    Also fix one silly mistake.
---
 src/core/colorspace.js  | 46 +++++++++++++++++++++++++++++++++-------------
 test/pdfs/calrgb.pdf    | 12 ++++++------
 test/test_manifest.json |  2 +-
 3 files changed, 40 insertions(+), 20 deletions(-)

diff --git a/src/core/colorspace.js b/src/core/colorspace.js
index b012b75..361b486 100644
--- a/src/core/colorspace.js
+++ b/src/core/colorspace.js
@@ -829,6 +829,8 @@ var CalRGBCS = (function CalRGBCSClosure() {
   var tempConvertMatrix1 = new Float32Array(3);
   var tempConvertMatrix2 = new Float32Array(3);
 
+  var DECODE_L_CONSTANT = Math.pow(((8 + 16) / 116), 3) / 8.0;
+
   function CalRGBCS(whitePoint, blackPoint, gamma, matrix) {
     this.name = 'CalRGB';
     this.numComps = 3;
@@ -937,18 +939,30 @@ var CalRGBCS = (function CalRGBCSClosure() {
       return -decodeL(-L);
     }
 
-    if (L > 80) {
+    if (L > 8.0) {
       return Math.pow(((L + 16) / 116), 3);
     }
 
-    return L * Math.pow(((8 + 16) / 116), 3) / 8.0;
+    return L * DECODE_L_CONSTANT;
   }
 
   function compensateBlackPoint(sourceBlackPoint, XYZ_Flat, result) {
-    // For the BlackPoint calculation details, please see
+
+    // In case the blackPoint is already the default blackPoint then there is
+    // no need to do compensation.
+    if (sourceBlackPoint[0] === 0 &&
+        sourceBlackPoint[1] === 0 &&
+        sourceBlackPoint[2] === 0) {
+      result[0] = XYZ_Flat[0];
+      result[1] = XYZ_Flat[1];
+      result[2] = XYZ_Flat[2];
+      return;
+    }
+
+    // For the blackPoint calculation details, please see
     // http://www.adobe.com/content/dam/Adobe/en/devnet/photoshop/sdk/
     // AdobeBPC.pdf.
-    // The destination BlackPoint is the default BlackPoint [0, 0, 0].
+    // The destination blackPoint is the default blackPoint [0, 0, 0].
     var zeroDecodeL = decodeL(0);
 
     var X_DST = zeroDecodeL;
@@ -976,6 +990,15 @@ var CalRGBCS = (function CalRGBCSClosure() {
 
   function normalizeWhitePointToFlat(sourceWhitePoint, XYZ_In, result) {
 
+    // In case the whitePoint is already flat then there is no need to do
+    // normalization.
+    if (sourceWhitePoint[0] === 1 && sourceWhitePoint[2] === 1) {
+      result[0] = XYZ_In[0];
+      result[1] = XYZ_In[1];
+      result[2] = XYZ_In[2];
+      return;
+    }
+
     var LMS = result;
     matrixProduct(BRADFORD_SCALE_MATRIX, XYZ_In, LMS);
 
@@ -1010,15 +1033,11 @@ var CalRGBCS = (function CalRGBCSClosure() {
     var BGG = Math.pow(B, cs.GG);
     var CGB = Math.pow(C, cs.GB);
 
-    // Computes intermediate variables M, L, N as per spec.
-    var M = cs.MXA * AGR + cs.MXB * BGG + cs.MXC * CGB;
-    var L = cs.MYA * AGR + cs.MYB * BGG + cs.MYC * CGB;
-    var N = cs.MZA * AGR + cs.MZB * BGG + cs.MZC * CGB;
-
-    // Decode XYZ, as per spec.
-    var X = M;
-    var Y = L;
-    var Z = N;
+    // Computes intermediate variables L, M, N as per spec.
+    // To decode X, Y, Z values map L, M, N directly to them.
+    var X = cs.MXA * AGR + cs.MXB * BGG + cs.MXC * CGB;
+    var Y = cs.MYA * AGR + cs.MYB * BGG + cs.MYC * CGB;
+    var Z = cs.MZA * AGR + cs.MZB * BGG + cs.MZC * CGB;
 
     // The following calculations are based on this document:
     // http://www.adobe.com/content/dam/Adobe/en/devnet/photoshop/sdk/
@@ -1028,6 +1047,7 @@ var CalRGBCS = (function CalRGBCSClosure() {
     XYZ[1] = Y;
     XYZ[2] = Z;
     var XYZ_Flat = tempConvertMatrix2;
+
     normalizeWhitePointToFlat(cs.whitePoint, XYZ, XYZ_Flat);
 
     var XYZ_Black = tempConvertMatrix1;
diff --git a/test/pdfs/calrgb.pdf b/test/pdfs/calrgb.pdf
index 5ec7396..420bf3c 100644
--- a/test/pdfs/calrgb.pdf
+++ b/test/pdfs/calrgb.pdf
@@ -10,8 +10,8 @@
   /Keywords (CalRGB, Color Space, Example, Test PDF)                                              %
   /Creator (genpdf.py)                                                                            %
   /Producer (genpdf.py)                                                                           %
-  /CreationDate (D:20140814232935+02'00')       %
-  /ModDate (D:20140814232935+02'00')            %
+  /CreationDate (D:20140816112719+02'00')       %
+  /ModDate (D:20140816112719+02'00')            %
   /Trapped (False)                              %
                                                 %
 >>                                              %
@@ -5569,7 +5569,7 @@ endobj
 47 0 obj                                        %
 [ /CalRGB                                       %
 << /WhitePoint [ 1.00000 1.00000 1.00000 ]      %
-   /BlackPoint [ 80.0000 80.0000 80.0000 ]      %
+   /BlackPoint [ 8.00000 8.00000 8.00000 ]      %
    /Gamma [ 1.00000 1.00000 1.00000 ]           %
    /Matrix [ 1.00000 0.00000 0.00000 0.00000 1.00000 0.00000 0.00000 0.00000 1.00000 ]            %
 >>                                              %
@@ -6071,7 +6071,7 @@ stream
  -400   530  Td        %
  (WhitePoint [ 1.00000 1.00000 1.00000 ]) Tj    %
     0  -15  Td         %
- (BlackPoint [ 80.0000 80.0000 80.0000 ]) Tj    %
+ (BlackPoint [ 8.00000 8.00000 8.00000 ]) Tj    %
     0  -15  Td         %
  (Gamma [ 1.00000 1.00000 1.00000 ]) Tj         %
     0  -15  Td         %
@@ -6111,7 +6111,7 @@ endobj
 51 0 obj                                        %
 [ /CalRGB                                       %
 << /WhitePoint [ 1.00000 1.00000 1.00000 ]      %
-   /BlackPoint [ 81.0000 81.0000 81.0000 ]      %
+   /BlackPoint [ 50.0000 50.0000 50.0000 ]      %
    /Gamma [ 1.00000 1.00000 1.00000 ]           %
    /Matrix [ 1.00000 0.00000 0.00000 0.00000 1.00000 0.00000 0.00000 0.00000 1.00000 ]            %
 >>                                              %
@@ -6613,7 +6613,7 @@ stream
  -400   530  Td        %
  (WhitePoint [ 1.00000 1.00000 1.00000 ]) Tj    %
     0  -15  Td         %
- (BlackPoint [ 81.0000 81.0000 81.0000 ]) Tj    %
+ (BlackPoint [ 50.0000 50.0000 50.0000 ]) Tj    %
     0  -15  Td         %
  (Gamma [ 1.00000 1.00000 1.00000 ]) Tj         %
     0  -15  Td         %
diff --git a/test/test_manifest.json b/test/test_manifest.json
index 71068a6..607f0cc 100644
--- a/test/test_manifest.json
+++ b/test/test_manifest.json
@@ -1693,7 +1693,7 @@
     },
     {  "id": "calrgb",
        "file": "pdfs/calrgb.pdf",
-       "md5": "5f3dfda1d3a795cd214a457244130bfa",
+       "md5": "625068e9a7dd80e4f70b24ce97b3ec5c",
        "rounds": 1,
        "lastPage": 8,
        "type": "eq"

-- 
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/pkg-javascript/pdf.js.git



More information about the Pkg-javascript-commits mailing list