Git Inbox Mirror of the ffmpeg-devel mailing list - see https://ffmpeg.org/mailman/listinfo/ffmpeg-devel
 help / color / mirror / Atom feed
* [FFmpeg-devel] [PATCH 1/9] lavu/frame: add a duration field to AVFrame
@ 2022-07-13  9:17 Anton Khirnov
  2022-07-13  9:17 ` [FFmpeg-devel] [PATCH 2/9] lavc: use AVFrame.duration instead of AVFrame.pkt_duration Anton Khirnov
                   ` (7 more replies)
  0 siblings, 8 replies; 19+ messages in thread
From: Anton Khirnov @ 2022-07-13  9:17 UTC (permalink / raw)
  To: ffmpeg-devel

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".

^ permalink raw reply	[flat|nested] 19+ messages in thread

end of thread, other threads:[~2022-07-18 11:55 UTC | newest]

Thread overview: 19+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2022-07-13  9:17 [FFmpeg-devel] [PATCH 1/9] lavu/frame: add a duration field to AVFrame Anton Khirnov
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

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