2
0
philippe44 5 жил өмнө
parent
commit
21860614e8
1 өөрчлөгдсөн 41 нэмэгдсэн , 43 устгасан
  1. 41 43
      output_bt.c

+ 41 - 43
output_bt.c

@@ -45,8 +45,13 @@ static int bytes_per_frame;
 static int _bt_write_frames(frames_t out_frames, bool silence, s32_t gainL, s32_t gainR,
 								s32_t cross_gain_in, s32_t cross_gain_out, s32_t **cross_ptr);
 
-void set_volume(unsigned left, unsigned right) {}
-
+void set_volume(unsigned left, unsigned right) {
+	LOG_DEBUG("setting internal gain left: %u right: %u", left, right);
+	LOCK;
+	output.gainL = left;
+	output.gainR = right;
+	UNLOCK;
+}
 
 /* event for handler "bt_av_hdl_stack_up */
 enum {
@@ -198,7 +203,6 @@ void output_init_dac(log_level level, unsigned output_buf_size, char *params, un
  * Bluetooth audio source init Start
  */
 
-
 	output_init_common(level, "-", output_buf_size, rates, idle);
 
 //#if LINUX || OSX || FREEBSD || POSIX
@@ -224,11 +228,9 @@ void output_close_dac(void) {
 
 	free(buf);
 
-
-
 	output_close_common();
 }
-static u8_t *optr;
+
 static int _bt_write_frames(frames_t out_frames, bool silence, s32_t gainL, s32_t gainR,
 								s32_t cross_gain_in, s32_t cross_gain_out, s32_t **cross_ptr) {
 
@@ -492,17 +494,26 @@ static void bt_app_a2d_cb(esp_a2d_cb_event_t event, esp_a2d_cb_param_t *param)
 
 static int32_t bt_app_a2d_data_cb(uint8_t *data, int32_t len)
 {
-
-     int32_t ret = 0;
-	frames_t frames=0;
-	frames_t frames_wanted = 0;
-
+	frames_t frames;
+	int i;
+	s16_t *optr = (s16_t*) data;
+	s32_t *iptr = (s32_t*) buf;
+	
     if (len < 0 || data == NULL) {
         return 0;
     }
-    optr = (u8_t *)data;
-
+    
    	LOCK;
+	
+/* TODO
+	Normally, we would want BT to not call us back unless we have not in BUFFERING state. 
+	That requires BT to not start until we are > OUTPUT_BUFFER
+	// come back later, we are buffering (or stopped, need to handle that case ...) but we don't want silence 
+	if (output.state <= OUTPUT_BUFFER) {
+		UNLOCK;
+		return 0;
+	}		
+*/	
 
    	switch (output.format) {
    	case S32_LE:
@@ -516,36 +527,23 @@ static int32_t bt_app_a2d_data_cb(uint8_t *data, int32_t len)
    		break;
    	}
 
-   	UNLOCK;
-
-   	frames_wanted = len / bytes_per_frame;
-   	ret = len;
-
-    	LOCK;
-
-
-    	output.device_frames = 0;
-    	output.updated = gettime_ms();
-    	output.frames_played_dmp = output.frames_played;
-
-    	do {
-    		frames = _output_frames(frames_wanted);
-    		frames_wanted -= frames;
-    	} while (frames_wanted > 0 && frames != 0);
-
-    	if (frames_wanted > 0) {
-    		LOG_DEBUG("pad with silence");
-    		memset(optr, 0, frames_wanted * bytes_per_frame);
-    	}
-
-    	if (output.state == OUTPUT_OFF) {
-    		LOG_INFO("output off");
-    		ret = 0;
-    	}
-
-    	UNLOCK;
-
-    	return ret;
+	// TODO update with proper bytes_per_frame handling
+   	frames = len / 4;
+   	output.device_frames = 0;
+   	output.updated = gettime_ms();
+   	output.frames_played_dmp = output.frames_played;
+  	frames = _output_frames(frames);
+	
+	UNLOCK;
+	
+	for (i = 0; i < frames*2; i++) {
+		*optr++ = *iptr++ >> 16;
+		*optr++ = *iptr++ >> 16;
+	}
+	
+	buffill = 0;
+   
+	return frames * 4;
 }
 
 static void a2d_app_heart_beat(void *arg)