Module: libav
Branch: master
Commit: 42ba12888b9296977237f2bca0027d8b017011db

Author:    Kostya Shishkov <[email protected]>
Committer: Ronald S. Bultje <[email protected]>
Date:      Fri Jul 29 12:55:01 2011 +0200

Do not convert RGB buffer at once when stride does not fit exact samples.

When converting RGB format to RGB format with the same bits per sample,
unscaled path performs conversion on the whole buffer at once. For
non-multiple-of-16 BGR24 to RGB24 conversion it means that padding at the
end of line will be converted too. Since it may be of arbitrary length
(e.g. 8 bytes), operating on the whole buffer produces obviously wrong
results.

Signed-off-by: Ronald S. Bultje <[email protected]>

---

 libswscale/swscale_unscaled.c |    2 +-
 1 files changed, 1 insertions(+), 1 deletions(-)

diff --git a/libswscale/swscale_unscaled.c b/libswscale/swscale_unscaled.c
index 59f31c6..c0161c2 100644
--- a/libswscale/swscale_unscaled.c
+++ b/libswscale/swscale_unscaled.c
@@ -382,7 +382,7 @@ static int rgbToRgbWrapper(SwsContext *c, const uint8_t* 
src[], int srcStride[],
         if ((dstFormat == PIX_FMT_RGB32_1 || dstFormat == PIX_FMT_BGR32_1) && 
!isRGBA32(srcFormat))
             dstPtr += ALT32_CORR;
 
-        if (dstStride[0]*srcBpp == srcStride[0]*dstBpp && srcStride[0] > 0)
+        if (dstStride[0]*srcBpp == srcStride[0]*dstBpp && srcStride[0] > 0 && 
!(srcStride[0] % srcBpp))
             conv(srcPtr, dstPtr + dstStride[0]*srcSliceY, 
srcSliceH*srcStride[0]);
         else {
             int i;

_______________________________________________
libav-commits mailing list
[email protected]
https://lists.libav.org/mailman/listinfo/libav-commits

Reply via email to