diff options
author | reimar <reimar@b3059339-0415-0410-9bf9-f77b7e298cf2> | 2006-12-01 19:24:42 +0000 |
---|---|---|
committer | reimar <reimar@b3059339-0415-0410-9bf9-f77b7e298cf2> | 2006-12-01 19:24:42 +0000 |
commit | 0af2daec298da852142cc39ba340eb6864a31d09 (patch) | |
tree | 9f92f263ea293bbfd15f26a189d6f219e5cc95dc | |
parent | f32179337ef0cdbb4c8a522cd8760ac5ba1158a0 (diff) | |
download | mpv-0af2daec298da852142cc39ba340eb6864a31d09.tar.bz2 mpv-0af2daec298da852142cc39ba340eb6864a31d09.tar.xz |
Proper fix for last demux_avi commit, stream switching now really should
not hang anymore
git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@21421 b3059339-0415-0410-9bf9-f77b7e298cf2
-rw-r--r-- | libmpdemux/demux_avi.c | 17 |
1 files changed, 9 insertions, 8 deletions
diff --git a/libmpdemux/demux_avi.c b/libmpdemux/demux_avi.c index 50872fafe7..33172dc999 100644 --- a/libmpdemux/demux_avi.c +++ b/libmpdemux/demux_avi.c @@ -775,18 +775,19 @@ static int demux_avi_control(demuxer_t *demuxer,int cmd, void *arg){ if (*(int *)arg >= 0) ds->id = *(int *)arg; else { - int id = ds->id; - do { - if (++id >= maxid) id = 0; - if (id == ds->id) // no streams available - return DEMUXER_CTRL_NOTIMPL; - } while (!streams[id]); - ds->id = id; + int i; + for (i = 0; i < maxid; i++) { + if (++ds->id >= maxid) ds->id = 0; + if (streams[ds->id]) break; + } } chunkid = (ds->id / 10 + '0') | (ds->id % 10 + '0') << 8; ds->sh = NULL; - demux_avi_select_stream(demuxer, chunkid); + if (!streams[ds->id]) // stream not available + ds->id = -1; + else + demux_avi_select_stream(demuxer, chunkid); *(int *)arg = ds->id; return DEMUXER_CTRL_OK; } |