diff --git a/src/classic/a2dp_source.c b/src/classic/a2dp_source.c index 64589e5cb..2d3dbe62a 100644 --- a/src/classic/a2dp_source.c +++ b/src/classic/a2dp_source.c @@ -54,6 +54,8 @@ static const char * default_a2dp_source_service_name = "BTstack A2DP Source Serv static const char * default_a2dp_source_service_provider_name = "BTstack A2DP Source Service Provider"; static avdtp_context_t a2dp_source_context; +#define AVDTP_MEDIA_PAYLOAD_HEADER_SIZE 12 + typedef struct { // to app uint32_t fill_audio_ring_buffer_timeout_ms; @@ -487,7 +489,7 @@ uint8_t a2dp_source_stream_endpoint_ready(uint8_t local_seid){ static void a2dp_source_setup_media_header(uint8_t * media_packet, int size, int *offset, uint8_t marker, uint16_t sequence_number){ - if (size < 12){ + if (size < AVDTP_MEDIA_PAYLOAD_HEADER_SIZE){ printf("small outgoing buffer\n"); return; } @@ -532,30 +534,11 @@ int a2dp_max_media_payload_size(uint8_t int_seid){ printf("no stream_endpoint found for seid %d", int_seid); return 0; } - if (stream_endpoint->l2cap_media_cid == 0){ printf("no media cid found for seid %d", int_seid); return 0; } - int sbc_header_size = 12; - return l2cap_get_remote_mtu_for_local_cid(stream_endpoint->l2cap_media_cid) - sbc_header_size; -} - -uint8_t a2dp_num_frames(uint8_t int_seid, int header_size, int num_bytes_in_frame, int bytes_in_storage){ - avdtp_stream_endpoint_t * stream_endpoint = avdtp_stream_endpoint_for_seid(int_seid, &a2dp_source_context); - if (!stream_endpoint) { - printf("no stream_endpoint found for seid %d", int_seid); - return 0; - } - - if (stream_endpoint->l2cap_media_cid == 0){ - printf("no media cid found for seid %d", int_seid); - return 0; - } - - int num_bytes_to_populate = l2cap_get_remote_mtu_for_local_cid(stream_endpoint->l2cap_media_cid) - header_size; - int calc_num_frames = btstack_min(num_bytes_to_populate/num_bytes_in_frame, bytes_in_storage/num_bytes_in_frame); - return (uint8_t)calc_num_frames; + return l2cap_get_remote_mtu_for_local_cid(stream_endpoint->l2cap_media_cid) - AVDTP_MEDIA_PAYLOAD_HEADER_SIZE; } static void a2dp_source_copy_media_payload(uint8_t * media_packet, int size, int * offset, uint8_t * storage, int num_bytes_to_copy, uint8_t num_frames){ diff --git a/src/classic/a2dp_source.h b/src/classic/a2dp_source.h index e821241d8..247f581e7 100644 --- a/src/classic/a2dp_source.h +++ b/src/classic/a2dp_source.h @@ -107,11 +107,14 @@ void a2dp_source_release_stream(uint8_t int_seid); void a2dp_source_disconnect(uint16_t avdtp_cid); -uint8_t a2dp_source_stream_endpoint_ready(uint8_t local_seid); -void a2dp_source_stream_endpoint_request_can_send_now(uint8_t local_seid); -int a2dp_source_stream_send_media_payload(uint8_t int_seid, uint8_t * storage, int num_bytes_to_copy, uint8_t num_frames, uint8_t marker); +// size for media (does not include media header) int a2dp_max_media_payload_size(uint8_t int_seid); -uint8_t a2dp_num_frames(uint8_t int_seid, int header_size, int num_bytes_in_frame, int bytes_in_storage); + +uint8_t a2dp_source_stream_endpoint_ready(uint8_t local_seid); + +void a2dp_source_stream_endpoint_request_can_send_now(uint8_t local_seid); + +int a2dp_source_stream_send_media_payload(uint8_t int_seid, uint8_t * storage, int num_bytes_to_copy, uint8_t num_frames, uint8_t marker); /* API_END */