From 4c4799ac4956709525b81550036408d274d3d6c7 Mon Sep 17 00:00:00 2001 From: xiongweichao Date: Wed, 24 Aug 2022 11:05:03 +0800 Subject: [PATCH] bt:Fixed sink not being able to output mono audio because it can only decode dual channel audio data --- .../bt/host/bluedroid/btc/profile/std/a2dp/btc_a2dp_sink.c | 3 ++- .../bluedroid/classic_bt/a2dp_sink/main/bt_app_av.c | 7 ++++++- 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/components/bt/host/bluedroid/btc/profile/std/a2dp/btc_a2dp_sink.c b/components/bt/host/bluedroid/btc/profile/std/a2dp/btc_a2dp_sink.c index f969bd60c3..0bb7e49e90 100644 --- a/components/bt/host/bluedroid/btc/profile/std/a2dp/btc_a2dp_sink.c +++ b/components/bt/host/bluedroid/btc/profile/std/a2dp/btc_a2dp_sink.c @@ -423,7 +423,8 @@ static void btc_a2dp_sink_handle_decoder_reset(tBTC_MEDIA_SINK_CFG_UPDATE *p_msg a2dp_sink_local_param.btc_aa_snk_cb.rx_flush = FALSE; APPL_TRACE_EVENT("Reset to sink role"); status = OI_CODEC_SBC_DecoderReset(&a2dp_sink_local_param.context, a2dp_sink_local_param.contextData, - sizeof(a2dp_sink_local_param.contextData), 2, 2, FALSE, FALSE); + sizeof(a2dp_sink_local_param.contextData), a2dp_sink_local_param.btc_aa_snk_cb.channel_count, + a2dp_sink_local_param.btc_aa_snk_cb.channel_count, FALSE, FALSE); if (!OI_SUCCESS(status)) { APPL_TRACE_ERROR("OI_CODEC_SBC_DecoderReset failed with error code %d\n", status); } diff --git a/examples/bluetooth/bluedroid/classic_bt/a2dp_sink/main/bt_app_av.c b/examples/bluetooth/bluedroid/classic_bt/a2dp_sink/main/bt_app_av.c index f9f4210e2d..e99f2f7fa7 100644 --- a/examples/bluetooth/bluedroid/classic_bt/a2dp_sink/main/bt_app_av.c +++ b/examples/bluetooth/bluedroid/classic_bt/a2dp_sink/main/bt_app_av.c @@ -273,6 +273,7 @@ static void bt_av_hdl_a2d_evt(uint16_t event, void *p_param) /* for now only SBC stream is supported */ if (a2d->audio_cfg.mcc.type == ESP_A2D_MCT_SBC) { int sample_rate = 16000; + int ch_count = 2; char oct0 = a2d->audio_cfg.mcc.cie.sbc[0]; if (oct0 & (0x01 << 6)) { sample_rate = 32000; @@ -281,7 +282,11 @@ static void bt_av_hdl_a2d_evt(uint16_t event, void *p_param) } else if (oct0 & (0x01 << 4)) { sample_rate = 48000; } - i2s_set_clk(0, sample_rate, 16, 2); + if (oct0 & (0x01 << 3)) { + ch_count = 1; + } + + i2s_set_clk(0, sample_rate, 16, ch_count); ESP_LOGI(BT_AV_TAG, "Configure audio player: %x-%x-%x-%x", a2d->audio_cfg.mcc.cie.sbc[0],