From 53361c63cd7c3fb8b5549cedb42a01ab36b81d5b Mon Sep 17 00:00:00 2001 From: philippe44 Date: Sat, 4 Jan 2020 12:44:07 -0800 Subject: [PATCH] fixed coexistence --- components/squeezelite/decode.c | 2 +- components/squeezelite/decode_external.c | 3 ++- components/squeezelite/slimproto.c | 11 +++-------- 3 files changed, 6 insertions(+), 10 deletions(-) diff --git a/components/squeezelite/decode.c b/components/squeezelite/decode.c index de208e2d..30b0c0b5 100644 --- a/components/squeezelite/decode.c +++ b/components/squeezelite/decode.c @@ -65,7 +65,7 @@ static void *decode_thread() { toend = (stream.state <= DISCONNECT); UNLOCK_S; LOCK_O; - space = !output.external ? _buf_space(outputbuf) : 0; + space = _buf_space(outputbuf); UNLOCK_O; LOCK_D; diff --git a/components/squeezelite/decode_external.c b/components/squeezelite/decode_external.c index 98028efe..0a62d607 100644 --- a/components/squeezelite/decode_external.c +++ b/components/squeezelite/decode_external.c @@ -121,6 +121,7 @@ static bool bt_sink_cmd_handler(bt_sink_cmd_t cmd, ...) output.state = OUTPUT_STOPPED; output.frames_played = 0; _buf_flush(outputbuf); + if (decode.state != DECODE_STOPPED) decode.state = DECODE_ERROR; bt_master(true); LOG_INFO("BT sink started"); break; @@ -239,6 +240,7 @@ static bool raop_sink_cmd_handler(raop_event_t event, void *param) output.frames_played = 0; output.external = DECODE_RAOP; output.state = OUTPUT_STOPPED; + if (decode.state != DECODE_STOPPED) decode.state = DECODE_ERROR; raop_master(true); LOG_INFO("resizing buffer %u", outputbuf->size); break; @@ -333,5 +335,4 @@ void decode_resume(int external) { raop_state = RAOP_STOP; break; } - _buf_resize(outputbuf, output.init_size); } diff --git a/components/squeezelite/slimproto.c b/components/squeezelite/slimproto.c index 23c96e4d..c4384a0c 100644 --- a/components/squeezelite/slimproto.c +++ b/components/squeezelite/slimproto.c @@ -283,7 +283,7 @@ static void process_strm(u8_t *pkt, int len) { break; case 'q': decode_flush(); - output_flush(); + if (!output.external) output_flush(); status.frames_played = 0; stream_disconnect(); sendSTAT("STMf", 0); @@ -291,7 +291,7 @@ static void process_strm(u8_t *pkt, int len) { break; case 'f': decode_flush(); - output_flush(); + if (!output.external) output_flush(); status.frames_played = 0; if (stream_disconnect()) { sendSTAT("STMf", 0); @@ -330,12 +330,6 @@ static void process_strm(u8_t *pkt, int len) { LOCK_O; output.state = jiffies ? OUTPUT_START_AT : OUTPUT_RUNNING; output.start_at = jiffies; -#if EMBEDDED - if (output.external) { - decode_resume(output.external); - output.external = 0; - } -#endif UNLOCK_O; LOG_DEBUG("unpause at: %u now: %u", jiffies, gettime_ms()); @@ -382,6 +376,7 @@ static void process_strm(u8_t *pkt, int len) { #if EMBEDDED if (output.external) decode_resume(output.external); output.external = 0; + _buf_resize(outputbuf, output.init_size); #endif output.threshold = strm->output_threshold; output.next_replay_gain = unpackN(&strm->replay_gain);