From 0af2daec298da852142cc39ba340eb6864a31d09 Mon Sep 17 00:00:00 2001 From: reimar Date: Fri, 1 Dec 2006 19:24:42 +0000 Subject: [PATCH] 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 --- libmpdemux/demux_avi.c | 17 +++++++++-------- 1 file 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; }