From 7aa5ac93bc54fc1d52a377fb11401b96e709bd7f Mon Sep 17 00:00:00 2001 From: Laurent Aimar Date: Tue, 28 Apr 2009 19:26:37 +0200 Subject: [PATCH] Fixed extra data parsing with some VC1 streams. --- modules/packetizer/vc1.c | 29 +++++++++++++++++++++-------- 1 file changed, 21 insertions(+), 8 deletions(-) diff --git a/modules/packetizer/vc1.c b/modules/packetizer/vc1.c index 9981eaa0b2..e62894057d 100644 --- a/modules/packetizer/vc1.c +++ b/modules/packetizer/vc1.c @@ -155,17 +155,30 @@ static int Open( vlc_object_t *p_this ) p_sys->i_interpolated_dts = -1; - - if( p_dec->fmt_in.i_extra > 0 ) + /* */ + if( p_dec->fmt_out.i_extra > 0 ) { - block_t *p_init = block_New( p_dec, p_dec->fmt_in.i_extra ); - block_t *p_pic; + uint8_t *p_extra = p_dec->fmt_out.p_extra; - memcpy( p_init->p_buffer, p_dec->fmt_in.p_extra, - p_dec->fmt_in.i_extra ); + /* With (some) ASF the first byte has to be stripped */ + if( p_extra[0] != 0x00 ) + { + memcpy( &p_extra[0], &p_extra[1], p_dec->fmt_out.i_extra - 1 ); + p_dec->fmt_out.i_extra--; + } - while( ( p_pic = Packetize( p_dec, &p_init ) ) ) - block_Release( p_pic ); /* Should not happen (only sequence header) */ + /* */ + if( p_dec->fmt_out.i_extra > 0 ) + { + block_t *p_init = block_New( p_dec, p_dec->fmt_out.i_extra ); + + memcpy( p_init->p_buffer, p_dec->fmt_out.p_extra, + p_dec->fmt_out.i_extra ); + + block_t *p_pic; + while( ( p_pic = Packetize( p_dec, &p_init ) ) ) + block_Release( p_pic ); /* Should not happen (only sequence header) */ + } } return VLC_SUCCESS; -- 2.39.2