From 717b2074ecf3ade6b213ee8d67efa23f12a4e67e Mon Sep 17 00:00:00 2001 From: James Almer Date: Fri, 4 Oct 2019 11:54:28 -0300 Subject: [PATCH] avcodec: add a Producer Reference Time AVPacketSideData type Signed-off-by: James Almer --- doc/APIchanges | 3 +++ libavcodec/avcodec.h | 10 ++++++++++ libavcodec/avpacket.c | 22 ++++++++++++++++++++++ libavcodec/internal.h | 2 ++ libavcodec/version.h | 4 ++-- 5 files changed, 39 insertions(+), 2 deletions(-) diff --git a/doc/APIchanges b/doc/APIchanges index 3c24dc6fbc..2977b00b60 100644 --- a/doc/APIchanges +++ b/doc/APIchanges @@ -15,6 +15,9 @@ libavutil: 2017-10-21 API changes, most recent first: +2020-01-15 - xxxxxxxxxx - lavc 58.66.100 - avcodec.h + Add AV_PKT_DATA_PRFT and AVProducerReferenceTime. + 2019-12-27 - xxxxxxxxxx - lavu 56.38.100 - eval.h Add av_expr_count_func(). diff --git a/libavcodec/avcodec.h b/libavcodec/avcodec.h index 119b32dc1f..4b0e7c0853 100644 --- a/libavcodec/avcodec.h +++ b/libavcodec/avcodec.h @@ -1176,6 +1176,11 @@ typedef struct AVCPBProperties { uint64_t vbv_delay; } AVCPBProperties; +typedef struct AVProducerReferenceTime { + int64_t wallclock; + int flags; +} AVProducerReferenceTime; + /** * The decoder will keep a reference to the frame and may reuse it later. */ @@ -1410,6 +1415,11 @@ enum AVPacketSideDataType { */ AV_PKT_DATA_AFD, + /** + * Producer Reference Time data corresponding to the AVProducerReferenceTime struct. + */ + AV_PKT_DATA_PRFT, + /** * The number of side data types. * This is not part of the public API/ABI in the sense that it may diff --git a/libavcodec/avpacket.c b/libavcodec/avpacket.c index 858f827a0a..74845efcd2 100644 --- a/libavcodec/avpacket.c +++ b/libavcodec/avpacket.c @@ -741,3 +741,25 @@ int ff_side_data_set_encoder_stats(AVPacket *pkt, int quality, int64_t *error, i return 0; } + +int ff_side_data_set_prft(AVPacket *pkt, int64_t timestamp) +{ + AVProducerReferenceTime *prft; + uint8_t *side_data; + int side_data_size; + + side_data = av_packet_get_side_data(pkt, AV_PKT_DATA_PRFT, &side_data_size); + if (!side_data) { + side_data_size = sizeof(AVProducerReferenceTime); + side_data = av_packet_new_side_data(pkt, AV_PKT_DATA_PRFT, side_data_size); + } + + if (!side_data || side_data_size < sizeof(AVProducerReferenceTime)) + return AVERROR(ENOMEM); + + prft = (AVProducerReferenceTime *)side_data; + prft->wallclock = timestamp; + prft->flags = 0; + + return 0; +} diff --git a/libavcodec/internal.h b/libavcodec/internal.h index 9db3d36acb..5930dd0da0 100644 --- a/libavcodec/internal.h +++ b/libavcodec/internal.h @@ -392,6 +392,8 @@ AVCPBProperties *ff_add_cpb_side_data(AVCodecContext *avctx); int ff_side_data_set_encoder_stats(AVPacket *pkt, int quality, int64_t *error, int error_count, int pict_type); +int ff_side_data_set_prft(AVPacket *pkt, int64_t timestamp); + /** * Check AVFrame for A53 side data and allocate and fill SEI message with A53 info * diff --git a/libavcodec/version.h b/libavcodec/version.h index 1a88432460..6cf333eeb6 100644 --- a/libavcodec/version.h +++ b/libavcodec/version.h @@ -28,8 +28,8 @@ #include "libavutil/version.h" #define LIBAVCODEC_VERSION_MAJOR 58 -#define LIBAVCODEC_VERSION_MINOR 65 -#define LIBAVCODEC_VERSION_MICRO 103 +#define LIBAVCODEC_VERSION_MINOR 66 +#define LIBAVCODEC_VERSION_MICRO 100 #define LIBAVCODEC_VERSION_INT AV_VERSION_INT(LIBAVCODEC_VERSION_MAJOR, \ LIBAVCODEC_VERSION_MINOR, \