@ -261,24 +261,22 @@ const AVDVProfile* ff_dv_frame_profile(AVCodecContext* codec, const AVDVProfile
const uint8_t * frame , unsigned buf_size )
const uint8_t * frame , unsigned buf_size )
{
{
# if CONFIG_DVPROFILE
# if CONFIG_DVPROFILE
int i , dsf , stype ;
int i , dsf , stype , pal ;
if ( buf_size < DV_PROFILE_BYTES )
if ( buf_size < DV_PROFILE_BYTES )
return NULL ;
return NULL ;
dsf = ( frame [ 3 ] & 0x80 ) > > 7 ;
dsf = ( frame [ 3 ] & 0x80 ) > > 7 ;
stype = frame [ 80 * 5 + 48 + 3 ] & 0x1f ;
stype = frame [ 80 * 5 + 48 + 3 ] & 0x1f ;
pal = ! ! ( frame [ 80 * 5 + 48 + 3 ] & 0x20 ) ;
/* 576i50 25Mbps 4:1:1 is a special case */
/* 576i50 25Mbps 4:1:1 is a special case */
if ( ( dsf = = 1 & & stype = = 0 & & frame [ 4 ] & 0x07 /* the APT field */ ) | |
if ( ( dsf = = 1 & & stype = = 0 & & frame [ 4 ] & 0x07 /* the APT field */ ) | |
( stype = = 31 & & codec & & codec - > codec_tag = = AV_RL32 ( " SL25 " ) & & codec - > coded_width = = 720 & & codec - > coded_height = = 576 ) )
( stype = = 31 & & codec & & codec - > codec_tag = = AV_RL32 ( " SL25 " ) & & codec - > coded_width = = 720 & & codec - > coded_height = = 576 ) )
return & dv_profiles [ 2 ] ;
return & dv_profiles [ 2 ] ;
if ( stype = = 0
/* hack for trac issues #8333 and #2177, PAL DV files with dsf flag 0 - detect via pal flag and buf_size */
& & codec
if ( dsf = = 0 & & pal = = 1 & & stype = = dv_profiles [ 1 ] . video_stype & & buf_size = = dv_profiles [ 1 ] . frame_size )
& & ( codec - > codec_tag = = AV_RL32 ( " dvsd " ) | | codec - > codec_tag = = AV_RL32 ( " CDVC " ) )
& & codec - > coded_width = = 720
& & codec - > coded_height = = 576 )
return & dv_profiles [ 1 ] ;
return & dv_profiles [ 1 ] ;
for ( i = 0 ; i < FF_ARRAY_ELEMS ( dv_profiles ) ; i + + )
for ( i = 0 ; i < FF_ARRAY_ELEMS ( dv_profiles ) ; i + + )