From 39a62aaa29b8e3e45f3a821351690a02ef435e53 Mon Sep 17 00:00:00 2001 From: Luiz Augusto von Dentz Date: Wed, 17 Aug 2016 12:51:17 +0300 Subject: [PATCH] audio/avrcp: Don't send SetBrowsedPlayer if player is not browsable If player is not browsable the code should skip sending SetBrowsedPlayer. --- profiles/audio/avrcp.c | 20 ++++++++++++++++++-- profiles/audio/player.c | 5 +++++ profiles/audio/player.h | 1 + 3 files changed, 24 insertions(+), 2 deletions(-) diff --git a/profiles/audio/avrcp.c b/profiles/audio/avrcp.c index 90faa1de5..21acee304 100644 --- a/profiles/audio/avrcp.c +++ b/profiles/audio/avrcp.c @@ -3194,14 +3194,30 @@ static const struct media_player_callback ct_cbs = { .total_items = ct_get_total_numberofitems, }; +static void set_browsed_player(struct avrcp *session, + struct avrcp_player *player) +{ + if (!player || !player->id || player->browsed) + return; + + if (media_player_get_browsable(player->user_data)) + avrcp_set_browsed_player(session, player); +} + static void set_ct_player(struct avrcp *session, struct avrcp_player *player) { struct btd_service *service; + if (session->controller->player == player) + goto done; + session->controller->player = player; service = btd_device_get_service(session->dev, AVRCP_TARGET_UUID); control_set_player(service, player ? media_player_get_path(player->user_data) : NULL); + +done: + set_browsed_player(session, player); } static struct avrcp_player *create_ct_player(struct avrcp *session, @@ -3304,8 +3320,8 @@ avrcp_parse_media_player_item(struct avrcp *session, uint8_t *operands, media_player_set_name(mp, name); } - if (session->controller->player == player && !player->browsed) - avrcp_set_browsed_player(session, player); + if (player->addressed) + set_browsed_player(session, player); return player; } diff --git a/profiles/audio/player.c b/profiles/audio/player.c index 9d638fcdb..f1bd9de3e 100644 --- a/profiles/audio/player.c +++ b/profiles/audio/player.c @@ -1404,6 +1404,11 @@ void media_player_set_browsable(struct media_player *mp, bool enabled) "Browsable"); } +bool media_player_get_browsable(struct media_player *mp) +{ + return mp->browsable; +} + void media_player_set_searchable(struct media_player *mp, bool enabled) { if (mp->searchable == enabled) diff --git a/profiles/audio/player.h b/profiles/audio/player.h index 4ad8bfebc..54e395a13 100644 --- a/profiles/audio/player.h +++ b/profiles/audio/player.h @@ -85,6 +85,7 @@ void media_player_set_type(struct media_player *mp, const char *type); void media_player_set_subtype(struct media_player *mp, const char *subtype); void media_player_set_name(struct media_player *mp, const char *name); void media_player_set_browsable(struct media_player *mp, bool enabled); +bool media_player_get_browsable(struct media_player *mp); void media_player_set_searchable(struct media_player *mp, bool enabled); void media_player_set_folder(struct media_player *mp, const char *path, uint32_t items); -- 2.47.3