00001 #ifndef foochannelmaphfoo
00002 #define foochannelmaphfoo
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026 #include <pulse/sample.h>
00027 #include <pulse/cdecl.h>
00028 #include <pulse/gccmacro.h>
00029 #include <pulse/version.h>
00030
00070 PA_C_DECL_BEGIN
00071
00073 typedef enum pa_channel_position {
00074 PA_CHANNEL_POSITION_INVALID = -1,
00075 PA_CHANNEL_POSITION_MONO = 0,
00076
00077 PA_CHANNEL_POSITION_FRONT_LEFT,
00078 PA_CHANNEL_POSITION_FRONT_RIGHT,
00079 PA_CHANNEL_POSITION_FRONT_CENTER,
00080
00082 PA_CHANNEL_POSITION_LEFT = PA_CHANNEL_POSITION_FRONT_LEFT,
00083 PA_CHANNEL_POSITION_RIGHT = PA_CHANNEL_POSITION_FRONT_RIGHT,
00084 PA_CHANNEL_POSITION_CENTER = PA_CHANNEL_POSITION_FRONT_CENTER,
00087 PA_CHANNEL_POSITION_REAR_CENTER,
00088 PA_CHANNEL_POSITION_REAR_LEFT,
00089 PA_CHANNEL_POSITION_REAR_RIGHT,
00090
00091 PA_CHANNEL_POSITION_LFE,
00093 PA_CHANNEL_POSITION_SUBWOOFER = PA_CHANNEL_POSITION_LFE,
00096 PA_CHANNEL_POSITION_FRONT_LEFT_OF_CENTER,
00097 PA_CHANNEL_POSITION_FRONT_RIGHT_OF_CENTER,
00098
00099 PA_CHANNEL_POSITION_SIDE_LEFT,
00100 PA_CHANNEL_POSITION_SIDE_RIGHT,
00101
00102 PA_CHANNEL_POSITION_AUX0,
00103 PA_CHANNEL_POSITION_AUX1,
00104 PA_CHANNEL_POSITION_AUX2,
00105 PA_CHANNEL_POSITION_AUX3,
00106 PA_CHANNEL_POSITION_AUX4,
00107 PA_CHANNEL_POSITION_AUX5,
00108 PA_CHANNEL_POSITION_AUX6,
00109 PA_CHANNEL_POSITION_AUX7,
00110 PA_CHANNEL_POSITION_AUX8,
00111 PA_CHANNEL_POSITION_AUX9,
00112 PA_CHANNEL_POSITION_AUX10,
00113 PA_CHANNEL_POSITION_AUX11,
00114 PA_CHANNEL_POSITION_AUX12,
00115 PA_CHANNEL_POSITION_AUX13,
00116 PA_CHANNEL_POSITION_AUX14,
00117 PA_CHANNEL_POSITION_AUX15,
00118 PA_CHANNEL_POSITION_AUX16,
00119 PA_CHANNEL_POSITION_AUX17,
00120 PA_CHANNEL_POSITION_AUX18,
00121 PA_CHANNEL_POSITION_AUX19,
00122 PA_CHANNEL_POSITION_AUX20,
00123 PA_CHANNEL_POSITION_AUX21,
00124 PA_CHANNEL_POSITION_AUX22,
00125 PA_CHANNEL_POSITION_AUX23,
00126 PA_CHANNEL_POSITION_AUX24,
00127 PA_CHANNEL_POSITION_AUX25,
00128 PA_CHANNEL_POSITION_AUX26,
00129 PA_CHANNEL_POSITION_AUX27,
00130 PA_CHANNEL_POSITION_AUX28,
00131 PA_CHANNEL_POSITION_AUX29,
00132 PA_CHANNEL_POSITION_AUX30,
00133 PA_CHANNEL_POSITION_AUX31,
00134
00135 PA_CHANNEL_POSITION_TOP_CENTER,
00136
00137 PA_CHANNEL_POSITION_TOP_FRONT_LEFT,
00138 PA_CHANNEL_POSITION_TOP_FRONT_RIGHT,
00139 PA_CHANNEL_POSITION_TOP_FRONT_CENTER,
00140
00141 PA_CHANNEL_POSITION_TOP_REAR_LEFT,
00142 PA_CHANNEL_POSITION_TOP_REAR_RIGHT,
00143 PA_CHANNEL_POSITION_TOP_REAR_CENTER,
00144
00145 PA_CHANNEL_POSITION_MAX
00146 } pa_channel_position_t;
00147
00149 #define PA_CHANNEL_POSITION_INVALID PA_CHANNEL_POSITION_INVALID
00150 #define PA_CHANNEL_POSITION_MONO PA_CHANNEL_POSITION_MONO
00151 #define PA_CHANNEL_POSITION_LEFT PA_CHANNEL_POSITION_LEFT
00152 #define PA_CHANNEL_POSITION_RIGHT PA_CHANNEL_POSITION_RIGHT
00153 #define PA_CHANNEL_POSITION_CENTER PA_CHANNEL_POSITION_CENTER
00154 #define PA_CHANNEL_POSITION_FRONT_LEFT PA_CHANNEL_POSITION_FRONT_LEFT
00155 #define PA_CHANNEL_POSITION_FRONT_RIGHT PA_CHANNEL_POSITION_FRONT_RIGHT
00156 #define PA_CHANNEL_POSITION_FRONT_CENTER PA_CHANNEL_POSITION_FRONT_CENTER
00157 #define PA_CHANNEL_POSITION_REAR_CENTER PA_CHANNEL_POSITION_REAR_CENTER
00158 #define PA_CHANNEL_POSITION_REAR_LEFT PA_CHANNEL_POSITION_REAR_LEFT
00159 #define PA_CHANNEL_POSITION_REAR_RIGHT PA_CHANNEL_POSITION_REAR_RIGHT
00160 #define PA_CHANNEL_POSITION_LFE PA_CHANNEL_POSITION_LFE
00161 #define PA_CHANNEL_POSITION_SUBWOOFER PA_CHANNEL_POSITION_SUBWOOFER
00162 #define PA_CHANNEL_POSITION_FRONT_LEFT_OF_CENTER PA_CHANNEL_POSITION_FRONT_LEFT_OF_CENTER
00163 #define PA_CHANNEL_POSITION_FRONT_RIGHT_OF_CENTER PA_CHANNEL_POSITION_FRONT_RIGHT_OF_CENTER
00164 #define PA_CHANNEL_POSITION_SIDE_LEFT PA_CHANNEL_POSITION_SIDE_LEFT
00165 #define PA_CHANNEL_POSITION_SIDE_RIGHT PA_CHANNEL_POSITION_SIDE_RIGHT
00166 #define PA_CHANNEL_POSITION_AUX0 PA_CHANNEL_POSITION_AUX0
00167 #define PA_CHANNEL_POSITION_AUX1 PA_CHANNEL_POSITION_AUX1
00168 #define PA_CHANNEL_POSITION_AUX2 PA_CHANNEL_POSITION_AUX2
00169 #define PA_CHANNEL_POSITION_AUX3 PA_CHANNEL_POSITION_AUX3
00170 #define PA_CHANNEL_POSITION_AUX4 PA_CHANNEL_POSITION_AUX4
00171 #define PA_CHANNEL_POSITION_AUX5 PA_CHANNEL_POSITION_AUX5
00172 #define PA_CHANNEL_POSITION_AUX6 PA_CHANNEL_POSITION_AUX6
00173 #define PA_CHANNEL_POSITION_AUX7 PA_CHANNEL_POSITION_AUX7
00174 #define PA_CHANNEL_POSITION_AUX8 PA_CHANNEL_POSITION_AUX8
00175 #define PA_CHANNEL_POSITION_AUX9 PA_CHANNEL_POSITION_AUX9
00176 #define PA_CHANNEL_POSITION_AUX10 PA_CHANNEL_POSITION_AUX10
00177 #define PA_CHANNEL_POSITION_AUX11 PA_CHANNEL_POSITION_AUX11
00178 #define PA_CHANNEL_POSITION_AUX12 PA_CHANNEL_POSITION_AUX12
00179 #define PA_CHANNEL_POSITION_AUX13 PA_CHANNEL_POSITION_AUX13
00180 #define PA_CHANNEL_POSITION_AUX14 PA_CHANNEL_POSITION_AUX14
00181 #define PA_CHANNEL_POSITION_AUX15 PA_CHANNEL_POSITION_AUX15
00182 #define PA_CHANNEL_POSITION_AUX16 PA_CHANNEL_POSITION_AUX16
00183 #define PA_CHANNEL_POSITION_AUX17 PA_CHANNEL_POSITION_AUX17
00184 #define PA_CHANNEL_POSITION_AUX18 PA_CHANNEL_POSITION_AUX18
00185 #define PA_CHANNEL_POSITION_AUX19 PA_CHANNEL_POSITION_AUX19
00186 #define PA_CHANNEL_POSITION_AUX20 PA_CHANNEL_POSITION_AUX20
00187 #define PA_CHANNEL_POSITION_AUX21 PA_CHANNEL_POSITION_AUX21
00188 #define PA_CHANNEL_POSITION_AUX22 PA_CHANNEL_POSITION_AUX22
00189 #define PA_CHANNEL_POSITION_AUX23 PA_CHANNEL_POSITION_AUX23
00190 #define PA_CHANNEL_POSITION_AUX24 PA_CHANNEL_POSITION_AUX24
00191 #define PA_CHANNEL_POSITION_AUX25 PA_CHANNEL_POSITION_AUX25
00192 #define PA_CHANNEL_POSITION_AUX26 PA_CHANNEL_POSITION_AUX26
00193 #define PA_CHANNEL_POSITION_AUX27 PA_CHANNEL_POSITION_AUX27
00194 #define PA_CHANNEL_POSITION_AUX28 PA_CHANNEL_POSITION_AUX28
00195 #define PA_CHANNEL_POSITION_AUX29 PA_CHANNEL_POSITION_AUX29
00196 #define PA_CHANNEL_POSITION_AUX30 PA_CHANNEL_POSITION_AUX30
00197 #define PA_CHANNEL_POSITION_AUX31 PA_CHANNEL_POSITION_AUX31
00198 #define PA_CHANNEL_POSITION_TOP_CENTER PA_CHANNEL_POSITION_TOP_CENTER
00199 #define PA_CHANNEL_POSITION_TOP_FRONT_LEFT PA_CHANNEL_POSITION_TOP_FRONT_LEFT
00200 #define PA_CHANNEL_POSITION_TOP_FRONT_RIGHT PA_CHANNEL_POSITION_TOP_FRONT_RIGHT
00201 #define PA_CHANNEL_POSITION_TOP_FRONT_CENTER PA_CHANNEL_POSITION_TOP_FRONT_CENTER
00202 #define PA_CHANNEL_POSITION_TOP_REAR_LEFT PA_CHANNEL_POSITION_TOP_REAR_LEFT
00203 #define PA_CHANNEL_POSITION_TOP_REAR_RIGHT PA_CHANNEL_POSITION_TOP_REAR_RIGHT
00204 #define PA_CHANNEL_POSITION_TOP_REAR_CENTER PA_CHANNEL_POSITION_TOP_REAR_CENTER
00205 #define PA_CHANNEL_POSITION_MAX PA_CHANNEL_POSITION_MAX
00206
00209 typedef uint64_t pa_channel_position_mask_t;
00210
00212 #define PA_CHANNEL_POSITION_MASK(f) ((pa_channel_position_mask_t) (1ULL << (f)))
00213
00215 typedef enum pa_channel_map_def {
00216 PA_CHANNEL_MAP_AIFF,
00220 PA_CHANNEL_MAP_ALSA,
00226 PA_CHANNEL_MAP_AUX,
00229 PA_CHANNEL_MAP_WAVEEX,
00234 PA_CHANNEL_MAP_OSS,
00242 PA_CHANNEL_MAP_DEF_MAX,
00243
00244 PA_CHANNEL_MAP_DEFAULT = PA_CHANNEL_MAP_AIFF
00246 } pa_channel_map_def_t;
00247
00249 #define PA_CHANNEL_MAP_AIFF PA_CHANNEL_MAP_AIFF
00250 #define PA_CHANNEL_MAP_ALSA PA_CHANNEL_MAP_ALSA
00251 #define PA_CHANNEL_MAP_AUX PA_CHANNEL_MAP_AUX
00252 #define PA_CHANNEL_MAP_WAVEEX PA_CHANNEL_MAP_WAVEEX
00253 #define PA_CHANNEL_MAP_OSS PA_CHANNEL_MAP_OSS
00254 #define PA_CHANNEL_MAP_DEF_MAX PA_CHANNEL_MAP_DEF_MAX
00255 #define PA_CHANNEL_MAP_DEFAULT PA_CHANNEL_MAP_DEFAULT
00256
00261 typedef struct pa_channel_map {
00262 uint8_t channels;
00265 pa_channel_position_t map[PA_CHANNELS_MAX];
00267 } pa_channel_map;
00268
00272 pa_channel_map* pa_channel_map_init(pa_channel_map *m);
00273
00275 pa_channel_map* pa_channel_map_init_mono(pa_channel_map *m);
00276
00278 pa_channel_map* pa_channel_map_init_stereo(pa_channel_map *m);
00279
00284 pa_channel_map* pa_channel_map_init_auto(pa_channel_map *m, unsigned channels, pa_channel_map_def_t def);
00285
00290 pa_channel_map* pa_channel_map_init_extend(pa_channel_map *m, unsigned channels, pa_channel_map_def_t def);
00291
00293 const char* pa_channel_position_to_string(pa_channel_position_t pos) PA_GCC_PURE;
00294
00296 pa_channel_position_t pa_channel_position_from_string(const char *s) PA_GCC_PURE;
00297
00299 const char* pa_channel_position_to_pretty_string(pa_channel_position_t pos);
00300
00306 #define PA_CHANNEL_MAP_SNPRINT_MAX 336
00307
00309 char* pa_channel_map_snprint(char *s, size_t l, const pa_channel_map *map);
00310
00315 pa_channel_map *pa_channel_map_parse(pa_channel_map *map, const char *s);
00316
00318 int pa_channel_map_equal(const pa_channel_map *a, const pa_channel_map *b) PA_GCC_PURE;
00319
00321 int pa_channel_map_valid(const pa_channel_map *map) PA_GCC_PURE;
00322
00325 int pa_channel_map_compatible(const pa_channel_map *map, const pa_sample_spec *ss) PA_GCC_PURE;
00326
00328 int pa_channel_map_superset(const pa_channel_map *a, const pa_channel_map *b) PA_GCC_PURE;
00329
00333 int pa_channel_map_can_balance(const pa_channel_map *map) PA_GCC_PURE;
00334
00338 int pa_channel_map_can_fade(const pa_channel_map *map) PA_GCC_PURE;
00339
00344 const char* pa_channel_map_to_name(const pa_channel_map *map) PA_GCC_PURE;
00345
00349 const char* pa_channel_map_to_pretty_name(const pa_channel_map *map) PA_GCC_PURE;
00350
00353 int pa_channel_map_has_position(const pa_channel_map *map, pa_channel_position_t p) PA_GCC_PURE;
00354
00356 pa_channel_position_mask_t pa_channel_map_mask(const pa_channel_map *map) PA_GCC_PURE;
00357
00358 PA_C_DECL_END
00359
00360 #endif