Commit 6220fd4a authored by Frode Tennebø's avatar Frode Tennebø Committed by Rafaël Carré

Provide extradata also if the video is not palettized. All samples in tickets...

Provide extradata also if the video is not palettized. All samples in tickets #4017, #5952 and #9546 plays nicely.
Signed-off-by: default avatarRafaël Carré <funman@videolan.org>
parent c9314730
...@@ -537,6 +537,14 @@ static int Open( vlc_object_t * p_this ) ...@@ -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_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; 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", msg_Dbg( p_demux, "stream[%d] video(%4.4s) %"PRIu32"x%"PRIu32" %dbpp %ffps",
i, (char*)&p_vids->p_bih->biCompression, i, (char*)&p_vids->p_bih->biCompression,
...@@ -552,20 +560,13 @@ static int Open( vlc_object_t * p_this ) ...@@ -552,20 +560,13 @@ static int Open( vlc_object_t * p_this )
(unsigned int)(-(int)p_vids->p_bih->biHeight); (unsigned int)(-(int)p_vids->p_bih->biHeight);
} }
/* Extract palette from extradata if bpp <= 8 /* Extract palette from extradata if bpp <= 8 */
* (assumes that extradata contains only palette but appears
* to be true for all palettized codecs we support) */
if( fmt.video.i_bits_per_pixel > 0 && fmt.video.i_bits_per_pixel <= 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 /* The palette should not be included in biSize, but come
* directly after BITMAPINFORHEADER in the BITMAPINFO structure */ * directly after BITMAPINFORHEADER in the BITMAPINFO structure */
fmt.i_extra = p_vids->i_chunk_size - sizeof(VLC_BITMAPINFOHEADER); if( fmt.i_extra > 0 && fmt.p_extra )
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 );
const uint8_t *p_pal = fmt.p_extra; const uint8_t *p_pal = fmt.p_extra;
fmt.video.p_palette = calloc( 1, sizeof(video_palette_t) ); fmt.video.p_palette = calloc( 1, sizeof(video_palette_t) );
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment