* [PATCH BlueZ v1 2/4] client/player: Add metadata support to struct capabilities
2024-01-29 21:20 [PATCH BlueZ v1 1/4] util: Add UTIL_IOV_INIT Luiz Augusto von Dentz
@ 2024-01-29 21:20 ` Luiz Augusto von Dentz
2024-01-29 21:20 ` [PATCH BlueZ v1 3/4] client/player: Use util_iov_dup/util_iov_free whenever possible Luiz Augusto von Dentz
` (3 subsequent siblings)
4 siblings, 0 replies; 6+ messages in thread
From: Luiz Augusto von Dentz @ 2024-01-29 21:20 UTC (permalink / raw)
To: linux-bluetooth
From: Luiz Augusto von Dentz <luiz.von.dentz@intel.com>
This enables defining metadata as part of the struct capabilities.
---
client/player.c | 92 ++++++++++++++++++++++++-------------------------
1 file changed, 46 insertions(+), 46 deletions(-)
diff --git a/client/player.c b/client/player.c
index 623519209001..f6b2278d5a8f 100644
--- a/client/player.c
+++ b/client/player.c
@@ -1130,21 +1130,7 @@ static DBusMessage *endpoint_set_configuration(DBusConnection *conn,
return NULL;
}
-struct codec_capabilities {
- uint8_t len;
- uint8_t type;
- uint8_t data[UINT8_MAX];
-};
-
-#define data(args...) ((const unsigned char[]) { args })
-
-#define CODEC_DATA(args...) \
- { \
- .iov_base = (void *)data(args), \
- .iov_len = sizeof(data(args)), \
- }
-
-#define CODEC_CAPABILITIES(_uuid, _codec_id, _data) \
+#define CODEC_CAPABILITIES(_uuid, _codec_id, _data, _meta) \
{ \
.uuid = _uuid, \
.codec_id = _codec_id, \
@@ -1152,16 +1138,17 @@ struct codec_capabilities {
}
#define LC3_DATA(_freq, _duration, _chan_count, _len_min, _len_max) \
- CODEC_DATA(0x03, LC3_FREQ, _freq, _freq >> 8, \
- 0x02, LC3_DURATION, _duration, \
- 0x02, LC3_CHAN_COUNT, _chan_count, \
- 0x05, LC3_FRAME_LEN, _len_min, _len_min >> 8, _len_max, \
- _len_max >> 8)
+ UTIL_IOV_INIT(0x03, LC3_FREQ, _freq, _freq >> 8, \
+ 0x02, LC3_DURATION, _duration, \
+ 0x02, LC3_CHAN_COUNT, _chan_count, \
+ 0x05, LC3_FRAME_LEN, _len_min, _len_min >> 8, \
+ _len_max, _len_max >> 8)
static const struct capabilities {
const char *uuid;
uint8_t codec_id;
struct iovec data;
+ struct iovec meta;
} caps[] = {
/* A2DP SBC Source:
*
@@ -1172,7 +1159,8 @@ static const struct capabilities {
* Bitpool Range: 2-64
*/
CODEC_CAPABILITIES(A2DP_SOURCE_UUID, A2DP_CODEC_SBC,
- CODEC_DATA(0xff, 0xff, 2, 64)),
+ UTIL_IOV_INIT(0xff, 0xff, 2, 64),
+ UTIL_IOV_INIT()),
/* A2DP SBC Sink:
*
* Channel Modes: Mono DualChannel Stereo JointStereo
@@ -1182,7 +1170,9 @@ static const struct capabilities {
* Bitpool Range: 2-64
*/
CODEC_CAPABILITIES(A2DP_SINK_UUID, A2DP_CODEC_SBC,
- CODEC_DATA(0xff, 0xff, 2, 64)),
+ UTIL_IOV_INIT(0xff, 0xff, 2, 64),
+ UTIL_IOV_INIT()),
+
/* PAC LC3 Sink:
*
* Frequencies: 8Khz 11Khz 16Khz 22Khz 24Khz 32Khz 44.1Khz 48Khz
@@ -1192,7 +1182,9 @@ static const struct capabilities {
*/
CODEC_CAPABILITIES(PAC_SINK_UUID, LC3_ID,
LC3_DATA(LC3_FREQ_ANY, LC3_DURATION_ANY,
- 3u, 30, 240)),
+ 3u, 30, 240),
+ UTIL_IOV_INIT()),
+
/* PAC LC3 Source:
*
* Frequencies: 8Khz 11Khz 16Khz 22Khz 24Khz 32Khz 44.1Khz 48Khz
@@ -1202,7 +1194,9 @@ static const struct capabilities {
*/
CODEC_CAPABILITIES(PAC_SOURCE_UUID, LC3_ID,
LC3_DATA(LC3_FREQ_ANY, LC3_DURATION_ANY,
- 3u, 30, 240)),
+ 3u, 30, 240),
+ UTIL_IOV_INIT()),
+
/* Broadcast LC3 Source:
*
* Frequencies: 8Khz 11Khz 16Khz 22Khz 24Khz 32Khz 44.1Khz 48Khz
@@ -1212,7 +1206,8 @@ static const struct capabilities {
*/
CODEC_CAPABILITIES(BCAA_SERVICE_UUID, LC3_ID,
LC3_DATA(LC3_FREQ_ANY, LC3_DURATION_ANY,
- 3u, 30, 240)),
+ 3u, 30, 240),
+ UTIL_IOV_INIT()),
/* Broadcast LC3 Sink:
*
@@ -1223,7 +1218,8 @@ static const struct capabilities {
*/
CODEC_CAPABILITIES(BAA_SERVICE_UUID, LC3_ID,
LC3_DATA(LC3_FREQ_ANY, LC3_DURATION_ANY,
- 3u, 30, 240)),
+ 3u, 30, 240),
+ UTIL_IOV_INIT()),
};
struct codec_qos {
@@ -1258,32 +1254,36 @@ static struct codec_preset sbc_presets[] = {
* mono, and 512kb/s for two-channel modes.
*/
SBC_PRESET("MQ_MONO_44_1",
- CODEC_DATA(0x28, 0x15, 2, SBC_BITPOOL_MQ_MONO_44100)),
+ UTIL_IOV_INIT(0x28, 0x15, 2, SBC_BITPOOL_MQ_MONO_44100)),
SBC_PRESET("MQ_MONO_48",
- CODEC_DATA(0x18, 0x15, 2, SBC_BITPOOL_MQ_MONO_48000)),
+ UTIL_IOV_INIT(0x18, 0x15, 2, SBC_BITPOOL_MQ_MONO_48000)),
SBC_PRESET("MQ_STEREO_44_1",
- CODEC_DATA(0x21, 0x15, 2, SBC_BITPOOL_MQ_JOINT_STEREO_44100)),
+ UTIL_IOV_INIT(0x21, 0x15, 2,
+ SBC_BITPOOL_MQ_JOINT_STEREO_44100)),
SBC_PRESET("MQ_STEREO_48",
- CODEC_DATA(0x11, 0x15, 2, SBC_BITPOOL_MQ_JOINT_STEREO_48000)),
+ UTIL_IOV_INIT(0x11, 0x15, 2,
+ SBC_BITPOOL_MQ_JOINT_STEREO_48000)),
SBC_PRESET("HQ_MONO_44_1",
- CODEC_DATA(0x28, 0x15, 2, SBC_BITPOOL_HQ_MONO_44100)),
+ UTIL_IOV_INIT(0x28, 0x15, 2, SBC_BITPOOL_HQ_MONO_44100)),
SBC_PRESET("HQ_MONO_48",
- CODEC_DATA(0x18, 0x15, 2, SBC_BITPOOL_HQ_MONO_48000)),
+ UTIL_IOV_INIT(0x18, 0x15, 2, SBC_BITPOOL_HQ_MONO_48000)),
SBC_PRESET("HQ_STEREO_44_1",
- CODEC_DATA(0x21, 0x15, 2, SBC_BITPOOL_HQ_JOINT_STEREO_44100)),
+ UTIL_IOV_INIT(0x21, 0x15, 2,
+ SBC_BITPOOL_HQ_JOINT_STEREO_44100)),
SBC_PRESET("HQ_STEREO_48",
- CODEC_DATA(0x11, 0x15, 2, SBC_BITPOOL_HQ_JOINT_STEREO_48000)),
+ UTIL_IOV_INIT(0x11, 0x15, 2,
+ SBC_BITPOOL_HQ_JOINT_STEREO_48000)),
/* Higher bitrates not recommended by A2DP spec, it dual channel to
* avoid going above 53 bitpool:
*
* https://habr.com/en/post/456476/
* https://gitlab.freedesktop.org/pulseaudio/pulseaudio/-/issues/1092
*/
- SBC_PRESET("XQ_DUAL_44_1", CODEC_DATA(0x24, 0x15, 2, 43)),
- SBC_PRESET("XQ_DUAL_48", CODEC_DATA(0x14, 0x15, 2, 39)),
+ SBC_PRESET("XQ_DUAL_44_1", UTIL_IOV_INIT(0x24, 0x15, 2, 43)),
+ SBC_PRESET("XQ_DUAL_48", UTIL_IOV_INIT(0x14, 0x15, 2, 39)),
/* Ultra high bitpool that fits in 512 kbps mandatory bitrate */
- SBC_PRESET("UQ_STEREO_44_1", CODEC_DATA(0x21, 0x15, 2, 64)),
- SBC_PRESET("UQ_STEREO_48", CODEC_DATA(0x11, 0x15, 2, 58)),
+ SBC_PRESET("UQ_STEREO_44_1", UTIL_IOV_INIT(0x21, 0x15, 2, 64)),
+ SBC_PRESET("UQ_STEREO_48", UTIL_IOV_INIT(0x11, 0x15, 2, 58)),
};
#define QOS_CONFIG(_interval, _framing, _phy, _sdu, _rtn, _latency, _delay) \
@@ -1328,16 +1328,16 @@ static struct codec_preset sbc_presets[] = {
QOS_FRAMED_2M(10000u, _sdu, _rtn, _latency, _delay)
#define LC3_PRESET_DATA(_freq, _duration, _len) \
- CODEC_DATA(0x02, LC3_CONFIG_FREQ, _freq, \
- 0x02, LC3_CONFIG_DURATION, _duration, \
- 0x03, LC3_CONFIG_FRAME_LEN, _len, _len >> 8)
+ UTIL_IOV_INIT(0x02, LC3_CONFIG_FREQ, _freq, \
+ 0x02, LC3_CONFIG_DURATION, _duration, \
+ 0x03, LC3_CONFIG_FRAME_LEN, _len, _len >> 8)
#define LC3_PRESET_DATA_ALL(_freq, _duration, _alloc, _len) \
- CODEC_DATA(0x02, LC3_CONFIG_FREQ, _freq, \
- 0x02, LC3_CONFIG_DURATION, _duration, \
- 0x05, LC3_CONFIG_CHAN_ALLOC, _alloc, _alloc >> 8, \
- _alloc >> 16, _alloc >> 24, \
- 0x03, LC3_CONFIG_FRAME_LEN, _len, _len >> 8)
+ UTIL_IOV_INIT(0x02, LC3_CONFIG_FREQ, _freq, \
+ 0x02, LC3_CONFIG_DURATION, _duration, \
+ 0x05, LC3_CONFIG_CHAN_ALLOC, _alloc, _alloc >> 8, \
+ _alloc >> 16, _alloc >> 24, \
+ 0x03, LC3_CONFIG_FRAME_LEN, _len, _len >> 8)
#define LC3_PRESET_8KHZ(_duration, _len) \
LC3_PRESET_DATA(LC3_CONFIG_FREQ_8KHZ, _duration, _len)
--
2.43.0
^ permalink raw reply related [flat|nested] 6+ messages in thread* [PATCH BlueZ v1 3/4] client/player: Use util_iov_dup/util_iov_free whenever possible
2024-01-29 21:20 [PATCH BlueZ v1 1/4] util: Add UTIL_IOV_INIT Luiz Augusto von Dentz
2024-01-29 21:20 ` [PATCH BlueZ v1 2/4] client/player: Add metadata support to struct capabilities Luiz Augusto von Dentz
@ 2024-01-29 21:20 ` Luiz Augusto von Dentz
2024-01-29 21:20 ` [PATCH BlueZ v1 4/4] client/player: Add .name field to struct capabilities Luiz Augusto von Dentz
` (2 subsequent siblings)
4 siblings, 0 replies; 6+ messages in thread
From: Luiz Augusto von Dentz @ 2024-01-29 21:20 UTC (permalink / raw)
To: linux-bluetooth
From: Luiz Augusto von Dentz <luiz.von.dentz@intel.com>
This uses util_iov_dup/util_iov_free whenever possible.
---
client/player.c | 73 ++++++++++++++++++++++---------------------------
1 file changed, 32 insertions(+), 41 deletions(-)
diff --git a/client/player.c b/client/player.c
index f6b2278d5a8f..b37ed20d7275 100644
--- a/client/player.c
+++ b/client/player.c
@@ -2166,7 +2166,7 @@ static DBusMessage *endpoint_select_properties_reply(struct endpoint *ep,
cfg->ep = ep;
/* Copy capabilities */
- iov_append(&cfg->caps, preset->data.iov_base, preset->data.iov_len);
+ cfg->caps = util_iov_dup(&preset->data, 1);
cfg->target_latency = preset->target_latency;
dbus_message_iter_init(msg, &iter);
@@ -2182,8 +2182,7 @@ static DBusMessage *endpoint_select_properties_reply(struct endpoint *ep,
}
/* Copy metadata */
- if (ep->meta)
- iov_append(&cfg->meta, ep->meta->iov_base, ep->meta->iov_len);
+ cfg->meta = util_iov_dup(ep->meta, 1);
if (preset->qos.phy) {
/* Set QoS parameters */
@@ -2887,17 +2886,8 @@ static void endpoint_free(void *data)
{
struct endpoint *ep = data;
- if (ep->caps) {
- if (ep->caps->iov_base)
- g_free(ep->caps->iov_base);
- g_free(ep->caps);
- }
-
- if (ep->meta) {
- if (ep->meta->iov_base)
- g_free(ep->meta->iov_base);
- g_free(ep->meta);
- }
+ util_iov_free(ep->caps, 1);
+ util_iov_free(ep->meta, 1);
if (ep->msg)
dbus_message_unref(ep->msg);
@@ -3380,20 +3370,18 @@ static void endpoint_auto_accept(const char *input, void *user_data)
static void endpoint_set_metadata(const char *input, void *user_data)
{
struct endpoint *ep = user_data;
+ struct iovec iov;
if (!strcasecmp(input, "n") || !strcasecmp(input, "no")) {
- free(ep->meta->iov_base);
+ util_iov_free(ep->meta, 1);
ep->meta = NULL;
goto done;
}
- if (!ep->meta)
- ep->meta = g_new0(struct iovec, 1);
-
- ep->meta->iov_base = str2bytearray((char *) input, &ep->meta->iov_len);
- if (!ep->meta->iov_base) {
- free(ep->meta);
- ep->meta = NULL;
+ iov.iov_base = str2bytearray((char *) input, &iov.iov_len);
+ if (iov.iov_base) {
+ util_iov_free(ep->meta, 1);
+ ep->meta = util_iov_dup(&iov, 1);
}
done:
@@ -3404,22 +3392,21 @@ done:
static void endpoint_set_capabilities(const char *input, void *user_data)
{
struct endpoint *ep = user_data;
+ struct iovec iov;
- if (ep->caps && ep->caps->iov_base) {
- g_free(ep->caps->iov_base);
- ep->caps = g_new0(struct iovec, 1);
- } else
- ep->caps = g_new0(struct iovec, 1);
-
- ep->caps->iov_base = str2bytearray((char *) input, &ep->caps->iov_len);
-
- if (ep->caps->iov_len == 0x01 &&
- (*(uint8_t *)(ep->caps->iov_base)) == 0x00) {
- g_free(ep->caps->iov_base);
- ep->caps->iov_base = NULL;
- ep->caps->iov_len = 0x00;
+ if (!strcasecmp(input, "n") || !strcasecmp(input, "no")) {
+ util_iov_free(ep->caps, 1);
+ ep->caps = NULL;
+ goto done;
}
+ iov.iov_base = str2bytearray((char *) input, &iov.iov_len);
+ if (iov.iov_base) {
+ util_iov_free(ep->caps, 1);
+ ep->caps = util_iov_dup(&iov, 1);
+ }
+
+done:
bt_shell_prompt_input(ep->path, "Enter Metadata (value/no):",
endpoint_set_metadata, ep);
}
@@ -3495,12 +3482,13 @@ static void cmd_register_endpoint(int argc, char *argv[])
cap = find_capabilities(ep->uuid, ep->codec);
if (cap) {
- if (ep->caps)
- ep->caps->iov_len = 0;
-
/* Copy capabilities */
- iov_append(&ep->caps, cap->data.iov_base,
- cap->data.iov_len);
+ util_iov_free(ep->caps, 1);
+ ep->caps = util_iov_dup(&cap->data, 1);
+
+ /* Copy metadata */
+ util_iov_free(ep->meta, 1);
+ ep->meta = util_iov_dup(&cap->meta, 1);
bt_shell_prompt_input(ep->path, "Auto Accept (yes/no):",
endpoint_auto_accept, ep);
@@ -4129,7 +4117,10 @@ static struct endpoint *endpoint_new(const struct capabilities *cap)
ep->path = g_strdup_printf("%s/ep%u", BLUEZ_MEDIA_ENDPOINT_PATH,
g_list_length(local_endpoints));
/* Copy capabilities */
- iov_append(&ep->caps, cap->data.iov_base, cap->data.iov_len);
+ ep->caps = util_iov_dup(&cap->data, 1);
+ /* Copy metadata */
+ ep->meta = util_iov_dup(&cap->meta, 1);
+
local_endpoints = g_list_append(local_endpoints, ep);
return ep;
--
2.43.0
^ permalink raw reply related [flat|nested] 6+ messages in thread* [PATCH BlueZ v1 4/4] client/player: Add .name field to struct capabilities
2024-01-29 21:20 [PATCH BlueZ v1 1/4] util: Add UTIL_IOV_INIT Luiz Augusto von Dentz
2024-01-29 21:20 ` [PATCH BlueZ v1 2/4] client/player: Add metadata support to struct capabilities Luiz Augusto von Dentz
2024-01-29 21:20 ` [PATCH BlueZ v1 3/4] client/player: Use util_iov_dup/util_iov_free whenever possible Luiz Augusto von Dentz
@ 2024-01-29 21:20 ` Luiz Augusto von Dentz
2024-01-29 23:04 ` [BlueZ,v1,1/4] util: Add UTIL_IOV_INIT bluez.test.bot
2024-01-30 18:40 ` [PATCH BlueZ v1 1/4] " patchwork-bot+bluetooth
4 siblings, 0 replies; 6+ messages in thread
From: Luiz Augusto von Dentz @ 2024-01-29 21:20 UTC (permalink / raw)
To: linux-bluetooth
From: Luiz Augusto von Dentz <luiz.von.dentz@intel.com>
This adds .name field to struct capabilities which is then used to form
the endpoint object path so it is easier to identify the endpoint
capabilities:
[bluetooth]# endpoint.list local
/local/endpoint/pac_snk/lc3
/local/endpoint/pac_src/lc3
/local/endpoint/bcaa/lc3
---
client/player.c | 54 ++++++++++++++++++++++++++-----------------------
1 file changed, 29 insertions(+), 25 deletions(-)
diff --git a/client/player.c b/client/player.c
index b37ed20d7275..b961c0ba223d 100644
--- a/client/player.c
+++ b/client/player.c
@@ -1130,11 +1130,13 @@ static DBusMessage *endpoint_set_configuration(DBusConnection *conn,
return NULL;
}
-#define CODEC_CAPABILITIES(_uuid, _codec_id, _data, _meta) \
+#define CODEC_CAPABILITIES(_name, _uuid, _codec_id, _data, _meta) \
{ \
+ .name = _name, \
.uuid = _uuid, \
.codec_id = _codec_id, \
.data = _data, \
+ .meta = _meta, \
}
#define LC3_DATA(_freq, _duration, _chan_count, _len_min, _len_max) \
@@ -1145,6 +1147,7 @@ static DBusMessage *endpoint_set_configuration(DBusConnection *conn,
_len_max, _len_max >> 8)
static const struct capabilities {
+ const char *name;
const char *uuid;
uint8_t codec_id;
struct iovec data;
@@ -1158,9 +1161,10 @@ static const struct capabilities {
* Blocks: 4 8 12 16
* Bitpool Range: 2-64
*/
- CODEC_CAPABILITIES(A2DP_SOURCE_UUID, A2DP_CODEC_SBC,
- UTIL_IOV_INIT(0xff, 0xff, 2, 64),
- UTIL_IOV_INIT()),
+ CODEC_CAPABILITIES("a2dp_src/sbc", A2DP_SOURCE_UUID, A2DP_CODEC_SBC,
+ UTIL_IOV_INIT(0xff, 0xff, 2, 64),
+ UTIL_IOV_INIT()),
+
/* A2DP SBC Sink:
*
* Channel Modes: Mono DualChannel Stereo JointStereo
@@ -1169,9 +1173,9 @@ static const struct capabilities {
* Blocks: 4 8 12 16
* Bitpool Range: 2-64
*/
- CODEC_CAPABILITIES(A2DP_SINK_UUID, A2DP_CODEC_SBC,
- UTIL_IOV_INIT(0xff, 0xff, 2, 64),
- UTIL_IOV_INIT()),
+ CODEC_CAPABILITIES("a2dp_snk/sbc", A2DP_SINK_UUID, A2DP_CODEC_SBC,
+ UTIL_IOV_INIT(0xff, 0xff, 2, 64),
+ UTIL_IOV_INIT()),
/* PAC LC3 Sink:
*
@@ -1180,10 +1184,10 @@ static const struct capabilities {
* Channel count: 3
* Frame length: 30-240
*/
- CODEC_CAPABILITIES(PAC_SINK_UUID, LC3_ID,
- LC3_DATA(LC3_FREQ_ANY, LC3_DURATION_ANY,
- 3u, 30, 240),
- UTIL_IOV_INIT()),
+ CODEC_CAPABILITIES("pac_snk/lc3", PAC_SINK_UUID, LC3_ID,
+ LC3_DATA(LC3_FREQ_ANY, LC3_DURATION_ANY, 3u, 30,
+ 240),
+ UTIL_IOV_INIT()),
/* PAC LC3 Source:
*
@@ -1192,10 +1196,10 @@ static const struct capabilities {
* Channel count: 3
* Frame length: 30-240
*/
- CODEC_CAPABILITIES(PAC_SOURCE_UUID, LC3_ID,
- LC3_DATA(LC3_FREQ_ANY, LC3_DURATION_ANY,
- 3u, 30, 240),
- UTIL_IOV_INIT()),
+ CODEC_CAPABILITIES("pac_src/lc3", PAC_SOURCE_UUID, LC3_ID,
+ LC3_DATA(LC3_FREQ_ANY, LC3_DURATION_ANY, 3u, 30,
+ 240),
+ UTIL_IOV_INIT()),
/* Broadcast LC3 Source:
*
@@ -1204,10 +1208,10 @@ static const struct capabilities {
* Channel count: 3
* Frame length: 30-240
*/
- CODEC_CAPABILITIES(BCAA_SERVICE_UUID, LC3_ID,
- LC3_DATA(LC3_FREQ_ANY, LC3_DURATION_ANY,
- 3u, 30, 240),
- UTIL_IOV_INIT()),
+ CODEC_CAPABILITIES("bcaa/lc3", BCAA_SERVICE_UUID, LC3_ID,
+ LC3_DATA(LC3_FREQ_ANY, LC3_DURATION_ANY, 3u, 30,
+ 240),
+ UTIL_IOV_INIT()),
/* Broadcast LC3 Sink:
*
@@ -1216,10 +1220,10 @@ static const struct capabilities {
* Channel count: 3
* Frame length: 30-240
*/
- CODEC_CAPABILITIES(BAA_SERVICE_UUID, LC3_ID,
- LC3_DATA(LC3_FREQ_ANY, LC3_DURATION_ANY,
- 3u, 30, 240),
- UTIL_IOV_INIT()),
+ CODEC_CAPABILITIES("baa/lc3", BAA_SERVICE_UUID, LC3_ID,
+ LC3_DATA(LC3_FREQ_ANY, LC3_DURATION_ANY, 3u, 30,
+ 240),
+ UTIL_IOV_INIT()),
};
struct codec_qos {
@@ -4114,8 +4118,8 @@ static struct endpoint *endpoint_new(const struct capabilities *cap)
ep = new0(struct endpoint, 1);
ep->uuid = g_strdup(cap->uuid);
ep->codec = cap->codec_id;
- ep->path = g_strdup_printf("%s/ep%u", BLUEZ_MEDIA_ENDPOINT_PATH,
- g_list_length(local_endpoints));
+ ep->path = g_strdup_printf("%s/%s", BLUEZ_MEDIA_ENDPOINT_PATH,
+ cap->name);
/* Copy capabilities */
ep->caps = util_iov_dup(&cap->data, 1);
/* Copy metadata */
--
2.43.0
^ permalink raw reply related [flat|nested] 6+ messages in thread