From 00925309b40c88d3d77b6f6338cdeaefe92c77c6 Mon Sep 17 00:00:00 2001 From: Matthias Ringwald Date: Thu, 7 Jan 2021 10:28:54 +0100 Subject: [PATCH] a2dp_source_demo: use avdtp_source_stream_send_media_payload_rtp --- example/a2dp_source_demo.c | 8 ++++++-- src/classic/avdtp_source.c | 2 +- 2 files changed, 7 insertions(+), 3 deletions(-) diff --git a/example/a2dp_source_demo.c b/example/a2dp_source_demo.c index a26da0d5e..debfd8d23 100644 --- a/example/a2dp_source_demo.c +++ b/example/a2dp_source_demo.c @@ -375,7 +375,10 @@ static void a2dp_demo_send_media_packet(void){ int num_bytes_in_frame = btstack_sbc_encoder_sbc_buffer_length(); int bytes_in_storage = media_tracker.sbc_storage_count; uint8_t num_frames = bytes_in_storage / num_bytes_in_frame; - a2dp_source_stream_send_media_payload(media_tracker.a2dp_cid, media_tracker.local_seid, media_tracker.sbc_storage, bytes_in_storage, num_frames, 0); + // Prepend SBC Header + media_tracker.sbc_storage[0] = num_frames; // (fragmentation << 7) | (starting_packet << 6) | (last_packet << 5) | num_frames; + avdtp_source_stream_send_media_payload_rtp(media_tracker.a2dp_cid, media_tracker.local_seid, 0, media_tracker.sbc_storage, bytes_in_storage + 1); + media_tracker.sbc_storage_count = 0; media_tracker.sbc_ready_to_send = 0; } @@ -449,7 +452,8 @@ static int a2dp_demo_fill_sbc_audio_buffer(a2dp_media_sending_context_t * contex uint8_t * sbc_frame = btstack_sbc_encoder_sbc_buffer(); total_num_bytes_read += num_audio_samples_per_sbc_buffer; - memcpy(&context->sbc_storage[context->sbc_storage_count], sbc_frame, sbc_frame_size); + // first byte in sbc storage contains sbc media header + memcpy(&context->sbc_storage[1 + context->sbc_storage_count], sbc_frame, sbc_frame_size); context->sbc_storage_count += sbc_frame_size; context->samples_ready -= num_audio_samples_per_sbc_buffer; } diff --git a/src/classic/avdtp_source.c b/src/classic/avdtp_source.c index 9372d562d..039f3bdf3 100644 --- a/src/classic/avdtp_source.c +++ b/src/classic/avdtp_source.c @@ -235,7 +235,7 @@ uint8_t avdtp_source_stream_send_media_payload_rtp(uint16_t avdtp_cid, uint8_t l l2cap_reserve_packet_buffer(); uint8_t * media_packet = l2cap_get_outgoing_buffer(); avdtp_source_setup_media_header(media_packet, marker, stream_endpoint->sequence_number); - (void)memcpy(&media_packet[AVDTP_MEDIA_PAYLOAD_HEADER_SIZE +1], payload, payload_size); + (void)memcpy(&media_packet[AVDTP_MEDIA_PAYLOAD_HEADER_SIZE], payload, payload_size); stream_endpoint->sequence_number++; return l2cap_send_prepared(stream_endpoint->l2cap_media_cid, packet_size); }