@ -47,6 +47,8 @@ static void mpegvideo_extract_headers(AVCodecParserContext *s,
int set_dim_ret = 0 ;
int bit_rate = 0 ;
int vbv_delay = 0 ;
int chroma_format ;
enum AVPixelFormat pix_fmt = AV_PIX_FMT_NONE ;
//FIXME replace the crap with get_bits()
s - > repeat_pict = 0 ;
@ -70,6 +72,7 @@ static void mpegvideo_extract_headers(AVCodecParserContext *s,
set_dim_ret = ff_set_dimensions ( avctx , pc - > width , pc - > height ) ;
did_set_size = 1 ;
}
pix_fmt = AV_PIX_FMT_YUV420P ;
frame_rate_index = buf [ 3 ] & 0xf ;
pc - > frame_rate = avctx - > framerate = ff_mpeg12_frame_rate_tab [ frame_rate_index ] ;
bit_rate = ( buf [ 4 ] < < 10 ) | ( buf [ 5 ] < < 2 ) | ( buf [ 6 ] > > 6 ) ;
@ -91,6 +94,13 @@ static void mpegvideo_extract_headers(AVCodecParserContext *s,
pc - > progressive_sequence = buf [ 1 ] & ( 1 < < 3 ) ;
avctx - > has_b_frames = ! ( buf [ 5 ] > > 7 ) ;
chroma_format = ( buf [ 1 ] > > 1 ) & 3 ;
switch ( chroma_format ) {
case 1 : pix_fmt = AV_PIX_FMT_YUV420P ; break ;
case 2 : pix_fmt = AV_PIX_FMT_YUV422P ; break ;
case 3 : pix_fmt = AV_PIX_FMT_YUV444P ; break ;
}
pc - > width = ( pc - > width & 0xFFF ) | ( horiz_size_ext < < 12 ) ;
pc - > height = ( pc - > height & 0xFFF ) | ( vert_size_ext < < 12 ) ;
bit_rate = ( bit_rate & 0x3FFFF ) | ( bit_rate_ext < < 18 ) ;
@ -155,6 +165,13 @@ static void mpegvideo_extract_headers(AVCodecParserContext *s,
( ( avctx - > codec_id = = AV_CODEC_ID_MPEG1VIDEO & & bit_rate ! = 0x3FFFF ) | | vbv_delay ! = 0xFFFF ) ) {
avctx - > bit_rate = 400 * bit_rate ;
}
if ( pix_fmt ! = AV_PIX_FMT_NONE ) {
s - > format = pix_fmt ;
s - > width = s - > coded_width = pc - > width ;
s - > height = s - > coded_height = pc - > height ;
}
# if FF_API_AVCTX_TIMEBASE
if ( avctx - > framerate . num )
avctx - > time_base = av_inv_q ( av_mul_q ( avctx - > framerate , ( AVRational ) { avctx - > ticks_per_frame , 1 } ) ) ;