From d5f46e824e3f8a042e6f67dd4c3fc385545edd74 Mon Sep 17 00:00:00 2001 From: Lennart Poettering Date: Tue, 27 Jan 2009 04:39:07 +0100 Subject: move flat volume logic into the core. while doing so add n_volume_steps field to sinks/sources --- src/pulsecore/sink.h | 41 ++++++++++++++++++++--------------------- 1 file changed, 20 insertions(+), 21 deletions(-) (limited to 'src/pulsecore/sink.h') diff --git a/src/pulsecore/sink.h b/src/pulsecore/sink.h index a30245d9..b26ca779 100644 --- a/src/pulsecore/sink.h +++ b/src/pulsecore/sink.h @@ -71,11 +71,11 @@ struct pa_sink { unsigned n_corked; pa_source *monitor_source; - pa_cvolume volume; - pa_cvolume virtual_volume; - pa_bool_t muted; + pa_volume_t base_volume; /* shall be constant */ + unsigned n_volume_steps; /* shall be constant */ - pa_volume_t base_volume; /* shall be constant */ + pa_cvolume virtual_volume, soft_volume; + pa_bool_t muted:1; pa_bool_t refresh_volume:1; pa_bool_t refresh_muted:1; @@ -94,23 +94,23 @@ struct pa_sink { * context. If this is NULL a PA_SINK_MESSAGE_GET_VOLUME message * will be sent to the IO thread instead. If refresh_volume is * FALSE neither this function is called nor a message is sent. */ - int (*get_volume)(pa_sink *s); /* may be NULL */ + void (*get_volume)(pa_sink *s); /* may be NULL */ /* Called when the volume shall be changed. Called from main loop * context. If this is NULL a PA_SINK_MESSAGE_SET_VOLUME message * will be sent to the IO thread instead. */ - int (*set_volume)(pa_sink *s); /* dito */ + void (*set_volume)(pa_sink *s); /* dito */ /* Called when the mute setting is queried. Called from main loop * context. If this is NULL a PA_SINK_MESSAGE_GET_MUTE message * will be sent to the IO thread instead. If refresh_mute is * FALSE neither this function is called nor a message is sent.*/ - int (*get_mute)(pa_sink *s); /* dito */ + void (*get_mute)(pa_sink *s); /* dito */ /* Called when the mute setting shall be changed. Called from main * loop context. If this is NULL a PA_SINK_MESSAGE_SET_MUTE * message will be sent to the IO thread instead. */ - int (*set_mute)(pa_sink *s); /* dito */ + void (*set_mute)(pa_sink *s); /* dito */ /* Called when a rewind request is issued. Called from IO thread * context. */ @@ -125,6 +125,7 @@ struct pa_sink { struct { pa_sink_state_t state; pa_hashmap *inputs; + pa_cvolume soft_volume; pa_bool_t soft_muted:1; @@ -203,13 +204,7 @@ void pa_sink_new_data_set_volume(pa_sink_new_data *data, const pa_cvolume *volum void pa_sink_new_data_set_muted(pa_sink_new_data *data, pa_bool_t mute); void pa_sink_new_data_done(pa_sink_new_data *data); -typedef struct pa_sink_set_volume_data { - pa_sink *sink; - pa_cvolume volume; - pa_cvolume virtual_volume; -} pa_sink_set_volume_data; - -/* To be called exclusively by the sink driver, from main context */ +/*** To be called exclusively by the sink driver, from main context */ pa_sink* pa_sink_new( pa_core *core, @@ -228,7 +223,9 @@ void pa_sink_set_latency_range(pa_sink *s, pa_usec_t min_latency, pa_usec_t max_ void pa_sink_detach(pa_sink *s); void pa_sink_attach(pa_sink *s); -/* May be called by everyone, from main context */ +void pa_sink_set_soft_volume(pa_sink *s, const pa_cvolume *volume); + +/**** May be called by everyone, from main context */ /* The returned value is supposed to be in the time domain of the sound card! */ pa_usec_t pa_sink_get_latency(pa_sink *s); @@ -242,11 +239,13 @@ int pa_sink_update_status(pa_sink*s); int pa_sink_suspend(pa_sink *s, pa_bool_t suspend); int pa_sink_suspend_all(pa_core *c, pa_bool_t suspend); -void pa_sink_set_volume(pa_sink *sink, const pa_cvolume *volume); -void pa_sink_set_soft_volume(pa_sink *s, const pa_cvolume *volume); +void pa_sink_update_flat_volume(pa_sink *s, pa_cvolume *new_volume); +void pa_sink_propagate_flat_volume(pa_sink *s, const pa_cvolume *old_volume); + +void pa_sink_set_volume(pa_sink *sink, const pa_cvolume *volume, pa_bool_t propagate, pa_bool_t sendmsg); const pa_cvolume *pa_sink_get_volume(pa_sink *sink, pa_bool_t force_refresh); void pa_sink_set_mute(pa_sink *sink, pa_bool_t mute); -pa_bool_t pa_sink_get_mute(pa_sink *sink, pa_bool_t force_refres); +pa_bool_t pa_sink_get_mute(pa_sink *sink, pa_bool_t force_refresh); pa_bool_t pa_sink_update_proplist(pa_sink *s, pa_update_mode_t mode, pa_proplist *p); @@ -260,7 +259,7 @@ pa_queue *pa_sink_move_all_start(pa_sink *s); void pa_sink_move_all_finish(pa_sink *s, pa_queue *q); void pa_sink_move_all_fail(pa_queue *q); -/* To be called exclusively by the sink driver, from IO context */ +/*** To be called exclusively by the sink driver, from IO context */ void pa_sink_render(pa_sink*s, size_t length, pa_memchunk *result); void pa_sink_render_full(pa_sink *s, size_t length, pa_memchunk *result); @@ -281,7 +280,7 @@ void pa_sink_set_max_request(pa_sink *s, size_t max_request); void pa_sink_update_latency_range(pa_sink *s, pa_usec_t min_latency, pa_usec_t max_latency); -/* To be called exclusively by sink input drivers, from IO context */ +/*** To be called exclusively by sink input drivers, from IO context */ void pa_sink_request_rewind(pa_sink*s, size_t nbytes); -- cgit