[pulseaudio-discuss] [PATCH] card-restore: Add the ability to save and restore the maximum volume
rong deng
dzrongg at gmail.com
Fri Aug 3 05:25:18 PDT 2012
Hi Poljar,
Sorry for top posting.
This patch is based on your github's commit. Of course, it doesn't
work yet because not everything is weaved together... However I'd like
to give others a chance to see what i'm doing and whether i'm on the
right track.
2012/8/3 Deng Zhengrong <dzrongg at gmail.com>:
> module-card-restore now saves the maximum volume.
>
> This change includes a entry version bump.
> ---
> src/modules/module-card-restore.c | 26 +++++++++++++++++++++++---
> 1 files changed, 23 insertions(+), 3 deletions(-)
>
> diff --git a/src/modules/module-card-restore.c b/src/modules/module-card-restore.c
> index 7d101c5..689381d 100644
> --- a/src/modules/module-card-restore.c
> +++ b/src/modules/module-card-restore.c
> @@ -68,11 +68,12 @@ struct userdata {
> pa_database *database;
> };
>
> -#define ENTRY_VERSION 2
> +#define ENTRY_VERSION 3
>
> struct port_info {
> char *name;
> int64_t offset;
> + pa_volume_t max_volume;
> };
>
> struct entry {
> @@ -145,6 +146,7 @@ static pa_bool_t entry_write(struct userdata *u, const char *name, const struct
> PA_HASHMAP_FOREACH(p_info, e->ports, state) {
> pa_tagstruct_puts(t, p_info->name);
> pa_tagstruct_puts64(t, p_info->offset);
> + pa_tagstruct_put_volume(t, p_info->max_volume);
> }
>
> key.data = (char *) name;
> @@ -249,6 +251,18 @@ static struct entry* entry_read(struct userdata *u, const char *name) {
> p_info->name = pa_xstrdup(port_name);
> p_info->offset = port_offset;
>
> + if (e->version >= 3) {
> + pa_volume_t max_volume = PA_VOLUME_INVALID;
> +
> + if (pa_tagstruct_get_volume(t, &max_volume) < 0) {
> + pa_xfree(p_info->name);
> + pa_xfree(p_info);
> + goto fail;
> + }
> +
> + p_info->max_volume = max_volume;
> + }
> +
> pa_assert_se(pa_hashmap_put(e->ports, p_info->name, p_info) >= 0);
> }
> }
> @@ -313,6 +327,7 @@ static void subscribe_callback(pa_core *c, pa_subscription_event_type_t t, uint3
> p_info = pa_xnew(struct port_info, 1);
> p_info->name = pa_xstrdup(p->name);
> p_info->offset = p->latency_offset;
> + p_info->max_volume = p->maximum_volume;
>
> pa_assert_se(pa_hashmap_put(entry->ports, p_info->name, p_info) >= 0);
> }
> @@ -336,7 +351,10 @@ static void subscribe_callback(pa_core *c, pa_subscription_event_type_t t, uint3
> dirty = true;
> break;
> }
> -
> + if (p_info->max_volume != old_p_info->max_volume) {
> + dirty = true;
> + break;
> + }
> } else {
> dirty = true;
> break;
> @@ -391,8 +409,10 @@ static pa_hook_result_t card_new_hook_callback(pa_core *c, pa_card_new_data *new
> pa_log_info("Restoring port latency offsets for card %s.", new_data->name);
>
> PA_HASHMAP_FOREACH(p_info, e->ports, state)
> - if ((p = pa_hashmap_get(new_data->ports, p_info->name)))
> + if ((p = pa_hashmap_get(new_data->ports, p_info->name))) {
> p->latency_offset = p_info->offset;
> + p->maximum_volume = p_info->max_volume;
> + }
>
> entry_free(e);
>
> --
> 1.7.7.6
>
More information about the pulseaudio-discuss
mailing list