From 96bf499647b6be03ebeb4c3542d48aa2ba6cc15f Mon Sep 17 00:00:00 2001 From: Laurent Aimar Date: Fri, 29 Aug 2008 12:10:43 +0200 Subject: [PATCH] Fixed segfault when doing rendering without respecting ffmpeg requirements. It fixes at least SVQ1 segfaults. (cherry picked from commit 07c44496532d7e2cb58c58443b26b59c0f3c654c) References: https://bugs.gentoo.org/show_bug.cgi?id=261628 Samples: http://bad-candy.com/candies/fizzymilk/images/badfizz.mov http://samples.mplayerhq.hu/V-codecs/SVQ1/blue_earth.mov Signed-off-by: Alexis Ballier --- modules/codec/avcodec/video.c | 11 +++++++++-- 1 files changed, 9 insertions(+), 2 deletions(-) diff --git a/modules/codec/avcodec/video.c b/modules/codec/avcodec/video.c index 2baffa8..3fa837e 100644 --- a/modules/codec/avcodec/video.c +++ b/modules/codec/avcodec/video.c @@ -816,9 +816,16 @@ static int ffmpeg_GetFrameBuf( struct AVCodecContext *p_context, } /* Some codecs set pix_fmt only after the 1st frame has been decoded, - * so this check is necessary. */ + * so we need to check for direct rendering again. */ + + int i_width = p_sys->p_context->width; + int i_height = p_sys->p_context->height; + avcodec_align_dimensions( p_sys->p_context, &i_width, &i_height ); + if( GetVlcChroma( &p_dec->fmt_out.video, p_context->pix_fmt ) != VLC_SUCCESS || - p_sys->p_context->width % 16 || p_sys->p_context->height % 16 ) + p_sys->p_context->width % 16 || p_sys->p_context->height % 16 || + /* We only pad picture up to 16 */ + PAD(p_sys->p_context->width,16) < i_width || PAD(p_sys->p_context->height,16) < i_height ) { msg_Dbg( p_dec, "disabling direct rendering" ); p_sys->b_direct_rendering = 0; -- 1.6.2