sscanf(header+strlen(Y4M_MAGIC), " W%d H%d F%d:%d I%c A%d:%d", &width, &height, &raten, &rated, &lacing, &aspectn, &aspectd);
header_end = &header[i+1]; for(tokstart = &header[strlen(Y4M_MAGIC) + 1]; tokstart < header_end; tokstart++) { if (*tokstart==0x20) continue; switch (*tokstart++) { case 'W': width = strtol(tokstart, &tokend, 10); tokstart=tokend; break; case 'H': height = strtol(tokstart, &tokend, 10); tokstart=tokend; break; case 'C': if (strncmp("420jpeg",tokstart,7)==0) pix_fmt = PIX_FMT_YUV420P; else if (strncmp("420mpeg2",tokstart,8)==0) pix_fmt = PIX_FMT_YUV420P; else if (strncmp("420paldv", tokstart, 8)==0) pix_fmt = PIX_FMT_YUV420P; else if (strncmp("411", tokstart, 3)==0) pix_fmt = PIX_FMT_YUV411P; else if (strncmp("422", tokstart, 3)==0) pix_fmt = PIX_FMT_YUV422P; else if (strncmp("444alpha", tokstart, 8)==0) { av_log(s, AV_LOG_ERROR, "Cannot handle 4:4:4:4 YUV4MPEG stream.\n"); return -1; } else if (strncmp("444", tokstart, 3)==0) pix_fmt = PIX_FMT_YUV444P; else if (strncmp("mono",tokstart, 4)==0) { av_log(s, AV_LOG_ERROR, "Cannot handle luma only YUV4MPEG stream.\n"); return -1; } else { av_log(s, AV_LOG_ERROR, "YUV4MPEG stream contains an unknown pixel format.\n"); return -1; } while(tokstart<header_end&&*tokstart!=0x20) tokstart++; break; case 'I': switch (*tokstart++){ case '?': break; case 'p': interlaced_frame=0; break; case 't': interlaced_frame=1; top_field_first=1; break; case 'b': interlaced_frame=1; top_field_first=0; break; case 'm': av_log(s, AV_LOG_ERROR, "YUV4MPEG stream contains mixed interlaced and non-interlaced frames.\n"); return -1; default: av_log(s, AV_LOG_ERROR, "YUV4MPEG has invalid header.\n"); return -1; } break; case 'F': sscanf(tokstart,"%d:%d",&raten,&rated); while(tokstart<header_end&&*tokstart!=0x20) tokstart++; break; case 'A': sscanf(tokstart,"%d:%d",&aspectn,&aspectd); while(tokstart<header_end&&*tokstart!=0x20) tokstart++; break; case 'X': if (strncmp("YSCSS=",tokstart,6)==0) {  tokstart+=6; if (strncmp("420JPEG",tokstart,7)==0) alt_pix_fmt=PIX_FMT_YUV420P; else if (strncmp("420MPEG2",tokstart,8)==0) alt_pix_fmt=PIX_FMT_YUV420P; else if (strncmp("420PALDV",tokstart,8)==0) alt_pix_fmt=PIX_FMT_YUV420P; else if (strncmp("411",tokstart,3)==0) alt_pix_fmt=PIX_FMT_YUV411P; else if (strncmp("422",tokstart,3)==0) alt_pix_fmt=PIX_FMT_YUV422P; else if (strncmp("444",tokstart,3)==0) alt_pix_fmt=PIX_FMT_YUV444P; } while(tokstart<header_end&&*tokstart!=0x20) tokstart++; break; } }  if ((width == -1) || (height == -1)) { av_log(s, AV_LOG_ERROR, "YUV4MPEG has invalid header.\n"); return -1; }
static int yuv4_read_header(AVFormatContext *s, AVFormatParameters *ap){    char header[MAX_YUV4_HEADER+1];    int i;    ByteIOContext *pb = &s->pb;    int width, height, raten, rated, aspectn, aspectd;    char lacing;    AVStream *st;        for (i=0; i<MAX_YUV4_HEADER; i++) {        header[i] = get_byte(pb);	if (header[i] == '\n') {	    header[i+1] = 0;	    break;	}    }    if (i == MAX_YUV4_HEADER) return -1;    if (strncmp(header, Y4M_MAGIC, strlen(Y4M_MAGIC))) return -1;    sscanf(header+strlen(Y4M_MAGIC), " W%d H%d F%d:%d I%c A%d:%d",           &width, &height, &raten, &rated, &lacing, &aspectn, &aspectd);        st = av_new_stream(s, 0);    st = s->streams[0];    st->codec.width = width;    st->codec.height = height;    av_reduce(&raten, &rated, raten, rated, (1UL<<31)-1);    st->codec.frame_rate = raten;    st->codec.frame_rate_base = rated;    st->codec.pix_fmt = PIX_FMT_YUV420P;    st->codec.codec_type = CODEC_TYPE_VIDEO;    st->codec.codec_id = CODEC_ID_RAWVIDEO;    st->codec.sample_aspect_ratio= (AVRational){aspectn, aspectd};    return 0;}