From 67dcbed681c08cb0594fc661adbf538f541268d7 Mon Sep 17 00:00:00 2001 From: reimar Date: Sat, 27 Mar 2010 16:01:22 +0000 Subject: Support concatenated YUV4MPEG files. git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@30970 b3059339-0415-0410-9bf9-f77b7e298cf2 --- libmpdemux/demux_y4m.c | 39 ++++++++++++++++++++++++++++----------- 1 file changed, 28 insertions(+), 11 deletions(-) (limited to 'libmpdemux') diff --git a/libmpdemux/demux_y4m.c b/libmpdemux/demux_y4m.c index 2a022d3eea..5064a07ed7 100644 --- a/libmpdemux/demux_y4m.c +++ b/libmpdemux/demux_y4m.c @@ -76,6 +76,7 @@ static int y4m_check_file(demuxer_t* demuxer){ return DEMUXER_TYPE_Y4M; } +static void read_streaminfo(demuxer_t *demuxer); // return value: // 0 = EOF or no stream found @@ -87,6 +88,14 @@ static int demux_y4m_fill_buffer(demuxer_t *demux, demux_stream_t *dsds) { 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 @@ static int demux_y4m_fill_buffer(demuxer_t *demux, demux_stream_t *dsds) { 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 @@ static demuxer_t* demux_open_y4m(demuxer_t* demuxer){ 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 @@ static demuxer_t* demux_open_y4m(demuxer_t* demuxer){ 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; } -- cgit v1.2.3