2006-01-27 16:25:31 +00:00
# ifndef foochannelmaphfoo
# define foochannelmaphfoo
/***
2006-06-19 21:53:48 +00:00
This file is part of PulseAudio .
2007-01-04 13:43:45 +00:00
2007-02-13 15:35:19 +00:00
Copyright 2005 - 2006 Lennart Poettering
Copyright 2006 Pierre Ossman < ossman @ cendio . se > for Cendio AB
2006-06-19 21:53:48 +00:00
PulseAudio is free software ; you can redistribute it and / or modify
2006-01-27 16:25:31 +00:00
it under the terms of the GNU Lesser General Public License as published
2009-03-03 20:23:02 +00:00
by the Free Software Foundation ; either version 2.1 of the License ,
2006-01-27 16:25:31 +00:00
or ( at your option ) any later version .
2007-01-04 13:43:45 +00:00
2006-06-19 21:53:48 +00:00
PulseAudio is distributed in the hope that it will be useful , but
2006-01-27 16:25:31 +00:00
WITHOUT ANY WARRANTY ; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE . See the GNU
General Public License for more details .
2007-01-04 13:43:45 +00:00
2006-01-27 16:25:31 +00:00
You should have received a copy of the GNU Lesser General Public License
2006-06-19 21:53:48 +00:00
along with PulseAudio ; if not , write to the Free Software
2006-01-27 16:25:31 +00:00
Foundation , Inc . , 59 Temple Place , Suite 330 , Boston , MA 02111 - 1307
USA .
* * */
2006-06-19 21:53:48 +00:00
# include <pulse/sample.h>
# include <pulse/cdecl.h>
2008-05-15 23:34:41 +00:00
# include <pulse/gccmacro.h>
2009-01-27 02:36:42 +01:00
# include <pulse/version.h>
2006-01-27 16:25:31 +00:00
2006-04-13 13:45:38 +00:00
/** \page channelmap Channel Maps
2006-04-09 19:31:09 +00:00
*
* \ section overv_sec Overview
*
* Channel maps provide a way to associate channels in a stream with a
2006-04-13 00:56:10 +00:00
* specific speaker position . This relieves applications of having to
* make sure their channel order is identical to the final output .
2006-04-09 19:31:09 +00:00
*
* \ section init_sec Initialisation
*
* A channel map consists of an array of \ ref pa_channel_position values ,
* one for each channel . This array is stored together with a channel count
* in a pa_channel_map structure .
*
* Before filling the structure , the application must initialise it using
* pa_channel_map_init ( ) . There are also a number of convenience functions
* for standard channel mappings :
*
* \ li pa_channel_map_init_mono ( ) - Create a channel map with only mono audio .
* \ li pa_channel_map_init_stereo ( ) - Create a standard stereo mapping .
2008-07-21 18:55:17 +02:00
* \ li pa_channel_map_init_auto ( ) - Create a standard channel map for a specific number of channels
* \ li pa_channel_map_init_extend ( ) - Similar to
2009-04-01 12:35:44 +02:00
* pa_channel_map_init_auto ( ) but synthesize a channel map if no
2008-07-21 18:55:17 +02:00
* predefined one is known for the specified number of channels .
2006-04-09 19:31:09 +00:00
*
2006-04-13 13:45:38 +00:00
* \ section conv_sec Convenience Functions
2006-04-09 19:31:09 +00:00
*
* The library contains a number of convenience functions for dealing with
* channel maps :
*
* \ li pa_channel_map_valid ( ) - Tests if a channel map is valid .
* \ li pa_channel_map_equal ( ) - Tests if two channel maps are identical .
* \ li pa_channel_map_snprint ( ) - Creates a textual description of a channel
* map .
*/
2006-01-27 16:25:31 +00:00
/** \file
2010-10-03 13:41:27 -05:00
* Constants and routines for channel mapping handling
*
* See also \ subpage channelmap
*/
2006-01-27 16:25:31 +00:00
PA_C_DECL_BEGIN
2006-02-20 16:31:39 +00:00
/** A list of channel labels */
typedef enum pa_channel_position {
2006-01-27 16:25:31 +00:00
PA_CHANNEL_POSITION_INVALID = - 1 ,
PA_CHANNEL_POSITION_MONO = 0 ,
2011-10-03 20:09:06 +02:00
PA_CHANNEL_POSITION_FRONT_LEFT , /**< Apple, Dolby call this 'Left' */
PA_CHANNEL_POSITION_FRONT_RIGHT , /**< Apple, Dolby call this 'Right' */
PA_CHANNEL_POSITION_FRONT_CENTER , /**< Apple, Dolby call this 'Center' */
2007-01-04 13:43:45 +00:00
2009-05-24 01:03:34 +02:00
/** \cond fulldocs */
PA_CHANNEL_POSITION_LEFT = PA_CHANNEL_POSITION_FRONT_LEFT ,
PA_CHANNEL_POSITION_RIGHT = PA_CHANNEL_POSITION_FRONT_RIGHT ,
PA_CHANNEL_POSITION_CENTER = PA_CHANNEL_POSITION_FRONT_CENTER ,
/** \endcond */
2006-01-27 16:25:31 +00:00
2011-10-03 20:09:06 +02:00
PA_CHANNEL_POSITION_REAR_CENTER , /**< Microsoft calls this 'Back Center', Apple calls this 'Center Surround', Dolby calls this 'Surround Rear Center' */
PA_CHANNEL_POSITION_REAR_LEFT , /**< Microsoft calls this 'Back Left', Apple calls this 'Left Surround' (!), Dolby calls this 'Surround Rear Left' */
PA_CHANNEL_POSITION_REAR_RIGHT , /**< Microsoft calls this 'Back Right', Apple calls this 'Right Surround' (!), Dolby calls this 'Surround Rear Right' */
2007-01-04 13:43:45 +00:00
2011-10-03 20:09:06 +02:00
PA_CHANNEL_POSITION_LFE , /**< Microsoft calls this 'Low Frequency', Apple calls this 'LFEScreen' */
2009-05-24 01:03:34 +02:00
/** \cond fulldocs */
2006-01-27 16:25:31 +00:00
PA_CHANNEL_POSITION_SUBWOOFER = PA_CHANNEL_POSITION_LFE ,
2009-05-24 01:03:34 +02:00
/** \endcond */
2007-01-04 13:43:45 +00:00
2011-10-03 20:09:06 +02:00
PA_CHANNEL_POSITION_FRONT_LEFT_OF_CENTER , /**< Apple, Dolby call this 'Left Center' */
PA_CHANNEL_POSITION_FRONT_RIGHT_OF_CENTER , /**< Apple, Dolby call this 'Right Center */
2007-01-04 13:43:45 +00:00
2011-10-03 20:09:06 +02:00
PA_CHANNEL_POSITION_SIDE_LEFT , /**< Apple calls this 'Left Surround Direct', Dolby calls this 'Surround Left' (!) */
PA_CHANNEL_POSITION_SIDE_RIGHT , /**< Apple calls this 'Right Surround Direct', Dolby calls this 'Surround Right' (!) */
2006-01-27 16:25:31 +00:00
2006-01-27 16:30:09 +00:00
PA_CHANNEL_POSITION_AUX0 ,
2006-01-27 16:25:31 +00:00
PA_CHANNEL_POSITION_AUX1 ,
PA_CHANNEL_POSITION_AUX2 ,
PA_CHANNEL_POSITION_AUX3 ,
PA_CHANNEL_POSITION_AUX4 ,
PA_CHANNEL_POSITION_AUX5 ,
PA_CHANNEL_POSITION_AUX6 ,
PA_CHANNEL_POSITION_AUX7 ,
PA_CHANNEL_POSITION_AUX8 ,
PA_CHANNEL_POSITION_AUX9 ,
PA_CHANNEL_POSITION_AUX10 ,
PA_CHANNEL_POSITION_AUX11 ,
PA_CHANNEL_POSITION_AUX12 ,
2006-01-27 16:30:09 +00:00
PA_CHANNEL_POSITION_AUX13 ,
PA_CHANNEL_POSITION_AUX14 ,
PA_CHANNEL_POSITION_AUX15 ,
2006-05-17 13:15:12 +00:00
PA_CHANNEL_POSITION_AUX16 ,
PA_CHANNEL_POSITION_AUX17 ,
PA_CHANNEL_POSITION_AUX18 ,
PA_CHANNEL_POSITION_AUX19 ,
PA_CHANNEL_POSITION_AUX20 ,
PA_CHANNEL_POSITION_AUX21 ,
PA_CHANNEL_POSITION_AUX22 ,
PA_CHANNEL_POSITION_AUX23 ,
PA_CHANNEL_POSITION_AUX24 ,
PA_CHANNEL_POSITION_AUX25 ,
PA_CHANNEL_POSITION_AUX26 ,
PA_CHANNEL_POSITION_AUX27 ,
PA_CHANNEL_POSITION_AUX28 ,
PA_CHANNEL_POSITION_AUX29 ,
PA_CHANNEL_POSITION_AUX30 ,
PA_CHANNEL_POSITION_AUX31 ,
2006-01-27 16:25:31 +00:00
2011-10-03 20:09:06 +02:00
PA_CHANNEL_POSITION_TOP_CENTER , /**< Apple calls this 'Top Center Surround' */
2007-01-04 13:43:45 +00:00
2011-10-03 20:09:06 +02:00
PA_CHANNEL_POSITION_TOP_FRONT_LEFT , /**< Apple calls this 'Vertical Height Left' */
PA_CHANNEL_POSITION_TOP_FRONT_RIGHT , /**< Apple calls this 'Vertical Height Right' */
PA_CHANNEL_POSITION_TOP_FRONT_CENTER , /**< Apple calls this 'Vertical Height Center' */
2006-04-26 14:33:45 +00:00
2011-10-03 20:09:06 +02:00
PA_CHANNEL_POSITION_TOP_REAR_LEFT , /**< Microsoft and Apple call this 'Top Back Left' */
PA_CHANNEL_POSITION_TOP_REAR_RIGHT , /**< Microsoft and Apple call this 'Top Back Right' */
PA_CHANNEL_POSITION_TOP_REAR_CENTER , /**< Microsoft and Apple call this 'Top Back Center' */
2007-01-04 13:43:45 +00:00
2006-01-27 16:25:31 +00:00
PA_CHANNEL_POSITION_MAX
} pa_channel_position_t ;
2009-02-06 02:01:17 +01:00
/** \cond fulldocs */
# define PA_CHANNEL_POSITION_INVALID PA_CHANNEL_POSITION_INVALID
# define PA_CHANNEL_POSITION_MONO PA_CHANNEL_POSITION_MONO
# define PA_CHANNEL_POSITION_LEFT PA_CHANNEL_POSITION_LEFT
# define PA_CHANNEL_POSITION_RIGHT PA_CHANNEL_POSITION_RIGHT
# define PA_CHANNEL_POSITION_CENTER PA_CHANNEL_POSITION_CENTER
# define PA_CHANNEL_POSITION_FRONT_LEFT PA_CHANNEL_POSITION_FRONT_LEFT
# define PA_CHANNEL_POSITION_FRONT_RIGHT PA_CHANNEL_POSITION_FRONT_RIGHT
# define PA_CHANNEL_POSITION_FRONT_CENTER PA_CHANNEL_POSITION_FRONT_CENTER
# define PA_CHANNEL_POSITION_REAR_CENTER PA_CHANNEL_POSITION_REAR_CENTER
# define PA_CHANNEL_POSITION_REAR_LEFT PA_CHANNEL_POSITION_REAR_LEFT
# define PA_CHANNEL_POSITION_REAR_RIGHT PA_CHANNEL_POSITION_REAR_RIGHT
# define PA_CHANNEL_POSITION_LFE PA_CHANNEL_POSITION_LFE
# define PA_CHANNEL_POSITION_SUBWOOFER PA_CHANNEL_POSITION_SUBWOOFER
# define PA_CHANNEL_POSITION_FRONT_LEFT_OF_CENTER PA_CHANNEL_POSITION_FRONT_LEFT_OF_CENTER
# define PA_CHANNEL_POSITION_FRONT_RIGHT_OF_CENTER PA_CHANNEL_POSITION_FRONT_RIGHT_OF_CENTER
# define PA_CHANNEL_POSITION_SIDE_LEFT PA_CHANNEL_POSITION_SIDE_LEFT
# define PA_CHANNEL_POSITION_SIDE_RIGHT PA_CHANNEL_POSITION_SIDE_RIGHT
# define PA_CHANNEL_POSITION_AUX0 PA_CHANNEL_POSITION_AUX0
# define PA_CHANNEL_POSITION_AUX1 PA_CHANNEL_POSITION_AUX1
# define PA_CHANNEL_POSITION_AUX2 PA_CHANNEL_POSITION_AUX2
# define PA_CHANNEL_POSITION_AUX3 PA_CHANNEL_POSITION_AUX3
# define PA_CHANNEL_POSITION_AUX4 PA_CHANNEL_POSITION_AUX4
# define PA_CHANNEL_POSITION_AUX5 PA_CHANNEL_POSITION_AUX5
# define PA_CHANNEL_POSITION_AUX6 PA_CHANNEL_POSITION_AUX6
# define PA_CHANNEL_POSITION_AUX7 PA_CHANNEL_POSITION_AUX7
# define PA_CHANNEL_POSITION_AUX8 PA_CHANNEL_POSITION_AUX8
# define PA_CHANNEL_POSITION_AUX9 PA_CHANNEL_POSITION_AUX9
# define PA_CHANNEL_POSITION_AUX10 PA_CHANNEL_POSITION_AUX10
# define PA_CHANNEL_POSITION_AUX11 PA_CHANNEL_POSITION_AUX11
# define PA_CHANNEL_POSITION_AUX12 PA_CHANNEL_POSITION_AUX12
# define PA_CHANNEL_POSITION_AUX13 PA_CHANNEL_POSITION_AUX13
# define PA_CHANNEL_POSITION_AUX14 PA_CHANNEL_POSITION_AUX14
# define PA_CHANNEL_POSITION_AUX15 PA_CHANNEL_POSITION_AUX15
# define PA_CHANNEL_POSITION_AUX16 PA_CHANNEL_POSITION_AUX16
# define PA_CHANNEL_POSITION_AUX17 PA_CHANNEL_POSITION_AUX17
# define PA_CHANNEL_POSITION_AUX18 PA_CHANNEL_POSITION_AUX18
# define PA_CHANNEL_POSITION_AUX19 PA_CHANNEL_POSITION_AUX19
# define PA_CHANNEL_POSITION_AUX20 PA_CHANNEL_POSITION_AUX20
# define PA_CHANNEL_POSITION_AUX21 PA_CHANNEL_POSITION_AUX21
# define PA_CHANNEL_POSITION_AUX22 PA_CHANNEL_POSITION_AUX22
# define PA_CHANNEL_POSITION_AUX23 PA_CHANNEL_POSITION_AUX23
# define PA_CHANNEL_POSITION_AUX24 PA_CHANNEL_POSITION_AUX24
# define PA_CHANNEL_POSITION_AUX25 PA_CHANNEL_POSITION_AUX25
# define PA_CHANNEL_POSITION_AUX26 PA_CHANNEL_POSITION_AUX26
# define PA_CHANNEL_POSITION_AUX27 PA_CHANNEL_POSITION_AUX27
# define PA_CHANNEL_POSITION_AUX28 PA_CHANNEL_POSITION_AUX28
# define PA_CHANNEL_POSITION_AUX29 PA_CHANNEL_POSITION_AUX29
# define PA_CHANNEL_POSITION_AUX30 PA_CHANNEL_POSITION_AUX30
# define PA_CHANNEL_POSITION_AUX31 PA_CHANNEL_POSITION_AUX31
# define PA_CHANNEL_POSITION_TOP_CENTER PA_CHANNEL_POSITION_TOP_CENTER
# define PA_CHANNEL_POSITION_TOP_FRONT_LEFT PA_CHANNEL_POSITION_TOP_FRONT_LEFT
# define PA_CHANNEL_POSITION_TOP_FRONT_RIGHT PA_CHANNEL_POSITION_TOP_FRONT_RIGHT
# define PA_CHANNEL_POSITION_TOP_FRONT_CENTER PA_CHANNEL_POSITION_TOP_FRONT_CENTER
# define PA_CHANNEL_POSITION_TOP_REAR_LEFT PA_CHANNEL_POSITION_TOP_REAR_LEFT
# define PA_CHANNEL_POSITION_TOP_REAR_RIGHT PA_CHANNEL_POSITION_TOP_REAR_RIGHT
# define PA_CHANNEL_POSITION_TOP_REAR_CENTER PA_CHANNEL_POSITION_TOP_REAR_CENTER
# define PA_CHANNEL_POSITION_MAX PA_CHANNEL_POSITION_MAX
/** \endcond */
2009-05-25 23:51:34 +02:00
/** A mask of channel positions. \since 0.9.16 */
typedef uint64_t pa_channel_position_mask_t ;
/** Makes a bit mask from a channel position. \since 0.9.16 */
2009-06-17 03:06:54 +02:00
# define PA_CHANNEL_POSITION_MASK(f) ((pa_channel_position_mask_t) (1ULL << (f)))
2009-05-25 23:51:34 +02:00
2006-05-16 23:47:38 +00:00
/** A list of channel mapping definitions for pa_channel_map_init_auto() */
typedef enum pa_channel_map_def {
2008-09-03 18:51:46 +02:00
PA_CHANNEL_MAP_AIFF ,
/**< The mapping from RFC3551, which is based on AIFF-C */
2007-01-04 13:43:45 +00:00
2009-08-17 03:48:51 +02:00
/** \cond fulldocs */
2008-09-03 18:51:46 +02:00
PA_CHANNEL_MAP_ALSA ,
2009-08-17 03:48:51 +02:00
/**< The default mapping used by ALSA. This mapping is probably
* not too useful since ALSA ' s default channel mapping depends on
* the device string used . */
/** \endcond */
2008-09-03 18:51:46 +02:00
PA_CHANNEL_MAP_AUX ,
/**< Only aux channels */
PA_CHANNEL_MAP_WAVEEX ,
2009-08-17 03:48:51 +02:00
/**< Microsoft's WAVEFORMATEXTENSIBLE mapping. This mapping works
* as if all LSBs of dwChannelMask are set . */
2008-09-03 18:51:46 +02:00
2009-08-17 03:48:51 +02:00
/** \cond fulldocs */
2008-09-03 18:51:46 +02:00
PA_CHANNEL_MAP_OSS ,
2009-08-17 03:48:51 +02:00
/**< The default channel mapping used by OSS as defined in the OSS
* 4.0 API specs . This mapping is probably not too useful since
* the OSS API has changed in this respect and no longer knows a
* default channel mapping based on the number of channels . */
/** \endcond */
2008-09-03 18:51:46 +02:00
2008-09-05 01:30:25 +02:00
/**< Upper limit of valid channel mapping definitions */
PA_CHANNEL_MAP_DEF_MAX ,
2008-09-03 18:51:46 +02:00
PA_CHANNEL_MAP_DEFAULT = PA_CHANNEL_MAP_AIFF
/**< The default channel map */
2006-05-16 23:47:38 +00:00
} pa_channel_map_def_t ;
2009-02-06 02:01:17 +01:00
/** \cond fulldocs */
# define PA_CHANNEL_MAP_AIFF PA_CHANNEL_MAP_AIFF
# define PA_CHANNEL_MAP_ALSA PA_CHANNEL_MAP_ALSA
# define PA_CHANNEL_MAP_AUX PA_CHANNEL_MAP_AUX
# define PA_CHANNEL_MAP_WAVEEX PA_CHANNEL_MAP_WAVEEX
# define PA_CHANNEL_MAP_OSS PA_CHANNEL_MAP_OSS
# define PA_CHANNEL_MAP_DEF_MAX PA_CHANNEL_MAP_DEF_MAX
# define PA_CHANNEL_MAP_DEFAULT PA_CHANNEL_MAP_DEFAULT
/** \endcond */
2006-02-20 16:31:39 +00:00
/** A channel map which can be used to attach labels to specific
* channels of a stream . These values are relevant for conversion and
* mixing of streams */
2006-01-27 16:25:31 +00:00
typedef struct pa_channel_map {
2008-09-03 18:51:46 +02:00
uint8_t channels ;
/**< Number of channels */
pa_channel_position_t map [ PA_CHANNELS_MAX ] ;
/**< Channel labels */
2006-01-27 16:25:31 +00:00
} pa_channel_map ;
2008-10-03 17:15:43 +02:00
/** Initialize the specified channel map and return a pointer to
* it . The channel map will have a defined state but
* pa_channel_map_valid ( ) will fail for it . */
2006-01-27 16:25:31 +00:00
pa_channel_map * pa_channel_map_init ( pa_channel_map * m ) ;
2006-02-20 16:31:39 +00:00
2009-04-01 12:35:44 +02:00
/** Initialize the specified channel map for monaural audio and return a pointer to it */
2006-01-27 16:25:31 +00:00
pa_channel_map * pa_channel_map_init_mono ( pa_channel_map * m ) ;
2006-02-20 16:31:39 +00:00
/** Initialize the specified channel map for stereophonic audio and return a pointer to it */
2006-01-27 16:25:31 +00:00
pa_channel_map * pa_channel_map_init_stereo ( pa_channel_map * m ) ;
2006-02-20 16:31:39 +00:00
2008-06-18 23:42:14 +02:00
/** Initialize the specified channel map for the specified number of
* channels using default labels and return a pointer to it . This call
* will fail ( return NULL ) if there is no default channel map known for this
* specific number of channels and mapping . */
2006-05-16 23:47:38 +00:00
pa_channel_map * pa_channel_map_init_auto ( pa_channel_map * m , unsigned channels , pa_channel_map_def_t def ) ;
2008-06-18 23:42:14 +02:00
/** Similar to pa_channel_map_init_auto() but instead of failing if no
* default mapping is known with the specified parameters it will
* synthesize a mapping based on a known mapping with fewer channels
* and fill up the rest with AUX0 . . . AUX31 channels \ since 0.9 .11 */
pa_channel_map * pa_channel_map_init_extend ( pa_channel_map * m , unsigned channels , pa_channel_map_def_t def ) ;
2006-01-27 16:25:31 +00:00
2006-02-20 16:31:39 +00:00
/** Return a text label for the specified channel position */
2007-10-28 19:13:50 +00:00
const char * pa_channel_position_to_string ( pa_channel_position_t pos ) PA_GCC_PURE ;
2009-08-17 03:48:51 +02:00
/** The inverse of pa_channel_position_to_string(). \since 0.9.16 */
2009-06-17 03:05:30 +02:00
pa_channel_position_t pa_channel_position_from_string ( const char * s ) PA_GCC_PURE ;
2007-10-28 19:13:50 +00:00
/** Return a human readable text label for the specified channel position. \since 0.9.7 */
const char * pa_channel_position_to_pretty_string ( pa_channel_position_t pos ) ;
2006-01-27 16:25:31 +00:00
2008-10-03 17:45:55 +02:00
/** The maximum length of strings returned by
* pa_channel_map_snprint ( ) . Please note that this value can change
* with any release without warning and without being considered API
* or ABI breakage . You should not use this definition anywhere where
* it might become part of an ABI . */
2006-04-26 14:33:45 +00:00
# define PA_CHANNEL_MAP_SNPRINT_MAX 336
2006-02-20 16:31:39 +00:00
2009-04-01 12:35:44 +02:00
/** Make a human readable string from the specified channel map */
2006-01-27 16:25:31 +00:00
char * pa_channel_map_snprint ( char * s , size_t l , const pa_channel_map * map ) ;
2009-01-27 00:46:39 +01:00
/** Parse a channel position list or well-known mapping name into a
* channel map structure . This turns the output of
* pa_channel_map_snprint ( ) and pa_channel_map_to_name ( ) back into a
* pa_channel_map */
2006-04-26 14:33:45 +00:00
pa_channel_map * pa_channel_map_parse ( pa_channel_map * map , const char * s ) ;
2006-02-20 17:09:39 +00:00
/** Compare two channel maps. Return 1 if both match. */
2007-10-28 19:13:50 +00:00
int pa_channel_map_equal ( const pa_channel_map * a , const pa_channel_map * b ) PA_GCC_PURE ;
2006-01-27 16:25:31 +00:00
2008-09-05 01:30:25 +02:00
/** Return non-zero if the specified channel map is considered valid */
2007-10-28 19:13:50 +00:00
int pa_channel_map_valid ( const pa_channel_map * map ) PA_GCC_PURE ;
2006-01-27 16:25:31 +00:00
2008-09-05 01:29:07 +02:00
/** Return non-zero if the specified channel map is compatible with
* the specified sample spec . \ since 0.9 .12 */
int pa_channel_map_compatible ( const pa_channel_map * map , const pa_sample_spec * ss ) PA_GCC_PURE ;
2009-01-20 21:00:35 +01:00
/** Returns non-zero if every channel defined in b is also defined in a. \since 0.9.15 */
int pa_channel_map_superset ( const pa_channel_map * a , const pa_channel_map * b ) PA_GCC_PURE ;
2009-01-27 00:46:39 +01:00
/** Returns non-zero if it makes sense to apply a volume 'balance'
* with this mapping , i . e . if there are left / right channels
* available . \ since 0.9 .15 */
int pa_channel_map_can_balance ( const pa_channel_map * map ) PA_GCC_PURE ;
2009-01-31 01:17:09 +01:00
/** Returns non-zero if it makes sense to apply a volume 'fade'
* ( i . e . ' balance ' between front and rear ) with this mapping , i . e . if
* there are front / rear channels available . \ since 0.9 .15 */
int pa_channel_map_can_fade ( const pa_channel_map * map ) PA_GCC_PURE ;
2009-01-27 00:46:39 +01:00
/** Tries to find a well-known channel mapping name for this channel
* mapping . I . e . " stereo " , " surround-71 " and so on . If the channel
* mapping is unknown NULL will be returned . This name can be parsed
* with pa_channel_map_parse ( ) \ since 0.9 .15 */
const char * pa_channel_map_to_name ( const pa_channel_map * map ) PA_GCC_PURE ;
/** Tries to find a human readable text label for this channel
mapping . I . e . " Stereo " , " Surround 7.1 " and so on . If the channel
mapping is unknown NULL will be returned . \ since 0.9 .15 */
const char * pa_channel_map_to_pretty_name ( const pa_channel_map * map ) PA_GCC_PURE ;
2009-05-08 22:45:24 +02:00
/** Returns TRUE if the specified channel position is available at
* least once in the channel map . \ since 0.9 .16 */
int pa_channel_map_has_position ( const pa_channel_map * map , pa_channel_position_t p ) PA_GCC_PURE ;
2009-05-25 23:51:34 +02:00
/** Generates a bit mask from a channel map. \since 0.9.16 */
pa_channel_position_mask_t pa_channel_map_mask ( const pa_channel_map * map ) PA_GCC_PURE ;
2006-01-27 16:25:31 +00:00
PA_C_DECL_END
# endif