From b7bec5d3c9ec0d38175d3385b37d85de26c96470 Mon Sep 17 00:00:00 2001 From: Andreas Rheinhardt Date: Fri, 22 Mar 2024 14:44:21 +0100 Subject: [PATCH] avutil/frame: Rename av_frame_side_data_get and add wrapper for it MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit av_frame_side_data_get() has a const AVFrameSideData * const *sd parameter; so calling it with an AVFramesSideData **sd like AVCodecContext.decoded_side_data (or with a AVFramesSideData * const *sd) is safe, but the conversion is not performed automatically in C. All users of this function therefore resort to a cast. This commit changes this: av_frame_side_data_get() is renamed to av_frame_side_data_get_c(); furthermore, a static inline wrapper for it name av_frame_side_data_get() is added that accepts an AVFramesSideData * const * and converts this to const AVFramesSideData * const * in a Wcast-qual safe way. This also allows to remove the casts from the current users. Reviewed-by: Jan Ekström Signed-off-by: Andreas Rheinhardt --- doc/APIchanges | 5 ++++- libavcodec/libsvtav1.c | 6 ++---- libavcodec/libx264.c | 6 ++---- libavcodec/libx265.c | 6 ++---- libavutil/frame.c | 8 ++++---- libavutil/frame.h | 19 +++++++++++++++++-- 6 files changed, 31 insertions(+), 19 deletions(-) diff --git a/doc/APIchanges b/doc/APIchanges index 9d25621e43..9694947e63 100644 --- a/doc/APIchanges +++ b/doc/APIchanges @@ -3,7 +3,10 @@ The last version increases of all libraries were on 2024-03-07 API changes, most recent first: 2024-03-22 - xxxxxxxxxx - lavu 59.4.100 - frame.h - Constified the first-level pointee of av_frame_side_data_get(). + Constified the first-level pointee of av_frame_side_data_get() + and renamed it to av_frame_side_data_get_c(). From now on, + av_frame_side_data_get() is a wrapper around av_frame_side_data_get_c() + that accepts AVFrameSideData * const *sd. 2024-03-xx - xxxxxxxxxx - lavc 61.2.100 - avcodec.h Add AVCodecContext.[nb_]decoded_side_data. diff --git a/libavcodec/libsvtav1.c b/libavcodec/libsvtav1.c index 6400a6507a..8fa42d590b 100644 --- a/libavcodec/libsvtav1.c +++ b/libavcodec/libsvtav1.c @@ -180,12 +180,10 @@ static void handle_side_data(AVCodecContext *avctx, EbSvtAv1EncConfiguration *param) { const AVFrameSideData *cll_sd = - av_frame_side_data_get( - (const AVFrameSideData **)avctx->decoded_side_data, + av_frame_side_data_get(avctx->decoded_side_data, avctx->nb_decoded_side_data, AV_FRAME_DATA_CONTENT_LIGHT_LEVEL); const AVFrameSideData *mdcv_sd = - av_frame_side_data_get( - (const AVFrameSideData **)avctx->decoded_side_data, + av_frame_side_data_get(avctx->decoded_side_data, avctx->nb_decoded_side_data, AV_FRAME_DATA_MASTERING_DISPLAY_METADATA); diff --git a/libavcodec/libx264.c b/libavcodec/libx264.c index 3d195fa6b6..eadb20d2b3 100644 --- a/libavcodec/libx264.c +++ b/libavcodec/libx264.c @@ -1044,12 +1044,10 @@ static void handle_side_data(AVCodecContext *avctx, x264_param_t *params) { #if CONFIG_LIBX264_HDR10 const AVFrameSideData *cll_sd = - av_frame_side_data_get( - (const AVFrameSideData **)avctx->decoded_side_data, + av_frame_side_data_get(avctx->decoded_side_data, avctx->nb_decoded_side_data, AV_FRAME_DATA_CONTENT_LIGHT_LEVEL); const AVFrameSideData *mdcv_sd = - av_frame_side_data_get( - (const AVFrameSideData **)avctx->decoded_side_data, + av_frame_side_data_get(avctx->decoded_side_data, avctx->nb_decoded_side_data, AV_FRAME_DATA_MASTERING_DISPLAY_METADATA); diff --git a/libavcodec/libx265.c b/libavcodec/libx265.c index 45349a85b9..d3e74eaacf 100644 --- a/libavcodec/libx265.c +++ b/libavcodec/libx265.c @@ -211,12 +211,10 @@ static int handle_side_data(AVCodecContext *avctx, const x265_api *api, x265_param *params) { const AVFrameSideData *cll_sd = - av_frame_side_data_get( - (const AVFrameSideData **)avctx->decoded_side_data, + av_frame_side_data_get(avctx->decoded_side_data, avctx->nb_decoded_side_data, AV_FRAME_DATA_CONTENT_LIGHT_LEVEL); const AVFrameSideData *mdcv_sd = - av_frame_side_data_get( - (const AVFrameSideData **)avctx->decoded_side_data, + av_frame_side_data_get(avctx->decoded_side_data, avctx->nb_decoded_side_data, AV_FRAME_DATA_MASTERING_DISPLAY_METADATA); diff --git a/libavutil/frame.c b/libavutil/frame.c index 8598aa98a2..7dd37e5490 100644 --- a/libavutil/frame.c +++ b/libavutil/frame.c @@ -813,9 +813,9 @@ int av_frame_side_data_clone(AVFrameSideData ***sd, int *nb_sd, return 0; } -const AVFrameSideData *av_frame_side_data_get(const AVFrameSideData * const *sd, - const int nb_sd, - enum AVFrameSideDataType type) +const AVFrameSideData *av_frame_side_data_get_c(const AVFrameSideData * const *sd, + const int nb_sd, + enum AVFrameSideDataType type) { for (int i = 0; i < nb_sd; i++) { if (sd[i]->type == type) @@ -828,7 +828,7 @@ AVFrameSideData *av_frame_get_side_data(const AVFrame *frame, enum AVFrameSideDataType type) { return (AVFrameSideData *)av_frame_side_data_get( - (const AVFrameSideData **)frame->side_data, frame->nb_side_data, + frame->side_data, frame->nb_side_data, type ); } diff --git a/libavutil/frame.h b/libavutil/frame.h index cf9ffe1ba9..373866c600 100644 --- a/libavutil/frame.h +++ b/libavutil/frame.h @@ -1051,9 +1051,24 @@ int av_frame_side_data_clone(AVFrameSideData ***sd, int *nb_sd, * @return a pointer to the side data of a given type on success, NULL if there * is no side data with such type in this set. */ -const AVFrameSideData *av_frame_side_data_get(const AVFrameSideData * const *sd, +const AVFrameSideData *av_frame_side_data_get_c(const AVFrameSideData * const *sd, + const int nb_sd, + enum AVFrameSideDataType type); + +/** + * Wrapper around av_frame_side_data_get_c() to workaround the limitation + * that for any type T the conversion from T * const * to const T * const * + * is not performed automatically in C. + * @see av_frame_side_data_get_c() + */ +static inline +const AVFrameSideData *av_frame_side_data_get(AVFrameSideData * const *sd, const int nb_sd, - enum AVFrameSideDataType type); + enum AVFrameSideDataType type) +{ + return av_frame_side_data_get_c((const AVFrameSideData * const *)sd, + nb_sd, type); +} /** * @}