From b9be20b529de8f47e795d9a869299548d8788528 Mon Sep 17 00:00:00 2001 From: wm4 Date: Fri, 7 Sep 2018 15:12:24 +0200 Subject: demux: return packets directly from demuxer instead of using sh_stream Preparation for other potential changes to separate demuxer cache/thread and actual demuxers. Most things are untested, but it seems to work somewhat. --- demux/demux_timeline.c | 17 +++++++++-------- 1 file changed, 9 insertions(+), 8 deletions(-) (limited to 'demux/demux_timeline.c') diff --git a/demux/demux_timeline.c b/demux/demux_timeline.c index 1eb73956c3..c34619a6d2 100644 --- a/demux/demux_timeline.c +++ b/demux/demux_timeline.c @@ -222,7 +222,7 @@ static void d_seek(struct demuxer *demuxer, double seek_pts, int flags) switch_segment(demuxer, new, pts, flags, false); } -static int d_fill_buffer(struct demuxer *demuxer) +static bool d_read_packet(struct demuxer *demuxer, struct demux_packet **out_pkt) { struct priv *p = demuxer->priv; @@ -231,7 +231,7 @@ static int d_fill_buffer(struct demuxer *demuxer) struct segment *seg = p->current; if (!seg || !seg->d) - return 0; + return false; struct demux_packet *pkt = demux_read_any_packet(seg->d); if (!pkt || pkt->pts >= seg->end) @@ -267,9 +267,9 @@ static int d_fill_buffer(struct demuxer *demuxer) } } if (!next) - return 0; + return false; switch_segment(demuxer, next, next->start, 0, true); - return 1; // reader will retry + return true; // reader will retry } if (pkt->stream < 0 || pkt->stream > seg->num_stream_map) @@ -308,12 +308,13 @@ static int d_fill_buffer(struct demuxer *demuxer) } } - demux_add_packet(vs->sh, pkt); - return 1; + pkt->stream = vs->sh->index; + *out_pkt = pkt; + return true; drop: talloc_free(pkt); - return 1; + return true; } static void print_timeline(struct demuxer *demuxer) @@ -447,7 +448,7 @@ static int d_control(struct demuxer *demuxer, int cmd, void *arg) const demuxer_desc_t demuxer_desc_timeline = { .name = "timeline", .desc = "timeline segments", - .fill_buffer = d_fill_buffer, + .read_packet = d_read_packet, .open = d_open, .close = d_close, .seek = d_seek, -- cgit v1.2.3