summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAnton Khirnov <anton@khirnov.net>2023-04-26 14:23:42 +0200
committerAnton Khirnov <anton@khirnov.net>2023-05-15 10:57:19 +0200
commitabf9532bdad9d62b586b0fb5e4005a9fad2064e5 (patch)
treef0c16b4e0c55415da019304c30d818c010e6dd6e
parent989e87b03ce6a03b288f8049dbe11a4083929747 (diff)
downloadffmpeg-abf9532bdad9d62b586b0fb5e4005a9fad2064e5.tar.gz
fftools/ffmpeg_demux: move preparing DemuxMsg to separate function
Will be useful in following commits, which will move more code into this function.
-rw-r--r--fftools/ffmpeg_demux.c31
1 files changed, 23 insertions, 8 deletions
diff --git a/fftools/ffmpeg_demux.c b/fftools/ffmpeg_demux.c
index 1872e87d57..b16a20a87b 100644
--- a/fftools/ffmpeg_demux.c
+++ b/fftools/ffmpeg_demux.c
@@ -257,6 +257,26 @@ static void ts_fixup(Demuxer *d, AVPacket *pkt, int *repeat_pict)
SHOW_TS_DEBUG("demuxer+tsfixup");
}
+// process an input packet into a message to send to the consumer thread
+// src is always cleared by this function
+static int input_packet_process(Demuxer *d, DemuxMsg *msg, AVPacket *src)
+{
+ AVPacket *pkt;
+
+ pkt = av_packet_alloc();
+ if (!pkt) {
+ av_packet_unref(src);
+ return AVERROR(ENOMEM);
+ }
+ av_packet_move_ref(pkt, src);
+
+ ts_fixup(d, pkt, &msg->repeat_pict);
+
+ msg->pkt = pkt;
+
+ return 0;
+}
+
static void thread_set_name(InputFile *f)
{
char name[16];
@@ -336,15 +356,10 @@ static void *input_thread(void *arg)
}
}
- ts_fixup(d, pkt, &msg.repeat_pict);
-
- msg.pkt = av_packet_alloc();
- if (!msg.pkt) {
- av_packet_unref(pkt);
- ret = AVERROR(ENOMEM);
+ ret = input_packet_process(d, &msg, pkt);
+ if (ret < 0)
break;
- }
- av_packet_move_ref(msg.pkt, pkt);
+
ret = av_thread_message_queue_send(d->in_thread_queue, &msg, flags);
if (flags && ret == AVERROR(EAGAIN)) {
flags = 0;