aboutsummaryrefslogtreecommitdiffstats
path: root/fftools/ffmpeg_dec.c
diff options
context:
space:
mode:
authorAnton Khirnov <anton@khirnov.net>2023-11-24 19:08:15 +0100
committerAnton Khirnov <anton@khirnov.net>2023-12-14 08:11:05 +0100
commit9d7000b1bea097d715166e93475c71a0fb237f05 (patch)
tree8c5fc7d07e595ed4e8813e7cc67d7c23b1e081f6 /fftools/ffmpeg_dec.c
parentc9f38210fc498ada2605a1faac8aceb3d76e69c6 (diff)
downloadffmpeg-9d7000b1bea097d715166e93475c71a0fb237f05.tar.gz
fftools/ffmpeg: attach wallclock timing information to packets and frames
Will become useful in following commits.
Diffstat (limited to 'fftools/ffmpeg_dec.c')
-rw-r--r--fftools/ffmpeg_dec.c14
1 files changed, 12 insertions, 2 deletions
diff --git a/fftools/ffmpeg_dec.c b/fftools/ffmpeg_dec.c
index 5dde82a276..ce5aa33f73 100644
--- a/fftools/ffmpeg_dec.c
+++ b/fftools/ffmpeg_dec.c
@@ -22,6 +22,7 @@
#include "libavutil/log.h"
#include "libavutil/pixdesc.h"
#include "libavutil/pixfmt.h"
+#include "libavutil/time.h"
#include "libavutil/timestamp.h"
#include "libavcodec/avcodec.h"
@@ -475,6 +476,13 @@ static int packet_decode(InputStream *ist, AVPacket *pkt, AVFrame *frame)
pkt->dts = AV_NOPTS_VALUE;
}
+ if (pkt) {
+ FrameData *fd = packet_data(pkt);
+ if (!fd)
+ return AVERROR(ENOMEM);
+ fd->wallclock[LATENCY_PROBE_DEC_PRE] = av_gettime_relative();
+ }
+
ret = avcodec_send_packet(dec, pkt);
if (ret < 0 && !(ret == AVERROR_EOF && !pkt)) {
// In particular, we don't expect AVERROR(EAGAIN), because we read all
@@ -528,8 +536,6 @@ static int packet_decode(InputStream *ist, AVPacket *pkt, AVFrame *frame)
return AVERROR_INVALIDDATA;
}
-
- av_assert0(!frame->opaque_ref);
fd = frame_data(frame);
if (!fd) {
av_frame_unref(frame);
@@ -540,6 +546,8 @@ static int packet_decode(InputStream *ist, AVPacket *pkt, AVFrame *frame)
fd->dec.frame_num = dec->frame_num - 1;
fd->bits_per_raw_sample = dec->bits_per_raw_sample;
+ fd->wallclock[LATENCY_PROBE_DEC_POST] = av_gettime_relative();
+
frame->time_base = dec->pkt_timebase;
if (dec->codec_type == AVMEDIA_TYPE_AUDIO) {
@@ -932,6 +940,8 @@ int dec_open(InputStream *ist, Scheduler *sch, unsigned sch_idx)
if (ist->st->disposition & AV_DISPOSITION_ATTACHED_PIC)
av_dict_set(&ist->decoder_opts, "threads", "1", 0);
+ av_dict_set(&ist->decoder_opts, "flags", "+copy_opaque", AV_DICT_MULTIKEY);
+
ret = hw_device_setup_for_decode(ist);
if (ret < 0) {
av_log(ist, AV_LOG_ERROR,