From 24efaa3ad7a2a23644a1872c6b9535342bc71df1 Mon Sep 17 00:00:00 2001 From: wm4 Date: Sat, 19 Jul 2014 12:19:12 +0200 Subject: demux: fix a corner case demux_read_any_packet() attempts to call read_packet(), but if no stream is active, it can decide not to read anything. The function will return NULL, which implies EOF. Fix this by explicitly setting demux_stream->active if needed. Also use dequeue_packet() instead of demux_read_packet(), because it's cleaner. (Shouldn't change behavior.) Possibly fixes #938. --- demux/demux.c | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/demux/demux.c b/demux/demux.c index c7d27f7466..d5be9446e7 100644 --- a/demux/demux.c +++ b/demux/demux.c @@ -536,8 +536,10 @@ struct demux_packet *demux_read_any_packet(struct demuxer *demuxer) for (int retry = 0; retry < 2; retry++) { for (int n = 0; n < demuxer->num_streams; n++) { struct sh_stream *sh = demuxer->streams[n]; - if (demux_has_packet(sh)) - return demux_read_packet(sh); + sh->ds->active = sh->ds->selected; // force read_packet() to read + struct demux_packet *pkt = dequeue_packet(sh->ds); + if (pkt) + return pkt; } // retry after calling this pthread_mutex_lock(&demuxer->in->lock); -- cgit v1.2.3