void Source::setVolume(pa_cvolume v) { pa_operation *o; this->d->svolume = v; o = pa_context_set_source_volume_by_index(d->context->cObject(), (Device::d)->index, &d->svolume, Source::volume_cb, this); pa_operation_unref(o); }
static void gst_pulsemixer_ctrl_timeout_event (pa_mainloop_api * a, pa_time_event * e, const struct timeval *tv, void *userdata) { pa_operation *o; GstPulseMixerCtrl *c = GST_PULSEMIXER_CTRL (userdata); if (c->update_volume) { if (c->type == GST_PULSEMIXER_SINK) o = pa_context_set_sink_volume_by_index (c->context, c->index, &c->volume, NULL, NULL); else o = pa_context_set_source_volume_by_index (c->context, c->index, &c->volume, NULL, NULL); if (!o) GST_WARNING_OBJECT (c->object, "Failed to set device volume: %s", pa_strerror (pa_context_errno (c->context))); else pa_operation_unref (o); c->update_volume = FALSE; } if (c->update_mute) { if (c->type == GST_PULSEMIXER_SINK) o = pa_context_set_sink_mute_by_index (c->context, c->index, !!c->muted, NULL, NULL); else o = pa_context_set_source_mute_by_index (c->context, c->index, !!c->muted, NULL, NULL); if (!o) GST_WARNING_OBJECT (c->object, "Failed to set device mute: %s", pa_strerror (pa_context_errno (c->context))); else pa_operation_unref (o); c->update_mute = FALSE; } /* Make sure that all outstanding queries are being ignored */ c->ignore_queries = c->outstandig_queries; g_assert (e == c->time_event); a->time_free (e); c->time_event = NULL; }
void pulseaudio_volume(menu_info_item_t* mii, int inc) { g_debug("pulseaudio_volume(%s, %i)", mii->name, inc); /* increment/decrement in 2% steps */ pa_cvolume* volume; if(inc < 0) volume = pa_cvolume_dec(mii->volume, -inc * PA_VOLUME_NORM / 50); else if(inc > 0) { int volume_max = mii->menu_info->menu_infos->settings.volume_max; if(volume_max > 0) volume = pa_cvolume_inc_clamp(mii->volume, inc * PA_VOLUME_NORM / 50, PA_VOLUME_NORM * volume_max / 100); else volume = pa_cvolume_inc(mii->volume, inc * PA_VOLUME_NORM / 50); } else return; pa_operation* o = NULL; switch(mii->menu_info->type) { case MENU_SERVER: case MENU_MODULE: /* nothing to do here */ break; case MENU_SINK: o = pa_context_set_sink_volume_by_index(context, mii->index, volume, pulseaudio_set_volume_success_cb, mii); break; case MENU_SOURCE: o = pa_context_set_source_volume_by_index(context, mii->index, volume, pulseaudio_set_volume_success_cb, mii); break; case MENU_INPUT: o = pa_context_set_sink_input_volume(context, mii->index, volume, pulseaudio_set_volume_success_cb, mii); break; case MENU_OUTPUT: o = pa_context_set_source_output_volume(context, mii->index, volume, pulseaudio_set_volume_success_cb, mii); break; } if(o) pa_operation_unref(o); }
void backend_volume_setall(context_t *c, backend_entry_type type, uint32_t idx, int *v, int chnum) { pa_cvolume volume; volume.channels = chnum; for(int i = 0; i < chnum; ++i) { volume.values[i] = v[i]; } switch(type) { case SINK: pa_context_set_sink_volume_by_index(c->context, idx, &volume, NULL, NULL); break; case SINK_INPUT: pa_context_set_sink_input_volume(c->context, idx, &volume, NULL, NULL); break; case SOURCE: pa_context_set_source_volume_by_index(c->context, idx, &volume, NULL, NULL); break; case SOURCE_OUTPUT: pa_context_set_source_output_volume(c->context, idx, &volume, NULL, NULL); break; default: break; } }