27 #include <pulse/cdecl.h>
31 #include <pulse/version.h>
120 #define PA_VOLUME_NORM ((pa_volume_t) 0x10000U)
123 #define PA_VOLUME_MUTED ((pa_volume_t) 0U)
126 #define PA_VOLUME_MAX ((pa_volume_t) UINT32_MAX/2)
133 #define PA_VOLUME_UI_MAX (pa_sw_volume_from_dB(+11.0))
136 #define PA_VOLUME_INVALID ((pa_volume_t) UINT32_MAX)
139 #define PA_VOLUME_IS_VALID(v) ((v) <= PA_VOLUME_MAX)
142 #define PA_CLAMP_VOLUME(v) (PA_CLAMP_UNLIKELY((v), PA_VOLUME_MUTED, PA_VOLUME_MAX))
161 #define pa_cvolume_reset(a, n) pa_cvolume_set((a), (n), PA_VOLUME_NORM)
164 #define pa_cvolume_mute(a, n) pa_cvolume_set((a), (n), PA_VOLUME_MUTED)
174 #define PA_CVOLUME_SNPRINT_MAX 320
184 #define PA_SW_CVOLUME_SNPRINT_DB_MAX 448
193 #define PA_CVOLUME_SNPRINT_VERBOSE_MAX 1984
206 #define PA_VOLUME_SNPRINT_MAX 10
216 #define PA_SW_VOLUME_SNPRINT_DB_MAX 11
225 #define PA_VOLUME_SNPRINT_VERBOSE_MAX 35
269 #define pa_cvolume_is_muted(a) pa_cvolume_channels_equal_to((a), PA_VOLUME_MUTED)
272 #define pa_cvolume_is_norm(a) pa_cvolume_channels_equal_to((a), PA_VOLUME_NORM)
322 #define PA_DECIBEL_MININFTY ((double) -INFINITY)
325 #define PA_DECIBEL_MININFTY ((double) -200.0)
Constants and routines for channel mapping handling.
enum pa_channel_position pa_channel_position_t
A list of channel labels.
uint64_t pa_channel_position_mask_t
A mask of channel positions.
Definition: channelmap.h:212
#define PA_GCC_CONST
This function's return value depends only the arguments list (stricter version of PA_GCC_PURE)
Definition: gccmacro.h:80
#define PA_GCC_PURE
This function's return value depends only the arguments list and global state.
Definition: gccmacro.h:71
Constants and routines for sample type handling.
#define PA_CHANNELS_MAX
Maximum number of allowed channels.
Definition: sample.h:128
A channel map which can be used to attach labels to specific channels of a stream.
Definition: channelmap.h:264
A structure encapsulating a per-channel volume.
Definition: volume.h:145
uint8_t channels
Number of channels.
Definition: volume.h:146
pa_volume_t values[PA_CHANNELS_MAX]
Per-channel volume.
Definition: volume.h:147
A sample format and attribute specification.
Definition: sample.h:252
pa_cvolume * pa_cvolume_inc_clamp(pa_cvolume *v, pa_volume_t inc, pa_volume_t limit)
Increase the volume passed in by 'inc', but not exceeding 'limit'.
char * pa_volume_snprint_verbose(char *s, size_t l, pa_volume_t v, int print_dB)
Pretty print a volume in a verbose way.
double pa_sw_volume_to_linear(pa_volume_t v) PA_GCC_CONST
Convert a volume to a linear factor.
pa_cvolume * pa_cvolume_set(pa_cvolume *a, unsigned channels, pa_volume_t v)
Set the volume of the specified number of channels to the volume v.
pa_cvolume * pa_cvolume_set_balance(pa_cvolume *v, const pa_channel_map *map, float new_balance)
Adjust the 'balance' value for the specified volume with the specified channel map.
float pa_cvolume_get_lfe_balance(const pa_cvolume *v, const pa_channel_map *map) PA_GCC_PURE
Calculate a 'lfe balance' value for the specified volume with the specified channel map.
pa_volume_t pa_cvolume_avg(const pa_cvolume *a) PA_GCC_PURE
Return the average volume of all channels.
int pa_cvolume_compatible_with_channel_map(const pa_cvolume *v, const pa_channel_map *cm) PA_GCC_PURE
Return non-zero if the specified volume is compatible with the specified sample spec.
pa_cvolume * pa_cvolume_set_position(pa_cvolume *cv, const pa_channel_map *map, pa_channel_position_t t, pa_volume_t v)
Set the passed volume to all channels at the specified channel position.
pa_volume_t pa_cvolume_avg_mask(const pa_cvolume *a, const pa_channel_map *cm, pa_channel_position_mask_t mask) PA_GCC_PURE
Return the average volume of all channels that are included in the specified channel map with the spe...
pa_cvolume * pa_cvolume_scale(pa_cvolume *v, pa_volume_t max)
Scale the passed pa_cvolume structure so that the maximum volume of all channels equals max.
pa_volume_t pa_sw_volume_multiply(pa_volume_t a, pa_volume_t b) PA_GCC_CONST
Multiply two volume specifications, return the result.
pa_cvolume * pa_cvolume_inc(pa_cvolume *v, pa_volume_t inc)
Increase the volume passed in by 'inc'.
double pa_sw_volume_to_dB(pa_volume_t v) PA_GCC_CONST
Convert a volume to a decibel value (amplitude, not power).
int pa_cvolume_channels_equal_to(const pa_cvolume *a, pa_volume_t v) PA_GCC_PURE
Return non-zero if the volume of all channels is equal to the specified value.
char * pa_volume_snprint(char *s, size_t l, pa_volume_t v)
Pretty print a volume.
pa_cvolume * pa_cvolume_dec(pa_cvolume *v, pa_volume_t dec)
Decrease the volume passed in by 'dec'.
pa_cvolume * pa_sw_cvolume_multiply_scalar(pa_cvolume *dest, const pa_cvolume *a, pa_volume_t b)
Multiply a per-channel volume with a scalar volume and return the result in *dest.
pa_cvolume * pa_cvolume_set_fade(pa_cvolume *v, const pa_channel_map *map, float new_fade)
Adjust the 'fade' value (i.e. 'balance' between front and rear) for the specified volume with the spe...
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 maximum volume of all channels that are included in the specified channel map with the spe...
pa_cvolume * pa_cvolume_scale_mask(pa_cvolume *v, pa_volume_t max, const pa_channel_map *cm, pa_channel_position_mask_t mask)
Scale the passed pa_cvolume structure so that the maximum volume of all channels selected via cm/mask...
pa_cvolume * pa_cvolume_remap(pa_cvolume *v, const pa_channel_map *from, const pa_channel_map *to)
Remap a volume from one channel mapping to a different channel mapping.
pa_cvolume * pa_cvolume_set_lfe_balance(pa_cvolume *v, const pa_channel_map *map, float new_balance)
Adjust the 'lfe balance' value for the specified volume with the specified channel map.
pa_cvolume * pa_sw_cvolume_multiply(pa_cvolume *dest, const pa_cvolume *a, const pa_cvolume *b)
Multiply two per-channel volumes and return the result in *dest.
uint32_t pa_volume_t
Volume specification: PA_VOLUME_MUTED: silence; < PA_VOLUME_NORM: decreased volume; PA_VOLUME_NORM: n...
Definition: volume.h:117
pa_cvolume * pa_cvolume_init(pa_cvolume *a)
Initialize the specified volume and return a pointer to it.
pa_cvolume * pa_sw_cvolume_divide(pa_cvolume *dest, const pa_cvolume *a, const pa_cvolume *b)
Divide two per-channel volumes and return the result in *dest.
int pa_cvolume_equal(const pa_cvolume *a, const pa_cvolume *b) PA_GCC_PURE
Return non-zero when *a == *b, checking that both a and b have the same number of channels and that t...
pa_volume_t pa_cvolume_max(const pa_cvolume *a) PA_GCC_PURE
Return the maximum volume of all channels.
char * pa_cvolume_snprint(char *s, size_t l, const pa_cvolume *c)
Pretty print a volume structure.
int pa_cvolume_compatible(const pa_cvolume *v, const pa_sample_spec *ss) PA_GCC_PURE
Return non-zero if the specified volume is compatible with the specified sample spec.
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 the minimum volume of all channels that are included in the specified channel map with the spe...
char * pa_sw_cvolume_snprint_dB(char *s, size_t l, const pa_cvolume *c)
Pretty print a volume structure, showing dB values.
float pa_cvolume_get_fade(const pa_cvolume *v, const pa_channel_map *map) PA_GCC_PURE
Calculate a 'fade' value (i.e. 'balance' between front and rear) for the specified volume with the sp...
pa_volume_t pa_sw_volume_from_linear(double v) PA_GCC_CONST
Convert a linear factor to a volume.
int pa_cvolume_valid(const pa_cvolume *v) PA_GCC_PURE
Return non-zero when the passed cvolume structure is valid.
char * pa_sw_volume_snprint_dB(char *s, size_t l, pa_volume_t v)
Pretty print a volume but show dB values.
struct pa_cvolume pa_cvolume
A structure encapsulating a per-channel volume.
pa_volume_t pa_cvolume_min(const pa_cvolume *a) PA_GCC_PURE
Return the minimum volume of all channels.
pa_volume_t pa_sw_volume_from_dB(double f) PA_GCC_CONST
Convert a decibel value to a volume (amplitude, not power).
pa_volume_t pa_sw_volume_divide(pa_volume_t a, pa_volume_t b) PA_GCC_CONST
Divide two volume specifications, return the result.
pa_cvolume * pa_sw_cvolume_divide_scalar(pa_cvolume *dest, const pa_cvolume *a, pa_volume_t b)
Divide a per-channel volume by a scalar volume and return the result in *dest.
char * pa_cvolume_snprint_verbose(char *s, size_t l, const pa_cvolume *c, const pa_channel_map *map, int print_dB)
Pretty print a volume structure in a verbose way.
pa_volume_t pa_cvolume_get_position(const pa_cvolume *cv, const pa_channel_map *map, pa_channel_position_t t) PA_GCC_PURE
Get the maximum volume of all channels at the specified channel position.
pa_cvolume * pa_cvolume_merge(pa_cvolume *dest, const pa_cvolume *a, const pa_cvolume *b)
This goes through all channels in a and b and sets the corresponding channel in dest to the greater v...
float pa_cvolume_get_balance(const pa_cvolume *v, const pa_channel_map *map) PA_GCC_PURE
Calculate a 'balance' value for the specified volume with the specified channel map.