bu5hm4n pushed a commit to branch master. http://git.enlightenment.org/core/enlightenment.git/commit/?id=1a3086b2c20c79a63f266ebf8dfddc05e9bc193e
commit 1a3086b2c20c79a63f266ebf8dfddc05e9bc193e Author: Marcel Hollerbach <marcel-hollerb...@t-online.de> Date: Wed Sep 7 11:02:46 2016 +0200 mixer: introduce emix_max_volume_get This lets the module decide what its maximum value is. Everything over 100% is considered overloading. And is protected by the mixer and the gadget. --- src/modules/mixer/e_mod_main.c | 8 ++++---- src/modules/mixer/emixer.c | 12 ++++++------ src/modules/mixer/lib/backends/alsa/alsa.c | 13 +++++++++++-- src/modules/mixer/lib/backends/pulseaudio/pulse.c | 13 ++++++++++--- src/modules/mixer/lib/emix.c | 9 +++++++++ src/modules/mixer/lib/emix.h | 7 +++++-- 6 files changed, 45 insertions(+), 17 deletions(-) diff --git a/src/modules/mixer/e_mod_main.c b/src/modules/mixer/e_mod_main.c index bff3be4..db7a1d7 100644 --- a/src/modules/mixer/e_mod_main.c +++ b/src/modules/mixer/e_mod_main.c @@ -189,10 +189,10 @@ _volume_increase_cb(E_Object *obj EINA_UNUSED, const char *params EINA_UNUSED) volume.volumes = calloc(s->volume.channel_count, sizeof(int)); for (i = 0; i < volume.channel_count; i++) { - if (s->volume.volumes[i] < (EMIX_VOLUME_MAX + 50) - VOLUME_STEP) + if (s->volume.volumes[i] < (emix_max_volume_get()) - VOLUME_STEP) volume.volumes[i] = s->volume.volumes[i] + VOLUME_STEP; - else if (s->volume.volumes[i] < EMIX_VOLUME_MAX + 50) - volume.volumes[i] = EMIX_VOLUME_MAX + 50; + else if (s->volume.volumes[i] < emix_max_volume_get()) + volume.volumes[i] = emix_max_volume_get(); else volume.volumes[i] = s->volume.volumes[i]; } @@ -463,7 +463,7 @@ _popup_new(Instance *inst) evas_object_size_hint_align_set(slider, EVAS_HINT_FILL, EVAS_HINT_FILL); evas_object_size_hint_weight_set(slider, EVAS_HINT_EXPAND, 0.0); evas_object_show(slider); - elm_slider_min_max_set(slider, 0.0, EMIX_VOLUME_MAX + 50); + elm_slider_min_max_set(slider, 0.0, emix_max_volume_get()); evas_object_smart_callback_add(slider, "changed", _slider_changed_cb, NULL); evas_object_smart_callback_add(slider, "slider,drag,stop", _slider_drag_stop_cb, NULL); elm_slider_value_set(slider, volume); diff --git a/src/modules/mixer/emixer.c b/src/modules/mixer/emixer.c index 0d5b62e..61ae830 100644 --- a/src/modules/mixer/emixer.c +++ b/src/modules/mixer/emixer.c @@ -144,8 +144,8 @@ _emix_sink_add(Emix_Sink *sink) sl = elm_slider_add(win); evas_object_data_set(bxv, "volume", sl); - elm_slider_min_max_set(sl, 0.0, EMIX_VOLUME_MAX + 50); - elm_slider_span_size_set(sl, (EMIX_VOLUME_MAX + 50) * elm_config_scale_get()); + elm_slider_min_max_set(sl, 0.0, emix_max_volume_get()); + elm_slider_span_size_set(sl, emix_max_volume_get() * elm_config_scale_get()); elm_slider_unit_format_set(sl, "%1.0f"); elm_slider_indicator_format_set(sl, "%1.0f"); evas_object_size_hint_weight_set(sl, EVAS_HINT_EXPAND, 0.5); @@ -324,8 +324,8 @@ _emix_sink_input_add(Emix_Sink_Input *input) sl = elm_slider_add(win); evas_object_data_set(bxv, "volume", sl); - elm_slider_min_max_set(sl, 0.0, EMIX_VOLUME_MAX + 50); - elm_slider_span_size_set(sl, (EMIX_VOLUME_MAX + 50) * elm_config_scale_get()); + elm_slider_min_max_set(sl, 0.0, emix_max_volume_get()); + elm_slider_span_size_set(sl, (emix_max_volume_get()) * elm_config_scale_get()); elm_slider_unit_format_set(sl, "%1.0f"); elm_slider_indicator_format_set(sl, "%1.0f"); evas_object_size_hint_weight_set(sl, EVAS_HINT_EXPAND, 0.5); @@ -476,8 +476,8 @@ _emix_source_add(Emix_Source *source) sl = elm_slider_add(win); evas_object_data_set(bxv, "volume", sl); - elm_slider_min_max_set(sl, 0.0, EMIX_VOLUME_MAX + 50); - elm_slider_span_size_set(sl, (EMIX_VOLUME_MAX + 50) * elm_config_scale_get()); + elm_slider_min_max_set(sl, 0.0, emix_max_volume_get()); + elm_slider_span_size_set(sl, (emix_max_volume_get()) * elm_config_scale_get()); elm_slider_unit_format_set(sl, "%1.0f"); elm_slider_indicator_format_set(sl, "%1.0f"); evas_object_size_hint_weight_set(sl, EVAS_HINT_EXPAND, 0.5); diff --git a/src/modules/mixer/lib/backends/alsa/alsa.c b/src/modules/mixer/lib/backends/alsa/alsa.c index add473a..063cb23 100644 --- a/src/modules/mixer/lib/backends/alsa/alsa.c +++ b/src/modules/mixer/lib/backends/alsa/alsa.c @@ -1,6 +1,8 @@ #include "emix.h" #include <alsa/asoundlib.h> +#define MAX_VOLUME 100 + #define ERR(...) EINA_LOG_ERR(__VA_ARGS__) #define DBG(...) EINA_LOG_DBG(__VA_ARGS__) #define WRN(...) EINA_LOG_WARN(__VA_ARGS__) @@ -74,7 +76,7 @@ _alsa_channel_volume_get(snd_mixer_elem_t *channel, int *v, Eina_Bool capture) else snd_mixer_selem_get_playback_volume_range(channel, &min, &max); - divide = 100 + min; + divide = MAX_VOLUME + min; if (divide == 0) { divide = 1; @@ -99,7 +101,7 @@ _alsa_channel_volume_set(snd_mixer_elem_t *channel, int v, Eina_Bool capture) long int vol, min, max, divide, range; snd_mixer_selem_get_playback_volume_range(channel, &min, &max); - divide = 100 + min; + divide = MAX_VOLUME + min; range = max - min; if (range < 1) return; @@ -503,11 +505,18 @@ _alsa_sink_volume_set(Emix_Sink *sink, Emix_Volume v) (Emix_Sink *)s); } +static int +_max_volume(void) +{ + return MAX_VOLUME; +} + static Emix_Backend _alsa_backend = { _alsa_init, _alsa_shutdown, + _max_volume, _alsa_sinks_get, _alsa_support, /*default support*/ NULL, /*get*/ diff --git a/src/modules/mixer/lib/backends/pulseaudio/pulse.c b/src/modules/mixer/lib/backends/pulseaudio/pulse.c index 40dda05..f558b5b 100644 --- a/src/modules/mixer/lib/backends/pulseaudio/pulse.c +++ b/src/modules/mixer/lib/backends/pulseaudio/pulse.c @@ -11,11 +11,11 @@ #define WRN(...) EINA_LOG_WARN(__VA_ARGS__) #define PA_VOLUME_TO_INT(_vol) \ - ((_vol * EMIX_VOLUME_MAX) / \ + ((_vol * EMIX_VOLUME_BARRIER) / \ PA_VOLUME_NORM) #define INT_TO_PA_VOLUME(_vol) \ ((PA_VOLUME_NORM * _vol) / \ - EMIX_VOLUME_MAX) + EMIX_VOLUME_BARRIER) typedef struct _Context { @@ -491,7 +491,7 @@ _source_changed_cb(pa_context *c EINA_UNUSED, if (!source) { - source = calloc(1, sizeof(Source)); + source = calloc(1, sizeof(Source)); EINA_SAFETY_ON_NULL_RETURN(source); ctx->sources = eina_list_append(ctx->sources, source); } @@ -1057,11 +1057,18 @@ _sink_change_support(void) return EINA_TRUE; } +static int +_max_volume(void) +{ + return 150; +} + static Emix_Backend _pulseaudio_backend = { _init, _shutdown, + _max_volume, _sinks_get, _sink_default_support, _sink_default_get, diff --git a/src/modules/mixer/lib/emix.c b/src/modules/mixer/lib/emix.c index 41babec..898df3a 100644 --- a/src/modules/mixer/lib/emix.c +++ b/src/modules/mixer/lib/emix.c @@ -170,6 +170,15 @@ emix_backends_available(void) return ctx->backends_names; } +int +emix_max_volume_get(void) +{ + EINA_SAFETY_ON_FALSE_RETURN_VAL((ctx && ctx->loaded && + ctx->loaded->ebackend_max_volume_get), + 0); + return ctx->loaded->ebackend_max_volume_get(); +} + Eina_Bool emix_backend_set(const char *backend) { diff --git a/src/modules/mixer/lib/emix.h b/src/modules/mixer/lib/emix.h index d177220..1f1ee5e 100644 --- a/src/modules/mixer/lib/emix.h +++ b/src/modules/mixer/lib/emix.h @@ -23,7 +23,7 @@ #endif -#define EMIX_VOLUME_MAX 100 +#define EMIX_VOLUME_BARRIER 100 enum Emix_Event { EMIX_READY_EVENT = 0, @@ -79,6 +79,8 @@ typedef struct _Emix_Backend { Eina_Bool (*ebackend_init)(Emix_Event_Cb cb, const void *data); void (*ebackend_shutdown)(void); + int (*ebackend_max_volume_get)(void); + const Eina_List* (*ebackend_sinks_get)(void); Eina_Bool (*ebackend_sink_default_support)(void); const Emix_Sink* (*ebackend_sink_default_get)(void); @@ -118,6 +120,8 @@ E_API Eina_Bool emix_event_callback_add(Emix_Event_Cb cb, const void *data); E_API Eina_Bool emix_event_callback_del(Emix_Event_Cb cb); +E_API int emix_max_volume_get(void); + E_API const Eina_List* emix_sinks_get(void); E_API Eina_Bool emix_sink_default_support(void); E_API const Emix_Sink* emix_sink_default_get(void); @@ -141,7 +145,6 @@ E_API void emix_source_mute_set(Emix_Source *source, Eina_Bool mute); E_API void emix_source_volume_set(Emix_Source *source, Emix_Volume volume); - E_API Evas_Object* emix_advanced_options_add(Evas_Object *parent); #endif /* EMIX_H */ --