From b9466bf7b2957c396d0c1be6a286488611e9941f Mon Sep 17 00:00:00 2001 From: Philippe G Date: Sun, 7 Mar 2021 16:33:26 -0800 Subject: [PATCH] BT non-absolute volume handling --- components/driver_bt/bt_app_sink.c | 3 +++ components/squeezelite/decode_external.c | 7 +------ 2 files changed, 4 insertions(+), 6 deletions(-) diff --git a/components/driver_bt/bt_app_sink.c b/components/driver_bt/bt_app_sink.c index 136fb5ca..63ac11ff 100644 --- a/components/driver_bt/bt_app_sink.c +++ b/components/driver_bt/bt_app_sink.c @@ -295,6 +295,9 @@ static void bt_av_hdl_a2d_evt(uint16_t event, void *p_param) if (ESP_A2D_AUDIO_STATE_STARTED == a2d->audio_stat.state) { s_audio = AUDIO_CONNECTED; + + // send memorized volume for devices that can't do absolute volume + (*bt_app_a2d_cmd_cb)(BT_SINK_VOLUME, s_volume); // verify that we can take control if ((*bt_app_a2d_cmd_cb)(BT_SINK_AUDIO_STARTED, s_sample_rate)) { diff --git a/components/squeezelite/decode_external.c b/components/squeezelite/decode_external.c index 5b4289b8..87a04cb7 100644 --- a/components/squeezelite/decode_external.c +++ b/components/squeezelite/decode_external.c @@ -31,8 +31,6 @@ extern log_level loglevel; static bool enable_bt_sink; static bool enable_airplay; -static unsigned bt_volume; - #define RAOP_OUTPUT_SIZE (((RAOP_SAMPLE_RATE * BYTES_PER_FRAME * 2 * 120) / 100) & ~BYTES_PER_FRAME) #define SYNC_WIN_SLOW 32 #define SYNC_WIN_CHECK 8 @@ -108,12 +106,10 @@ static bool bt_sink_cmd_handler(bt_sink_cmd_t cmd, va_list args) LOCK_D; - if (cmd != BT_SINK_VOLUME && cmd != BT_SINK_AUDIO_STARTED) LOCK_O; + if (cmd != BT_SINK_VOLUME) LOCK_O; switch(cmd) { case BT_SINK_AUDIO_STARTED: - if (output.external != DECODE_BT) set_volume(bt_volume, bt_volume); - LOCK_O; output.next_sample_rate = output.current_sample_rate = va_arg(args, u32_t); output.external = DECODE_BT; output.state = OUTPUT_STOPPED; @@ -151,7 +147,6 @@ static bool bt_sink_cmd_handler(bt_sink_cmd_t cmd, va_list args) u32_t volume = va_arg(args, u32_t); volume = 65536 * powf(volume / 128.0f, 3); set_volume(volume, volume); - bt_volume = volume; break; default: break;