[vlc-devel] commit: Fixed segfault when doing rendering without respecting ffmpeg requirements . (Laurent Aimar )

git version control git at videolan.org
Sat Mar 14 12:21:07 CET 2009


vlc | branch: 0.9-bugfix | Laurent Aimar <fenrir at videolan.org> | Sun Mar  8 20:08:15 2009 +0100| [117c8f884a300c7419beb0b0b5904688fa379b2e] | committer: Rémi Denis-Courmont 

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 <aballier at gentoo.org>
Signed-off-by: Rémi Denis-Courmont <remi at remlab.net>

> http://git.videolan.org/gitweb.cgi/vlc.git/?a=commit;h=117c8f884a300c7419beb0b0b5904688fa379b2e
---

 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;




More information about the vlc-devel mailing list