mirror of
https://github.com/bluekitchen/btstack.git
synced 2025-02-21 21:41:13 +00:00
example/a2dp_source_demo: use new sbc encoder api
This commit is contained in:
parent
afa547f28a
commit
b255b76b64
@ -182,7 +182,7 @@ static uint8_t device_id_sdp_service_buffer[100];
|
||||
static media_codec_configuration_sbc_t sbc_configuration;
|
||||
|
||||
static const btstack_sbc_encoder_t * sbc_encoder_instance;
|
||||
static btstack_sbc_encoder_bluedroid_t sbc_decoder_context;
|
||||
static btstack_sbc_encoder_bluedroid_t sbc_encoder_state;
|
||||
|
||||
static uint8_t media_sbc_codec_configuration[4];
|
||||
static a2dp_media_sending_context_t media_tracker;
|
||||
@ -360,7 +360,7 @@ static void a2dp_demo_hexcmod_configure_sample_rate(int sample_rate){
|
||||
}
|
||||
|
||||
static void a2dp_demo_send_media_packet(void){
|
||||
int num_bytes_in_frame = btstack_sbc_encoder_sbc_buffer_length();
|
||||
int num_bytes_in_frame = sbc_encoder_instance->sbc_buffer_length(&sbc_encoder_state);
|
||||
int bytes_in_storage = media_tracker.sbc_storage_count;
|
||||
uint8_t num_sbc_frames = bytes_in_storage / num_bytes_in_frame;
|
||||
// Prepend SBC Header
|
||||
@ -370,7 +370,7 @@ static void a2dp_demo_send_media_packet(void){
|
||||
media_tracker.sbc_storage, bytes_in_storage + 1);
|
||||
|
||||
// update rtp_timestamp
|
||||
unsigned int num_audio_samples_per_sbc_buffer = btstack_sbc_encoder_num_audio_frames();
|
||||
unsigned int num_audio_samples_per_sbc_buffer = sbc_encoder_instance->num_audio_frames(&sbc_encoder_state);
|
||||
media_tracker.rtp_timestamp += num_sbc_frames * num_audio_samples_per_sbc_buffer;
|
||||
|
||||
media_tracker.sbc_storage_count = 0;
|
||||
@ -433,21 +433,21 @@ static void produce_audio(int16_t * pcm_buffer, int num_samples){
|
||||
static int a2dp_demo_fill_sbc_audio_buffer(a2dp_media_sending_context_t * context){
|
||||
// perform sbc encoding
|
||||
int total_num_bytes_read = 0;
|
||||
unsigned int num_audio_samples_per_sbc_buffer = btstack_sbc_encoder_num_audio_frames();
|
||||
unsigned int num_audio_samples_per_sbc_buffer = sbc_encoder_instance->num_audio_frames(&sbc_encoder_state);
|
||||
uint16_t sbc_buffer_length = sbc_encoder_instance->sbc_buffer_length(&sbc_encoder_state);
|
||||
while (context->samples_ready >= num_audio_samples_per_sbc_buffer
|
||||
&& (context->max_media_payload_size - context->sbc_storage_count) >= btstack_sbc_encoder_sbc_buffer_length()){
|
||||
&& (context->max_media_payload_size - context->sbc_storage_count) >= sbc_buffer_length){
|
||||
|
||||
int16_t pcm_frame[256*NUM_CHANNELS];
|
||||
|
||||
produce_audio(pcm_frame, num_audio_samples_per_sbc_buffer);
|
||||
btstack_sbc_encoder_process_data(pcm_frame);
|
||||
|
||||
uint16_t sbc_frame_size = btstack_sbc_encoder_sbc_buffer_length();
|
||||
uint8_t * sbc_frame = btstack_sbc_encoder_sbc_buffer();
|
||||
|
||||
|
||||
// encode into sbc storage buffer, first byte contains sbc media header
|
||||
sbc_encoder_instance->encode_signed_16(&sbc_encoder_state, pcm_frame, &context->sbc_storage[1 + context->sbc_storage_count]);
|
||||
|
||||
total_num_bytes_read += num_audio_samples_per_sbc_buffer;
|
||||
// first byte in sbc storage contains sbc media header
|
||||
memcpy(&context->sbc_storage[1 + context->sbc_storage_count], sbc_frame, sbc_frame_size);
|
||||
|
||||
uint16_t sbc_frame_size = sbc_encoder_instance->sbc_buffer_length(&sbc_encoder_state);
|
||||
context->sbc_storage_count += sbc_frame_size;
|
||||
context->samples_ready -= num_audio_samples_per_sbc_buffer;
|
||||
}
|
||||
@ -479,7 +479,7 @@ static void a2dp_demo_audio_timeout_handler(btstack_timer_source_t * timer){
|
||||
|
||||
a2dp_demo_fill_sbc_audio_buffer(context);
|
||||
|
||||
if ((context->sbc_storage_count + btstack_sbc_encoder_sbc_buffer_length()) > context->max_media_payload_size){
|
||||
if ((context->sbc_storage_count + sbc_encoder_instance->sbc_buffer_length(&sbc_encoder_state)) > context->max_media_payload_size){
|
||||
// schedule sending
|
||||
context->sbc_ready_to_send = 1;
|
||||
a2dp_source_stream_endpoint_request_can_send_now(context->a2dp_cid, context->local_seid);
|
||||
@ -663,11 +663,12 @@ static void a2dp_source_packet_handler(uint8_t packet_type, uint16_t channel, ui
|
||||
current_sample_rate = sbc_configuration.sampling_frequency;
|
||||
a2dp_demo_hexcmod_configure_sample_rate(current_sample_rate);
|
||||
|
||||
btstack_sbc_encoder_init(&sbc_encoder_state, SBC_MODE_STANDARD,
|
||||
sbc_configuration.block_length, sbc_configuration.subbands,
|
||||
sbc_configuration.allocation_method, sbc_configuration.sampling_frequency,
|
||||
sbc_configuration.max_bitpool_value,
|
||||
sbc_configuration.channel_mode);
|
||||
sbc_encoder_instance = btstack_sbc_encoder_bluedroid_init_instance(&sbc_encoder_state);
|
||||
sbc_encoder_instance->configure(&sbc_encoder_state, SBC_MODE_STANDARD,
|
||||
sbc_configuration.block_length, sbc_configuration.subbands,
|
||||
sbc_configuration.allocation_method, sbc_configuration.sampling_frequency,
|
||||
sbc_configuration.max_bitpool_value,
|
||||
sbc_configuration.channel_mode);
|
||||
break;
|
||||
|
||||
case A2DP_SUBEVENT_SIGNALING_DELAY_REPORTING_CAPABILITY:
|
||||
|
Loading…
x
Reference in New Issue
Block a user