Loading...
Searching...
No Matches
layout-types.h
Go to the documentation of this file.
/* Simple Plugin API */
/* SPDX-FileCopyrightText: Copyright © 2025 Wim Taymans */
/* SPDX-License-Identifier: MIT */
#ifndef SPA_AUDIO_LAYOUT_TYPES_H
#define SPA_AUDIO_LAYOUT_TYPES_H
#include <spa/utils/type.h>
#include <spa/utils/string.h>
#include <spa/param/audio/layout.h>
#ifdef __cplusplus
extern "C" {
#endif
#ifndef SPA_API_AUDIO_LAYOUT_TYPES
#ifdef SPA_API_IMPL
#define SPA_API_AUDIO_LAYOUT_TYPES SPA_API_IMPL
#else
#define SPA_API_AUDIO_LAYOUT_TYPES static inline
#endif
#endif
static const struct spa_type_audio_layout_info {
const char *name;
struct spa_audio_layout_info layout;
} spa_type_audio_layout_info[] = {
{ "Mono", { SPA_AUDIO_LAYOUT_Mono } },
{ "Stereo", { SPA_AUDIO_LAYOUT_Stereo } },
{ "Quad", { SPA_AUDIO_LAYOUT_Quad } },
{ "Pentagonal", { SPA_AUDIO_LAYOUT_Pentagonal } },
{ "Hexagonal", { SPA_AUDIO_LAYOUT_Hexagonal } },
{ "Octagonal", { SPA_AUDIO_LAYOUT_Octagonal } },
{ "Cube", { SPA_AUDIO_LAYOUT_Cube } },
{ "MPEG-1.0", { SPA_AUDIO_LAYOUT_MPEG_1_0 } },
{ "MPEG-2.0", { SPA_AUDIO_LAYOUT_MPEG_2_0 } },
{ "MPEG-3.0A", { SPA_AUDIO_LAYOUT_MPEG_3_0A } },
{ "MPEG-3.0B", { SPA_AUDIO_LAYOUT_MPEG_3_0B } },
{ "MPEG-4.0A", { SPA_AUDIO_LAYOUT_MPEG_4_0A } },
{ "MPEG-4.0B", { SPA_AUDIO_LAYOUT_MPEG_4_0B } },
{ "MPEG-5.0A", { SPA_AUDIO_LAYOUT_MPEG_5_0A } },
{ "MPEG-5.0B", { SPA_AUDIO_LAYOUT_MPEG_5_0B } },
{ "MPEG-5.0C", { SPA_AUDIO_LAYOUT_MPEG_5_0C } },
{ "MPEG-5.0D", { SPA_AUDIO_LAYOUT_MPEG_5_0D } },
{ "MPEG-5.1A", { SPA_AUDIO_LAYOUT_MPEG_5_1A } },
{ "MPEG-5.1B", { SPA_AUDIO_LAYOUT_MPEG_5_1B } },
{ "MPEG-5.1C", { SPA_AUDIO_LAYOUT_MPEG_5_1C } },
{ "MPEG-5.1D", { SPA_AUDIO_LAYOUT_MPEG_5_1D } },
{ "MPEG-6.1A", { SPA_AUDIO_LAYOUT_MPEG_6_1A } },
{ "MPEG-7.1A", { SPA_AUDIO_LAYOUT_MPEG_7_1A } },
{ "MPEG-7.1B", { SPA_AUDIO_LAYOUT_MPEG_7_1B } },
{ "MPEG-7.1C", { SPA_AUDIO_LAYOUT_MPEG_7_1C } },
{ "2.1", { SPA_AUDIO_LAYOUT_2_1 } },
{ "2RC", { SPA_AUDIO_LAYOUT_2RC } },
{ "2FC", { SPA_AUDIO_LAYOUT_2FC } },
{ "3.1", { SPA_AUDIO_LAYOUT_3_1 } },
{ "4.0", { SPA_AUDIO_LAYOUT_4_0 } },
{ "2.2", { SPA_AUDIO_LAYOUT_2_2 } },
{ "4.1", { SPA_AUDIO_LAYOUT_4_1 } },
{ "5.0", { SPA_AUDIO_LAYOUT_5_0 } },
{ "5.0R", { SPA_AUDIO_LAYOUT_5_0R } },
{ "5.1", { SPA_AUDIO_LAYOUT_5_1 } },
{ "5.1R", { SPA_AUDIO_LAYOUT_5_1R } },
{ "6.0", { SPA_AUDIO_LAYOUT_6_0 } },
{ "6.0F", { SPA_AUDIO_LAYOUT_6_0F } },
{ "6.1", { SPA_AUDIO_LAYOUT_6_1 } },
{ "6.1F", { SPA_AUDIO_LAYOUT_6_1F } },
{ "7.0", { SPA_AUDIO_LAYOUT_7_0 } },
{ "7.0F", { SPA_AUDIO_LAYOUT_7_0F } },
{ "7.1", { SPA_AUDIO_LAYOUT_7_1 } },
{ "7.1W", { SPA_AUDIO_LAYOUT_7_1W } },
{ "7.1WR", { SPA_AUDIO_LAYOUT_7_1WR } },
{ NULL, { 0, { SPA_AUDIO_CHANNEL_UNKNOWN } } },
};
SPA_API_AUDIO_LAYOUT_TYPES int
spa_audio_layout_info_parse_name(struct spa_audio_layout_info *layout, size_t size,
const char *name)
{
uint32_t max_position = SPA_AUDIO_LAYOUT_INFO_MAX_POSITION(size);
if (spa_strstartswith(name, "AUX")) {
uint32_t i, n_pos;
if (spa_atou32(name+3, &n_pos, 10)) {
if (n_pos > max_position)
return -ECHRNG;
for (i = 0; i < 0x1000 && i < n_pos; i++)
layout->position[i] = SPA_AUDIO_CHANNEL_AUX0 + i;
for (; i < n_pos; i++)
layout->position[i] = SPA_AUDIO_CHANNEL_UNKNOWN;
layout->n_channels = n_pos;
return n_pos;
}
}
SPA_FOR_EACH_ELEMENT_VAR(spa_type_audio_layout_info, i) {
if (spa_streq(name, i->name)) {
if (i->layout.n_channels > max_position)
return -ECHRNG;
*layout = i->layout;
return i->layout.n_channels;
}
}
return -ENOTSUP;
}
#ifdef __cplusplus
} /* extern "C" */
#endif
#endif /* SPA_AUDIO_LAYOUT_TYPES_H */
SPA_AUDIO_LAYOUT_MPEG_7_1A
#define SPA_AUDIO_LAYOUT_MPEG_7_1A
Definition layout.h:97
SPA_AUDIO_LAYOUT_Octagonal
#define SPA_AUDIO_LAYOUT_Octagonal
Definition layout.h:47
SPA_AUDIO_LAYOUT_MPEG_6_1A
#define SPA_AUDIO_LAYOUT_MPEG_6_1A
Definition layout.h:93
SPA_AUDIO_LAYOUT_6_0F
#define SPA_AUDIO_LAYOUT_6_0F
Definition layout.h:144
SPA_AUDIO_LAYOUT_5_1
#define SPA_AUDIO_LAYOUT_5_1
Definition layout.h:135
SPA_AUDIO_LAYOUT_4_1
#define SPA_AUDIO_LAYOUT_4_1
Definition layout.h:126
SPA_AUDIO_LAYOUT_MPEG_7_1C
#define SPA_AUDIO_LAYOUT_MPEG_7_1C
Definition layout.h:105
SPA_AUDIO_LAYOUT_7_0F
#define SPA_AUDIO_LAYOUT_7_0F
Definition layout.h:159
SPA_AUDIO_LAYOUT_7_1W
#define SPA_AUDIO_LAYOUT_7_1W
Definition layout.h:167
SPA_AUDIO_LAYOUT_Cube
#define SPA_AUDIO_LAYOUT_Cube
Definition layout.h:51
SPA_AUDIO_LAYOUT_3_1
#define SPA_AUDIO_LAYOUT_3_1
Definition layout.h:119
SPA_AUDIO_LAYOUT_4_0
#define SPA_AUDIO_LAYOUT_4_0
Definition layout.h:121
SPA_AUDIO_LAYOUT_MPEG_5_1A
#define SPA_AUDIO_LAYOUT_MPEG_5_1A
Definition layout.h:81
SPA_AUDIO_LAYOUT_2_2
#define SPA_AUDIO_LAYOUT_2_2
Definition layout.h:123
SPA_AUDIO_LAYOUT_7_1
#define SPA_AUDIO_LAYOUT_7_1
Definition layout.h:163
SPA_AUDIO_LAYOUT_MPEG_5_0C
#define SPA_AUDIO_LAYOUT_MPEG_5_0C
Definition layout.h:75
SPA_AUDIO_LAYOUT_MPEG_5_1C
#define SPA_AUDIO_LAYOUT_MPEG_5_1C
Definition layout.h:87
SPA_AUDIO_LAYOUT_5_0R
#define SPA_AUDIO_LAYOUT_5_0R
Definition layout.h:132
SPA_AUDIO_LAYOUT_Quad
#define SPA_AUDIO_LAYOUT_Quad
Definition layout.h:39
SPA_AUDIO_LAYOUT_MPEG_5_0A
#define SPA_AUDIO_LAYOUT_MPEG_5_0A
Definition layout.h:69
SPA_AUDIO_LAYOUT_MPEG_1_0
#define SPA_AUDIO_LAYOUT_MPEG_1_0
Definition layout.h:58
SPA_AUDIO_LAYOUT_MPEG_2_0
#define SPA_AUDIO_LAYOUT_MPEG_2_0
Definition layout.h:60
SPA_AUDIO_LAYOUT_MPEG_4_0B
#define SPA_AUDIO_LAYOUT_MPEG_4_0B
Definition layout.h:67
SPA_AUDIO_LAYOUT_Stereo
#define SPA_AUDIO_LAYOUT_Stereo
Definition layout.h:38
SPA_AUDIO_LAYOUT_MPEG_3_0A
#define SPA_AUDIO_LAYOUT_MPEG_3_0A
Definition layout.h:61
SPA_AUDIO_LAYOUT_INFO_MAX_POSITION
#define SPA_AUDIO_LAYOUT_INFO_MAX_POSITION(size)
Definition layout.h:33
SPA_AUDIO_LAYOUT_Mono
#define SPA_AUDIO_LAYOUT_Mono
Definition layout.h:36
SPA_AUDIO_LAYOUT_MPEG_5_0B
#define SPA_AUDIO_LAYOUT_MPEG_5_0B
Definition layout.h:72
SPA_AUDIO_LAYOUT_7_1WR
#define SPA_AUDIO_LAYOUT_7_1WR
Definition layout.h:171
SPA_AUDIO_LAYOUT_5_1R
#define SPA_AUDIO_LAYOUT_5_1R
Definition layout.h:138
SPA_AUDIO_LAYOUT_MPEG_5_1B
#define SPA_AUDIO_LAYOUT_MPEG_5_1B
Definition layout.h:84
SPA_AUDIO_LAYOUT_MPEG_7_1B
#define SPA_AUDIO_LAYOUT_MPEG_7_1B
Definition layout.h:101
SPA_AUDIO_LAYOUT_6_0
#define SPA_AUDIO_LAYOUT_6_0
Definition layout.h:141
SPA_AUDIO_LAYOUT_Pentagonal
#define SPA_AUDIO_LAYOUT_Pentagonal
Definition layout.h:41
spa_audio_layout_info_parse_name
SPA_API_AUDIO_LAYOUT_TYPES int spa_audio_layout_info_parse_name(struct spa_audio_layout_info *layout, size_t size, const char *name)
Definition layout-types.h:89
SPA_AUDIO_LAYOUT_2FC
#define SPA_AUDIO_LAYOUT_2FC
Definition layout.h:116
SPA_AUDIO_LAYOUT_MPEG_5_0D
#define SPA_AUDIO_LAYOUT_MPEG_5_0D
Definition layout.h:78
SPA_AUDIO_LAYOUT_5_0
#define SPA_AUDIO_LAYOUT_5_0
Definition layout.h:129
SPA_AUDIO_LAYOUT_6_1F
#define SPA_AUDIO_LAYOUT_6_1F
Definition layout.h:151
SPA_AUDIO_LAYOUT_MPEG_3_0B
#define SPA_AUDIO_LAYOUT_MPEG_3_0B
Definition layout.h:63
SPA_API_AUDIO_LAYOUT_TYPES
#define SPA_API_AUDIO_LAYOUT_TYPES
Definition layout-types.h:32
SPA_AUDIO_LAYOUT_Hexagonal
#define SPA_AUDIO_LAYOUT_Hexagonal
Definition layout.h:44
SPA_AUDIO_LAYOUT_2RC
#define SPA_AUDIO_LAYOUT_2RC
Definition layout.h:114
SPA_AUDIO_LAYOUT_2_1
#define SPA_AUDIO_LAYOUT_2_1
Definition layout.h:111
SPA_AUDIO_LAYOUT_MPEG_4_0A
#define SPA_AUDIO_LAYOUT_MPEG_4_0A
Definition layout.h:65
SPA_AUDIO_LAYOUT_7_0
#define SPA_AUDIO_LAYOUT_7_0
Definition layout.h:155
SPA_AUDIO_LAYOUT_6_1
#define SPA_AUDIO_LAYOUT_6_1
Definition layout.h:147
SPA_AUDIO_LAYOUT_MPEG_5_1D
#define SPA_AUDIO_LAYOUT_MPEG_5_1D
Definition layout.h:90
SPA_AUDIO_CHANNEL_AUX0
@ SPA_AUDIO_CHANNEL_AUX0
Definition raw.h:205
SPA_AUDIO_CHANNEL_UNKNOWN
@ SPA_AUDIO_CHANNEL_UNKNOWN
unspecified
Definition raw.h:162
spa_strstartswith
SPA_API_STRING bool spa_strstartswith(const char *s, const char *prefix)
Definition string.h:73
spa_atou32
SPA_API_STRING bool spa_atou32(const char *str, uint32_t *val, int base)
Convert str to an uint32_t with the given base and store the result in val.
Definition string.h:139
spa_streq
SPA_API_STRING bool spa_streq(const char *s1, const char *s2)
Definition string.h:52
SPA_FOR_EACH_ELEMENT_VAR
#define SPA_FOR_EACH_ELEMENT_VAR(arr, var)
Definition defs.h:157
layout.h
spa/param/audio/layout.h
type.h
spa/utils/type.h
string.h
spa/utils/string.h
spa_audio_layout_info
Definition layout.h:26
spa_audio_layout_info::position
uint32_t position[SPA_AUDIO_MAX_CHANNELS]
Definition layout.h:28
spa_audio_layout_info::n_channels
uint32_t n_channels
Definition layout.h:27
spa_type_audio_layout_info
Definition layout-types.h:36
spa_type_audio_layout_info::layout
struct spa_audio_layout_info layout
Definition layout-types.h:38