summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorClaudia Draghicescu <claudia.rosu@nxp.com>2023-08-22 17:29:32 +0300
committerAyush Garg <ayush.garg@samsung.com>2024-01-05 19:04:03 +0530
commit94df3c65381ae0b8abffd2a789fe6d6f822c40ce (patch)
tree18a859dc74499029937960734864e6d009c60e3c
parent9f6b8913db5e8323d4f37fd1026c04d101e73adf (diff)
downloadbluez-94df3c65381ae0b8abffd2a789fe6d6f822c40ce.tar.gz
bluez-94df3c65381ae0b8abffd2a789fe6d6f822c40ce.tar.bz2
bluez-94df3c65381ae0b8abffd2a789fe6d6f822c40ce.zip
media: Add broadcast sink media endpoint
This patch adds the possibility to register a broadcast media endpoint if the controller has support for ISO Sync Receiver.
-rw-r--r--profiles/audio/media.c42
-rwxr-xr-xprofiles/audio/media.h3
2 files changed, 39 insertions, 6 deletions
diff --git a/profiles/audio/media.c b/profiles/audio/media.c
index 1b67f64b..3b6bc239 100644
--- a/profiles/audio/media.c
+++ b/profiles/audio/media.c
@@ -1269,17 +1269,21 @@ static struct media_transport *pac_bcast_config(struct bt_bap_stream *stream,
struct media_endpoint *endpoint)
{
struct bt_bap *bap = bt_bap_stream_get_session(stream);
- struct btd_adapter *adapter = bt_bap_get_user_data(bap);
+ struct btd_adapter *adapter = endpoint->adapter->btd_adapter;
+ struct btd_device *device;
const char *path;
- if (!adapter) {
- error("Unable to find adapter");
+ if (!adapter)
return NULL;
- }
+
+ if (!strcmp(endpoint->uuid, BCAA_SERVICE_UUID))
+ device = NULL;
+ else
+ device = btd_service_get_device(bt_bap_get_user_data(bap));
path = bt_bap_stream_get_user_data(stream);
- return media_transport_create(NULL, path, cfg->iov_base, cfg->iov_len,
+ return media_transport_create(device, path, cfg->iov_base, cfg->iov_len,
endpoint, stream);
}
@@ -1449,6 +1453,12 @@ static bool endpoint_init_broadcast_source(struct media_endpoint *endpoint,
return endpoint_init_pac(endpoint, BT_BAP_BCAST_SOURCE, err);
}
+static bool endpoint_init_broadcast_sink(struct media_endpoint *endpoint,
+ int *err)
+{
+ return endpoint_init_pac(endpoint, BT_BAP_BCAST_SINK, err);
+}
+
static bool endpoint_properties_exists(const char *uuid,
struct btd_device *dev,
void *user_data)
@@ -1562,6 +1572,17 @@ static bool experimental_broadcaster_ep_supported(struct btd_adapter *adapter)
return g_dbus_get_flags() & G_DBUS_FLAG_ENABLE_EXPERIMENTAL;
}
+static bool experimental_bcast_sink_ep_supported(struct btd_adapter *adapter)
+{
+ if (!btd_adapter_has_exp_feature(adapter, EXP_FEAT_ISO_SOCKET))
+ return false;
+
+ if (!btd_adapter_has_settings(adapter, MGMT_SETTING_ISO_SYNC_RECEIVER))
+ return false;
+
+ return g_dbus_get_flags() & G_DBUS_FLAG_ENABLE_EXPERIMENTAL;
+}
+
static struct media_endpoint_init {
const char *uuid;
bool (*func)(struct media_endpoint *endpoint, int *err);
@@ -1577,6 +1598,8 @@ static struct media_endpoint_init {
experimental_endpoint_supported },
{ BCAA_SERVICE_UUID, endpoint_init_broadcast_source,
experimental_broadcaster_ep_supported },
+ { BAA_SERVICE_UUID, endpoint_init_broadcast_sink,
+ experimental_bcast_sink_ep_supported },
};
static struct media_endpoint *
@@ -3667,3 +3690,12 @@ struct btd_adapter *media_endpoint_get_btd_adapter(
{
return endpoint->adapter->btd_adapter;
}
+
+bool media_endpoint_is_broadcast(struct media_endpoint *endpoint)
+{
+ if (!strcmp(endpoint->uuid, BCAA_SERVICE_UUID)
+ || !strcmp(endpoint->uuid, BAA_SERVICE_UUID))
+ return true;
+
+ return false;
+}
diff --git a/profiles/audio/media.h b/profiles/audio/media.h
index 1de84a8f..0eeb5746 100755
--- a/profiles/audio/media.h
+++ b/profiles/audio/media.h
@@ -22,5 +22,6 @@ const char *media_endpoint_get_uuid(struct media_endpoint *endpoint);
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);