aboutsummaryrefslogtreecommitdiffstats
path: root/libavcodec/avcodec.h
diff options
context:
space:
mode:
authorNiklas Haas <git@haasn.dev>2024-04-03 22:19:28 +0200
committerNiklas Haas <git@haasn.dev>2024-09-08 13:59:25 +0200
commit3305767560a6303f474fffa3afb10c500059b455 (patch)
treec94bba9e72eebcbf78288a7e1c02f2797dd58854 /libavcodec/avcodec.h
parent703288cec6522655e8533c89efa3cd6df9613b99 (diff)
downloadffmpeg-3305767560a6303f474fffa3afb10c500059b455.tar.gz
avcodec: add avcodec_get_supported_config()
This replaces the myriad of existing lists in AVCodec by a unified API call, allowing us to (ultimately) trim down the sizeof(AVCodec) quite substantially, while also making this more trivially extensible. In addition to the already covered lists, add two new entries for color space and color range, mirroring the newly added negotiable fields in libavfilter. Once the deprecation period passes for the existing public fields, the rough plan is to move the commonly used fields (such as pix_fmt/sample_fmt) into FFCodec, possibly as a union of audio and video configuration types, and then implement the rarely used fields with custom callbacks.
Diffstat (limited to 'libavcodec/avcodec.h')
-rw-r--r--libavcodec/avcodec.h30
1 files changed, 30 insertions, 0 deletions
diff --git a/libavcodec/avcodec.h b/libavcodec/avcodec.h
index 7a67300134..376e130f7d 100644
--- a/libavcodec/avcodec.h
+++ b/libavcodec/avcodec.h
@@ -2695,6 +2695,36 @@ int avcodec_get_hw_frames_parameters(AVCodecContext *avctx,
enum AVPixelFormat hw_pix_fmt,
AVBufferRef **out_frames_ref);
+enum AVCodecConfig {
+ AV_CODEC_CONFIG_PIX_FORMAT, ///< AVPixelFormat, terminated by AV_PIX_FMT_NONE
+ AV_CODEC_CONFIG_FRAME_RATE, ///< AVRational, terminated by {0, 0}
+ AV_CODEC_CONFIG_SAMPLE_RATE, ///< int, terminated by 0
+ AV_CODEC_CONFIG_SAMPLE_FORMAT, ///< AVSampleFormat, terminated by AV_SAMPLE_FMT_NONE
+ AV_CODEC_CONFIG_CHANNEL_LAYOUT, ///< AVChannelLayout, terminated by {0}
+ AV_CODEC_CONFIG_COLOR_RANGE, ///< AVColorRange, terminated by AVCOL_RANGE_UNSPECIFIED
+ AV_CODEC_CONFIG_COLOR_SPACE, ///< AVColorSpace, terminated by AVCOL_SPC_UNSPECIFIED
+};
+
+/**
+ * Retrieve a list of all supported values for a given configuration type.
+ *
+ * @param avctx An optional context to use. Values such as
+ * `strict_std_compliance` may affect the result. If NULL,
+ * default values are used.
+ * @param codec The codec to query, or NULL to use avctx->codec.
+ * @param config The configuration to query.
+ * @param flags Currently unused; should be set to zero.
+ * @param out_configs On success, set to a list of configurations, terminated
+ * by a config-specific terminator, or NULL if all
+ * possible values are supported.
+ * @param out_num_configs On success, set to the number of elements in
+ *out_configs, excluding the terminator. Optional.
+ */
+int avcodec_get_supported_config(const AVCodecContext *avctx,
+ const AVCodec *codec, enum AVCodecConfig config,
+ unsigned flags, const void **out_configs,
+ int *out_num_configs);
+
/**