[PATCH BlueZ v1] audio/player: Fix not being able to register players of different types

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

 



From: Luiz Augusto von Dentz <luiz.von.dentz@xxxxxxxxx>

When registering players both AVRCP and MCP were using the same object
path making them clash, so this fix it by adding a type to the object
path so each profile can register their player in their own domain.

Fixes: https://github.com/bluez/bluez/issues/1290
---
 profiles/audio/avrcp.c  | 2 +-
 profiles/audio/mcp.c    | 3 ++-
 profiles/audio/player.c | 5 +++--
 profiles/audio/player.h | 3 ++-
 4 files changed, 8 insertions(+), 5 deletions(-)

diff --git a/profiles/audio/avrcp.c b/profiles/audio/avrcp.c
index 2d7b4e1e7ddf..831f1dc8bf12 100644
--- a/profiles/audio/avrcp.c
+++ b/profiles/audio/avrcp.c
@@ -3577,7 +3577,7 @@ static struct avrcp_player *create_ct_player(struct avrcp *session,
 
 	path = device_get_path(session->dev);
 
-	mp = media_player_controller_create(path, id);
+	mp = media_player_controller_create(path, "avrcp", id);
 	if (mp == NULL) {
 		g_free(player);
 		return NULL;
diff --git a/profiles/audio/mcp.c b/profiles/audio/mcp.c
index 0a2991f2074f..2808674cf3a7 100644
--- a/profiles/audio/mcp.c
+++ b/profiles/audio/mcp.c
@@ -342,7 +342,8 @@ static int mcp_accept(struct btd_service *service)
 
 	bt_mcp_attach(data->mcp, client);
 
-	data->mp = media_player_controller_create(device_get_path(device), 0);
+	data->mp = media_player_controller_create(device_get_path(device),
+							"mcp", 0);
 	if (data->mp == NULL) {
 		DBG("Unable to create Media Player");
 		return -EINVAL;
diff --git a/profiles/audio/player.c b/profiles/audio/player.c
index 52844c9c07a3..86e59bc8e231 100644
--- a/profiles/audio/player.c
+++ b/profiles/audio/player.c
@@ -1277,13 +1277,14 @@ void media_player_destroy(struct media_player *mp)
 }
 
 struct media_player *media_player_controller_create(const char *path,
-								uint16_t id)
+							const char *type,
+							uint16_t id)
 {
 	struct media_player *mp;
 
 	mp = g_new0(struct media_player, 1);
 	mp->device = g_strdup(path);
-	mp->path = g_strdup_printf("%s/player%u", path, id);
+	mp->path = g_strdup_printf("%s/%s/player%u", path, type, id);
 	mp->settings = g_hash_table_new_full(g_str_hash, g_str_equal,
 							g_free, g_free);
 	mp->track = g_hash_table_new_full(g_str_hash, g_str_equal,
diff --git a/profiles/audio/player.h b/profiles/audio/player.h
index 5e181591c0f4..dcd7df286ee1 100644
--- a/profiles/audio/player.h
+++ b/profiles/audio/player.h
@@ -61,7 +61,8 @@ struct media_player_callback {
 };
 
 struct media_player *media_player_controller_create(const char *path,
-								uint16_t id);
+							const char *type,
+							uint16_t id);
 const char *media_player_get_path(struct media_player *mp);
 void media_player_destroy(struct media_player *mp);
 void media_player_set_duration(struct media_player *mp, uint32_t duration);
-- 
2.49.0





[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