summaryrefslogtreecommitdiff
path: root/libavutil
diff options
context:
space:
mode:
authorAnton Khirnov <anton@khirnov.net>2022-07-11 10:04:17 +0200
committerAnton Khirnov <anton@khirnov.net>2022-07-19 12:27:17 +0200
commit4397f9a5a09d82846bf787295c60f1104cf7de9e (patch)
treeafb4c8b8e6a9ad0d872e71b0edaba3ab576d08a8 /libavutil
parent0a6bb7da55709d82b1cbb12d420db2d1fbb867d7 (diff)
lavu/frame: add a duration field to AVFrame
The only duration field currently present in AVFrame is pkt_duration, which is semantically restricted to those frames that are output by decoders. Add a new field that stores the frame's duration without regard for how that frame was produced. Deprecate pkt_duration.
Diffstat (limited to 'libavutil')
-rw-r--r--libavutil/frame.c10
-rw-r--r--libavutil/frame.h10
-rw-r--r--libavutil/version.h3
3 files changed, 22 insertions, 1 deletions
diff --git a/libavutil/frame.c b/libavutil/frame.c
index 4c16488c66..9c9bab3fcf 100644
--- a/libavutil/frame.c
+++ b/libavutil/frame.c
@@ -59,7 +59,12 @@ static void get_frame_defaults(AVFrame *frame)
frame->pts =
frame->pkt_dts = AV_NOPTS_VALUE;
frame->best_effort_timestamp = AV_NOPTS_VALUE;
+ frame->duration = 0;
+#if FF_API_PKT_DURATION
+FF_DISABLE_DEPRECATION_WARNINGS
frame->pkt_duration = 0;
+FF_ENABLE_DEPRECATION_WARNINGS
+#endif
frame->pkt_pos = -1;
frame->pkt_size = -1;
frame->time_base = (AVRational){ 0, 1 };
@@ -283,6 +288,7 @@ static int frame_copy_props(AVFrame *dst, const AVFrame *src, int force_copy)
dst->crop_left = src->crop_left;
dst->crop_right = src->crop_right;
dst->pts = src->pts;
+ dst->duration = src->duration;
dst->repeat_pict = src->repeat_pict;
dst->interlaced_frame = src->interlaced_frame;
dst->top_field_first = src->top_field_first;
@@ -292,7 +298,11 @@ static int frame_copy_props(AVFrame *dst, const AVFrame *src, int force_copy)
dst->pkt_dts = src->pkt_dts;
dst->pkt_pos = src->pkt_pos;
dst->pkt_size = src->pkt_size;
+#if FF_API_PKT_DURATION
+FF_DISABLE_DEPRECATION_WARNINGS
dst->pkt_duration = src->pkt_duration;
+FF_ENABLE_DEPRECATION_WARNINGS
+#endif
dst->time_base = src->time_base;
dst->reordered_opaque = src->reordered_opaque;
dst->quality = src->quality;
diff --git a/libavutil/frame.h b/libavutil/frame.h
index 33fac2054c..856959f979 100644
--- a/libavutil/frame.h
+++ b/libavutil/frame.h
@@ -604,13 +604,18 @@ typedef struct AVFrame {
*/
int64_t pkt_pos;
+#if FF_API_PKT_DURATION
/**
* duration of the corresponding packet, expressed in
* AVStream->time_base units, 0 if unknown.
* - encoding: unused
* - decoding: Read by user.
+ *
+ * @deprecated use duration instead
*/
+ attribute_deprecated
int64_t pkt_duration;
+#endif
/**
* metadata.
@@ -702,6 +707,11 @@ typedef struct AVFrame {
* Channel layout of the audio data.
*/
AVChannelLayout ch_layout;
+
+ /**
+ * Duration of the frame, in the same units as pts. 0 if unknown.
+ */
+ int64_t duration;
} AVFrame;
diff --git a/libavutil/version.h b/libavutil/version.h
index f185322550..ee4c531b80 100644
--- a/libavutil/version.h
+++ b/libavutil/version.h
@@ -79,7 +79,7 @@
*/
#define LIBAVUTIL_VERSION_MAJOR 57
-#define LIBAVUTIL_VERSION_MINOR 29
+#define LIBAVUTIL_VERSION_MINOR 30
#define LIBAVUTIL_VERSION_MICRO 100
#define LIBAVUTIL_VERSION_INT AV_VERSION_INT(LIBAVUTIL_VERSION_MAJOR, \
@@ -114,6 +114,7 @@
#define FF_API_XVMC (LIBAVUTIL_VERSION_MAJOR < 58)
#define FF_API_OLD_CHANNEL_LAYOUT (LIBAVUTIL_VERSION_MAJOR < 58)
#define FF_API_AV_FOPEN_UTF8 (LIBAVUTIL_VERSION_MAJOR < 58)
+#define FF_API_PKT_DURATION (LIBAVUTIL_VERSION_MAJOR < 58)
/**
* @}