summaryrefslogtreecommitdiffstats
path: root/demux/demux_timeline.c
diff options
context:
space:
mode:
authorwm4 <wm4@nowhere>2018-09-07 15:12:24 +0200
committerwm4 <wm4@nowhere>2019-09-19 20:37:04 +0200
commitb9be20b529de8f47e795d9a869299548d8788528 (patch)
tree039e425a0a945a703b0ac8aee94b37308c7e74cc /demux/demux_timeline.c
parent8a83430ae77602feb0db4f9cacc8d6d9f63534ce (diff)
downloadmpv-b9be20b529de8f47e795d9a869299548d8788528.tar.bz2
mpv-b9be20b529de8f47e795d9a869299548d8788528.tar.xz
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.
Diffstat (limited to 'demux/demux_timeline.c')
-rw-r--r--demux/demux_timeline.c17
1 files changed, 9 insertions, 8 deletions
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,