[prev in list] [next in list] [prev in thread] [next in thread] 

List:       kde-kimageshop
Subject:    Re: Need some help with colorspaces
From:       Dmitry Kazakov <dimula73 () gmail ! com>
Date:       2009-08-04 9:57:55
Message-ID: ae32c1ef0908040257s5ef4d96t88d6d4dfa56b3120 () mail ! gmail ! com
[Download RAW message or body]

>
> Does it happen with all colorspace ?
>
I've just fixed the bug. =(
It is in KoColorSpace::bitBlt. There was some strange rowStride
post-calculation in it. The patch is in attachment. Should i put it to
reviewboard or just commit?

-- 
Dmitry Kazakov

["01_colorspace_bitblt_rowstride.diff" (text/x-patch)]

Index: KoColorSpace.cpp
===================================================================
--- KoColorSpace.cpp	(revision 1000698)
+++ KoColorSpace.cpp	(working copy)
@@ -319,7 +319,7 @@
 }
 
 void KoColorSpace::bitBlt(quint8 *dst,
-                          qint32 dststride,
+                          qint32 dstRowStride,
                           const KoColorSpace * srcSpace,
                           const quint8 *src,
                           qint32 srcRowStride,
@@ -338,29 +338,27 @@
 
     if (!(*this == *srcSpace)) {
 
-        quint32 len = pixelSize() * rows * cols;
+	quint32 conversionBufferStride = cols * pixelSize();
+        QVector<quint8> * conversionCache = 
+	    threadLocalConversionCache(rows * conversionBufferStride);
 
-        QVector<quint8> * conversionCache = threadLocalConversionCache(len);
-        quint8* conversionData = conversionCache->data();
+	quint8* conversionData = conversionCache->data();
 
         for (qint32 row = 0; row < rows; row++) {
             srcSpace->convertPixelsTo(src + row * srcRowStride,
-                                      conversionData + row * cols * pixelSize(), this,
-                                      cols);
+                                      conversionData + row * conversionBufferStride,
+				      this, cols);
         }
 
-        // The old srcRowStride is no longer valid because we converted to the current cs
-        srcRowStride = (srcRowStride / srcSpace->pixelSize()) * pixelSize();
-
-        op->composite( dst, dststride,
-                       conversionData, srcRowStride,
+        op->composite( dst, dstRowStride,
+                       conversionData, conversionBufferStride,
                        srcAlphaMask, maskRowStride,
                        rows,  cols,
                        opacity, channelFlags );
 
     }
     else {
-        op->composite( dst, dststride,
+        op->composite( dst, dstRowStride,
                        src, srcRowStride,
                        srcAlphaMask, maskRowStride,
                        rows,  cols,
@@ -372,7 +370,7 @@
 //      extra function call in this critical section of code. What to
 //      do?
 void KoColorSpace::bitBlt(quint8 *dst,
-                          qint32 dststride,
+                          qint32 dstRowStride,
                           const KoColorSpace * srcSpace,
                           const quint8 *src,
                           qint32 srcRowStride,
@@ -389,32 +387,30 @@
         return;
 
     if (this != srcSpace) {
-        quint32 len = pixelSize() * rows * cols;
+	quint32 conversionBufferStride = cols * pixelSize();
+        QVector<quint8> * conversionCache = 
+	    threadLocalConversionCache(rows * conversionBufferStride);
 
-        QVector<quint8> * conversionCache = threadLocalConversionCache(len);
         quint8* conversionData = conversionCache->data();
 
         for (qint32 row = 0; row < rows; row++) {
             srcSpace->convertPixelsTo(src + row * srcRowStride,
-                                      conversionData + row * cols * pixelSize(), this,
+                                      conversionData + row * conversionBufferStride, this,
                                       cols);
         }
 
-        // The old srcRowStride is no longer valid because we converted to the current cs
-        srcRowStride = cols * pixelSize();
-
-        op->composite( dst, dststride,
-                       conversionData, srcRowStride,
+        op->composite( dst, dstRowStride,
+                       conversionData, conversionBufferStride,
                        srcAlphaMask, maskRowStride,
                        rows,  cols,
                        opacity);
 
     }
     else {
-        op->composite( dst, dststride,
-                       src,srcRowStride,
+        op->composite( dst, dstRowStride,
+                       src, srcRowStride,
                        srcAlphaMask, maskRowStride,
-                       rows,  cols,
+                       rows, cols,
                        opacity);
     }
 }


_______________________________________________
kimageshop mailing list
kimageshop@kde.org
https://mail.kde.org/mailman/listinfo/kimageshop


[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic