From 6220fd4ab0055ae0f2925c49499139f3ea80bec3 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Frode=20Tenneb=C3=B8?= Date: Thu, 17 Oct 2013 21:24:11 +0200 Subject: [PATCH] Provide extradata also if the video is not palettized. All samples in tickets #4017, #5952 and #9546 plays nicely. MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit Signed-off-by: Rafaël Carré --- modules/demux/avi/avi.c | 19 ++++++++++--------- 1 file changed, 10 insertions(+), 9 deletions(-) diff --git a/modules/demux/avi/avi.c b/modules/demux/avi/avi.c index 8d1fca39a2..ef956787bf 100644 --- a/modules/demux/avi/avi.c +++ b/modules/demux/avi/avi.c @@ -537,6 +537,14 @@ static int Open( vlc_object_t * p_this ) fmt.video.i_sar_num = ((i_frame_aspect_ratio >> 16) & 0xffff) * fmt.video.i_height; fmt.video.i_sar_den = ((i_frame_aspect_ratio >> 0) & 0xffff) * fmt.video.i_width; } + /* Extradata is the remainder of the chunk less the BIH */ + fmt.i_extra = p_vids->i_chunk_size - sizeof(VLC_BITMAPINFOHEADER); + if( fmt.i_extra > 0 ) + { + fmt.p_extra = malloc( fmt.i_extra ); + if( !fmt.p_extra ) goto error; + memcpy( fmt.p_extra, &p_vids->p_bih[1], fmt.i_extra ); + } msg_Dbg( p_demux, "stream[%d] video(%4.4s) %"PRIu32"x%"PRIu32" %dbpp %ffps", i, (char*)&p_vids->p_bih->biCompression, @@ -552,20 +560,13 @@ static int Open( vlc_object_t * p_this ) (unsigned int)(-(int)p_vids->p_bih->biHeight); } - /* Extract palette from extradata if bpp <= 8 - * (assumes that extradata contains only palette but appears - * to be true for all palettized codecs we support) */ + /* Extract palette from extradata if bpp <= 8 */ if( fmt.video.i_bits_per_pixel > 0 && fmt.video.i_bits_per_pixel <= 8 ) { /* The palette should not be included in biSize, but come * directly after BITMAPINFORHEADER in the BITMAPINFO structure */ - fmt.i_extra = p_vids->i_chunk_size - sizeof(VLC_BITMAPINFOHEADER); - if( fmt.i_extra > 0 ) + if( fmt.i_extra > 0 && fmt.p_extra ) { - fmt.p_extra = malloc( fmt.i_extra ); - if( !fmt.p_extra ) goto error; - memcpy( fmt.p_extra, &p_vids->p_bih[1], fmt.i_extra ); - const uint8_t *p_pal = fmt.p_extra; fmt.video.p_palette = calloc( 1, sizeof(video_palette_t) ); -- 2.39.2