From f8e2670d12ee55ec48635ef55a86ecfa643cc761 Mon Sep 17 00:00:00 2001 From: Pavlin Radoslavov Date: Wed, 11 Jan 2017 10:35:15 -0800 Subject: [PATCH] Removed the feeding_init call from tA2DP_ENCODER_INTERFACE The feeding_init call is not used anymore - it has been superseded by the newer A2dpCodecs.setCodecAudioConfig() mechanism. Also, moved aptx_init_framing_params() and aptx_hd_init_framing_params() calls to the corresponding encoder_update functions. Test: A2DP streaming to Bluetooth headsets Change-Id: I52f42b4701d04fe2ddb8f115bb9cd57fe38e2b38 --- stack/a2dp/a2dp_sbc.cc | 11 +- stack/a2dp/a2dp_sbc_encoder.cc | 74 ++----------- stack/a2dp/a2dp_vendor_aptx.cc | 11 +- stack/a2dp/a2dp_vendor_aptx_encoder.cc | 99 ++---------------- stack/a2dp/a2dp_vendor_aptx_hd.cc | 1 - stack/a2dp/a2dp_vendor_aptx_hd_encoder.cc | 100 ++---------------- stack/a2dp/a2dp_vendor_ldac.cc | 11 +- stack/a2dp/a2dp_vendor_ldac_encoder.cc | 155 ++-------------------------- stack/include/a2dp_codec_api.h | 4 - stack/include/a2dp_sbc_encoder.h | 4 - stack/include/a2dp_vendor_aptx_encoder.h | 5 - stack/include/a2dp_vendor_aptx_hd_encoder.h | 5 - stack/include/a2dp_vendor_ldac_encoder.h | 5 - 13 files changed, 54 insertions(+), 431 deletions(-) diff --git a/stack/a2dp/a2dp_sbc.cc b/stack/a2dp/a2dp_sbc.cc index 5bf360448..e8ab36a59 100644 --- a/stack/a2dp/a2dp_sbc.cc +++ b/stack/a2dp/a2dp_sbc.cc @@ -87,10 +87,13 @@ const tA2DP_SBC_CIE a2dp_sbc_default_config = { }; static const tA2DP_ENCODER_INTERFACE a2dp_encoder_interface_sbc = { - a2dp_sbc_encoder_init, a2dp_sbc_encoder_cleanup, - a2dp_sbc_feeding_init, a2dp_sbc_feeding_reset, - a2dp_sbc_feeding_flush, a2dp_sbc_get_encoder_interval_ms, - a2dp_sbc_send_frames, a2dp_sbc_debug_codec_dump}; + a2dp_sbc_encoder_init, + a2dp_sbc_encoder_cleanup, + a2dp_sbc_feeding_reset, + a2dp_sbc_feeding_flush, + a2dp_sbc_get_encoder_interval_ms, + a2dp_sbc_send_frames, + a2dp_sbc_debug_codec_dump}; static tA2DP_STATUS A2DP_CodecInfoMatchesCapabilitySbc( const tA2DP_SBC_CIE* p_cap, const uint8_t* p_codec_info, diff --git a/stack/a2dp/a2dp_sbc_encoder.cc b/stack/a2dp/a2dp_sbc_encoder.cc index 8771f63fe..62db586cf 100644 --- a/stack/a2dp/a2dp_sbc_encoder.cc +++ b/stack/a2dp/a2dp_sbc_encoder.cc @@ -217,12 +217,14 @@ static void a2dp_sbc_encoder_update(uint16_t peer_mtu, max_bitpool = A2DP_GetMaxBitpoolSbc(p_codec_info); // The feeding parameters - a2dp_sbc_encoder_cb.feeding_params.sample_rate = - A2DP_GetTrackSampleRateSbc(p_codec_info); - a2dp_sbc_encoder_cb.feeding_params.bits_per_sample = + tA2DP_FEEDING_PARAMS* p_feeding_params = &a2dp_sbc_encoder_cb.feeding_params; + p_feeding_params->sample_rate = A2DP_GetTrackSampleRateSbc(p_codec_info); + p_feeding_params->bits_per_sample = A2DP_GetTrackBitsPerSampleSbc(p_codec_info); - a2dp_sbc_encoder_cb.feeding_params.channel_count = - A2DP_GetTrackChannelCountSbc(p_codec_info); + p_feeding_params->channel_count = A2DP_GetTrackChannelCountSbc(p_codec_info); + LOG_DEBUG(LOG_TAG, "%s: sample_rate=%u bits_per_sample=%u channel_count=%u", + __func__, p_feeding_params->sample_rate, + p_feeding_params->bits_per_sample, p_feeding_params->channel_count); // The codec parameters p_encoder_params->s16ChannelMode = A2DP_GetChannelModeCodeSbc(p_codec_info); @@ -378,68 +380,6 @@ void a2dp_sbc_encoder_cleanup(void) { memset(&a2dp_sbc_encoder_cb, 0, sizeof(a2dp_sbc_encoder_cb)); } -void a2dp_sbc_feeding_init(const tA2DP_FEEDING_PARAMS* p_feeding_params) { - SBC_ENC_PARAMS* p_encoder_params = &a2dp_sbc_encoder_cb.sbc_encoder_params; - bool reconfig_needed = false; - - LOG_DEBUG( - LOG_TAG, - "%s: PCM feeding: sample_rate:%d bits_per_sample:%d channel_count:%d", - __func__, p_feeding_params->sample_rate, - p_feeding_params->bits_per_sample, p_feeding_params->channel_count); - - /* Save the feeding information */ - memcpy(&a2dp_sbc_encoder_cb.feeding_params, p_feeding_params, - sizeof(tA2DP_FEEDING_PARAMS)); - - /* Check the PCM feeding sample_rate */ - switch (p_feeding_params->sample_rate) { - case 8000: - case 12000: - case 16000: - case 24000: - case 32000: - case 48000: - /* For these sample_rate the AV connection must be 48000 */ - if (p_encoder_params->s16SamplingFreq != SBC_sf48000) { - /* Reconfiguration needed at 48000 */ - LOG_DEBUG(LOG_TAG, "%s: SBC Reconfiguration needed at 48000", __func__); - p_encoder_params->s16SamplingFreq = SBC_sf48000; - reconfig_needed = true; - } - break; - - case 11025: - case 22050: - case 44100: - /* For these sample_rate the AV connection must be 44100 */ - if (p_encoder_params->s16SamplingFreq != SBC_sf44100) { - /* Reconfiguration needed at 44100 */ - LOG_DEBUG(LOG_TAG, "%s: SBC Reconfiguration needed at 44100", __func__); - p_encoder_params->s16SamplingFreq = SBC_sf44100; - reconfig_needed = true; - } - break; - default: - LOG_DEBUG(LOG_TAG, "%s: Feeding PCM sample_rate %u is not supported", - __func__, p_feeding_params->sample_rate); - break; - } - - if (reconfig_needed) { - LOG_DEBUG( - LOG_TAG, - "%s: mtu %d ch mode %d, nbsubd %d, nb %d, alloc %d, rate %d, freq %d", - __func__, a2dp_sbc_encoder_cb.TxAaMtuSize, - p_encoder_params->s16ChannelMode, p_encoder_params->s16NumOfSubBands, - p_encoder_params->s16NumOfBlocks, p_encoder_params->s16AllocationMethod, - p_encoder_params->u16BitRate, p_encoder_params->s16SamplingFreq); - SBC_Encoder_Init(p_encoder_params); - } else { - LOG_DEBUG(LOG_TAG, "%s: no SBC reconfig needed", __func__); - } -} - void a2dp_sbc_feeding_reset(void) { /* By default, just clear the entire state */ memset(&a2dp_sbc_encoder_cb.feeding_state, 0, diff --git a/stack/a2dp/a2dp_vendor_aptx.cc b/stack/a2dp/a2dp_vendor_aptx.cc index d3b3b5a36..8de13eda3 100644 --- a/stack/a2dp/a2dp_vendor_aptx.cc +++ b/stack/a2dp/a2dp_vendor_aptx.cc @@ -70,10 +70,13 @@ static const tA2DP_APTX_CIE a2dp_aptx_default_config = { }; static const tA2DP_ENCODER_INTERFACE a2dp_encoder_interface_aptx = { - a2dp_vendor_aptx_encoder_init, a2dp_vendor_aptx_encoder_cleanup, - a2dp_vendor_aptx_feeding_init, a2dp_vendor_aptx_feeding_reset, - a2dp_vendor_aptx_feeding_flush, a2dp_vendor_aptx_get_encoder_interval_ms, - a2dp_vendor_aptx_send_frames, a2dp_vendor_aptx_debug_codec_dump}; + a2dp_vendor_aptx_encoder_init, + a2dp_vendor_aptx_encoder_cleanup, + a2dp_vendor_aptx_feeding_reset, + a2dp_vendor_aptx_feeding_flush, + a2dp_vendor_aptx_get_encoder_interval_ms, + a2dp_vendor_aptx_send_frames, + a2dp_vendor_aptx_debug_codec_dump}; UNUSED_ATTR static tA2DP_STATUS A2DP_CodecInfoMatchesCapabilityAptx( const tA2DP_APTX_CIE* p_cap, const uint8_t* p_codec_info, diff --git a/stack/a2dp/a2dp_vendor_aptx_encoder.cc b/stack/a2dp/a2dp_vendor_aptx_encoder.cc index 594fe00a7..cf5f5df21 100644 --- a/stack/a2dp/a2dp_vendor_aptx_encoder.cc +++ b/stack/a2dp/a2dp_vendor_aptx_encoder.cc @@ -206,7 +206,6 @@ void a2dp_vendor_aptx_encoder_init( a2dp_vendor_aptx_encoder_update(a2dp_aptx_encoder_cb.peer_mtu, a2dp_codec_config, &restart_input, &restart_output, &config_updated); - aptx_init_framing_params(&a2dp_aptx_encoder_cb.framing_params); } bool A2dpCodecConfigAptx::updateEncoderUserConfig( @@ -254,12 +253,18 @@ static void a2dp_vendor_aptx_encoder_update(uint16_t peer_mtu, const uint8_t* p_codec_info = codec_info; // The feeding parameters - a2dp_aptx_encoder_cb.feeding_params.sample_rate = + tA2DP_FEEDING_PARAMS* p_feeding_params = &a2dp_aptx_encoder_cb.feeding_params; + p_feeding_params->sample_rate = A2DP_VendorGetTrackSampleRateAptx(p_codec_info); - a2dp_aptx_encoder_cb.feeding_params.bits_per_sample = + p_feeding_params->bits_per_sample = A2DP_VendorGetTrackBitsPerSampleAptx(p_codec_info); - a2dp_aptx_encoder_cb.feeding_params.channel_count = + p_feeding_params->channel_count = A2DP_VendorGetTrackChannelCountAptx(p_codec_info); + LOG_DEBUG(LOG_TAG, "%s: sample_rate=%u bits_per_sample=%u channel_count=%u", + __func__, p_feeding_params->sample_rate, + p_feeding_params->bits_per_sample, p_feeding_params->channel_count); + + aptx_init_framing_params(&a2dp_aptx_encoder_cb.framing_params); } void a2dp_vendor_aptx_encoder_cleanup(void) { @@ -267,92 +272,6 @@ void a2dp_vendor_aptx_encoder_cleanup(void) { memset(&a2dp_aptx_encoder_cb, 0, sizeof(a2dp_aptx_encoder_cb)); } -void a2dp_vendor_aptx_feeding_init( - const tA2DP_FEEDING_PARAMS* p_feeding_params) { - LOG_DEBUG(LOG_TAG, - "%s: PCM feeding: sample_rate:%d bits_per_sample:%d " - "channel_count:%d", - __func__, p_feeding_params->sample_rate, - p_feeding_params->bits_per_sample, p_feeding_params->channel_count); - - // Check the PCM feeding sample_rate - switch (p_feeding_params->sample_rate) { - case 44100: - case 48000: - break; - default: - LOG_WARN(LOG_TAG, "%s: feeding PCM sample_rate %u is not supported", - __func__, p_feeding_params->sample_rate); - return; - } - - // Check the bits per sample - switch (p_feeding_params->bits_per_sample) { - case 16: - break; - default: - LOG_WARN(LOG_TAG, "%s: feeding PCM bits_per_sample %u is not supported", - __func__, p_feeding_params->bits_per_sample); - return; - } - - // Check the number of channels - switch (p_feeding_params->channel_count) { - case 1: // Mono - case 2: // Stereo - break; - default: - LOG_WARN(LOG_TAG, "%s: feeding PCM channel_count %u is not supported", - __func__, p_feeding_params->channel_count); - return; - } - - bool reconfig_needed = false; - if (a2dp_aptx_encoder_cb.feeding_params.sample_rate != - p_feeding_params->sample_rate) { - LOG_DEBUG(LOG_TAG, - "%s: codec reconfiguration: feeding PCM sample_rate " - "from %u to %u", - __func__, a2dp_aptx_encoder_cb.feeding_params.sample_rate, - p_feeding_params->sample_rate); - reconfig_needed = true; - a2dp_aptx_encoder_cb.feeding_params.sample_rate = - p_feeding_params->sample_rate; - } - if (a2dp_aptx_encoder_cb.feeding_params.bits_per_sample != - p_feeding_params->bits_per_sample) { - LOG_DEBUG(LOG_TAG, - "%s: aptX reconfiguration needed: " - "feeding PCM bits_per_sample from %u to %u", - __func__, a2dp_aptx_encoder_cb.feeding_params.bits_per_sample, - p_feeding_params->bits_per_sample); - a2dp_aptx_encoder_cb.feeding_params.bits_per_sample = - p_feeding_params->bits_per_sample; - reconfig_needed = true; - } - if (a2dp_aptx_encoder_cb.feeding_params.channel_count != - p_feeding_params->channel_count) { - LOG_DEBUG(LOG_TAG, - "%s: aptX reconfiguration needed: " - "feeding PCM channel_count from %u to %u", - __func__, a2dp_aptx_encoder_cb.feeding_params.channel_count, - p_feeding_params->channel_count); - a2dp_aptx_encoder_cb.feeding_params.channel_count = - p_feeding_params->channel_count; - reconfig_needed = true; - } - - if (reconfig_needed) { - LOG_DEBUG(LOG_TAG, "%s: sample_rate=%u bits_per_sample=%u channel_count=%u", - __func__, p_feeding_params->sample_rate, - p_feeding_params->bits_per_sample, - p_feeding_params->channel_count); - aptx_init_framing_params(&a2dp_aptx_encoder_cb.framing_params); - } else { - LOG_DEBUG(LOG_TAG, "%s: no aptX reconfiguration needed", __func__); - } -} - // // Initialize the framing parameters, and set those that don't change // while streaming (e.g., 'sleep_time_ns'). diff --git a/stack/a2dp/a2dp_vendor_aptx_hd.cc b/stack/a2dp/a2dp_vendor_aptx_hd.cc index 3d71283d3..c31486dc5 100644 --- a/stack/a2dp/a2dp_vendor_aptx_hd.cc +++ b/stack/a2dp/a2dp_vendor_aptx_hd.cc @@ -79,7 +79,6 @@ static const tA2DP_APTX_HD_CIE a2dp_aptx_hd_default_config = { static const tA2DP_ENCODER_INTERFACE a2dp_encoder_interface_aptx_hd = { a2dp_vendor_aptx_hd_encoder_init, a2dp_vendor_aptx_hd_encoder_cleanup, - a2dp_vendor_aptx_hd_feeding_init, a2dp_vendor_aptx_hd_feeding_reset, a2dp_vendor_aptx_hd_feeding_flush, a2dp_vendor_aptx_hd_get_encoder_interval_ms, diff --git a/stack/a2dp/a2dp_vendor_aptx_hd_encoder.cc b/stack/a2dp/a2dp_vendor_aptx_hd_encoder.cc index 05ad63d6f..5409faf7c 100644 --- a/stack/a2dp/a2dp_vendor_aptx_hd_encoder.cc +++ b/stack/a2dp/a2dp_vendor_aptx_hd_encoder.cc @@ -207,7 +207,6 @@ void a2dp_vendor_aptx_hd_encoder_init( a2dp_vendor_aptx_hd_encoder_update(a2dp_aptx_hd_encoder_cb.peer_mtu, a2dp_codec_config, &restart_input, &restart_output, &config_updated); - aptx_hd_init_framing_params(&a2dp_aptx_hd_encoder_cb.framing_params); } bool A2dpCodecConfigAptxHd::updateEncoderUserConfig( @@ -254,12 +253,19 @@ static void a2dp_vendor_aptx_hd_encoder_update( const uint8_t* p_codec_info = codec_info; // The feeding parameters - a2dp_aptx_hd_encoder_cb.feeding_params.sample_rate = + tA2DP_FEEDING_PARAMS* p_feeding_params = + &a2dp_aptx_hd_encoder_cb.feeding_params; + p_feeding_params->sample_rate = A2DP_VendorGetTrackSampleRateAptxHd(p_codec_info); - a2dp_aptx_hd_encoder_cb.feeding_params.bits_per_sample = + p_feeding_params->bits_per_sample = A2DP_VendorGetTrackBitsPerSampleAptxHd(p_codec_info); - a2dp_aptx_hd_encoder_cb.feeding_params.channel_count = + p_feeding_params->channel_count = A2DP_VendorGetTrackChannelCountAptxHd(p_codec_info); + LOG_DEBUG(LOG_TAG, "%s: sample_rate=%u bits_per_sample=%u channel_count=%u", + __func__, p_feeding_params->sample_rate, + p_feeding_params->bits_per_sample, p_feeding_params->channel_count); + + aptx_hd_init_framing_params(&a2dp_aptx_hd_encoder_cb.framing_params); } void a2dp_vendor_aptx_hd_encoder_cleanup(void) { @@ -267,92 +273,6 @@ void a2dp_vendor_aptx_hd_encoder_cleanup(void) { memset(&a2dp_aptx_hd_encoder_cb, 0, sizeof(a2dp_aptx_hd_encoder_cb)); } -void a2dp_vendor_aptx_hd_feeding_init( - const tA2DP_FEEDING_PARAMS* p_feeding_params) { - LOG_DEBUG(LOG_TAG, - "%s: PCM feeding: sample_rate:%d bits_per_sample:%d" - "channel_count:%d", - __func__, p_feeding_params->sample_rate, - p_feeding_params->bits_per_sample, p_feeding_params->channel_count); - - // Check the PCM feeding sample_rate - switch (p_feeding_params->sample_rate) { - case 44100: - case 48000: - break; - default: - LOG_WARN(LOG_TAG, "%s: feeding PCM sample_rate %u is not supported", - __func__, p_feeding_params->sample_rate); - return; - } - - // Check the bits per sample - switch (p_feeding_params->bits_per_sample) { - case 24: - break; - default: - LOG_WARN(LOG_TAG, "%s: feeding PCM bits_per_sample %u is not supported", - __func__, p_feeding_params->bits_per_sample); - return; - } - - // Check the number of channels - switch (p_feeding_params->channel_count) { - case 1: // Mono - case 2: // Stereo - break; - default: - LOG_WARN(LOG_TAG, "%s: feeding PCM channel_count %u is not supported", - __func__, p_feeding_params->channel_count); - return; - } - - bool reconfig_needed = false; - if (a2dp_aptx_hd_encoder_cb.feeding_params.sample_rate != - p_feeding_params->sample_rate) { - LOG_DEBUG(LOG_TAG, - "%s: codec reconfiguration: feeding PCM sample_rate " - "from %u to %u", - __func__, a2dp_aptx_hd_encoder_cb.feeding_params.sample_rate, - p_feeding_params->sample_rate); - reconfig_needed = true; - a2dp_aptx_hd_encoder_cb.feeding_params.sample_rate = - p_feeding_params->sample_rate; - } - if (a2dp_aptx_hd_encoder_cb.feeding_params.bits_per_sample != - p_feeding_params->bits_per_sample) { - LOG_DEBUG(LOG_TAG, - "%s: aptX-HD reconfiguration needed: " - "feeding PCM bits_per_sample from %u to %u", - __func__, a2dp_aptx_hd_encoder_cb.feeding_params.bits_per_sample, - p_feeding_params->bits_per_sample); - a2dp_aptx_hd_encoder_cb.feeding_params.bits_per_sample = - p_feeding_params->bits_per_sample; - reconfig_needed = true; - } - if (a2dp_aptx_hd_encoder_cb.feeding_params.channel_count != - p_feeding_params->channel_count) { - LOG_DEBUG(LOG_TAG, - "%s: aptX-HD reconfiguration needed: " - "feeding PCM channel_count from %u to %u", - __func__, a2dp_aptx_hd_encoder_cb.feeding_params.channel_count, - p_feeding_params->channel_count); - a2dp_aptx_hd_encoder_cb.feeding_params.channel_count = - p_feeding_params->channel_count; - reconfig_needed = true; - } - - if (reconfig_needed) { - LOG_DEBUG(LOG_TAG, "%s: sample_rate=%u bits_per_sample=%u channel_count=%u", - __func__, p_feeding_params->sample_rate, - p_feeding_params->bits_per_sample, - p_feeding_params->channel_count); - aptx_hd_init_framing_params(&a2dp_aptx_hd_encoder_cb.framing_params); - } else { - LOG_DEBUG(LOG_TAG, "%s: no aptX-HD reconfiguration needed", __func__); - } -} - // // Initialize the framing parameters, and set those that don't change // while streaming (e.g., 'sleep_time_ns'). diff --git a/stack/a2dp/a2dp_vendor_ldac.cc b/stack/a2dp/a2dp_vendor_ldac.cc index e509c9164..0f3ae2354 100644 --- a/stack/a2dp/a2dp_vendor_ldac.cc +++ b/stack/a2dp/a2dp_vendor_ldac.cc @@ -70,10 +70,13 @@ static const tA2DP_LDAC_CIE a2dp_ldac_default_config = { }; static const tA2DP_ENCODER_INTERFACE a2dp_encoder_interface_ldac = { - a2dp_vendor_ldac_encoder_init, a2dp_vendor_ldac_encoder_cleanup, - a2dp_vendor_ldac_feeding_init, a2dp_vendor_ldac_feeding_reset, - a2dp_vendor_ldac_feeding_flush, a2dp_vendor_ldac_get_encoder_interval_ms, - a2dp_vendor_ldac_send_frames, a2dp_vendor_ldac_debug_codec_dump}; + a2dp_vendor_ldac_encoder_init, + a2dp_vendor_ldac_encoder_cleanup, + a2dp_vendor_ldac_feeding_reset, + a2dp_vendor_ldac_feeding_flush, + a2dp_vendor_ldac_get_encoder_interval_ms, + a2dp_vendor_ldac_send_frames, + a2dp_vendor_ldac_debug_codec_dump}; UNUSED_ATTR static tA2DP_STATUS A2DP_CodecInfoMatchesCapabilityLdac( const tA2DP_LDAC_CIE* p_cap, const uint8_t* p_codec_info, diff --git a/stack/a2dp/a2dp_vendor_ldac_encoder.cc b/stack/a2dp/a2dp_vendor_ldac_encoder.cc index 32c6537f5..cb00d54ba 100644 --- a/stack/a2dp/a2dp_vendor_ldac_encoder.cc +++ b/stack/a2dp/a2dp_vendor_ldac_encoder.cc @@ -351,12 +351,16 @@ static void a2dp_vendor_ldac_encoder_update(uint16_t peer_mtu, btav_a2dp_codec_config_t codec_config = a2dp_codec_config->getCodecConfig(); // The feeding parameters - a2dp_ldac_encoder_cb.feeding_params.sample_rate = + tA2DP_FEEDING_PARAMS* p_feeding_params = &a2dp_ldac_encoder_cb.feeding_params; + p_feeding_params->sample_rate = A2DP_VendorGetTrackSampleRateLdac(p_codec_info); - a2dp_ldac_encoder_cb.feeding_params.bits_per_sample = + p_feeding_params->bits_per_sample = a2dp_codec_config->getAudioBitsPerSample(); - a2dp_ldac_encoder_cb.feeding_params.channel_count = + p_feeding_params->channel_count = A2DP_VendorGetTrackChannelCountLdac(p_codec_info); + LOG_DEBUG(LOG_TAG, "%s: sample_rate=%u bits_per_sample=%u channel_count=%u", + __func__, p_feeding_params->sample_rate, + p_feeding_params->bits_per_sample, p_feeding_params->channel_count); // The codec parameters p_encoder_params->sample_rate = @@ -426,151 +430,6 @@ void a2dp_vendor_ldac_encoder_cleanup(void) { memset(&a2dp_ldac_encoder_cb, 0, sizeof(a2dp_ldac_encoder_cb)); } -void a2dp_vendor_ldac_feeding_init( - const tA2DP_FEEDING_PARAMS* p_feeding_params) { - tA2DP_LDAC_ENCODER_PARAMS* p_encoder_params = - &a2dp_ldac_encoder_cb.ldac_encoder_params; - bool reconfig_needed = false; - - LOG_DEBUG(LOG_TAG, - "%s: PCM feeding: sample_rate:%d bits_per_sample:%d " - "channel_count:%d", - __func__, p_feeding_params->sample_rate, - p_feeding_params->bits_per_sample, p_feeding_params->channel_count); - - /* Save the feeding information */ - memcpy(&a2dp_ldac_encoder_cb.feeding_params, p_feeding_params, - sizeof(tA2DP_FEEDING_PARAMS)); - - // Check the PCM feeding sample_rate - switch (p_feeding_params->sample_rate) { - case 44100: - case 48000: - case 88200: - case 96000: - case 176400: - case 192000: - break; - default: - LOG_WARN(LOG_TAG, "%s: feeding PCM sample_rate %u is not supported", - __func__, p_feeding_params->sample_rate); - return; - } - if (p_encoder_params->sample_rate != p_feeding_params->sample_rate) { - LOG_DEBUG(LOG_TAG, - "%s: codec reconfiguration: feeding PCM sample_rate " - "from %u to %u", - __func__, p_encoder_params->sample_rate, - p_feeding_params->sample_rate); - reconfig_needed = true; - p_encoder_params->sample_rate = p_feeding_params->sample_rate; - } - - // Check the bits per sample - switch (p_feeding_params->bits_per_sample) { - case 16: - case 24: - case 32: - break; - default: - LOG_WARN(LOG_TAG, "%s: feeding PCM bits_per_sample %u is not supported", - __func__, p_feeding_params->bits_per_sample); - return; - } - if (p_encoder_params->bits_per_sample != p_feeding_params->bits_per_sample) { - LOG_DEBUG(LOG_TAG, - "%s: LDAC reconfiguration needed: " - "feeding PCM bits_per_sample from %u to %u", - __func__, p_encoder_params->bits_per_sample, - p_feeding_params->bits_per_sample); - p_encoder_params->bits_per_sample = p_feeding_params->bits_per_sample; - // NOTE: A2DP reconfigure is not necessary in this case. Re-initializing - // just the LDAC encoder is sufficient. - reconfig_needed = true; - } - - // Check the number of channels - switch (p_feeding_params->channel_count) { - case 1: // Mono - case 2: // Stereo - break; - default: - LOG_WARN(LOG_TAG, "%s: feeding PCM channel_count %u is not supported", - __func__, p_feeding_params->channel_count); - return; - } - - if ((p_feeding_params->channel_count == 1) && - (p_encoder_params->channel_mode != A2DP_LDAC_CHANNEL_MODE_MONO)) { - LOG_DEBUG(LOG_TAG, - "%s: codec reconfiguration: feeding PCM channel_count " - "from 2 to %u", - __func__, p_feeding_params->channel_count); - reconfig_needed = true; - p_encoder_params->channel_mode = A2DP_LDAC_CHANNEL_MODE_MONO; - } - if ((p_feeding_params->channel_count == 2) && - (p_encoder_params->channel_mode != A2DP_LDAC_CHANNEL_MODE_STEREO) && - (p_encoder_params->channel_mode != A2DP_LDAC_CHANNEL_MODE_DUAL)) { - LOG_DEBUG(LOG_TAG, - "%s: codec reconfiguration: feeding PCM channel_count " - "from 1 to %u", - __func__, p_feeding_params->channel_count); - reconfig_needed = true; - p_encoder_params->channel_mode = A2DP_LDAC_CHANNEL_MODE_STEREO; - } - - p_encoder_params->pcm_wlength = p_encoder_params->bits_per_sample >> 3; - // Set the Audio format from pcm_wlength - p_encoder_params->pcm_fmt = LDACBT_SMPL_FMT_S16; - if (p_encoder_params->pcm_wlength == 2) - p_encoder_params->pcm_fmt = LDACBT_SMPL_FMT_S16; - else if (p_encoder_params->pcm_wlength == 3) - p_encoder_params->pcm_fmt = LDACBT_SMPL_FMT_S24; - else if (p_encoder_params->pcm_wlength == 4) - p_encoder_params->pcm_fmt = LDACBT_SMPL_FMT_S32; - - if (!reconfig_needed) { - LOG_DEBUG(LOG_TAG, "%s: no LDAC reconfiguration needed", __func__); - return; - } - - LOG_DEBUG(LOG_TAG, "%s: sample_rate=%u bits_per_sample=%u channel_count=%u", - __func__, p_feeding_params->sample_rate, - p_feeding_params->bits_per_sample, p_feeding_params->channel_count); - - if (a2dp_ldac_encoder_cb.has_ldac_handle) { - ldac_free_handle_func(a2dp_ldac_encoder_cb.ldac_handle); - a2dp_ldac_encoder_cb.has_ldac_handle = false; - } - a2dp_ldac_encoder_cb.ldac_handle = ldac_get_handle_func(); - if (a2dp_ldac_encoder_cb.ldac_handle == NULL) { - LOG_ERROR(LOG_TAG, "%s: Cannot get LDAC encoder handle", __func__); - return; // TODO: Return an error? - } - a2dp_ldac_encoder_cb.has_ldac_handle = true; - - LOG_DEBUG(LOG_TAG, - "%s: sample_rate: %d channel_mode: %d " - "quality_mode_index: %d pcm_wlength: %d pcm_fmt: %d", - __func__, p_encoder_params->sample_rate, - p_encoder_params->channel_mode, - p_encoder_params->quality_mode_index, p_encoder_params->pcm_wlength, - p_encoder_params->pcm_fmt); - - // Initialize the encoder. - // NOTE: MTU in the initialization must include the AVDT media header size. - int result = ldac_init_handle_encode_func( - a2dp_ldac_encoder_cb.ldac_handle, - a2dp_ldac_encoder_cb.TxAaMtuSize + AVDT_MEDIA_HDR_SIZE, - p_encoder_params->quality_mode_index, p_encoder_params->channel_mode, - p_encoder_params->pcm_fmt, p_encoder_params->sample_rate); - if (result != 0) { - LOG_ERROR(LOG_TAG, "%s: error initializing the LDAC encoder: %d", __func__, - result); - } -} - void a2dp_vendor_ldac_feeding_reset(void) { /* By default, just clear the entire state */ memset(&a2dp_ldac_encoder_cb.ldac_feeding_state, 0, diff --git a/stack/include/a2dp_codec_api.h b/stack/include/a2dp_codec_api.h index 3cce87226..80e4eec0a 100644 --- a/stack/include/a2dp_codec_api.h +++ b/stack/include/a2dp_codec_api.h @@ -387,10 +387,6 @@ typedef struct { // Cleanup the A2DP encoder. void (*encoder_cleanup)(void); - // Initialize the feeding for the A2DP encoder. - // The feeding initialization parameters are in |p_feeding_params|. - void (*feeding_init)(const tA2DP_FEEDING_PARAMS* p_feeding_params); - // Reset the feeding for the A2DP encoder. void (*feeding_reset)(void); diff --git a/stack/include/a2dp_sbc_encoder.h b/stack/include/a2dp_sbc_encoder.h index 9206f68a9..ffbfdcaf3 100644 --- a/stack/include/a2dp_sbc_encoder.h +++ b/stack/include/a2dp_sbc_encoder.h @@ -47,10 +47,6 @@ void a2dp_sbc_encoder_init(const tA2DP_ENCODER_INIT_PEER_PARAMS* p_peer_params, // Cleanup the A2DP SBC encoder. void a2dp_sbc_encoder_cleanup(void); -// Initialize the feeding for the A2DP SBC encoder. -// The feeding initialization parameters are in |p_feeding_params|. -void a2dp_sbc_feeding_init(const tA2DP_FEEDING_PARAMS* p_feeding_params); - // Reset the feeding for the A2DP SBC encoder. void a2dp_sbc_feeding_reset(void); diff --git a/stack/include/a2dp_vendor_aptx_encoder.h b/stack/include/a2dp_vendor_aptx_encoder.h index d444b6302..52b8edcde 100644 --- a/stack/include/a2dp_vendor_aptx_encoder.h +++ b/stack/include/a2dp_vendor_aptx_encoder.h @@ -45,11 +45,6 @@ void a2dp_vendor_aptx_encoder_init( // Cleanup the A2DP aptX encoder. void a2dp_vendor_aptx_encoder_cleanup(void); -// Initialize the feeding for the A2DP aptX encoder. -// The feeding initialization parameters are in |p_feeding_params|. -void a2dp_vendor_aptx_feeding_init( - const tA2DP_FEEDING_PARAMS* p_feeding_params); - // Reset the feeding for the A2DP aptX encoder. void a2dp_vendor_aptx_feeding_reset(void); diff --git a/stack/include/a2dp_vendor_aptx_hd_encoder.h b/stack/include/a2dp_vendor_aptx_hd_encoder.h index 032d933a8..c7708f363 100644 --- a/stack/include/a2dp_vendor_aptx_hd_encoder.h +++ b/stack/include/a2dp_vendor_aptx_hd_encoder.h @@ -45,11 +45,6 @@ void a2dp_vendor_aptx_hd_encoder_init( // Cleanup the A2DP aptX-HD encoder. void a2dp_vendor_aptx_hd_encoder_cleanup(void); -// Initialize the feeding for the A2DP aptX-HD encoder. -// The feeding initialization parameters are in |p_feeding_params|. -void a2dp_vendor_aptx_hd_feeding_init( - const tA2DP_FEEDING_PARAMS* p_feeding_params); - // Reset the feeding for the A2DP aptX-HD encoder. void a2dp_vendor_aptx_hd_feeding_reset(void); diff --git a/stack/include/a2dp_vendor_ldac_encoder.h b/stack/include/a2dp_vendor_ldac_encoder.h index 393ba1b17..70abaafd5 100644 --- a/stack/include/a2dp_vendor_ldac_encoder.h +++ b/stack/include/a2dp_vendor_ldac_encoder.h @@ -45,11 +45,6 @@ void a2dp_vendor_ldac_encoder_init( // Cleanup the A2DP LDAC encoder. void a2dp_vendor_ldac_encoder_cleanup(void); -// Initialize the feeding for the A2DP LDAC encoder. -// The feeding initialization parameters are in |p_feeding_params|. -void a2dp_vendor_ldac_feeding_init( - const tA2DP_FEEDING_PARAMS* p_feeding_params); - // Reset the feeding for the A2DP LDAC encoder. void a2dp_vendor_ldac_feeding_reset(void); -- 2.11.0