{"object_kind":"push","event_name":"push","before":"8873c752ec05b701a2f8153f8f9eb4f06c378ebc","after":"5d3de178c41705d1fb1ac35ee27543dcee476f0f","ref":"refs/heads/master","ref_protected":true,"checkout_sha":"5d3de178c41705d1fb1ac35ee27543dcee476f0f","message":null,"user_id":3060,"user_name":"Wim Taymans","user_username":"wtaymans","user_email":"[REDACTED]","user_avatar":"https://secure.gravatar.com/avatar/1ca1bed246cb9b95b7ead6d6be96bb09f0c112953140c8bb38b41aedf4465270?s=80&d=identicon","project_id":4753,"project":{"id":4753,"name":"pipewire","description":"Multimedia processing graphs","web_url":"https://gitlab.freedesktop.org/pipewire/pipewire","avatar_url":"https://gitlab.freedesktop.org/uploads/-/system/project/avatar/4753/pipewire.png?v=1790844851","git_ssh_url":"git@ssh.gitlab.freedesktop.org:pipewire/pipewire.git","git_http_url":"https://gitlab.freedesktop.org/pipewire/pipewire.git","namespace":"PipeWire","visibility_level":20,"path_with_namespace":"pipewire/pipewire","default_branch":"master","ci_config_path":"","homepage":"https://gitlab.freedesktop.org/pipewire/pipewire","url":"git@ssh.gitlab.freedesktop.org:pipewire/pipewire.git","ssh_url":"git@ssh.gitlab.freedesktop.org:pipewire/pipewire.git","http_url":"https://gitlab.freedesktop.org/pipewire/pipewire.git"},"commits":[{"id":"5d3de178c41705d1fb1ac35ee27543dcee476f0f","message":"spa: acp: follow a mixer control that comes back\n\nWhen a control goes away from a card and comes back while the card\nstays -- the driver that provides it unbound and bound again -- the\ndevice keeps writing the control but no longer follows it: turning the\nknob on the hardware no longer moves the volume on the desktop, while\nthe desktop volume still moves the hardware.\n\nsetup_mixer() attaches mixer_callback() once, to the element object\nfound at that moment. When the control is removed, alsa-lib frees that\nobject and mixer_callback() ignores the REMOVE. When it comes back,\nalsa-lib creates a new element and reports it with\nSND_CTL_EVENT_MASK_ADD to the mixer's own callback, which ACP does not\nset, so the new element has no callback and its changes go unseen.\nWrites are not affected because they look the element up by name each\ntime.\n\nSet a mixer callback next to the element callbacks. For an added\nsimple element it attaches mixer_callback() again for each active\ndevice on that mixer whose path contains the element, then reads the\ncurrent volume and mute.\n\nFixes #5501\n\nSigned-off-by: Mikhail Gavrilov \n","title":"spa: acp: follow a mixer control that comes back","timestamp":"2026-10-01T09:04:43+00:00","url":"https://gitlab.freedesktop.org/pipewire/pipewire/-/commit/5d3de178c41705d1fb1ac35ee27543dcee476f0f","author":{"name":"Mikhail Gavrilov","email":"mikhail.v.gavrilov@gmail.com"},"added":[],"modified":["spa/plugins/alsa/acp/acp.c","spa/plugins/alsa/acp/alsa-mixer.c","spa/plugins/alsa/acp/alsa-mixer.h"],"removed":[]}],"total_commits_count":1,"push_options":{},"repository":{"name":"pipewire","url":"git@ssh.gitlab.freedesktop.org:pipewire/pipewire.git","description":"Multimedia processing graphs","homepage":"https://gitlab.freedesktop.org/pipewire/pipewire","git_http_url":"https://gitlab.freedesktop.org/pipewire/pipewire.git","git_ssh_url":"git@ssh.gitlab.freedesktop.org:pipewire/pipewire.git","visibility_level":20}}