diff options
Diffstat (limited to 'libmpdemux')
-rw-r--r-- | libmpdemux/demuxer.c | 7 | ||||
-rw-r--r-- | libmpdemux/demuxer.h | 2 |
2 files changed, 5 insertions, 4 deletions
diff --git a/libmpdemux/demuxer.c b/libmpdemux/demuxer.c index 199558c2ae..b3a1998d0c 100644 --- a/libmpdemux/demuxer.c +++ b/libmpdemux/demuxer.c @@ -831,11 +831,12 @@ int ds_get_packet_sub(demux_stream_t *ds, unsigned char **start) return len; } -struct demux_packet *ds_get_packet2(struct demux_stream *ds) +struct demux_packet *ds_get_packet2(struct demux_stream *ds, bool repeat_last) { // This shouldn't get used together with partial reads - assert(ds->buffer_pos >= ds->buffer_size); - ds_fill_buffer(ds); + assert(ds->buffer_pos == 0 || ds->buffer_pos >= ds->buffer_size); + if (!repeat_last) + ds_fill_buffer(ds); ds->buffer_pos = ds->buffer_size; return ds->current; } diff --git a/libmpdemux/demuxer.h b/libmpdemux/demuxer.h index 55fda059fe..cdea5baa61 100644 --- a/libmpdemux/demuxer.h +++ b/libmpdemux/demuxer.h @@ -346,7 +346,7 @@ int ds_get_packet(struct demux_stream *ds, unsigned char **start); int ds_get_packet_pts(struct demux_stream *ds, unsigned char **start, double *pts); int ds_get_packet_sub(struct demux_stream *ds, unsigned char **start); -struct demux_packet *ds_get_packet2(struct demux_stream *ds); +struct demux_packet *ds_get_packet2(struct demux_stream *ds, bool repeat_last); double ds_get_next_pts(struct demux_stream *ds); int ds_parse(struct demux_stream *sh, uint8_t **buffer, int *len, double pts, off_t pos); |