From 8f3cf0f64cc01e6a59e7b3b276316fd2c383344f Mon Sep 17 00:00:00 2001 From: Nick Kurshev Date: Thu, 20 Feb 2003 16:14:12 +0000 Subject: [PATCH] sync with mplayerxp. Fixes some 405.avi related flaws Originally committed as revision 1593 to svn://svn.ffmpeg.org/ffmpeg/trunk --- libavcodec/libpostproc/postprocess.c | 29 ++++++++++++++++++++++++++--- 1 file changed, 26 insertions(+), 3 deletions(-) diff --git a/libavcodec/libpostproc/postprocess.c b/libavcodec/libpostproc/postprocess.c index cf93fa850..c03a36ed3 100644 --- a/libavcodec/libpostproc/postprocess.c +++ b/libavcodec/libpostproc/postprocess.c @@ -800,6 +800,7 @@ void pp_postprocess(uint8_t * src[3], int srcStride[3], { int mbWidth = (width+15)>>4; int mbHeight= (height+15)>>4; + int horz_size,vert_size; PPMode *mode = (PPMode*)vm; PPContext *c = (PPContext*)vc; int minStride= MAX(srcStride[0], dstStride[0]); @@ -847,18 +848,40 @@ for(y=0; ylumMode, mode->chromMode); } + /* special case for 405.avi: (width=356)%8 !=0 */ + horz_size = (width / BLOCK_SIZE) * BLOCK_SIZE; + postProcess(src[0], srcStride[0], dst[0], dstStride[0], - width, height, QP_store, QPStride, 0, mode, c); + horz_size, height, QP_store, QPStride, 0, mode, c); + + if(horz_size < width) + { + unsigned y,tail; + tail = width-horz_size; + for(y=0; y>c->hChromaSubSample; + horz_size = (width / BLOCK_SIZE) * BLOCK_SIZE; height = (height)>>c->vChromaSubSample; if(mode->chromMode) { postProcess(src[1], srcStride[1], dst[1], dstStride[1], - width, height, QP_store, QPStride, 1, mode, c); + horz_size, height, QP_store, QPStride, 1, mode, c); postProcess(src[2], srcStride[2], dst[2], dstStride[2], - width, height, QP_store, QPStride, 2, mode, c); + horz_size, height, QP_store, QPStride, 2, mode, c); + if(horz_size < width) + { + unsigned y,tail; + tail = width-horz_size; + for(y=0; y