From 5303ddeefc6ea473902d92f605e4081a4faaa1ec Mon Sep 17 00:00:00 2001 From: Matthias Ringwald Date: Thu, 26 Jan 2017 22:02:33 +0100 Subject: [PATCH] sco_util: fix receive CVSD SCO data for big endian --- example/sco_demo_util.c | 26 ++++++++++++++++++-------- 1 file changed, 18 insertions(+), 8 deletions(-) diff --git a/example/sco_demo_util.c b/example/sco_demo_util.c index e0b75b6c1..d53e25cb7 100644 --- a/example/sco_demo_util.c +++ b/example/sco_demo_util.c @@ -353,6 +353,7 @@ static void handle_pcm_data(int16_t * data, int num_samples, int num_channels, i // printf("handle_pcm_data num samples %u, sample rate %d\n", num_samples, num_channels); #ifdef HAVE_PORTAUDIO + // samples in callback in host endianess, ready for PortAudio playback btstack_ring_buffer_write(&pa_output_ring_buffer, (uint8_t *)data, num_samples*num_channels*2); #else UNUSED(num_channels); @@ -423,7 +424,7 @@ static void sco_demo_init_CVSD(void){ static void sco_demo_receive_CVSD(uint8_t * packet, uint16_t size){ if (!num_samples_to_write) return; - int16_t audio_frame_out[255]; // + int16_t audio_frame_out[128]; // if (size > sizeof(audio_frame_out)){ printf("sco_demo_receive_CVSD: SCO packet larger than local output buffer - dropping data.\n"); @@ -432,18 +433,27 @@ static void sco_demo_receive_CVSD(uint8_t * packet, uint16_t size){ const int audio_bytes_read = size - 3; const int num_samples = audio_bytes_read / CVSD_BYTES_PER_FRAME; const int samples_to_write = btstack_min(num_samples, num_samples_to_write); - -#if 0 - btstack_cvsd_plc_process_data(&cvsd_plc_state, (int8_t *)(packet+3), num_samples, audio_frame_out); -#else - memcpy(audio_frame_out, packet+3, audio_bytes_read); -#endif - wav_writer_write_int16(samples_to_write, audio_frame_out); + // Samples in CVSD SCO packet are in little endian, ready for wav files (take shortcut) + wav_writer_write_le_int16(samples_to_write, audio_frame_out); num_samples_to_write -= samples_to_write; if (num_samples_to_write == 0){ sco_demo_close(); } + + // convert into host endian + int16_t audio_frame_in[128]; + int i; + for (i=0;i