Hello community,

here is the log from the commit of package ghostscript-library for openSUSE:11.4
checked in at Tue May 10 17:31:38 CEST 2011.



--------
--- old-versions/11.4/all/ghostscript-library/ghostscript-library.changes       
2011-01-18 10:55:06.000000000 +0100
+++ 11.4/ghostscript-library/ghostscript-library.changes        2011-05-05 
16:26:12.000000000 +0200
@@ -1,0 +2,7 @@
+Thu May  5 16:23:07 CEST 2011 - [email protected]
+
+- gs.svn_diff-c_12005.diff fixes
+  http://bugs.ghostscript.com/show_bug.cgi?id=691760
+  which is the upstream bug for bnc#681071.
+
+-------------------------------------------------------------------
ghostscript-mini.changes: same change

Package does not exist at destination yet. Using Fallback 
old-versions/11.4/all/ghostscript-library
Destination is old-versions/11.4/UPDATES/all/ghostscript-library
calling whatdependson for 11.4-i586


New:
----
  gs.svn_diff-c_12005.diff

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Other differences:
------------------
++++++ ghostscript-library.spec ++++++
--- /var/tmp/diff_new_pack.SUlh0V/_old  2011-05-10 17:30:38.000000000 +0200
+++ /var/tmp/diff_new_pack.SUlh0V/_new  2011-05-10 17:30:38.000000000 +0200
@@ -124,6 +124,9 @@
 Patch53:        ghostscript-9.00-jbig2broken.dif
 Patch54:        ghostscript-9.00-bnc559122.patch
 Patch55:        gs-9.00-implicit-fortify-decl.patch
+# Patch56 gs.svn_diff-c_12005.diff fixes 
http://bugs.ghostscript.com/show_bug.cgi?id=691760
+# which is the upstream bug for bnc#681071
+Patch56:        gs.svn_diff-c_12005.diff
 BuildRoot:      %{_tmppath}/%{name}-%{version}-build
 %if 0%{?suse_version:%{suse_version}} > 1010
 %define xfontdir   /usr/share/fonts
@@ -434,6 +437,9 @@
 #Patch0:         ghostscript-8.70.dif
 %patch0  -p0 -b .0
 %patch55 -p1
+# Patch56 gs.svn_diff-c_12005.diff fixes 
http://bugs.ghostscript.com/show_bug.cgi?id=691760
+# which is the upstream bug for bnc#681071
+%patch56 -p0 -b .r12005
 
 %build
   test ! -f /.buildenv || . /.buildenv

ghostscript-mini.spec: same change




++++++ gs.svn_diff-c_12005.diff ++++++
Index: base/gdevp14.c
===================================================================
--- base/gdevp14.c      (revision 12004)
+++ base/gdevp14.c      (revision 12005)
@@ -900,7 +900,11 @@
                         nos->parent_color_info_procs->num_components, 1,
                                   false, false, true, tos->planestride, 
                                   tos->rowstride, num_rows, num_cols);
-                    /* Transform the data */
+                    /* Transform the data. Since the pdf14 device should be
+                       using RGB, CMYK or Gray buffers, this transform 
+                       does not need to worry about the cmap procs of 
+                       the target device.  Those are handled when we do
+                       the pdf14 put image operation */
                     gscms_transform_color_buffer(icc_link, &input_buff_desc, 
                                         &output_buff_desc, tos->data, 
                                         new_data_buf);
Index: base/gxicolor.c
===================================================================
--- base/gxicolor.c     (revision 12004)
+++ base/gxicolor.c     (revision 12005)
@@ -97,6 +97,8 @@
 irender_proc_t
 gs_image_class_4_color(gx_image_enum * penum)
 {
+    bool std_cmap_procs;
+
     if (penum->use_mask_color) {
        /*
         * Scale the mask colors to match the scaling of each sample to
@@ -128,8 +130,14 @@
        penum->mask_color.mask = 0;
        penum->mask_color.test = ~0;
     }
+    /* If the device has some unique color mapping procs due to its color 
space,
+       then we will need to use those and go through pixel by pixel instead
+       of blasting through buffers.  This is true for example with many of 
+       the color spaces for CUPs */
+    std_cmap_procs = gx_device_uses_std_cmap_procs(penum->dev);
     if ( (gs_color_space_get_index(penum->pcs) == gs_color_space_index_DeviceN 
&&
-        penum->pcs->cmm_icc_profile_data == NULL) || penum->use_mask_color ) {
+        penum->pcs->cmm_icc_profile_data == NULL) || penum->use_mask_color ||
+        !std_cmap_procs) {
         return &image_render_color_DeviceN;
     } else {
         /* Set up the link now */
Index: base/gxcmap.c
===================================================================
--- base/gxcmap.c       (revision 12004)
+++ base/gxcmap.c       (revision 12005)
@@ -31,6 +31,7 @@
 #include "gsicc_manage.h"
 #include "gdevdevn.h"
 #include "gsicc_cache.h"
+#include "gscms.h"
 
 /* Structure descriptor */
 public_st_device_color();
@@ -1744,3 +1745,37 @@
 
     }
 }
