浏览代码

differentiate BT and AP external decoder

philippe44 5 年之前
父节点
当前提交
b5911874e6
共有 3 个文件被更改,包括 12 次插入8 次删除
  1. 10 6
      components/squeezelite/decode_external.c
  2. 1 1
      components/squeezelite/slimproto.c
  3. 1 1
      components/squeezelite/squeezelite.h

+ 10 - 6
components/squeezelite/decode_external.c

@@ -29,6 +29,8 @@
 #define LOCK_D   mutex_lock(decode.mutex);
 #define UNLOCK_D mutex_unlock(decode.mutex);
 
+enum { DECODE_BT = 1, DECODE_AIRPLAY };
+
 extern struct outputstate output;
 extern struct decodestate decode;
 extern struct buffer *outputbuf;
@@ -114,14 +116,16 @@ static void bt_sink_cmd_handler(bt_sink_cmd_t cmd, ...)
 		
 	switch(cmd) {
 	case BT_SINK_CONNECTED:
-		output.external = true;
+		output.external = DECODE_BT;
 		output.state = OUTPUT_STOPPED;
 		LOG_INFO("BT sink started");
 		break;
 	case BT_SINK_DISCONNECTED:	
-		output.external = false;
-		output.state = OUTPUT_OFF;
-		LOG_INFO("BT sink stopped");
+		if (output.external == DECODE_BT) {
+			output.external = 0;
+			output.state = OUTPUT_OFF;
+			LOG_INFO("BT sink stopped");
+		}	
 		break;
 	case BT_SINK_PLAY:
 		output.state = OUTPUT_RUNNING;
@@ -226,13 +230,13 @@ void raop_sink_cmd_handler(raop_event_t event, void *param)
 			raop_sync.error = 0;
 			raop_sync.start = true;		
 			raop_sync.enabled = !strcasestr(output.device, "BT");
-			output.external = true;
+			output.external = DECODE_AIRPLAY;
 			output.next_sample_rate = output.current_sample_rate = RAOP_SAMPLE_RATE;
 			output.state = OUTPUT_STOPPED;
 			break;
 		case RAOP_STOP:
 			LOG_INFO("Stop", NULL);
-			output.external = false;
+			output.external = 0;
 			output.state = OUTPUT_OFF;
 			output.frames_played = 0;
 			raop_state = event;

+ 1 - 1
components/squeezelite/slimproto.c

@@ -371,7 +371,7 @@ static void process_strm(u8_t *pkt, int len) {
 			sendSTAT("STMc", 0);
 			sentSTMu = sentSTMo = sentSTMl = false;
 			LOCK_O;
-			output.external = false;
+			output.external = 0;
 			_buf_resize(outputbuf, output.init_size);
 			output.threshold = strm->output_threshold;
 			output.next_replay_gain = unpackN(&strm->replay_gain);

+ 1 - 1
components/squeezelite/squeezelite.h

@@ -659,7 +659,7 @@ struct outputstate {
 	output_state state;
 	output_format format;
 	const char *device;
-	bool external;
+	int external;
 	u32_t init_size;
 #if ALSA
 	unsigned buffer;