mirror of
				https://gitlab.freedesktop.org/pulseaudio/pulseaudio.git
				synced 2025-11-03 09:01:50 -05:00 
			
		
		
		
	volume: introduce pa_cvolume_min() and pa_cvolume_min_mask()
This commit is contained in:
		
							parent
							
								
									8f928b2e57
								
							
						
					
					
						commit
						d634555a3e
					
				
					 3 changed files with 51 additions and 2 deletions
				
			
		| 
						 | 
					@ -131,6 +131,8 @@ pa_cvolume_init;
 | 
				
			||||||
pa_cvolume_max;
 | 
					pa_cvolume_max;
 | 
				
			||||||
pa_cvolume_max_mask;
 | 
					pa_cvolume_max_mask;
 | 
				
			||||||
pa_cvolume_merge;
 | 
					pa_cvolume_merge;
 | 
				
			||||||
 | 
					pa_cvolume_min;
 | 
				
			||||||
 | 
					pa_cvolume_min_mask;
 | 
				
			||||||
pa_cvolume_remap;
 | 
					pa_cvolume_remap;
 | 
				
			||||||
pa_cvolume_scale;
 | 
					pa_cvolume_scale;
 | 
				
			||||||
pa_cvolume_scale_mask;
 | 
					pa_cvolume_scale_mask;
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -126,7 +126,7 @@ pa_volume_t pa_cvolume_avg_mask(const pa_cvolume *a, const pa_channel_map *cm, p
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
pa_volume_t pa_cvolume_max(const pa_cvolume *a) {
 | 
					pa_volume_t pa_cvolume_max(const pa_cvolume *a) {
 | 
				
			||||||
    pa_volume_t m = 0;
 | 
					    pa_volume_t m = PA_VOLUME_MUTED;
 | 
				
			||||||
    unsigned c;
 | 
					    unsigned c;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    pa_assert(a);
 | 
					    pa_assert(a);
 | 
				
			||||||
| 
						 | 
					@ -139,8 +139,22 @@ pa_volume_t pa_cvolume_max(const pa_cvolume *a) {
 | 
				
			||||||
    return m;
 | 
					    return m;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					pa_volume_t pa_cvolume_min(const pa_cvolume *a) {
 | 
				
			||||||
 | 
					    pa_volume_t m = (pa_volume_t) -1;
 | 
				
			||||||
 | 
					    unsigned c;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    pa_assert(a);
 | 
				
			||||||
 | 
					    pa_return_val_if_fail(pa_cvolume_valid(a), PA_VOLUME_MUTED);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    for (c = 0; c < a->channels; c++)
 | 
				
			||||||
 | 
					        if (m == (pa_volume_t) -1 || a->values[c] < m)
 | 
				
			||||||
 | 
					            m = a->values[c];
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    return m;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
pa_volume_t pa_cvolume_max_mask(const pa_cvolume *a, const pa_channel_map *cm, pa_channel_position_mask_t mask) {
 | 
					pa_volume_t pa_cvolume_max_mask(const pa_cvolume *a, const pa_channel_map *cm, pa_channel_position_mask_t mask) {
 | 
				
			||||||
    pa_volume_t m = 0;
 | 
					    pa_volume_t m = PA_VOLUME_MUTED;
 | 
				
			||||||
    unsigned c, n;
 | 
					    unsigned c, n;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    pa_assert(a);
 | 
					    pa_assert(a);
 | 
				
			||||||
| 
						 | 
					@ -162,6 +176,29 @@ pa_volume_t pa_cvolume_max_mask(const pa_cvolume *a, const pa_channel_map *cm, p
 | 
				
			||||||
    return m;
 | 
					    return m;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					pa_volume_t pa_cvolume_min_mask(const pa_cvolume *a, const pa_channel_map *cm, pa_channel_position_mask_t mask) {
 | 
				
			||||||
 | 
					    pa_volume_t m = (pa_volume_t) -1;
 | 
				
			||||||
 | 
					    unsigned c, n;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    pa_assert(a);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    if (!cm)
 | 
				
			||||||
 | 
					        return pa_cvolume_min(a);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    pa_return_val_if_fail(pa_cvolume_compatible_with_channel_map(a, cm), PA_VOLUME_MUTED);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    for (c = n = 0; c < a->channels; c++) {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        if (!(PA_CHANNEL_POSITION_MASK(cm->map[c]) & mask))
 | 
				
			||||||
 | 
					            continue;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        if (m == (pa_volume_t) -1 || a->values[c] < m)
 | 
				
			||||||
 | 
					            m = a->values[c];
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    return m;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
pa_volume_t pa_sw_volume_multiply(pa_volume_t a, pa_volume_t b) {
 | 
					pa_volume_t pa_sw_volume_multiply(pa_volume_t a, pa_volume_t b) {
 | 
				
			||||||
    return pa_sw_volume_from_linear(pa_sw_volume_to_linear(a) * pa_sw_volume_to_linear(b));
 | 
					    return pa_sw_volume_from_linear(pa_sw_volume_to_linear(a) * pa_sw_volume_to_linear(b));
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -195,6 +195,16 @@ pa_volume_t pa_cvolume_max(const pa_cvolume *a) PA_GCC_PURE;
 | 
				
			||||||
 * \since 0.9.16 */
 | 
					 * \since 0.9.16 */
 | 
				
			||||||
pa_volume_t pa_cvolume_max_mask(const pa_cvolume *a, const pa_channel_map *cm, pa_channel_position_mask_t mask) PA_GCC_PURE;
 | 
					pa_volume_t pa_cvolume_max_mask(const pa_cvolume *a, const pa_channel_map *cm, pa_channel_position_mask_t mask) PA_GCC_PURE;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/** Return the minimum volume of all channels. \since 0.9.16 */
 | 
				
			||||||
 | 
					pa_volume_t pa_cvolume_min(const pa_cvolume *a) PA_GCC_PURE;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/** Return the minimum volume of all channels that are included in the
 | 
				
			||||||
 | 
					 * specified channel map with the specified channel position mask. If
 | 
				
			||||||
 | 
					 * cm is NULL this call is identical to pa_cvolume_min(). If no
 | 
				
			||||||
 | 
					 * channel is selected the returned value will be PA_VOLUME_MUTED.
 | 
				
			||||||
 | 
					 * \since 0.9.16 */
 | 
				
			||||||
 | 
					pa_volume_t pa_cvolume_min_mask(const pa_cvolume *a, const pa_channel_map *cm, pa_channel_position_mask_t mask) PA_GCC_PURE;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/** Return TRUE when the passed cvolume structure is valid, FALSE otherwise */
 | 
					/** Return TRUE when the passed cvolume structure is valid, FALSE otherwise */
 | 
				
			||||||
int pa_cvolume_valid(const pa_cvolume *v) PA_GCC_PURE;
 | 
					int pa_cvolume_valid(const pa_cvolume *v) PA_GCC_PURE;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue