[FFmpeg-devel] [PATCH] avcodec/avcodec: remove usage of __typeof__()
Martin Storsjö
martin at martin.st
Sun Sep 8 22:43:37 EEST 2024
On Sun, 8 Sep 2024, James Almer wrote:
> It's non-standard C.
>
> Signed-off-by: James Almer <jamrial at gmail.com>
> ---
> libavcodec/avcodec.c | 14 +++++++-------
> 1 file changed, 7 insertions(+), 7 deletions(-)
>
> diff --git a/libavcodec/avcodec.c b/libavcodec/avcodec.c
> index cb89236549..78153d12f1 100644
> --- a/libavcodec/avcodec.c
> +++ b/libavcodec/avcodec.c
> @@ -708,9 +708,9 @@ int attribute_align_arg avcodec_receive_frame(AVCodecContext *avctx, AVFrame *fr
> return ff_encode_receive_frame(avctx, frame);
> }
>
> -#define WRAP_CONFIG(allowed_type, field, terminator) \
> +#define WRAP_CONFIG(allowed_type, field, field_type, terminator) \
> do { \
> - static const __typeof__(*(field)) end = terminator; \
> + static const field_type end = terminator; \
> if (codec->type != (allowed_type)) \
> return AVERROR(EINVAL); \
> *out_configs = (field); \
> @@ -753,15 +753,15 @@ int ff_default_get_supported_config(const AVCodecContext *avctx,
> switch (config) {
> FF_DISABLE_DEPRECATION_WARNINGS
> case AV_CODEC_CONFIG_PIX_FORMAT:
> - WRAP_CONFIG(AVMEDIA_TYPE_VIDEO, codec->pix_fmts, AV_PIX_FMT_NONE);
> + WRAP_CONFIG(AVMEDIA_TYPE_VIDEO, codec->pix_fmts, enum AVPixelFormat, AV_PIX_FMT_NONE);
> case AV_CODEC_CONFIG_FRAME_RATE:
> - WRAP_CONFIG(AVMEDIA_TYPE_VIDEO, codec->supported_framerates, (AVRational){0});
> + WRAP_CONFIG(AVMEDIA_TYPE_VIDEO, codec->supported_framerates, AVRational, (AVRational){0});
> case AV_CODEC_CONFIG_SAMPLE_RATE:
> - WRAP_CONFIG(AVMEDIA_TYPE_AUDIO, codec->supported_samplerates, 0);
> + WRAP_CONFIG(AVMEDIA_TYPE_AUDIO, codec->supported_samplerates, int, 0);
> case AV_CODEC_CONFIG_SAMPLE_FORMAT:
> - WRAP_CONFIG(AVMEDIA_TYPE_AUDIO, codec->sample_fmts, AV_SAMPLE_FMT_NONE);
> + WRAP_CONFIG(AVMEDIA_TYPE_AUDIO, codec->sample_fmts, enum AVSampleFormat, AV_SAMPLE_FMT_NONE);
> case AV_CODEC_CONFIG_CHANNEL_LAYOUT:
> - WRAP_CONFIG(AVMEDIA_TYPE_AUDIO, codec->ch_layouts, (AVChannelLayout){0});
> + WRAP_CONFIG(AVMEDIA_TYPE_AUDIO, codec->ch_layouts, AVChannelLayout, (AVChannelLayout){0});
> FF_ENABLE_DEPRECATION_WARNINGS
>
> case AV_CODEC_CONFIG_COLOR_RANGE:
> --
> 2.46.0
Actually, this isn't quite enough to fix compilation with all compilers:
src/libavcodec/avcodec.c: In function 'ff_default_get_supported_config':
src/libavcodec/avcodec.c:758:9: error: initializer element is not constant
WRAP_CONFIG(AVMEDIA_TYPE_VIDEO, codec->supported_framerates,
AVRational, (AVRational){0});
^
src/libavcodec/avcodec.c:764:9: error: initializer element is not constant
WRAP_CONFIG(AVMEDIA_TYPE_AUDIO, codec->ch_layouts,
AVChannelLayout, (AVChannelLayout){0});
^
Since we're not using typeof here, we can drop the casts here and just use
plain {0}:
diff --git a/libavcodec/avcodec.c b/libavcodec/avcodec.c
index 78153d12f1..8d1a280323 100644
--- a/libavcodec/avcodec.c
+++ b/libavcodec/avcodec.c
@@ -755,13 +755,13 @@ FF_DISABLE_DEPRECATION_WARNINGS
case AV_CODEC_CONFIG_PIX_FORMAT:
WRAP_CONFIG(AVMEDIA_TYPE_VIDEO, codec->pix_fmts, enum AVPixelFormat, AV_PIX_FMT_NONE);
case AV_CODEC_CONFIG_FRAME_RATE:
- WRAP_CONFIG(AVMEDIA_TYPE_VIDEO, codec->supported_framerates, AVRational, (AVRational){0});
+ WRAP_CONFIG(AVMEDIA_TYPE_VIDEO, codec->supported_framerates, AVRational, {0});
case AV_CODEC_CONFIG_SAMPLE_RATE:
WRAP_CONFIG(AVMEDIA_TYPE_AUDIO, codec->supported_samplerates, int, 0);
case AV_CODEC_CONFIG_SAMPLE_FORMAT:
WRAP_CONFIG(AVMEDIA_TYPE_AUDIO, codec->sample_fmts, enum AVSampleFormat, AV_SAMPLE_FMT_NONE);
case AV_CODEC_CONFIG_CHANNEL_LAYOUT:
- WRAP_CONFIG(AVMEDIA_TYPE_AUDIO, codec->ch_layouts, AVChannelLayout, (AVChannelLayout){0});
+ WRAP_CONFIG(AVMEDIA_TYPE_AUDIO, codec->ch_layouts, AVChannelLayout, {0});
FF_ENABLE_DEPRECATION_WARNINGS
// Martin
More information about the ffmpeg-devel
mailing list