From d936414dc1208e5c628d953510059c73f0f77e34 Mon Sep 17 00:00:00 2001 From: nicodvb Date: Sat, 27 Oct 2007 19:04:37 +0000 Subject: [PATCH] permit the transititions no stream <-> some streams and viceversa (needed for forthcoming program switching patch) git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@24871 b3059339-0415-0410-9bf9-f77b7e298cf2 --- libmpdemux/demux_lavf.c | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/libmpdemux/demux_lavf.c b/libmpdemux/demux_lavf.c index bc365d4b8c..ec45857ac8 100644 --- a/libmpdemux/demux_lavf.c +++ b/libmpdemux/demux_lavf.c @@ -632,8 +632,14 @@ static int demux_lavf_control(demuxer_t *demuxer, int cmd, void *arg) nstreams = priv->audio_streams; pstreams = priv->astreams; } - if(ds->id == -2) - return DEMUXER_CTRL_NOTIMPL; + if(id == -2) + { + if(ds->id >= 0) + priv->avfc->streams[ds->id]->discard = AVDISCARD_ALL; + ds_free_packs(ds); + *((int*)arg) = ds->id = -2; + return DEMUXER_CTRL_OK; + } for(i = 0; i < nstreams; i++) { if(pstreams[i] == ds->id) //current stream id @@ -659,13 +665,15 @@ static int demux_lavf_control(demuxer_t *demuxer, int cmd, void *arg) } } } - if(newid == -2 || i == curridx) + if(i == curridx) return DEMUXER_CTRL_NOTIMPL; else { ds_free_packs(ds); + if(ds->id >= 0) priv->avfc->streams[ds->id]->discard = AVDISCARD_ALL; *((int*)arg) = ds->id = newid; + if(newid >= 0) priv->avfc->streams[newid]->discard = AVDISCARD_NONE; return DEMUXER_CTRL_OK; }