diff options
author | wm4 <wm4@nowhere> | 2014-07-06 19:02:58 +0200 |
---|---|---|
committer | wm4 <wm4@nowhere> | 2014-07-06 19:02:58 +0200 |
commit | f3604fc3fb706662278ff2e80f4049651f2ea253 (patch) | |
tree | 15a5f828de870a1890f0b9c97b276c7b0b1af0c5 /demux | |
parent | e3a3b764c8a98fbdca2e0e3677fdcf233169d666 (diff) | |
download | mpv-f3604fc3fb706662278ff2e80f4049651f2ea253.tar.bz2 mpv-f3604fc3fb706662278ff2e80f4049651f2ea253.tar.xz |
demux: fix a corner case related to demux_disc
It can happen that demux_fill_buffer() adds more than 1 packet, and then
the packets would add up. Affects demux_disc.c only (nothing else uses
this function).
Diffstat (limited to 'demux')
-rw-r--r-- | demux/demux.c | 13 |
1 files changed, 8 insertions, 5 deletions
diff --git a/demux/demux.c b/demux/demux.c index 047e77a486..7938cbdcec 100644 --- a/demux/demux.c +++ b/demux/demux.c @@ -327,11 +327,14 @@ bool demux_stream_eof(struct sh_stream *sh) // Read and return any packet we find. struct demux_packet *demux_read_any_packet(struct demuxer *demuxer) { - demux_fill_buffer(demuxer); - for (int n = 0; n < demuxer->num_streams; n++) { - struct sh_stream *sh = demuxer->streams[n]; - if (sh->ds->head) - return demux_read_packet(sh); + for (int retry = 0; retry < 2; retry++) { + for (int n = 0; n < demuxer->num_streams; n++) { + struct sh_stream *sh = demuxer->streams[n]; + if (sh->ds->head) + return demux_read_packet(sh); + } + // retry after calling this + demux_fill_buffer(demuxer); } return NULL; } |