mirror of
https://github.com/bluekitchen/btstack.git
synced 2025-02-27 03:39:56 +00:00
avdtp: allow to set preferred sampling frequency for outgoing sbc streams
This commit is contained in:
parent
45dc8c25f9
commit
8e7044f9a8
@ -1029,6 +1029,10 @@ uint8_t avdtp_reconfigure(uint16_t avdtp_cid, uint8_t local_seid, uint8_t remote
|
|||||||
return avdtp_request_can_send_now_initiator(connection, connection->l2cap_signaling_cid);
|
return avdtp_request_can_send_now_initiator(connection, connection->l2cap_signaling_cid);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void avdtp_set_preferred_sampling_frequeny(avdtp_stream_endpoint_t * stream_endpoint, uint32_t sampling_frequency){
|
||||||
|
stream_endpoint->preferred_sampling_frequency = sampling_frequency;
|
||||||
|
}
|
||||||
|
|
||||||
uint8_t avdtp_choose_sbc_channel_mode(avdtp_stream_endpoint_t * stream_endpoint, uint8_t remote_channel_mode_bitmap){
|
uint8_t avdtp_choose_sbc_channel_mode(avdtp_stream_endpoint_t * stream_endpoint, uint8_t remote_channel_mode_bitmap){
|
||||||
uint8_t * media_codec = stream_endpoint->sep.capabilities.media_codec.media_codec_information;
|
uint8_t * media_codec = stream_endpoint->sep.capabilities.media_codec.media_codec_information;
|
||||||
uint8_t channel_mode_bitmap = (media_codec[0] & 0x0F) & remote_channel_mode_bitmap;
|
uint8_t channel_mode_bitmap = (media_codec[0] & 0x0F) & remote_channel_mode_bitmap;
|
||||||
@ -1098,16 +1102,27 @@ uint8_t avdtp_choose_sbc_block_length(avdtp_stream_endpoint_t * stream_endpoint,
|
|||||||
uint8_t avdtp_choose_sbc_sampling_frequency(avdtp_stream_endpoint_t * stream_endpoint, uint8_t remote_sampling_frequency_bitmap){
|
uint8_t avdtp_choose_sbc_sampling_frequency(avdtp_stream_endpoint_t * stream_endpoint, uint8_t remote_sampling_frequency_bitmap){
|
||||||
if (!stream_endpoint) return 0;
|
if (!stream_endpoint) return 0;
|
||||||
uint8_t * media_codec = stream_endpoint->sep.capabilities.media_codec.media_codec_information;
|
uint8_t * media_codec = stream_endpoint->sep.capabilities.media_codec.media_codec_information;
|
||||||
uint8_t sampling_frequency_bitmap = (media_codec[0] >> 4) & remote_sampling_frequency_bitmap;
|
uint8_t supported_sampling_frequency_bitmap = (media_codec[0] >> 4) & remote_sampling_frequency_bitmap;
|
||||||
|
uint8_t sampling_frequency = AVDTP_SBC_44100; // some default
|
||||||
|
|
||||||
uint8_t sampling_frequency = AVDTP_SBC_44100;
|
// use preferred sampling frequency if possible
|
||||||
if (sampling_frequency_bitmap & AVDTP_SBC_48000){
|
if ((stream_endpoint->preferred_sampling_frequency == 48000) && (supported_sampling_frequency_bitmap & AVDTP_SBC_48000)){
|
||||||
sampling_frequency = AVDTP_SBC_48000;
|
sampling_frequency = AVDTP_SBC_48000;
|
||||||
} else if (sampling_frequency_bitmap & AVDTP_SBC_44100){
|
} else if ((stream_endpoint->preferred_sampling_frequency == 44100) && (supported_sampling_frequency_bitmap & AVDTP_SBC_44100)){
|
||||||
sampling_frequency = AVDTP_SBC_44100;
|
sampling_frequency = AVDTP_SBC_44100;
|
||||||
} else if (sampling_frequency_bitmap & AVDTP_SBC_32000){
|
} else if ((stream_endpoint->preferred_sampling_frequency == 32000) && (supported_sampling_frequency_bitmap & AVDTP_SBC_32000)){
|
||||||
sampling_frequency = AVDTP_SBC_32000;
|
sampling_frequency = AVDTP_SBC_32000;
|
||||||
} else if (sampling_frequency_bitmap & AVDTP_SBC_16000){
|
} else if ((stream_endpoint->preferred_sampling_frequency == 16000) && (supported_sampling_frequency_bitmap & AVDTP_SBC_16000)){
|
||||||
|
sampling_frequency = AVDTP_SBC_16000;
|
||||||
|
}
|
||||||
|
// otherwise, use highest available
|
||||||
|
else if (supported_sampling_frequency_bitmap & AVDTP_SBC_48000){
|
||||||
|
sampling_frequency = AVDTP_SBC_48000;
|
||||||
|
} else if (supported_sampling_frequency_bitmap & AVDTP_SBC_44100){
|
||||||
|
sampling_frequency = AVDTP_SBC_44100;
|
||||||
|
} else if (supported_sampling_frequency_bitmap & AVDTP_SBC_32000){
|
||||||
|
sampling_frequency = AVDTP_SBC_32000;
|
||||||
|
} else if (supported_sampling_frequency_bitmap & AVDTP_SBC_16000){
|
||||||
sampling_frequency = AVDTP_SBC_16000;
|
sampling_frequency = AVDTP_SBC_16000;
|
||||||
}
|
}
|
||||||
return sampling_frequency;
|
return sampling_frequency;
|
||||||
|
@ -477,6 +477,9 @@ typedef struct avdtp_stream_endpoint {
|
|||||||
avdtp_media_type_t media_type;
|
avdtp_media_type_t media_type;
|
||||||
uint8_t media_codec_sbc_info[4];
|
uint8_t media_codec_sbc_info[4];
|
||||||
|
|
||||||
|
// preferred sampling frequency
|
||||||
|
uint32_t preferred_sampling_frequency;
|
||||||
|
|
||||||
// register request for media L2cap connection release
|
// register request for media L2cap connection release
|
||||||
uint8_t media_disconnect;
|
uint8_t media_disconnect;
|
||||||
uint8_t media_connect;
|
uint8_t media_connect;
|
||||||
@ -561,15 +564,21 @@ uint8_t avdtp_get_configuration(uint16_t avdtp_cid, uint8_t remote_seid, avdtp_c
|
|||||||
uint8_t avdtp_set_configuration(uint16_t avdtp_cid, uint8_t local_seid, uint8_t remote_seid, uint16_t configured_services_bitmap, avdtp_capabilities_t configuration, avdtp_context_t * context);
|
uint8_t avdtp_set_configuration(uint16_t avdtp_cid, uint8_t local_seid, uint8_t remote_seid, uint16_t configured_services_bitmap, avdtp_capabilities_t configuration, avdtp_context_t * context);
|
||||||
uint8_t avdtp_reconfigure(uint16_t avdtp_cid, uint8_t local_seid, uint8_t remote_seid, uint16_t configured_services_bitmap, avdtp_capabilities_t configuration, avdtp_context_t * context);
|
uint8_t avdtp_reconfigure(uint16_t avdtp_cid, uint8_t local_seid, uint8_t remote_seid, uint16_t configured_services_bitmap, avdtp_capabilities_t configuration, avdtp_context_t * context);
|
||||||
|
|
||||||
|
// frequency will be used by avdtp_choose_sbc_sampling_frequency if supported by both endpoints
|
||||||
|
void avdtp_set_preferred_sampling_frequeny(avdtp_stream_endpoint_t * stream_endpoint, uint32_t sampling_frequency);
|
||||||
|
//
|
||||||
|
void avdtp_set_preferred_sbc_channel_mode(avdtp_stream_endpoint_t * stream_endpoint, uint32_t sampling_frequency);
|
||||||
|
|
||||||
uint8_t avdtp_choose_sbc_channel_mode(avdtp_stream_endpoint_t * stream_endpoint, uint8_t remote_channel_mode_bitmap);
|
uint8_t avdtp_choose_sbc_channel_mode(avdtp_stream_endpoint_t * stream_endpoint, uint8_t remote_channel_mode_bitmap);
|
||||||
uint8_t avdtp_choose_sbc_allocation_method(avdtp_stream_endpoint_t * stream_endpoint, uint8_t remote_allocation_method_bitmap);
|
uint8_t avdtp_choose_sbc_allocation_method(avdtp_stream_endpoint_t * stream_endpoint, uint8_t remote_allocation_method_bitmap);
|
||||||
|
uint8_t avdtp_choose_sbc_sampling_frequency(avdtp_stream_endpoint_t * stream_endpoint, uint8_t remote_sampling_frequency_bitmap);
|
||||||
uint8_t avdtp_choose_sbc_subbands(avdtp_stream_endpoint_t * stream_endpoint, uint8_t remote_subbands_bitmap);
|
uint8_t avdtp_choose_sbc_subbands(avdtp_stream_endpoint_t * stream_endpoint, uint8_t remote_subbands_bitmap);
|
||||||
uint8_t avdtp_choose_sbc_block_length(avdtp_stream_endpoint_t * stream_endpoint, uint8_t remote_block_length_bitmap);
|
uint8_t avdtp_choose_sbc_block_length(avdtp_stream_endpoint_t * stream_endpoint, uint8_t remote_block_length_bitmap);
|
||||||
uint8_t avdtp_choose_sbc_sampling_frequency(avdtp_stream_endpoint_t * stream_endpoint, uint8_t remote_sampling_frequency_bitmap);
|
|
||||||
uint8_t avdtp_choose_sbc_max_bitpool_value(avdtp_stream_endpoint_t * stream_endpoint, uint8_t remote_max_bitpool_value);
|
uint8_t avdtp_choose_sbc_max_bitpool_value(avdtp_stream_endpoint_t * stream_endpoint, uint8_t remote_max_bitpool_value);
|
||||||
uint8_t avdtp_choose_sbc_min_bitpool_value(avdtp_stream_endpoint_t * stream_endpoint, uint8_t remote_min_bitpool_value);
|
uint8_t avdtp_choose_sbc_min_bitpool_value(avdtp_stream_endpoint_t * stream_endpoint, uint8_t remote_min_bitpool_value);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
uint8_t avdtp_stream_endpoint_seid(avdtp_stream_endpoint_t * stream_endpoint);
|
uint8_t avdtp_stream_endpoint_seid(avdtp_stream_endpoint_t * stream_endpoint);
|
||||||
void avdtp_configuration_timeout_handler(btstack_timer_source_t * timer);
|
void avdtp_configuration_timeout_handler(btstack_timer_source_t * timer);
|
||||||
void avdtp_configuration_timer_start(avdtp_connection_t * connection);
|
void avdtp_configuration_timer_start(avdtp_connection_t * connection);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user