+
+bool
+gx_device_uses_std_cmap_procs(gx_device * dev) 
+{
+    const gx_cm_color_map_procs *pprocs;
+
+    if (dev->device_icc_profile != NULL) {
+        pprocs = dev_proc(dev, get_color_mapping_procs)(dev);
+        /* Check if they are forwarding procs */
+        if (fwd_uses_fwd_cmap_procs(dev)) {
+            pprocs = fwd_get_target_cmap_procs(dev);
+        } 
+        switch(dev->device_icc_profile->data_cs) {
+            case gsGRAY:
+                if (pprocs == &DeviceGray_procs) {
+                    return true;
+                }
+                break;
+            case gsRGB:        
+                if (pprocs == &DeviceRGB_procs) {
+                    return true;
+                }
+                break;
+            case gsCMYK:
+                if (pprocs == &DeviceCMYK_procs) {
+                    return true;
+                }
+                break;
+            default:
+                break;
+        }
+    } 
+    return false;
+}
Index: base/gxcmap.h
===================================================================
--- base/gxcmap.h       (revision 12004)
+++ base/gxcmap.h       (revision 12005)
@@ -284,5 +284,11 @@
  * [0,1]
  */
 frac gx_unit_frac(float fvalue);
+/* Determine if the device is using the standard color mapping procs.  In
+   such a case, we can make use of the faster icc color conversions for 
+   images */
+bool gx_device_uses_std_cmap_procs(gx_device * dev);
+bool fwd_uses_fwd_cmap_procs(gx_device * dev);
+const gx_cm_color_map_procs* fwd_get_target_cmap_procs(gx_device * dev);
 
 #endif /* gxcmap_INCLUDED */
Index: base/gxi12bit.c
===================================================================
--- base/gxi12bit.c     (revision 12004)
+++ base/gxi12bit.c     (revision 12005)
@@ -113,6 +113,8 @@
 irender_proc_t
 gs_image_class_2_fracs(gx_image_enum * penum)
 {
+    bool std_cmap_procs;
+
     if (penum->bps > 8) {
        if (penum->use_mask_color) {
            /* Convert color mask values to fracs. */
@@ -122,9 +124,14 @@
                penum->mask_color.values[i] =
                    bits2frac(penum->mask_color.values[i], 12);
        }
+        /* If the device has some unique color mapping procs due to its color 
space,
+           then we will need to use those and go through pixel by pixel instead
+           of blasting through buffers.  This is true for example with many of 
+           the color spaces for CUPs */
+        std_cmap_procs = gx_device_uses_std_cmap_procs(penum->dev);
         if ( (gs_color_space_get_index(penum->pcs) == 
gs_color_space_index_DeviceN &&
             penum->pcs->cmm_icc_profile_data == NULL) || penum->use_mask_color 
|| 
-            penum->bps != 16 || 
+            penum->bps != 16 || !std_cmap_procs ||
             gs_color_space_get_index(penum->pcs) == 
gs_color_space_index_DevicePixel) { 
             /* DevicePixel color space used in mask from 3x type.  Basically
                a simple color space that just is scaled to the device bit 
Index: base/lib.mak
===================================================================
--- base/lib.mak        (revision 12004)
+++ base/lib.mak        (revision 12005)
@@ -602,7 +602,7 @@
  $(gxalpha_h) $(gxcspace_h) $(gxfarith_h) $(gxfrac_h)\
  $(gxdcconv_h) $(gxdevice_h) $(gxcmap_h) $(gsnamecl_h) $(gxlum_h)\
  $(gzstate_h) $(gxdither_h) $(gxcdevn_h) $(string__h)\
- $(gsicc_manage_h) $(gdevdevn_h) $(gsicc_cache_h)
+ $(gsicc_manage_h) $(gdevdevn_h) $(gsicc_cache_h) $(gscms_h)
        $(GLCC) $(GLO_)gxcmap.$(OBJ) $(C_) $(GLSRC)gxcmap.c
 
 $(GLOBJ)gxcpath.$(OBJ) : $(GLSRC)gxcpath.c $(GXERR)\
Index: base/gxiscale.c
===================================================================
--- base/gxiscale.c     (revision 12004)
+++ base/gxiscale.c     (revision 12005)
@@ -104,6 +104,13 @@
         != penum->dev->color_info.num_components) {
         use_icc = false;
     }
+    /* If the device has some unique color mapping procs due to its color 
space,
+       then we will need to use those and go through pixel by pixel instead
+       of blasting through buffers.  This is true for example with many of 
+       the color spaces for CUPs */
+    if(!gx_device_uses_std_cmap_procs(penum->dev)) {
+        use_icc = false;
+    }
 /*
  * USE_CONSERVATIVE_INTERPOLATION_RULES is normally NOT defined since
  * the MITCHELL digital filter seems OK as long as we are going out to
Index: base/gdevnfwd.c
===================================================================
--- base/gdevnfwd.c     (revision 12004)
+++ base/gdevnfwd.c     (revision 12005)
@@ -1117,3 +1117,29 @@
 {
     return 0;
 }
+
+bool
+fwd_uses_fwd_cmap_procs(gx_device * dev) 
+{
+    const gx_cm_color_map_procs *pprocs;
+
+    pprocs = dev_proc(dev, get_color_mapping_procs)(dev);
+    if (pprocs == &FwdDevice_cm_map_procs) {
+        return true;
+    }
+    return false;
+}
+
+const gx_cm_color_map_procs*
+fwd_get_target_cmap_procs(gx_device * dev)
+{
+    const gx_cm_color_map_procs *pprocs;
+    gx_device_forward * const fdev = (gx_device_forward *)dev;
+    gx_device * const tdev = fdev->target;
+
+    pprocs = dev_proc(tdev, get_color_mapping_procs(tdev));
+    while (pprocs == &FwdDevice_cm_map_procs) {
+        pprocs = fwd_get_target_cmap_procs(tdev);
+    }
+    return pprocs;
+}
\ No newline at end of file


++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++



Remember to have fun...

-- 
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to