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_lavf.c | 21 ++++++++++++--------- 1 file changed, 12 insertions(+), 9 deletions(-) (limited to 'demux/demux_lavf.c') diff --git a/demux/demux_lavf.c b/demux/demux_lavf.c index bccc0c53a1..19997a1855 100644 --- a/demux/demux_lavf.c +++ b/demux/demux_lavf.c @@ -1066,7 +1066,8 @@ static int demux_open_lavf(demuxer_t *demuxer, enum demux_check check) return 0; } -static int demux_lavf_fill_buffer(demuxer_t *demux) +static bool demux_lavf_read_packet(struct demuxer *demux, + struct demux_packet **mp_pkt) { lavf_priv_t *priv = demux->priv; @@ -1076,11 +1077,11 @@ static int demux_lavf_fill_buffer(demuxer_t *demux) if (r < 0) { av_packet_unref(pkt); if (r == AVERROR(EAGAIN)) - return 1; + return true; if (r == AVERROR_EOF) - return 0; + return false; MP_WARN(demux, "error reading packet.\n"); - return -1; + return false; } add_new_streams(demux); @@ -1092,13 +1093,13 @@ static int demux_lavf_fill_buffer(demuxer_t *demux) if (!demux_stream_is_selected(stream)) { av_packet_unref(pkt); - return 1; // don't signal EOF if skipping a packet + return true; // don't signal EOF if skipping a packet } struct demux_packet *dp = new_demux_packet_from_avpacket(pkt); if (!dp) { av_packet_unref(pkt); - return 1; + return true; } if (pkt->pts != AV_NOPTS_VALUE) @@ -1117,8 +1118,10 @@ static int demux_lavf_fill_buffer(demuxer_t *demux) if (priv->format_hack.clear_filepos) dp->pos = -1; - demux_add_packet(stream, dp); - return 1; + dp->stream = stream->index; + + *mp_pkt = dp; + return true; } static void demux_seek_lavf(demuxer_t *demuxer, double seek_pts, int flags) @@ -1228,7 +1231,7 @@ static void demux_close_lavf(demuxer_t *demuxer) const demuxer_desc_t demuxer_desc_lavf = { .name = "lavf", .desc = "libavformat", - .fill_buffer = demux_lavf_fill_buffer, + .read_packet = demux_lavf_read_packet, .open = demux_open_lavf, .close = demux_close_lavf, .seek = demux_seek_lavf, -- cgit v1.2.3