mirror of
https://gitlab.freedesktop.org/pipewire/pipewire.git
synced 2025-11-03 09:01:54 -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
|
|
@ -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__ }
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue