mirror of
https://gitlab.freedesktop.org/pipewire/pipewire.git
synced 2025-11-15 07:00:05 -05:00
audio: remove layout from audio
Make special format types for planar and interleaved instead of having a field. Add enum for audio channel positions Add some default audio channel layouts Place the channel layout in the audio format when possible alsa: place audio channel positions in format Add sse optimized channel mixing for some common cases Remove name from port info, it's not mandatory and in the properties Add direction to port info
This commit is contained in:
parent
fb3379e587
commit
5196f7f053
38 changed files with 981 additions and 369 deletions
|
|
@ -33,29 +33,41 @@ extern "C" {
|
|||
static inline int
|
||||
spa_format_audio_raw_parse(const struct spa_pod *format, struct spa_audio_info_raw *info)
|
||||
{
|
||||
return spa_pod_object_parse(format,
|
||||
struct spa_pod *position = NULL;
|
||||
int res;
|
||||
res = spa_pod_object_parse(format,
|
||||
":", SPA_FORMAT_AUDIO_format, "I", &info->format,
|
||||
":", SPA_FORMAT_AUDIO_layout, "I", &info->layout,
|
||||
":", SPA_FORMAT_AUDIO_rate, "i", &info->rate,
|
||||
":", SPA_FORMAT_AUDIO_channels, "i", &info->channels,
|
||||
":", SPA_FORMAT_AUDIO_flags, "?i", &info->flags,
|
||||
":", SPA_FORMAT_AUDIO_channelMask, "?l", &info->channel_mask, NULL);
|
||||
":", SPA_FORMAT_AUDIO_position, "?P", &position, NULL);
|
||||
if (position && position->type == SPA_TYPE_Array &&
|
||||
SPA_POD_ARRAY_TYPE(position) == SPA_TYPE_Id) {
|
||||
uint32_t *values = SPA_POD_ARRAY_VALUES(position);
|
||||
uint32_t n_values = SPA_MIN(SPA_POD_ARRAY_N_VALUES(position), SPA_AUDIO_MAX_CHANNELS);
|
||||
memcpy(info->position, values, n_values * sizeof(uint32_t));
|
||||
}
|
||||
return res;
|
||||
}
|
||||
|
||||
static inline struct spa_pod *
|
||||
spa_format_audio_raw_build(struct spa_pod_builder *builder, uint32_t id, struct spa_audio_info_raw *info)
|
||||
{
|
||||
return spa_pod_builder_object(builder,
|
||||
SPA_TYPE_OBJECT_Format, id,
|
||||
spa_pod_builder_push_object(builder, SPA_TYPE_OBJECT_Format, id);
|
||||
spa_pod_builder_props(builder,
|
||||
SPA_FORMAT_mediaType, &SPA_POD_Id(SPA_MEDIA_TYPE_audio),
|
||||
SPA_FORMAT_mediaSubtype, &SPA_POD_Id(SPA_MEDIA_SUBTYPE_raw),
|
||||
SPA_FORMAT_AUDIO_format, &SPA_POD_Id(info->format),
|
||||
SPA_FORMAT_AUDIO_layout, &SPA_POD_Id(info->layout),
|
||||
SPA_FORMAT_AUDIO_rate, &SPA_POD_Int(info->rate),
|
||||
SPA_FORMAT_AUDIO_channels, &SPA_POD_Int(info->channels),
|
||||
0);
|
||||
|
||||
spa_pod_builder_prop(builder, SPA_FORMAT_AUDIO_position, 0);
|
||||
spa_pod_builder_array(builder, sizeof(uint32_t), SPA_TYPE_Id, info->channels, info->position);
|
||||
return spa_pod_builder_pop(builder);
|
||||
}
|
||||
|
||||
|
||||
#ifdef __cplusplus
|
||||
} /* extern "C" */
|
||||
#endif
|
||||
|
|
|
|||
|
|
@ -26,9 +26,14 @@ extern "C" {
|
|||
|
||||
#include <endian.h>
|
||||
|
||||
#define SPA_AUDIO_MAX_CHANNELS 64
|
||||
|
||||
enum spa_audio_format {
|
||||
SPA_AUDIO_FORMAT_UNKNOWN,
|
||||
SPA_AUDIO_FORMAT_ENCODED,
|
||||
|
||||
/* interleaved formats */
|
||||
SPA_AUDIO_FORMAT_START_Interleaved = 0x100,
|
||||
SPA_AUDIO_FORMAT_S8,
|
||||
SPA_AUDIO_FORMAT_U8,
|
||||
SPA_AUDIO_FORMAT_S16_LE,
|
||||
|
|
@ -60,6 +65,18 @@ enum spa_audio_format {
|
|||
SPA_AUDIO_FORMAT_F64_LE,
|
||||
SPA_AUDIO_FORMAT_F64_BE,
|
||||
|
||||
/* planar formats */
|
||||
SPA_AUDIO_FORMAT_START_Planar = 0x200,
|
||||
SPA_AUDIO_FORMAT_U8P,
|
||||
SPA_AUDIO_FORMAT_S16P,
|
||||
SPA_AUDIO_FORMAT_S24_32P,
|
||||
SPA_AUDIO_FORMAT_S32P,
|
||||
SPA_AUDIO_FORMAT_S24P,
|
||||
SPA_AUDIO_FORMAT_F32P,
|
||||
SPA_AUDIO_FORMAT_F64P,
|
||||
|
||||
SPA_AUDIO_FORMAT_START_Other = 0x300,
|
||||
|
||||
#if __BYTE_ORDER == __BIG_ENDIAN
|
||||
SPA_AUDIO_FORMAT_S16 = SPA_AUDIO_FORMAT_S16_BE,
|
||||
SPA_AUDIO_FORMAT_U16 = SPA_AUDIO_FORMAT_U16_BE,
|
||||
|
|
@ -121,26 +138,97 @@ enum spa_audio_format {
|
|||
#endif
|
||||
};
|
||||
|
||||
#define SPA_AUDIO_FORMAT_IS_INTERLEAVED(fmt) ((fmt) > SPA_AUDIO_FORMAT_START_Interleaved && (fmt) < SPA_AUDIO_FORMAT_START_Planar)
|
||||
#define SPA_AUDIO_FORMAT_IS_PLANAR(fmt) ((fmt) > SPA_AUDIO_FORMAT_START_Planar && (fmt) < SPA_AUDIO_FORMAT_START_Other)
|
||||
|
||||
enum spa_audio_channel {
|
||||
SPA_AUDIO_CHANNEL_UNKNOWN, /**< unspecified */
|
||||
SPA_AUDIO_CHANNEL_NA, /**< N/A, silent */
|
||||
SPA_AUDIO_CHANNEL_MONO, /**< mono stream */
|
||||
SPA_AUDIO_CHANNEL_FL, /**< front left */
|
||||
SPA_AUDIO_CHANNEL_FR, /**< front right */
|
||||
SPA_AUDIO_CHANNEL_RL, /**< rear left */
|
||||
SPA_AUDIO_CHANNEL_RR, /**< rear right */
|
||||
SPA_AUDIO_CHANNEL_FC, /**< front center */
|
||||
SPA_AUDIO_CHANNEL_LFE, /**< LFE */
|
||||
SPA_AUDIO_CHANNEL_SL, /**< side left */
|
||||
SPA_AUDIO_CHANNEL_SR, /**< side right */
|
||||
SPA_AUDIO_CHANNEL_RC, /**< rear center */
|
||||
SPA_AUDIO_CHANNEL_FLC, /**< front left center */
|
||||
SPA_AUDIO_CHANNEL_FRC, /**< front right center */
|
||||
SPA_AUDIO_CHANNEL_RLC, /**< rear left center */
|
||||
SPA_AUDIO_CHANNEL_RRC, /**< rear right center */
|
||||
SPA_AUDIO_CHANNEL_FLW, /**< front left wide */
|
||||
SPA_AUDIO_CHANNEL_FRW, /**< front right wide */
|
||||
SPA_AUDIO_CHANNEL_FLH, /**< front left high */
|
||||
SPA_AUDIO_CHANNEL_FCH, /**< front center high */
|
||||
SPA_AUDIO_CHANNEL_FRH, /**< front right high */
|
||||
SPA_AUDIO_CHANNEL_TC, /**< top center */
|
||||
SPA_AUDIO_CHANNEL_TFL, /**< top front left */
|
||||
SPA_AUDIO_CHANNEL_TFR, /**< top front right */
|
||||
SPA_AUDIO_CHANNEL_TFC, /**< top front center */
|
||||
SPA_AUDIO_CHANNEL_TRL, /**< top rear left */
|
||||
SPA_AUDIO_CHANNEL_TRR, /**< top rear right */
|
||||
SPA_AUDIO_CHANNEL_TRC, /**< top rear center */
|
||||
SPA_AUDIO_CHANNEL_TFLC, /**< top front left center */
|
||||
SPA_AUDIO_CHANNEL_TFRC, /**< top front right center */
|
||||
SPA_AUDIO_CHANNEL_TSL, /**< top side left */
|
||||
SPA_AUDIO_CHANNEL_TSR, /**< top side right */
|
||||
SPA_AUDIO_CHANNEL_LLFE, /**< left LFE */
|
||||
SPA_AUDIO_CHANNEL_RLFE, /**< right LFE */
|
||||
SPA_AUDIO_CHANNEL_BC, /**< bottom center */
|
||||
SPA_AUDIO_CHANNEL_BLC, /**< bottom left center */
|
||||
SPA_AUDIO_CHANNEL_BRC, /**< bottom right center */
|
||||
|
||||
SPA_AUDIO_CHANNEL_CUSTOM_START = 0x10000,
|
||||
};
|
||||
|
||||
#define SPA_AUDIO_CHANNEL_MASK(ch) (1LL << SPA_AUDIO_CHANNEL_ ## ch)
|
||||
|
||||
enum spa_audio_layout {
|
||||
SPA_AUDIO_LAYOUT_DEFAULT, /**< default layout for the number of channels */
|
||||
SPA_AUDIO_LAYOUT_CUSTOM, /**< custom layout, either the order of the channels is
|
||||
* non-standard or the channel position array contains
|
||||
* custom channels. */
|
||||
SPA_AUDIO_LAYOUT_MONO, /**< MONO */
|
||||
SPA_AUDIO_LAYOUT_STEREO, /**< FL FR */
|
||||
SPA_AUDIO_LAYOUT_2_1, /**< FL FR LFE */
|
||||
SPA_AUDIO_LAYOUT_2RC, /**< FL FR RC */
|
||||
SPA_AUDIO_LAYOUT_2FC, /**< FL FR FC */
|
||||
SPA_AUDIO_LAYOUT_3_1, /**< FL FR FC LFE */
|
||||
SPA_AUDIO_LAYOUT_4_0, /**< FL FR FC RC */
|
||||
SPA_AUDIO_LAYOUT_4_1, /**< FL FR FC RC LFE */
|
||||
SPA_AUDIO_LAYOUT_2_2, /**< FL FR SL SR */
|
||||
SPA_AUDIO_LAYOUT_QUAD, /**< FL FR RL RR */
|
||||
SPA_AUDIO_LAYOUT_5_0, /**< FL FR FC SL SR */
|
||||
SPA_AUDIO_LAYOUT_5_1, /**< FL FR FC SL SR LFE */
|
||||
SPA_AUDIO_LAYOUT_5_0R, /**< FL FR FC RL RR */
|
||||
SPA_AUDIO_LAYOUT_5_1R, /**< FL FR FC RL RR LFE */
|
||||
SPA_AUDIO_LAYOUT_6_0, /**< FL FR FC SL SR RC */
|
||||
SPA_AUDIO_LAYOUT_6_0F, /**< FL FR SL SR FLC FRC */
|
||||
SPA_AUDIO_LAYOUT_HEXAGONAL, /**< FL FR FC RL RR RC */
|
||||
SPA_AUDIO_LAYOUT_6_1, /**< FL FR FC SL SR LFE RC */
|
||||
SPA_AUDIO_LAYOUT_6_1R, /**< FL FR FC RL RR LFE RC */
|
||||
SPA_AUDIO_LAYOUT_6_1F, /**< FL FR SL SR FLC FRC LFE */
|
||||
SPA_AUDIO_LAYOUT_7_0, /**< FL FR FC SL SR RL RR */
|
||||
SPA_AUDIO_LAYOUT_7_0F, /**< FL FR FC SL SR FLC FRC */
|
||||
SPA_AUDIO_LAYOUT_7_1, /**< FL FR FC SL SR LFE RL RR */
|
||||
SPA_AUDIO_LAYOUT_7_1W, /**< FL FR FC SL SR LFE FLC FRC */
|
||||
SPA_AUDIO_LAYOUT_7_1WR, /**< FL FR FC RL RR LFE FLC FRC */
|
||||
SPA_AUDIO_LAYOUT_OCTAGONAL, /**< FL FR FC SL SR RL RC RR */
|
||||
};
|
||||
|
||||
/** Extra audio flags */
|
||||
#define SPA_AUDIO_FLAG_NONE (0) /*< no valid flag */
|
||||
#define SPA_AUDIO_FLAG_UNPOSITIONED (1 << 0) /*< the position array explicitly
|
||||
* contains unpositioned channels. */
|
||||
|
||||
/** Layout of the audio samples for the different channels. */
|
||||
enum spa_audio_layout {
|
||||
SPA_AUDIO_LAYOUT_INVALID,
|
||||
SPA_AUDIO_LAYOUT_INTERLEAVED, /*< interleaved audio */
|
||||
SPA_AUDIO_LAYOUT_NON_INTERLEAVED, /*< non-interleaved audio */
|
||||
};
|
||||
|
||||
/** Audio information description */
|
||||
struct spa_audio_info_raw {
|
||||
enum spa_audio_format format; /*< format, one of enum spa_audio_format */
|
||||
uint32_t flags; /*< extra flags */
|
||||
enum spa_audio_layout layout; /*< sample layout */
|
||||
uint32_t rate; /*< sample rate */
|
||||
uint32_t channels; /*< number of channels */
|
||||
uint64_t channel_mask; /*< channel mask */
|
||||
enum spa_audio_format format; /*< format, one of enum spa_audio_format */
|
||||
uint32_t flags; /*< extra flags */
|
||||
uint32_t rate; /*< sample rate */
|
||||
uint32_t channels; /*< number of channels */
|
||||
uint32_t position[SPA_AUDIO_MAX_CHANNELS]; /*< channel position from enum spa_audio_channel */
|
||||
};
|
||||
|
||||
#define SPA_AUDIO_INFO_RAW_INIT(...) (struct spa_audio_info_raw) { __VA_ARGS__ }
|
||||
|
|
|
|||
|
|
@ -62,6 +62,15 @@ static const struct spa_type_info spa_type_audio_format[] = {
|
|||
{ SPA_AUDIO_FORMAT_F32_BE, SPA_TYPE_AUDIO_FORMAT_BASE "F32BE", SPA_TYPE_Int, },
|
||||
{ SPA_AUDIO_FORMAT_F64_LE, SPA_TYPE_AUDIO_FORMAT_BASE "F64LE", SPA_TYPE_Int, },
|
||||
{ SPA_AUDIO_FORMAT_F64_BE, SPA_TYPE_AUDIO_FORMAT_BASE "F64BE", SPA_TYPE_Int, },
|
||||
|
||||
{ SPA_AUDIO_FORMAT_U8P, SPA_TYPE_AUDIO_FORMAT_BASE "U8P", SPA_TYPE_Int, },
|
||||
{ SPA_AUDIO_FORMAT_S16P, SPA_TYPE_AUDIO_FORMAT_BASE "S16P", SPA_TYPE_Int, },
|
||||
{ SPA_AUDIO_FORMAT_S24_32P, SPA_TYPE_AUDIO_FORMAT_BASE "S24_32P", SPA_TYPE_Int, },
|
||||
{ SPA_AUDIO_FORMAT_S32P, SPA_TYPE_AUDIO_FORMAT_BASE "S32P", SPA_TYPE_Int, },
|
||||
{ SPA_AUDIO_FORMAT_S24P, SPA_TYPE_AUDIO_FORMAT_BASE "S24P", SPA_TYPE_Int, },
|
||||
{ SPA_AUDIO_FORMAT_F32P, SPA_TYPE_AUDIO_FORMAT_BASE "F32P", SPA_TYPE_Int, },
|
||||
{ SPA_AUDIO_FORMAT_F64P, SPA_TYPE_AUDIO_FORMAT_BASE "F64P", SPA_TYPE_Int, },
|
||||
|
||||
{ 0, NULL, },
|
||||
};
|
||||
|
||||
|
|
@ -74,14 +83,83 @@ static const struct spa_type_info spa_type_audio_flags[] = {
|
|||
{ 0, NULL, },
|
||||
};
|
||||
|
||||
#define SPA_TYPE__AudioChannel SPA_TYPE_ENUM_BASE "AudioChannel"
|
||||
#define SPA_TYPE_AUDIO_CHANNEL_BASE SPA_TYPE__AudioChannel ":"
|
||||
|
||||
static const struct spa_type_info spa_type_audio_channel[] = {
|
||||
{ SPA_AUDIO_CHANNEL_UNKNOWN, SPA_TYPE_AUDIO_CHANNEL_BASE "UNK", SPA_TYPE_Int, },
|
||||
{ SPA_AUDIO_CHANNEL_NA, SPA_TYPE_AUDIO_CHANNEL_BASE "NA", SPA_TYPE_Int, },
|
||||
{ SPA_AUDIO_CHANNEL_MONO, SPA_TYPE_AUDIO_CHANNEL_BASE "MONO", SPA_TYPE_Int, },
|
||||
{ SPA_AUDIO_CHANNEL_FL, SPA_TYPE_AUDIO_CHANNEL_BASE "FL", SPA_TYPE_Int, },
|
||||
{ SPA_AUDIO_CHANNEL_FR, SPA_TYPE_AUDIO_CHANNEL_BASE "FR", SPA_TYPE_Int, },
|
||||
{ SPA_AUDIO_CHANNEL_RL, SPA_TYPE_AUDIO_CHANNEL_BASE "RL", SPA_TYPE_Int, },
|
||||
{ SPA_AUDIO_CHANNEL_RR, SPA_TYPE_AUDIO_CHANNEL_BASE "RR", SPA_TYPE_Int, },
|
||||
{ SPA_AUDIO_CHANNEL_FC, SPA_TYPE_AUDIO_CHANNEL_BASE "FC", SPA_TYPE_Int, },
|
||||
{ SPA_AUDIO_CHANNEL_LFE, SPA_TYPE_AUDIO_CHANNEL_BASE "LFE", SPA_TYPE_Int, },
|
||||
{ SPA_AUDIO_CHANNEL_SL, SPA_TYPE_AUDIO_CHANNEL_BASE "SL", SPA_TYPE_Int, },
|
||||
{ SPA_AUDIO_CHANNEL_SR, SPA_TYPE_AUDIO_CHANNEL_BASE "SR", SPA_TYPE_Int, },
|
||||
{ SPA_AUDIO_CHANNEL_RC, SPA_TYPE_AUDIO_CHANNEL_BASE "RC", SPA_TYPE_Int, },
|
||||
{ SPA_AUDIO_CHANNEL_FLC, SPA_TYPE_AUDIO_CHANNEL_BASE "FLC", SPA_TYPE_Int, },
|
||||
{ SPA_AUDIO_CHANNEL_FRC, SPA_TYPE_AUDIO_CHANNEL_BASE "FRC", SPA_TYPE_Int, },
|
||||
{ SPA_AUDIO_CHANNEL_RLC, SPA_TYPE_AUDIO_CHANNEL_BASE "RLC", SPA_TYPE_Int, },
|
||||
{ SPA_AUDIO_CHANNEL_RRC, SPA_TYPE_AUDIO_CHANNEL_BASE "RRC", SPA_TYPE_Int, },
|
||||
{ SPA_AUDIO_CHANNEL_FLW, SPA_TYPE_AUDIO_CHANNEL_BASE "FLW", SPA_TYPE_Int, },
|
||||
{ SPA_AUDIO_CHANNEL_FRW, SPA_TYPE_AUDIO_CHANNEL_BASE "FRW", SPA_TYPE_Int, },
|
||||
{ SPA_AUDIO_CHANNEL_FLH, SPA_TYPE_AUDIO_CHANNEL_BASE "FLH", SPA_TYPE_Int, },
|
||||
{ SPA_AUDIO_CHANNEL_FCH, SPA_TYPE_AUDIO_CHANNEL_BASE "FCH", SPA_TYPE_Int, },
|
||||
{ SPA_AUDIO_CHANNEL_FRH, SPA_TYPE_AUDIO_CHANNEL_BASE "FRH", SPA_TYPE_Int, },
|
||||
{ SPA_AUDIO_CHANNEL_TC, SPA_TYPE_AUDIO_CHANNEL_BASE "TC", SPA_TYPE_Int, },
|
||||
{ SPA_AUDIO_CHANNEL_TFL, SPA_TYPE_AUDIO_CHANNEL_BASE "TFL", SPA_TYPE_Int, },
|
||||
{ SPA_AUDIO_CHANNEL_TFR, SPA_TYPE_AUDIO_CHANNEL_BASE "TFR", SPA_TYPE_Int, },
|
||||
{ SPA_AUDIO_CHANNEL_TFC, SPA_TYPE_AUDIO_CHANNEL_BASE "TFC", SPA_TYPE_Int, },
|
||||
{ SPA_AUDIO_CHANNEL_TRL, SPA_TYPE_AUDIO_CHANNEL_BASE "TRL", SPA_TYPE_Int, },
|
||||
{ SPA_AUDIO_CHANNEL_TRR, SPA_TYPE_AUDIO_CHANNEL_BASE "TRR", SPA_TYPE_Int, },
|
||||
{ SPA_AUDIO_CHANNEL_TRC, SPA_TYPE_AUDIO_CHANNEL_BASE "TRC", SPA_TYPE_Int, },
|
||||
{ SPA_AUDIO_CHANNEL_TFLC, SPA_TYPE_AUDIO_CHANNEL_BASE "TFLC", SPA_TYPE_Int, },
|
||||
{ SPA_AUDIO_CHANNEL_TFRC, SPA_TYPE_AUDIO_CHANNEL_BASE "TFRC", SPA_TYPE_Int, },
|
||||
{ SPA_AUDIO_CHANNEL_TSL, SPA_TYPE_AUDIO_CHANNEL_BASE "TSL", SPA_TYPE_Int, },
|
||||
{ SPA_AUDIO_CHANNEL_TSR, SPA_TYPE_AUDIO_CHANNEL_BASE "TSR", SPA_TYPE_Int, },
|
||||
{ SPA_AUDIO_CHANNEL_LLFE, SPA_TYPE_AUDIO_CHANNEL_BASE "LLFR", SPA_TYPE_Int, },
|
||||
{ SPA_AUDIO_CHANNEL_RLFE, SPA_TYPE_AUDIO_CHANNEL_BASE "RLFE", SPA_TYPE_Int, },
|
||||
{ SPA_AUDIO_CHANNEL_BC, SPA_TYPE_AUDIO_CHANNEL_BASE "BC", SPA_TYPE_Int, },
|
||||
{ SPA_AUDIO_CHANNEL_BLC, SPA_TYPE_AUDIO_CHANNEL_BASE "BLC", SPA_TYPE_Int, },
|
||||
{ SPA_AUDIO_CHANNEL_BRC, SPA_TYPE_AUDIO_CHANNEL_BASE "BRC", SPA_TYPE_Int, },
|
||||
{ 0, NULL, },
|
||||
};
|
||||
|
||||
#define SPA_TYPE__AudioLayout SPA_TYPE_ENUM_BASE "AudioLayout"
|
||||
#define SPA_TYPE_AUDIO_ENUM_BASE SPA_TYPE__AudioLayout ":"
|
||||
#define SPA_TYPE_AUDIO_LAYOUT_BASE SPA_TYPE__AudioLayout ":"
|
||||
|
||||
static const struct spa_type_info spa_type_audio_layout[] = {
|
||||
{ SPA_AUDIO_LAYOUT_INVALID, SPA_TYPE_AUDIO_ENUM_BASE "Invalid", SPA_TYPE_Int, },
|
||||
{ SPA_AUDIO_LAYOUT_INTERLEAVED, SPA_TYPE_AUDIO_ENUM_BASE "Interleaved", SPA_TYPE_Int, },
|
||||
{ SPA_AUDIO_LAYOUT_NON_INTERLEAVED, SPA_TYPE_AUDIO_ENUM_BASE "Non-Interleaved", SPA_TYPE_Int, },
|
||||
{ 0, NULL, },
|
||||
{ SPA_AUDIO_LAYOUT_DEFAULT, SPA_TYPE_AUDIO_LAYOUT_BASE "Default", SPA_TYPE_Int, },
|
||||
{ SPA_AUDIO_LAYOUT_CUSTOM, SPA_TYPE_AUDIO_LAYOUT_BASE "Custom", SPA_TYPE_Int, },
|
||||
{ SPA_AUDIO_LAYOUT_MONO, SPA_TYPE_AUDIO_LAYOUT_BASE "Mono", SPA_TYPE_Int, },
|
||||
{ SPA_AUDIO_LAYOUT_STEREO, SPA_TYPE_AUDIO_LAYOUT_BASE "Stereo", SPA_TYPE_Int, },
|
||||
{ SPA_AUDIO_LAYOUT_2_1, SPA_TYPE_AUDIO_LAYOUT_BASE "2.1", SPA_TYPE_Int, },
|
||||
{ SPA_AUDIO_LAYOUT_2RC, SPA_TYPE_AUDIO_LAYOUT_BASE "2.1 Rear", SPA_TYPE_Int, },
|
||||
{ SPA_AUDIO_LAYOUT_2FC, SPA_TYPE_AUDIO_LAYOUT_BASE "2.1 Front", SPA_TYPE_Int, },
|
||||
{ SPA_AUDIO_LAYOUT_3_1, SPA_TYPE_AUDIO_LAYOUT_BASE "3.1", SPA_TYPE_Int, },
|
||||
{ SPA_AUDIO_LAYOUT_4_0, SPA_TYPE_AUDIO_LAYOUT_BASE "4.0", SPA_TYPE_Int, },
|
||||
{ SPA_AUDIO_LAYOUT_4_1, SPA_TYPE_AUDIO_LAYOUT_BASE "4.1", SPA_TYPE_Int, },
|
||||
{ SPA_AUDIO_LAYOUT_2_2, SPA_TYPE_AUDIO_LAYOUT_BASE "2.2", SPA_TYPE_Int, },
|
||||
{ SPA_AUDIO_LAYOUT_QUAD, SPA_TYPE_AUDIO_LAYOUT_BASE "Quad", SPA_TYPE_Int, },
|
||||
{ SPA_AUDIO_LAYOUT_5_0, SPA_TYPE_AUDIO_LAYOUT_BASE "5.0", SPA_TYPE_Int, },
|
||||
{ SPA_AUDIO_LAYOUT_5_1, SPA_TYPE_AUDIO_LAYOUT_BASE "5.1", SPA_TYPE_Int, },
|
||||
{ SPA_AUDIO_LAYOUT_5_0R, SPA_TYPE_AUDIO_LAYOUT_BASE "5.0 Rear", SPA_TYPE_Int, },
|
||||
{ SPA_AUDIO_LAYOUT_5_1R, SPA_TYPE_AUDIO_LAYOUT_BASE "5.1 Rear", SPA_TYPE_Int, },
|
||||
{ SPA_AUDIO_LAYOUT_6_0, SPA_TYPE_AUDIO_LAYOUT_BASE "6.0", SPA_TYPE_Int, },
|
||||
{ SPA_AUDIO_LAYOUT_6_0F, SPA_TYPE_AUDIO_LAYOUT_BASE "6.0 Front", SPA_TYPE_Int, },
|
||||
{ SPA_AUDIO_LAYOUT_HEXAGONAL, SPA_TYPE_AUDIO_LAYOUT_BASE "Hexagonal", SPA_TYPE_Int, },
|
||||
{ SPA_AUDIO_LAYOUT_6_1, SPA_TYPE_AUDIO_LAYOUT_BASE "6.1", SPA_TYPE_Int, },
|
||||
{ SPA_AUDIO_LAYOUT_6_1R, SPA_TYPE_AUDIO_LAYOUT_BASE "6.1 Rear", SPA_TYPE_Int, },
|
||||
{ SPA_AUDIO_LAYOUT_6_1F, SPA_TYPE_AUDIO_LAYOUT_BASE "6.1 Front", SPA_TYPE_Int, },
|
||||
{ SPA_AUDIO_LAYOUT_7_0, SPA_TYPE_AUDIO_LAYOUT_BASE "7.0", SPA_TYPE_Int, },
|
||||
{ SPA_AUDIO_LAYOUT_7_0F, SPA_TYPE_AUDIO_LAYOUT_BASE "7.0 Front", SPA_TYPE_Int, },
|
||||
{ SPA_AUDIO_LAYOUT_7_1, SPA_TYPE_AUDIO_LAYOUT_BASE "7.1", SPA_TYPE_Int, },
|
||||
{ SPA_AUDIO_LAYOUT_7_1W, SPA_TYPE_AUDIO_LAYOUT_BASE "7.1 Wide", SPA_TYPE_Int, },
|
||||
{ SPA_AUDIO_LAYOUT_7_1WR, SPA_TYPE_AUDIO_LAYOUT_BASE "7.1 Wide Rear", SPA_TYPE_Int, },
|
||||
{ SPA_AUDIO_LAYOUT_OCTAGONAL, SPA_TYPE_AUDIO_LAYOUT_BASE "Octagonal", SPA_TYPE_Int, },
|
||||
{ 0, NULL, },
|
||||
};
|
||||
|
||||
#ifdef __cplusplus
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue