channelmap: introduce pa_channel_map_mask() and pa_channel_position_mask_t
authorLennart Poettering <lennart@poettering.net>
Mon, 25 May 2009 21:51:34 +0000 (23:51 +0200)
committerLennart Poettering <lennart@poettering.net>
Mon, 25 May 2009 21:51:34 +0000 (23:51 +0200)
src/map-file
src/pulse/channelmap.c
src/pulse/channelmap.h

index 201e837..98a568e 100644 (file)
@@ -20,6 +20,7 @@ pa_channel_map_init_auto;
 pa_channel_map_init_extend;
 pa_channel_map_init_mono;
 pa_channel_map_init_stereo;
+pa_channel_map_mask;
 pa_channel_map_parse;
 pa_channel_map_snprint;
 pa_channel_map_superset;
index fe14df2..4654a9a 100644 (file)
@@ -852,3 +852,15 @@ int pa_channel_map_has_position(const pa_channel_map *map, pa_channel_position_t
 
     return 0;
 }
+
+pa_channel_position_mask_t pa_channel_map_mask(const pa_channel_map *map) {
+    unsigned c;
+    pa_channel_position_mask_t r = 0;
+
+    pa_return_val_if_fail(pa_channel_map_valid(map), 0);
+
+    for (c = 0; c < map->channels; c++)
+        r |= PA_CHANNEL_POSITION_MASK(map->map[c]);
+
+    return r;
+}
index 4f39d8a..2aaead0 100644 (file)
@@ -205,6 +205,12 @@ typedef enum pa_channel_position {
 #define PA_CHANNEL_POSITION_MAX PA_CHANNEL_POSITION_MAX
 /** \endcond */
 
+/** 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 */
+#define PA_CHANNEL_POSITION_MASK(f) ((pa_channel_position_mask_t) (1 << (f)))
+
 /** A list of channel mapping definitions for pa_channel_map_init_auto() */
 typedef enum pa_channel_map_def {
     PA_CHANNEL_MAP_AIFF,
@@ -333,6 +339,9 @@ const char* pa_channel_map_to_pretty_name(const pa_channel_map *map) PA_GCC_PURE
  * 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;
 
+/** 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;
+
 PA_C_DECL_END
 
 #endif