From: Andreas Rheinhardt <andreas.rheinhardt@outlook.com>
To: ffmpeg-devel@ffmpeg.org
Cc: Andreas Rheinhardt <andreas.rheinhardt@outlook.com>
Subject: [FFmpeg-devel] [PATCH 4/4] avutil/frame: Rename av_frame_side_data_get and add wrapper for it
Date: Fri, 22 Mar 2024 14:58:16 +0100
Message-ID: <GV1P250MB0737667B81D4657CFFAED2D38F312@GV1P250MB0737.EURP250.PROD.OUTLOOK.COM> (raw)
In-Reply-To: <GV1P250MB0737842CEA6E6DCA5F67FFB38F312@GV1P250MB0737.EURP250.PROD.OUTLOOK.COM>
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.
Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@outlook.com>
---
libavcodec/libsvtav1.c | 6 ++----
libavcodec/libx264.c | 6 ++----
libavcodec/libx265.c | 6 ++----
libavutil/frame.c | 8 ++++----
libavutil/frame.h | 19 +++++++++++++++++--
5 files changed, 27 insertions(+), 18 deletions(-)
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);
+}
/**
* @}
--
2.40.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".
next prev parent reply other threads:[~2024-03-22 13:58 UTC|newest]
Thread overview: 6+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-03-22 13:32 [FFmpeg-devel] [PATCH 1/2] avcodec/libx265: Don't use AVBPrint unnecessarily Andreas Rheinhardt
2024-03-22 13:33 ` [FFmpeg-devel] [PATCH 2/2] avcodec/libx265: Pass logctx as void*, not AVClass** Andreas Rheinhardt
2024-03-22 13:57 ` [FFmpeg-devel] [PATCH 3/4] avutil/frame: Constify av_frame_side_data_get() Andreas Rheinhardt
2024-03-22 13:58 ` Andreas Rheinhardt [this message]
2024-03-22 14:41 ` [FFmpeg-devel] [PATCH 5/5] avutil/frame: Use av_realloc_array(), improve overflow check Andreas Rheinhardt
2024-03-22 22:07 ` Jan Ekström
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=GV1P250MB0737667B81D4657CFFAED2D38F312@GV1P250MB0737.EURP250.PROD.OUTLOOK.COM \
--to=andreas.rheinhardt@outlook.com \
--cc=ffmpeg-devel@ffmpeg.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
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