[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