[FFmpeg-devel] [PATCH 3/5] avutil/channel_layout: add av_channel_layout_from_custom()

Marton Balint cus at passwd.hu
Tue Jan 30 01:27:53 EET 2024


Signed-off-by: Marton Balint <cus at passwd.hu>
---
 doc/APIchanges             |  3 +++
 libavutil/channel_layout.c | 20 ++++++++++++++++++++
 libavutil/channel_layout.h | 13 +++++++++++++
 libavutil/version.h        |  4 ++--
 4 files changed, 38 insertions(+), 2 deletions(-)

diff --git a/doc/APIchanges b/doc/APIchanges
index e477ed78e0..8e8498f803 100644
--- a/doc/APIchanges
+++ b/doc/APIchanges
@@ -2,6 +2,9 @@ The last version increases of all libraries were on 2023-02-09
 
 API changes, most recent first:
 
+2024-02-xx - xxxxxxxxxx - lavu 58.37.100 - channel_layout.h
+  Add av_channel_layout_from_custom().
+
 2023-11-xx - xxxxxxxxxx - lavfi 9.16.100 - buffersink.h buffersrc.h
   Add av_buffersink_get_colorspace and av_buffersink_get_color_range.
   Add AVBufferSrcParameters.color_space and AVBufferSrcParameters.color_range.
diff --git a/libavutil/channel_layout.c b/libavutil/channel_layout.c
index b59d798f29..0810d32bf6 100644
--- a/libavutil/channel_layout.c
+++ b/libavutil/channel_layout.c
@@ -398,6 +398,26 @@ int av_get_standard_channel_layout(unsigned index, uint64_t *layout,
 FF_ENABLE_DEPRECATION_WARNINGS
 #endif
 
+int av_channel_layout_from_custom(AVChannelLayout *channel_layout, int nb_channels)
+{
+    AVChannelCustom *map;
+
+    if (nb_channels <= 0)
+        return AVERROR(EINVAL);
+
+    map = av_calloc(nb_channels, sizeof(*channel_layout->u.map));
+    if (!map)
+        return AVERROR(ENOMEM);
+    for (int i = 0; i < nb_channels; i++)
+        map[i].id = AV_CHAN_UNKNOWN;
+
+    channel_layout->order       = AV_CHANNEL_ORDER_CUSTOM;
+    channel_layout->nb_channels = nb_channels;
+    channel_layout->u.map       = map;
+
+    return 0;
+}
+
 int av_channel_layout_from_mask(AVChannelLayout *channel_layout,
                                 uint64_t mask)
 {
diff --git a/libavutil/channel_layout.h b/libavutil/channel_layout.h
index 8dc1a91401..37629ab5d2 100644
--- a/libavutil/channel_layout.h
+++ b/libavutil/channel_layout.h
@@ -617,6 +617,19 @@ void av_channel_description_bprint(struct AVBPrint *bp, enum AVChannel channel_i
  */
 enum AVChannel av_channel_from_string(const char *name);
 
+/**
+ * Initialize a custom channel layout with the specified number of channels.
+ * The designation of all channels will be unknown.
+ *
+ * @param channel_layout the layout structure to be initialized
+ * @param nb_channels the number of channels
+ *
+ * @return 0 on success
+ *         AVERROR(EINVAL) if the number of channels <= 0
+ *         AVERROR(ENOMEM) if the channel map could not be allocated
+ */
+int av_channel_layout_from_custom(AVChannelLayout *channel_layout, int nb_channels);
+
 /**
  * Initialize a native channel layout from a bitmask indicating which channels
  * are present.
diff --git a/libavutil/version.h b/libavutil/version.h
index 772c4e209c..3b38f8f5da 100644
--- a/libavutil/version.h
+++ b/libavutil/version.h
@@ -79,8 +79,8 @@
  */
 
 #define LIBAVUTIL_VERSION_MAJOR  58
-#define LIBAVUTIL_VERSION_MINOR  36
-#define LIBAVUTIL_VERSION_MICRO 101
+#define LIBAVUTIL_VERSION_MINOR  37
+#define LIBAVUTIL_VERSION_MICRO 100
 
 #define LIBAVUTIL_VERSION_INT   AV_VERSION_INT(LIBAVUTIL_VERSION_MAJOR, \
                                                LIBAVUTIL_VERSION_MINOR, \
-- 
2.35.3



More information about the ffmpeg-devel mailing list