Add a mechanism to configure the default A2DP codec priorities
Previously, the relative codec priorities were hard-codec internally.
The new mechanism uses the following configurable resources in
packages/apps/Bluetooth/res/values/config.xml to re-assign the
default codec priorities per device, or to explicitly disable a codec.
- a2dp_source_codec_priority_sbc
- a2dp_source_codec_priority_aac
- a2dp_source_codec_priority_aptx
- a2dp_source_codec_priority_aptx_hd
- a2dp_source_codec_priority_ldac
Those values are assigned on startup.
Also, they can be changed per device by using an overlay:
device/<VENDOR>/<DEVICE>/overlay/packages/apps/Bluetooth/res/values/config.xml
Test: Manually streaming to a headset
Change-Id: I432174975d7afbecb8f27cb0e55f5aa816c6e64e
diff --git a/include/hardware/bt_av.h b/include/hardware/bt_av.h
index 66a8643..91ae2ac 100644
--- a/include/hardware/bt_av.h
+++ b/include/hardware/bt_av.h
@@ -69,7 +69,15 @@
} btav_a2dp_codec_index_t;
typedef enum {
+ // Disable the codec.
+ // NOTE: This value can be used only during initialization when
+ // function btav_source_interface_t::init() is called.
+ BTAV_A2DP_CODEC_PRIORITY_DISABLED = -1,
+
+ // Reset the codec priority to its default value.
BTAV_A2DP_CODEC_PRIORITY_DEFAULT = 0,
+
+ // Highest codec priority.
BTAV_A2DP_CODEC_PRIORITY_HIGHEST = 1000 * 1000
} btav_a2dp_codec_priority_t;
@@ -156,7 +164,7 @@
btav_audio_source_config_callback audio_config_cb;
} btav_source_callbacks_t;
-/** BT-AV A2DP Source callback structure. */
+/** BT-AV A2DP Sink callback structure. */
typedef struct {
/** set to sizeof(btav_sink_callbacks_t) */
size_t size;
@@ -183,9 +191,10 @@
/** set to sizeof(btav_source_interface_t) */
size_t size;
/**
- * Register the BtAv callbacks
+ * Register the BtAv callbacks.
*/
- bt_status_t (*init)( btav_source_callbacks_t* callbacks );
+ bt_status_t (*init)(btav_source_callbacks_t* callbacks,
+ std::vector<btav_a2dp_codec_config_t> codec_priorities);
/** connect to headset */
bt_status_t (*connect)( bt_bdaddr_t *bd_addr );