commit | f9cc2e98e0f33bc0a60fa678c71e7d429711522a | [log] [tgz] |
---|---|---|
author | ValdikSS <iam@valdikss.org.ru> | Mon Sep 17 18:48:42 2018 +0300 |
committer | rohan <purohit.rohan@gmail.com> | Sat Jul 18 01:21:08 2020 -0400 |
tree | 0fdb15f8c67888852c0d36e83d5123fc6b83eb1f | |
parent | 170b53bc47a45f044a7c9100e82b4948c9724a2f [diff] |
Explicit SBC Dual Channel (SBC HD) support Overwhelming majority of Bluetooth audio devices have SBC maximum bitpool value limited to 53, which prevents bitrates higher than 328 kbit/s to be used with the most common 44.1 kHz Joint Stereo, 8 subbands, 16 blocks profile. This limitation could be circumvented on any existing device to achieve higher audio quality, by using Dual Channel mode. Dual Channel encodes channels separately, using the entire bitpool for each channel. Forcing the device to use Dual Channel instead of Joint Stereo almost doubles maximum possible bitrate for the same bitpool value. A2DP specification v1.2, which was active from 2007 to 2015, requires all decoders to work correctly with bitrates up to 512 kbps. Newer specification does not have the limit at all. It is assumed that most modern headphones with EDR support can handle any SBC profile with maximum bitpool value, regardless of resulting bitrate. This commit defines optimal Dual Channel bitrate profiles: EDR 2mbit/s - 452 kbit/s for 44.1 kHz, 492 kbit/s for 48 kHz (bitpool 38, 4 audio frames, 10.7 ms, 6 wasted bytes per packet) EDR 3mbit/s - 551.3 kbit/s for 44.1 kHz, 600 kbit/s for 48 kHz (bitpool 47, 5 audio frames, 13.4 ms, 4 wasted bytes per packet) With 452 kbit/s, SBC outperforms aptX, with 551.3 kbit/s, on par or close to aptX HD. 53 out of 57 tested headphones, receivers and automotive head units were able to correctly receive and decode high bitrate Dual Channel audio. SBC HD is disabled by default and could be activated in Bluetooth device menu, per device. Change-Id: Ic002851882900476019d70a9e3cb0c0bab3de290
Just build AOSP - Fluoride is there by default.
Instructions for Ubuntu, tested on 14.04 with Clang 3.5.0 and 16.10 with Clang 3.8.0
mkdir ~/fluoride cd ~/fluoride git clone https://android.googlesource.com/platform/system/bt
Install dependencies (require sudo access):
cd ~/fluoride/bt build/install_deps.sh
Then fetch third party dependencies:
cd ~/fluoride/bt mkdir third_party cd third_party git clone https://github.com/google/googletest.git git clone https://android.googlesource.com/platform/external/aac git clone https://android.googlesource.com/platform/external/libchrome git clone https://android.googlesource.com/platform/external/libldac git clone https://android.googlesource.com/platform/external/modp_b64 git clone https://android.googlesource.com/platform/external/tinyxml2
And third party dependencies of third party dependencies:
cd fluoride/bt/third_party/libchrome/base/third_party mkdir valgrind cd valgrind curl https://chromium.googlesource.com/chromium/src/base/+/master/third_party/valgrind/valgrind.h?format=TEXT | base64 -d > valgrind.h curl https://chromium.googlesource.com/chromium/src/base/+/master/third_party/valgrind/memcheck.h?format=TEXT | base64 -d > memcheck.h
NOTE: If system/bt is checked out under AOSP, then create symbolic links instead of downloading sources
cd system/bt mkdir third_party cd third_party ln -s ../../../external/aac aac ln -s ../../../external/libchrome libchrome ln -s ../../../external/libldac libldac ln -s ../../../external/modp_b64 modp_b64 ln -s ../../../external/tinyxml2 tinyxml2 ln -s ../../../external/googletest googletest
cd ~/fluoride/bt gn gen out/Default
cd ~/fluoride/bt ninja -C out/Default all
This will build all targets (the shared library, executables, tests, etc) and put them in out/Default. To build an individual target, replace "all" with the target of your choice, e.g. ninja -C out/Default net_test_osi
.
cd ~/fluoride/bt/out/Default LD_LIBRARY_PATH=./ ./bluetoothtbd -create-ipc-socket=fluoride
Follows the Chromium project Eclipse Setup Instructions until "Optional: Building inside Eclipse" section (don't do that section, we will set it up differently)
Generate Eclipse settings:
cd system/bt gn gen --ide=eclipse out/Default
In Eclipse, do File->Import->C/C++->C/C++ Project Settings, choose the XML location under system/bt/out/Default
Right click on the project. Go to Preferences->C/C++ Build->Builder Settings. Uncheck "Use default build command", but instead using "ninja -C out/Default"
Goto Behaviour tab, change clean command to "-t clean"