On 7/29/11 12:55 PM, Kostya Shishkov wrote:
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. --- 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;
Seems correct. _______________________________________________ libav-devel mailing list [email protected] https://lists.libav.org/mailman/listinfo/libav-devel
