summaryrefslogtreecommitdiffstats
path: root/demux/demux_lavf.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_lavf.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_lavf.c')
-rw-r--r--demux/demux_lavf.c21
1 files changed, 12 insertions, 9 deletions
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,