summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNiklas Haas <git@haasn.dev>2024-04-05 19:21:43 +0200
committerAnton Khirnov <anton@khirnov.net>2024-04-09 14:36:41 +0200
commitf977e522809c5763cbe01195d1336dc5ec76e28d (patch)
tree3bfda162c1b99835886c45d5000390a074913f19
parent03713c7c4b9f63513fbd9f1ba149b5a3d3c47bcd (diff)
avcodec/allcodecs: add backcompat for new config API
In order to avoid breaking older clients not yet using the new API, we need to add backwards compatibility for codecs which have switched from init_static() to get_supported_config(). This function can be removed entirely once the deprecated static fields are removed.
-rw-r--r--libavcodec/allcodecs.c37
1 files changed, 35 insertions, 2 deletions
diff --git a/libavcodec/allcodecs.c b/libavcodec/allcodecs.c
index f4705651fb..a9f1797930 100644
--- a/libavcodec/allcodecs.c
+++ b/libavcodec/allcodecs.c
@@ -916,8 +916,41 @@ static AVOnce av_codec_static_init = AV_ONCE_INIT;
static void av_codec_init_static(void)
{
for (int i = 0; codec_list[i]; i++) {
- if (codec_list[i]->init_static_data)
- codec_list[i]->init_static_data((FFCodec*)codec_list[i]);
+ const FFCodec *codec = codec_list[i];
+ if (codec->init_static_data) {
+ codec->init_static_data((FFCodec*) codec);
+ continue;
+ }
+
+ /* Backward compatibility with deprecated public fields */
+ if (!codec->get_supported_config)
+ continue;
+
+FF_DISABLE_DEPRECATION_WARNINGS
+ switch (codec->p.type) {
+ case AVMEDIA_TYPE_VIDEO:
+ codec->get_supported_config(NULL, &codec->p,
+ AV_CODEC_CONFIG_PIX_FORMAT, 0,
+ (const void **) &codec->p.pix_fmts);
+ codec->get_supported_config(NULL, &codec->p,
+ AV_CODEC_CONFIG_FRAME_RATE, 0,
+ (const void **) &codec->p.supported_framerates);
+ break;
+ case AVMEDIA_TYPE_AUDIO:
+ codec->get_supported_config(NULL, &codec->p,
+ AV_CODEC_CONFIG_SAMPLE_FORMAT, 0,
+ (const void **) &codec->p.sample_fmts);
+ codec->get_supported_config(NULL, &codec->p,
+ AV_CODEC_CONFIG_SAMPLE_RATE, 0,
+ (const void **) &codec->p.supported_samplerates);
+ codec->get_supported_config(NULL, &codec->p,
+ AV_CODEC_CONFIG_CHANNEL_LAYOUT, 0,
+ (const void **) &codec->p.ch_layouts);
+ break;
+ default:
+ break;
+ }
+FF_ENABLE_DEPRECATION_WARNINGS
}
}