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);
|
||||
}
|
||||
|
||||
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 * media_codec = stream_endpoint->sep.capabilities.media_codec.media_codec_information;
|
||||
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){
|
||||
if (!stream_endpoint) return 0;
|
||||
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;
|
||||
if (sampling_frequency_bitmap & AVDTP_SBC_48000){
|
||||
// use preferred sampling frequency if possible
|
||||
if ((stream_endpoint->preferred_sampling_frequency == 48000) && (supported_sampling_frequency_bitmap & 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;
|
||||
} 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;
|
||||
} 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;
|
||||
}
|
||||
return sampling_frequency;
|
||||
|
@ -477,6 +477,9 @@ typedef struct avdtp_stream_endpoint {
|
||||
avdtp_media_type_t media_type;
|
||||
uint8_t media_codec_sbc_info[4];
|
||||
|
||||
// preferred sampling frequency
|
||||
uint32_t preferred_sampling_frequency;
|
||||
|
||||
// register request for media L2cap connection release
|
||||
uint8_t media_disconnect;
|
||||
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_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_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_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_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);
|
||||
void avdtp_configuration_timeout_handler(btstack_timer_source_t * timer);
|
||||
void avdtp_configuration_timer_start(avdtp_connection_t * connection);
|
||||
|
Loading…
x
Reference in New Issue
Block a user