@ -31,7 +31,7 @@ static int yuv4_read_header(AVFormatContext *s)
{
char header [ MAX_YUV4_HEADER + 10 ] ; // Include headroom for
// the longest option
char * tokstart , * tokend , * header_end , interlaced = ' ? ' ;
char * tokstart , * tokend , * header_end ;
int i ;
AVIOContext * pb = s - > pb ;
int width = - 1 , height = - 1 , raten = 0 ,
@ -39,6 +39,7 @@ static int yuv4_read_header(AVFormatContext *s)
enum AVPixelFormat pix_fmt = AV_PIX_FMT_NONE , alt_pix_fmt = AV_PIX_FMT_NONE ;
enum AVChromaLocation chroma_sample_location = AVCHROMA_LOC_UNSPECIFIED ;
AVStream * st ;
enum AVFieldOrder field_order ;
for ( i = 0 ; i < MAX_YUV4_HEADER ; i + + ) {
header [ i ] = avio_r8 ( pb ) ;
@ -134,7 +135,26 @@ static int yuv4_read_header(AVFormatContext *s)
tokstart + + ;
break ;
case ' I ' : // Interlace type
interlaced = * tokstart + + ;
switch ( * tokstart + + ) {
case ' ? ' :
field_order = AV_FIELD_UNKNOWN ;
break ;
case ' p ' :
field_order = AV_FIELD_PROGRESSIVE ;
break ;
case ' t ' :
field_order = AV_FIELD_TT ;
break ;
case ' b ' :
field_order = AV_FIELD_BB ;
break ;
case ' m ' :
av_log ( s , AV_LOG_ERROR , " YUV4MPEG stream contains mixed "
" interlaced and non-interlaced frames. \n " ) ;
default :
av_log ( s , AV_LOG_ERROR , " YUV4MPEG has invalid header. \n " ) ;
return AVERROR ( EINVAL ) ;
}
break ;
case ' F ' : // Frame rate
sscanf ( tokstart , " %d:%d " , & raten , & rated ) ; // 0:0 if unknown
@ -235,27 +255,7 @@ static int yuv4_read_header(AVFormatContext *s)
st - > codec - > codec_id = AV_CODEC_ID_RAWVIDEO ;
st - > sample_aspect_ratio = ( AVRational ) { aspectn , aspectd } ;
st - > codec - > chroma_sample_location = chroma_sample_location ;
switch ( interlaced ) {
case ' p ' :
st - > codec - > field_order = AV_FIELD_PROGRESSIVE ;
break ;
case ' t ' :
st - > codec - > field_order = AV_FIELD_TB ;
break ;
case ' b ' :
st - > codec - > field_order = AV_FIELD_BT ;
break ;
case ' m ' :
av_log ( s , AV_LOG_ERROR , " YUV4MPEG stream contains mixed "
" interlaced and non-interlaced frames. \n " ) ;
case ' ? ' :
st - > codec - > field_order = AV_FIELD_UNKNOWN ;
break ;
default :
av_log ( s , AV_LOG_ERROR , " YUV4MPEG has invalid header. \n " ) ;
return AVERROR ( EINVAL ) ;
}
st - > codec - > field_order = field_order ;
return 0 ;
}