aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorKostya Shishkov <kostya.shishkov@gmail.com>2011-07-29 12:55:01 +0200
committerRonald S. Bultje <rsbultje@gmail.com>2011-07-30 09:51:23 -0700
commit42ba12888b9296977237f2bca0027d8b017011db (patch)
tree19bd1ed5c9129c3fd5a754fed0a314bd8206f912
parent8a54bfe83f3387072fb2044096d073c973739ed1 (diff)
downloadffmpeg-42ba12888b9296977237f2bca0027d8b017011db.tar.gz
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 <rsbultje@gmail.com>
-rw-r--r--libswscale/swscale_unscaled.c2
1 files changed, 1 insertions, 1 deletions
diff --git a/libswscale/swscale_unscaled.c b/libswscale/swscale_unscaled.c
index 59f31c6f64..c0161c24e9 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;