# HG changeset patch # User reimar # Date 1269705682 0 # Node ID 89bfad4c17111aa1921f9e70ab36f463a757f358 # Parent 9a9d57f6d78858dcf698828f8ae2eb33f3f044c6 Support concatenated YUV4MPEG files. diff -r 9a9d57f6d788 -r 89bfad4c1711 libmpdemux/demux_y4m.c --- a/libmpdemux/demux_y4m.c Sat Mar 27 15:35:59 2010 +0000 +++ b/libmpdemux/demux_y4m.c Sat Mar 27 16:01:22 2010 +0000 @@ -76,6 +76,7 @@ return DEMUXER_TYPE_Y4M; } +static void read_streaminfo(demuxer_t *demuxer); // return value: // 0 = EOF or no stream found @@ -87,6 +88,14 @@ y4m_frame_info_t fi; unsigned char *buf[3]; int err, size; + int nextc; + + nextc = stream_read_char(demux->stream); + stream_skip(demux->stream, -1); + if (nextc == 'Y') { + read_streaminfo(demux); + demux->seekable = 0; + } y4m_init_frame_info(&fi); @@ -136,15 +145,13 @@ return 1; } -static demuxer_t* demux_open_y4m(demuxer_t* demuxer){ - y4m_priv_t* priv = demuxer->priv; +static void read_streaminfo(demuxer_t *demuxer) +{ + y4m_priv_t *priv = demuxer->priv; + sh_video_t *sh = demuxer->video->sh; y4m_ratio_t ratio; - sh_video_t* sh=new_sh_video(demuxer,0); int err; - priv->framenum = 0; - priv->si = malloc(sizeof(y4m_stream_info_t)); - if (priv->is_older) { char buf[4]; @@ -228,7 +235,6 @@ sh->format = mmioFOURCC('Y', 'V', '1', '2'); - sh->bih=calloc(1, sizeof(BITMAPINFOHEADER)); sh->bih->biSize=40; sh->bih->biWidth = sh->disp_w; sh->bih->biHeight = sh->disp_h; @@ -237,14 +243,25 @@ sh->bih->biCompression=sh->format; sh->bih->biSizeImage=sh->bih->biWidth*sh->bih->biHeight*3/2; /* YV12 */ + mp_msg(MSGT_DEMUX, MSGL_INFO, "YUV4MPEG2 Video stream %d size: display: %dx%d, codec: %ux%u\n", + demuxer->video->id, sh->disp_w, sh->disp_h, sh->bih->biWidth, + sh->bih->biHeight); +} + +static demuxer_t* demux_open_y4m(demuxer_t* demuxer){ + y4m_priv_t* priv = demuxer->priv; + sh_video_t* sh=new_sh_video(demuxer,0); + + priv->framenum = 0; + priv->si = malloc(sizeof(y4m_stream_info_t)); + + sh->bih=calloc(1, sizeof(BITMAPINFOHEADER)); + demuxer->video->sh=sh; sh->ds=demuxer->video; demuxer->video->id=0; - - mp_msg(MSGT_DEMUX, MSGL_INFO, "YUV4MPEG2 Video stream %d size: display: %dx%d, codec: %ux%u\n", - demuxer->video->id, sh->disp_w, sh->disp_h, sh->bih->biWidth, - sh->bih->biHeight); + read_streaminfo(demuxer); return demuxer; }