summaryrefslogtreecommitdiffstats
path: root/libmpdemux
diff options
context:
space:
mode:
authornicodvb <nicodvb@b3059339-0415-0410-9bf9-f77b7e298cf2>2007-10-27 19:04:37 +0000
committernicodvb <nicodvb@b3059339-0415-0410-9bf9-f77b7e298cf2>2007-10-27 19:04:37 +0000
commitd936414dc1208e5c628d953510059c73f0f77e34 (patch)
tree9b105a087a4a92504632c532574f091d76bbb2ba /libmpdemux
parent15ad71420fa3e4dd216b8f16793e4dde9ecbcdcc (diff)
downloadmpv-d936414dc1208e5c628d953510059c73f0f77e34.tar.bz2
mpv-d936414dc1208e5c628d953510059c73f0f77e34.tar.xz
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
Diffstat (limited to 'libmpdemux')
-rw-r--r--libmpdemux/demux_lavf.c14
1 files 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;
}