diff options
author | Anton Khirnov <anton@khirnov.net> | 2022-07-11 10:04:17 +0200 |
---|---|---|
committer | Anton Khirnov <anton@khirnov.net> | 2022-07-19 12:27:17 +0200 |
commit | 4397f9a5a09d82846bf787295c60f1104cf7de9e (patch) | |
tree | afb4c8b8e6a9ad0d872e71b0edaba3ab576d08a8 /libavutil | |
parent | 0a6bb7da55709d82b1cbb12d420db2d1fbb867d7 (diff) | |
download | ffmpeg-4397f9a5a09d82846bf787295c60f1104cf7de9e.tar.gz |
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.c | 10 | ||||
-rw-r--r-- | libavutil/frame.h | 10 | ||||
-rw-r--r-- | libavutil/version.h | 3 |
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) /** * @} |