diff options
author | Andrzej Kaczmarek <andrzej.kaczmarek@tieto.com> | 2014-05-26 15:16:49 +0200 |
---|---|---|
committer | Luiz Augusto von Dentz <luiz.von.dentz@intel.com> | 2014-05-30 14:54:57 +0300 |
commit | 2cc2e7d131b5829955c6bde38cd2252d747c3f1f (patch) | |
tree | f856edfc1c1b09dc19266ab14ff5d6e18e4cfe6d /android/a2dp.c | |
parent | 171aac2ead554510b24c67bf5c42b4f14c6f0c09 (diff) | |
download | bluez-2cc2e7d131b5829955c6bde38cd2252d747c3f1f.tar.gz |
android/a2dp: Add support to check aptX capabilities
Diffstat (limited to 'android/a2dp.c')
-rw-r--r-- | android/a2dp.c | 37 |
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; } |