summaryrefslogtreecommitdiffstats
path: root/libmpdemux
diff options
context:
space:
mode:
authoreugeni <eugeni@b3059339-0415-0410-9bf9-f77b7e298cf2>2008-02-29 17:25:57 +0000
committereugeni <eugeni@b3059339-0415-0410-9bf9-f77b7e298cf2>2008-02-29 17:25:57 +0000
commit36277e690e091c664f0071f6fcfe0fd39fbb9379 (patch)
tree80de0544dcfd2f3dfae925f303672a47b3e22558 /libmpdemux
parent522ee6b78317236dcfc9b3bc3fa6413a3edc4819 (diff)
downloadmpv-36277e690e091c664f0071f6fcfe0fd39fbb9379.tar.bz2
mpv-36277e690e091c664f0071f6fcfe0fd39fbb9379.tar.xz
Support switching to/from nosound in demux_lavf.
Also fixes a bug when pstreams[-1] could be accessed. It happens when switching audio tracks if mplayer was run with '-nosound'. git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@26126 b3059339-0415-0410-9bf9-f77b7e298cf2
Diffstat (limited to 'libmpdemux')
-rw-r--r--libmpdemux/demux_lavf.c22
1 files changed, 8 insertions, 14 deletions
diff --git a/libmpdemux/demux_lavf.c b/libmpdemux/demux_lavf.c
index 123d8d0dcd..061fd76e82 100644
--- a/libmpdemux/demux_lavf.c
+++ b/libmpdemux/demux_lavf.c
@@ -665,7 +665,7 @@ static int demux_lavf_control(demuxer_t *demuxer, int cmd, void *arg)
{
int id = *((int*)arg);
int newid = -2;
- int i, curridx = -2;
+ int i, curridx = -1;
int nstreams, *pstreams;
demux_stream_t *ds;
@@ -681,14 +681,6 @@ static int demux_lavf_control(demuxer_t *demuxer, int cmd, void *arg)
nstreams = priv->audio_streams;
pstreams = priv->astreams;
}
- 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
@@ -698,12 +690,14 @@ static int demux_lavf_control(demuxer_t *demuxer, int cmd, void *arg)
}
}
- if(id < 0)
- {
- i = (curridx + 1) % nstreams;
- newid = pstreams[i];
+ if(id == -2) { // no sound
+ i = -1;
+ } else if(id == -1) { // next track
+ i = (curridx + 2) % (nstreams + 1) - 1;
+ if (i >= 0)
+ newid = pstreams[i];
}
- else
+ else // select track by id
{
for(i = 0; i < nstreams; i++)
{