implement pa_channel_map_can_fade

This commit is contained in:
Lennart Poettering 2009-01-31 01:17:09 +01:00
parent f725b06f6f
commit b979ab3948
3 changed files with 60 additions and 7 deletions

View file

@ -10,6 +10,7 @@ pa_bytes_per_second;
pa_bytes_snprint; pa_bytes_snprint;
pa_bytes_to_usec; pa_bytes_to_usec;
pa_channel_map_can_balance; pa_channel_map_can_balance;
pa_channel_map_can_fade;
pa_channel_map_compatible; pa_channel_map_compatible;
pa_channel_map_equal; pa_channel_map_equal;
pa_channel_map_init; pa_channel_map_init;

View file

@ -647,30 +647,77 @@ int pa_channel_map_superset(const pa_channel_map *a, const pa_channel_map *b) {
int pa_channel_map_can_balance(const pa_channel_map *map) { int pa_channel_map_can_balance(const pa_channel_map *map) {
unsigned c; unsigned c;
pa_bool_t left = FALSE, right = FALSE;
pa_assert(map); pa_assert(map);
for (c = 0; c < map->channels; c++) for (c = 0; c < map->channels; c++) {
switch (map->map[c]) { switch (map->map[c]) {
case PA_CHANNEL_POSITION_LEFT: case PA_CHANNEL_POSITION_LEFT:
case PA_CHANNEL_POSITION_RIGHT:
case PA_CHANNEL_POSITION_REAR_LEFT: case PA_CHANNEL_POSITION_REAR_LEFT:
case PA_CHANNEL_POSITION_REAR_RIGHT:
case PA_CHANNEL_POSITION_FRONT_LEFT_OF_CENTER: case PA_CHANNEL_POSITION_FRONT_LEFT_OF_CENTER:
case PA_CHANNEL_POSITION_FRONT_RIGHT_OF_CENTER:
case PA_CHANNEL_POSITION_SIDE_LEFT: case PA_CHANNEL_POSITION_SIDE_LEFT:
case PA_CHANNEL_POSITION_SIDE_RIGHT:
case PA_CHANNEL_POSITION_TOP_FRONT_LEFT: case PA_CHANNEL_POSITION_TOP_FRONT_LEFT:
case PA_CHANNEL_POSITION_TOP_FRONT_RIGHT:
case PA_CHANNEL_POSITION_TOP_REAR_LEFT: case PA_CHANNEL_POSITION_TOP_REAR_LEFT:
left = TRUE;
break;
case PA_CHANNEL_POSITION_RIGHT:
case PA_CHANNEL_POSITION_REAR_RIGHT:
case PA_CHANNEL_POSITION_FRONT_RIGHT_OF_CENTER:
case PA_CHANNEL_POSITION_SIDE_RIGHT:
case PA_CHANNEL_POSITION_TOP_FRONT_RIGHT:
case PA_CHANNEL_POSITION_TOP_REAR_RIGHT: case PA_CHANNEL_POSITION_TOP_REAR_RIGHT:
return 1; right = TRUE;
break;
default: default:
; ;
} }
if (left && right)
return 1;
}
return 0;
}
int pa_channel_map_can_fade(const pa_channel_map *map) {
unsigned c;
pa_bool_t front = FALSE, rear = FALSE;
for (c = 0; c < map->channels; c++) {
switch (map->map[c]) {
case PA_CHANNEL_POSITION_FRONT_LEFT:
case PA_CHANNEL_POSITION_FRONT_RIGHT:
case PA_CHANNEL_POSITION_FRONT_CENTER:
case PA_CHANNEL_POSITION_FRONT_LEFT_OF_CENTER:
case PA_CHANNEL_POSITION_FRONT_RIGHT_OF_CENTER:
case PA_CHANNEL_POSITION_TOP_FRONT_LEFT:
case PA_CHANNEL_POSITION_TOP_FRONT_RIGHT:
case PA_CHANNEL_POSITION_TOP_FRONT_CENTER:
front = TRUE;
break;
case PA_CHANNEL_POSITION_REAR_LEFT:
case PA_CHANNEL_POSITION_REAR_RIGHT:
case PA_CHANNEL_POSITION_REAR_CENTER:
case PA_CHANNEL_POSITION_TOP_REAR_LEFT:
case PA_CHANNEL_POSITION_TOP_REAR_RIGHT:
case PA_CHANNEL_POSITION_TOP_REAR_CENTER:
rear = TRUE;
break;
default:
;
}
if (front && rear)
return 1;
}
return 0; return 0;
} }

View file

@ -239,6 +239,11 @@ int pa_channel_map_superset(const pa_channel_map *a, const pa_channel_map *b) PA
* available. \since 0.9.15 */ * available. \since 0.9.15 */
int pa_channel_map_can_balance(const pa_channel_map *map) PA_GCC_PURE; int pa_channel_map_can_balance(const pa_channel_map *map) PA_GCC_PURE;
/** 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;
/** Tries to find a well-known channel mapping name for this channel /** 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. I.e. "stereo", "surround-71" and so on. If the channel
* mapping is unknown NULL will be returned. This name can be parsed * mapping is unknown NULL will be returned. This name can be parsed