[FFmpeg-cvslog] avutil/frame: Rename av_frame_side_data_get and add wrapper for it

Andreas Rheinhardt git at videolan.org
Sat Mar 23 00:51:43 EET 2024


ffmpeg | branch: master | Andreas Rheinhardt <andreas.rheinhardt at outlook.com> | Fri Mar 22 14:44:21 2024 +0100| [b7bec5d3c9ec0d38175d3385b37d85de26c96470] | committer: Andreas Rheinhardt

avutil/frame: Rename av_frame_side_data_get and add wrapper for it

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 <jeebjp at gmail.com>
Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt at outlook.com>

> http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=b7bec5d3c9ec0d38175d3385b37d85de26c96470
---

 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);
+}
 
 /**
  * @}



More information about the ffmpeg-cvslog mailing list