Re: [PATCH bluez] audio: Don't initialize device volume from media player

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Hi Myrrh,

On Tue, Aug 5, 2025 at 6:29 AM Myrrh Periwinkle
<myrrhperiwinkle@xxxxxxxxxxx> wrote:
>
> Media player objects may be shared between devices. As a result,
> a device without support for hardware volume that is connected after one
> that does may end up being erroneously considered hardware
> volume-capable.

Don't quite follow, avrcp_player is per device, not sure how it can be
shared between devices?

> fa7828bdd ("transport: Fix not being able to initialize volume properly")
> introduced btd_device_{get,set}_volume that is used as an alternative in
> case no media player objects are present. Therefore, we can remove
> media_player_get_device_volume and instead use btd_device_get_volume to
> determine the initial volume.

Don't follow you here, why shouldn;t we use the media player if we have one?

> ---
>  profiles/audio/avrcp.c |  2 +-
>  profiles/audio/media.c | 33 +--------------------------------
>  profiles/audio/media.h |  1 -
>  3 files changed, 2 insertions(+), 34 deletions(-)
>
> diff --git a/profiles/audio/avrcp.c b/profiles/audio/avrcp.c
> index e2797112fcd580c3fc56793f933e00b1c61e5205..ec07522e6a34eb1dc5f6f413f48f1087a609df9a 100644
> --- a/profiles/audio/avrcp.c
> +++ b/profiles/audio/avrcp.c
> @@ -4284,7 +4284,7 @@ static void target_init(struct avrcp *session)
>                 target->player = player;
>                 player->sessions = g_slist_prepend(player->sessions, session);
>
> -               init_volume = media_player_get_device_volume(session->dev);
> +               init_volume = btd_device_get_volume(session->dev);
>                 media_transport_update_device_volume(session->dev, init_volume);
>         }
>
> diff --git a/profiles/audio/media.c b/profiles/audio/media.c
> index 8e62dca17070edbc5101677c6eebd3707492c824..55f1482d1d9ce52e104481bab3ede373f47aee0c 100644
> --- a/profiles/audio/media.c
> +++ b/profiles/audio/media.c
> @@ -499,37 +499,6 @@ struct a2dp_config_data {
>         a2dp_endpoint_config_t cb;
>  };
>
> -int8_t media_player_get_device_volume(struct btd_device *device)
> -{
> -#ifdef HAVE_AVRCP
> -       struct avrcp_player *target_player;
> -       struct media_adapter *adapter;
> -       GSList *l;
> -
> -       if (!device)
> -               return -1;
> -
> -       target_player = avrcp_get_target_player_by_device(device);
> -       if (!target_player)
> -               goto done;
> -
> -       adapter = find_adapter(device);
> -       if (!adapter)
> -               goto done;
> -
> -       for (l = adapter->players; l; l = l->next) {
> -               struct media_player *mp = l->data;
> -
> -               if (mp->player == target_player)
> -                       return mp->volume;
> -       }
> -
> -done:
> -#endif /* HAVE_AVRCP */
> -       /* If media_player doesn't exists use device_volume */
> -       return btd_device_get_volume(device);
> -}
> -
>  static gboolean set_configuration(struct media_endpoint *endpoint,
>                                         uint8_t *configuration, size_t size,
>                                         media_endpoint_cb_t cb,
> @@ -556,7 +525,7 @@ static gboolean set_configuration(struct media_endpoint *endpoint,
>         if (transport == NULL)
>                 return FALSE;
>
> -       init_volume = media_player_get_device_volume(device);
> +       init_volume = btd_device_get_volume(device);
>         media_transport_update_volume(transport, init_volume);
>
>         msg = dbus_message_new_method_call(endpoint->sender, endpoint->path,
> diff --git a/profiles/audio/media.h b/profiles/audio/media.h
> index 2b2e8e1572874d5f71abb28fdd5b92fa2d9efe83..d3954abd6de505a69cab3fcffc217d236a52d3e5 100644
> --- a/profiles/audio/media.h
> +++ b/profiles/audio/media.h
> @@ -23,6 +23,5 @@ uint8_t media_endpoint_get_codec(struct media_endpoint *endpoint);
>  struct btd_adapter *media_endpoint_get_btd_adapter(
>                                         struct media_endpoint *endpoint);
>  bool media_endpoint_is_broadcast(struct media_endpoint *endpoint);
> -int8_t media_player_get_device_volume(struct btd_device *device);
>
>  const struct media_endpoint *media_endpoint_get_asha(void);
>
> ---
> base-commit: 2c0c323d08357a4ff3065fcd49fee0c83b5835cd
> change-id: 20250805-audio-no-reuse-media-player-volume-fbc2983a287a
>
> Best regards,
> --
> Myrrh Periwinkle <myrrhperiwinkle@xxxxxxxxxxx>
>
>


-- 
Luiz Augusto von Dentz





[Index of Archives]     [Bluez Devel]     [Linux Wireless Networking]     [Linux Wireless Personal Area Networking]     [Linux ATH6KL]     [Linux USB Devel]     [Linux Media Drivers]     [Linux Audio Users]     [Linux Kernel]     [Linux SCSI]     [Big List of Linux Books]

  Powered by Linux