From: Anton Khirnov <anton@khirnov.net>
To: ffmpeg-devel@ffmpeg.org
Subject: [FFmpeg-devel] [PATCH 1/9] lavu/frame: add a duration field to AVFrame
Date: Wed, 13 Jul 2022 11:17:17 +0200
Message-ID: <20220713091725.16638-1-anton@khirnov.net> (raw)
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.
---
doc/APIchanges | 3 +++
libavutil/frame.c | 10 ++++++++++
libavutil/frame.h | 10 ++++++++++
libavutil/version.h | 3 ++-
4 files changed, 25 insertions(+), 1 deletion(-)
diff --git a/doc/APIchanges b/doc/APIchanges
index 20b944933a..656362b40d 100644
--- a/doc/APIchanges
+++ b/doc/APIchanges
@@ -14,6 +14,9 @@ libavutil: 2021-04-27
API changes, most recent first:
+2022-07-xx - xxxxxxxxxx - lavu 57.28.100 - frame.h
+ Add AVFrame.duration, deprecate AVFrame.pkt_duration.
+
2022-06-12 - xxxxxxxxxx - lavf 59.25.100 - avio.h
Add avio_vprintf(), similar to avio_printf() but allow to use it
from within a function taking a variable argument list as input.
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 2e9e02dda8..1722f0427f 100644
--- a/libavutil/version.h
+++ b/libavutil/version.h
@@ -79,7 +79,7 @@
*/
#define LIBAVUTIL_VERSION_MAJOR 57
-#define LIBAVUTIL_VERSION_MINOR 27
+#define LIBAVUTIL_VERSION_MINOR 28
#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)
/**
* @}
--
2.34.1
_______________________________________________
ffmpeg-devel mailing list
ffmpeg-devel@ffmpeg.org
https://ffmpeg.org/mailman/listinfo/ffmpeg-devel
To unsubscribe, visit link above, or email
ffmpeg-devel-request@ffmpeg.org with subject "unsubscribe".
next reply other threads:[~2022-07-13 9:17 UTC|newest]
Thread overview: 19+ messages / expand[flat|nested] mbox.gz Atom feed top
2022-07-13 9:17 Anton Khirnov [this message]
2022-07-13 9:17 ` [FFmpeg-devel] [PATCH 2/9] lavc: use AVFrame.duration instead of AVFrame.pkt_duration Anton Khirnov
2022-07-13 9:17 ` [FFmpeg-devel] [PATCH 3/9] lavfi: " Anton Khirnov
2022-07-13 15:02 ` Nicolas George
2022-07-14 8:46 ` Anton Khirnov
2022-07-13 9:17 ` [FFmpeg-devel] [PATCH 4/9] lavf: " Anton Khirnov
2022-07-13 9:17 ` [FFmpeg-devel] [PATCH 5/9] lavd: " Anton Khirnov
2022-07-13 9:17 ` [FFmpeg-devel] [PATCH 6/9] ffprobe: " Anton Khirnov
2022-07-13 12:39 ` James Almer
2022-07-14 9:34 ` Anton Khirnov
2022-07-14 11:50 ` James Almer
2022-07-18 7:34 ` [FFmpeg-devel] [PATCH] " Anton Khirnov
2022-07-18 8:23 ` Nicolas George
2022-07-18 8:44 ` Anton Khirnov
2022-07-18 11:49 ` James Almer
2022-07-18 11:54 ` Anton Khirnov
2022-07-13 9:17 ` [FFmpeg-devel] [PATCH 7/9] ffmpeg: " Anton Khirnov
2022-07-13 9:17 ` [FFmpeg-devel] [PATCH 8/9] tests/api: " Anton Khirnov
2022-07-13 9:17 ` [FFmpeg-devel] [PATCH 9/9] lavfi/vf_showinfo: print frame durations Anton Khirnov
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20220713091725.16638-1-anton@khirnov.net \
--to=anton@khirnov.net \
--cc=ffmpeg-devel@ffmpeg.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Git Inbox Mirror of the ffmpeg-devel mailing list - see https://ffmpeg.org/mailman/listinfo/ffmpeg-devel
This inbox may be cloned and mirrored by anyone:
git clone --mirror https://master.gitmailbox.com/ffmpegdev/0 ffmpegdev/git/0.git
# If you have public-inbox 1.1+ installed, you may
# initialize and index your mirror using the following commands:
public-inbox-init -V2 ffmpegdev ffmpegdev/ https://master.gitmailbox.com/ffmpegdev \
ffmpegdev@gitmailbox.com
public-inbox-index ffmpegdev
Example config snippet for mirrors.
AGPL code for this site: git clone https://public-inbox.org/public-inbox.git