From c5533b3c32775dc52c54c6d4a33531d2f03c36e1 Mon Sep 17 00:00:00 2001 From: Wim Taymans Date: Wed, 22 Oct 2025 13:26:52 +0200 Subject: [PATCH] spa: add all channel positions to the params Pass all the positions of all channels to the format param, even when there are more channels then positions. --- spa/include/spa/param/audio/raw-utils.h | 17 ++++++++++------- 1 file changed, 10 insertions(+), 7 deletions(-) diff --git a/spa/include/spa/param/audio/raw-utils.h b/spa/include/spa/param/audio/raw-utils.h index 8a9542c2e..7c0a92776 100644 --- a/spa/include/spa/param/audio/raw-utils.h +++ b/spa/include/spa/param/audio/raw-utils.h @@ -80,8 +80,8 @@ SPA_API_AUDIO_RAW_UTILS struct spa_pod * spa_format_audio_raw_build(struct spa_pod_builder *builder, uint32_t id, const struct spa_audio_info_raw *info) { - struct spa_pod_frame f; - spa_pod_builder_push_object(builder, &f, SPA_TYPE_OBJECT_Format, id); + struct spa_pod_frame f[2]; + spa_pod_builder_push_object(builder, &f[0], SPA_TYPE_OBJECT_Format, id); spa_pod_builder_add(builder, SPA_FORMAT_mediaType, SPA_POD_Id(SPA_MEDIA_TYPE_audio), SPA_FORMAT_mediaSubtype, SPA_POD_Id(SPA_MEDIA_SUBTYPE_raw), @@ -96,13 +96,16 @@ spa_format_audio_raw_build(struct spa_pod_builder *builder, uint32_t id, spa_pod_builder_add(builder, SPA_FORMAT_AUDIO_channels, SPA_POD_Int(info->channels), 0); if (!SPA_FLAG_IS_SET(info->flags, SPA_AUDIO_FLAG_UNPOSITIONED)) { - spa_pod_builder_add(builder, SPA_FORMAT_AUDIO_position, - SPA_POD_Array(sizeof(uint32_t), SPA_TYPE_Id, - SPA_MIN(info->channels, SPA_N_ELEMENTS(info->position)), - info->position), 0); + uint32_t i; + spa_pod_builder_prop(builder, SPA_FORMAT_AUDIO_position, 0); + spa_pod_builder_push_array(builder, &f[1]); + for (i = 0; i < info->channels; i++) + spa_pod_builder_id(builder, + spa_format_audio_raw_get_position(info, i)); + spa_pod_builder_pop(builder, &f[1]); } } - return (struct spa_pod*)spa_pod_builder_pop(builder, &f); + return (struct spa_pod*)spa_pod_builder_pop(builder, &f[0]); } /**