summaryrefslogtreecommitdiff
path: root/android/a2dp.c
diff options
context:
space:
mode:
authorAndrzej Kaczmarek <andrzej.kaczmarek@tieto.com>2014-05-26 15:16:49 +0200
committerLuiz Augusto von Dentz <luiz.von.dentz@intel.com>2014-05-30 14:54:57 +0300
commit2cc2e7d131b5829955c6bde38cd2252d747c3f1f (patch)
treef856edfc1c1b09dc19266ab14ff5d6e18e4cfe6d /android/a2dp.c
parent171aac2ead554510b24c67bf5c42b4f14c6f0c09 (diff)
downloadbluez-2cc2e7d131b5829955c6bde38cd2252d747c3f1f.tar.gz
android/a2dp: Add support to check aptX capabilities
Diffstat (limited to 'android/a2dp.c')
-rw-r--r--android/a2dp.c37
1 files changed, 37 insertions, 0 deletions
diff --git a/android/a2dp.c b/android/a2dp.c
index 58c949bc6..3ba743407 100644
--- a/android/a2dp.c
+++ b/android/a2dp.c
@@ -371,10 +371,40 @@ static int aac_check_config(void *caps, uint8_t caps_len, void *conf,
return 0;
}
+static int aptx_check_config(void *caps, uint8_t caps_len, void *conf,
+ uint8_t conf_len)
+{
+ a2dp_aptx_t *cap, *config;
+
+ if (conf_len != caps_len || conf_len != sizeof(a2dp_aptx_t)) {
+ error("APTX: Invalid configuration size (%u)", conf_len);
+ return -EINVAL;
+ }
+
+ cap = caps;
+ config = conf;
+
+ if (!(cap->frequency & config->frequency)) {
+ error("APTX: Unsupported frequenct (%u) by endpoint",
+ config->frequency);
+ return -EINVAL;
+ }
+
+ if (!(cap->channel_mode & config->channel_mode)) {
+ error("APTX: Unsupported channel mode (%u) by endpoint",
+ config->channel_mode);
+ return -EINVAL;
+ }
+
+ return 0;
+}
+
static int check_capabilities(struct a2dp_preset *preset,
struct avdtp_media_codec_capability *codec,
uint8_t codec_len)
{
+ a2dp_vendor_codec_t *vndcodec;
+
/* Codec specific */
switch (codec->media_codec_type) {
case A2DP_CODEC_SBC:
@@ -383,6 +413,13 @@ static int check_capabilities(struct a2dp_preset *preset,
case A2DP_CODEC_MPEG24:
return aac_check_config(codec->data, codec_len, preset->data,
preset->len);
+ case A2DP_CODEC_VENDOR:
+ vndcodec = (void *) codec->data;
+ if (btohl(vndcodec->vendor_id) == APTX_VENDOR_ID &&
+ btohs(vndcodec->codec_id) == APTX_CODEC_ID)
+ return aptx_check_config(codec->data, codec_len,
+ preset->data, preset->len);
+ return -EINVAL;
default:
return -EINVAL;
}