mirror of
https://gitlab.freedesktop.org/pulseaudio/pulseaudio.git
synced 2025-11-17 06:59:56 -05:00
update upstream-2021-08-15
This commit is contained in:
parent
c8653c13fa
commit
1703683def
297 changed files with 91782 additions and 54869 deletions
|
|
@ -1494,6 +1494,7 @@ static void sink_set_volume_cb(pa_sink *s) {
|
|||
pa_cvolume r;
|
||||
char volume_buf[PA_CVOLUME_SNPRINT_VERBOSE_MAX];
|
||||
bool deferred_volume = !!(s->flags & PA_SINK_DEFERRED_VOLUME);
|
||||
bool write_to_hw = !deferred_volume;
|
||||
|
||||
pa_assert(u);
|
||||
pa_assert(u->mixer_path);
|
||||
|
|
@ -1502,7 +1503,14 @@ static void sink_set_volume_cb(pa_sink *s) {
|
|||
/* Shift up by the base volume */
|
||||
pa_sw_cvolume_divide_scalar(&r, &s->real_volume, s->base_volume);
|
||||
|
||||
if (pa_alsa_path_set_volume(u->mixer_path, u->mixer_handle, &s->channel_map, &r, deferred_volume, !deferred_volume) < 0)
|
||||
/* If the set_volume() is called because of ucm active_port changing, the
|
||||
* volume should be written to hw immediately, otherwise this volume will be
|
||||
* overridden by calling get_volume_cb() which is called by
|
||||
* _disdev/_enadev() -> io_mixer_callback() */
|
||||
if (u->ucm_context && s->port_changing)
|
||||
write_to_hw = true;
|
||||
|
||||
if (pa_alsa_path_set_volume(u->mixer_path, u->mixer_handle, &s->channel_map, &r, deferred_volume, write_to_hw) < 0)
|
||||
return;
|
||||
|
||||
/* Shift down by the base volume, so that 0dB becomes maximum volume */
|
||||
|
|
@ -1825,6 +1833,9 @@ static int process_rewind(struct userdata *u) {
|
|||
|
||||
pa_log_debug("Requested to rewind %lu bytes.", (unsigned long) rewind_nbytes);
|
||||
|
||||
if (rewind_nbytes == 0)
|
||||
goto rewind_done;
|
||||
|
||||
if (PA_UNLIKELY((unused = pa_alsa_safe_avail(u->pcm_handle, u->hwbuf_size, &u->sink->sample_spec)) < 0)) {
|
||||
if ((err = try_recover(u, "snd_pcm_avail", (int) unused)) < 0) {
|
||||
pa_log_warn("Trying to recover from underrun failed during rewind");
|
||||
|
|
@ -1877,8 +1888,11 @@ static int process_rewind(struct userdata *u) {
|
|||
u->after_rewind = true;
|
||||
return 0;
|
||||
}
|
||||
} else
|
||||
} else {
|
||||
pa_log_debug("Mhmm, actually there is nothing to rewind.");
|
||||
if (u->use_tsched)
|
||||
increase_watermark(u);
|
||||
}
|
||||
|
||||
rewind_done:
|
||||
pa_sink_process_rewind(u->sink, 0);
|
||||
|
|
@ -2107,7 +2121,7 @@ static void find_mixer(struct userdata *u, pa_alsa_mapping *mapping, const char
|
|||
u->mixers = pa_hashmap_new_full(pa_idxset_string_hash_func, pa_idxset_string_compare_func,
|
||||
NULL, (pa_free_cb_t) pa_alsa_mixer_free);
|
||||
|
||||
mdev = pa_proplist_gets(mapping->proplist, "alsa.mixer_device");
|
||||
mdev = mapping ? pa_proplist_gets(mapping->proplist, "alsa.mixer_device") : NULL;
|
||||
if (mdev) {
|
||||
u->mixer_handle = pa_alsa_open_mixer_by_name(u->mixers, mdev, true);
|
||||
} else {
|
||||
|
|
@ -2267,7 +2281,7 @@ pa_sink *pa_alsa_sink_new(pa_module *m, pa_modargs *ma, const char*driver, pa_ca
|
|||
bool volume_is_set;
|
||||
bool mute_is_set;
|
||||
pa_alsa_profile_set *profile_set = NULL;
|
||||
void *state = NULL;
|
||||
void *state;
|
||||
|
||||
pa_assert(m);
|
||||
pa_assert(ma);
|
||||
|
|
@ -2563,6 +2577,7 @@ pa_sink *pa_alsa_sink_new(pa_module *m, pa_modargs *ma, const char*driver, pa_ca
|
|||
pa_proplist_sets(data.proplist, PA_PROP_DEVICE_PROFILE_NAME, mapping->name);
|
||||
pa_proplist_sets(data.proplist, PA_PROP_DEVICE_PROFILE_DESCRIPTION, mapping->description);
|
||||
|
||||
state = NULL;
|
||||
while ((key = pa_proplist_iterate(mapping->proplist, &state)))
|
||||
pa_proplist_sets(data.proplist, key, pa_proplist_gets(mapping->proplist, key));
|
||||
}
|
||||
|
|
@ -2600,7 +2615,6 @@ pa_sink *pa_alsa_sink_new(pa_module *m, pa_modargs *ma, const char*driver, pa_ca
|
|||
|
||||
if (u->ucm_context) {
|
||||
pa_device_port *port;
|
||||
void *state;
|
||||
unsigned h_prio = 0;
|
||||
PA_HASHMAP_FOREACH(port, u->sink->ports, state) {
|
||||
if (!h_prio || port->priority > h_prio)
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue