mirror of
https://github.com/bluekitchen/btstack.git
synced 2025-03-28 19:20:54 +00:00
test: use stride feature
This commit is contained in:
parent
e40ee29a88
commit
c3e2434db7
@ -212,7 +212,7 @@ int main (int argc, const char * argv[]){
|
||||
uint8_t tmp_BEC_detect;
|
||||
uint8_t BFI = 0;
|
||||
|
||||
uint8_t status = lc3_decoder->decode_signed_16(&decoder_contexts[channel], read_buffer, bytes_per_frame, BFI, &pcm[channel * MAX_SAMPLES_PER_FRAME], 1, &tmp_BEC_detect);
|
||||
uint8_t status = lc3_decoder->decode_signed_16(&decoder_contexts[channel], read_buffer, bytes_per_frame, BFI, &pcm[channel], num_channels, &tmp_BEC_detect);
|
||||
if (status != ERROR_CODE_SUCCESS){
|
||||
printf("Error %u\n", status);
|
||||
done = true;
|
||||
@ -222,14 +222,7 @@ int main (int argc, const char * argv[]){
|
||||
|
||||
if (done) break;
|
||||
|
||||
uint16_t sample;
|
||||
int16_t wav_frame[MAX_NUM_CHANNELS];
|
||||
for (sample = 0 ; sample < number_samples_per_frame ; sample++){
|
||||
for (channel = 0; channel < num_channels; channel++) {
|
||||
wav_frame[channel] = pcm[channel * MAX_SAMPLES_PER_FRAME + sample];
|
||||
}
|
||||
wav_writer_write_int16(num_channels, wav_frame);
|
||||
}
|
||||
wav_writer_write_int16(num_channels * number_samples_per_frame, pcm);
|
||||
|
||||
frame_count++;
|
||||
}
|
||||
|
@ -60,7 +60,6 @@
|
||||
|
||||
static uint8_t write_buffer[200];
|
||||
static int16_t samples_buffer[MAX_SAMPLES_PER_FRAME + MAX_NUM_CHANNELS];
|
||||
static int16_t frame_buffer[MAX_SAMPLES_PER_FRAME];
|
||||
|
||||
static uint32_t frame_count = 0;
|
||||
|
||||
@ -164,11 +163,7 @@ int main (int argc, const char * argv[]){
|
||||
|
||||
// encode frame by frame
|
||||
for (channel = 0; channel < num_channels ; channel++){
|
||||
uint16_t sample;
|
||||
for (sample = 0 ; sample < number_samples_per_frame ; sample++){
|
||||
frame_buffer[sample] = samples_buffer[ sample * num_channels + channel];
|
||||
}
|
||||
status = lc3_encoder->encode_signed_16(&encoder_contexts[channel], frame_buffer, 1, write_buffer, bytes_per_frame);
|
||||
status = lc3_encoder->encode_signed_16(&encoder_contexts[channel], &samples_buffer[channel], num_channels, write_buffer, bytes_per_frame);
|
||||
if (status != ERROR_CODE_SUCCESS){
|
||||
printf("Error %u\n", status);
|
||||
break;
|
||||
|
@ -599,32 +599,20 @@ static void iso_packet_handler(uint8_t packet_type, uint16_t channel, uint8_t *p
|
||||
uint8_t tmp_BEC_detect;
|
||||
uint8_t BFI = 0;
|
||||
(void) lc3_decoder->decode_signed_16(&decoder_contexts[bis_channel], &packet[offset], iso_sdu_length, BFI,
|
||||
&pcm[bis_channel * MAX_SAMPLES_PER_FRAME], 1,
|
||||
&pcm[bis_channel], num_bis,
|
||||
&tmp_BEC_detect);
|
||||
|
||||
// interleave channel samples
|
||||
// process complete iso frame
|
||||
if ((bis_channel + 1) == num_bis) {
|
||||
uint16_t sample;
|
||||
int16_t wav_frame[MAX_NUM_BIS];
|
||||
uint8_t wav_channel;
|
||||
for (sample = 0; sample < number_samples_per_frame; sample++) {
|
||||
for (wav_channel = 0; wav_channel < num_bis; wav_channel++) {
|
||||
wav_frame[wav_channel] = pcm[wav_channel * MAX_SAMPLES_PER_FRAME + sample];
|
||||
}
|
||||
|
||||
// write wav sample
|
||||
if (lc3_frames < DUMP_LEN_LC3_FRAMES) {
|
||||
wav_writer_write_int16(num_bis, wav_frame);
|
||||
}
|
||||
|
||||
// store sample in playback buffer
|
||||
uint32_t bytes_to_store = num_bis * 2;
|
||||
samples_received++;
|
||||
if (btstack_ring_buffer_bytes_free(&playback_buffer) >= bytes_to_store) {
|
||||
btstack_ring_buffer_write(&playback_buffer, (uint8_t *) wav_frame, bytes_to_store);
|
||||
} else {
|
||||
samples_dropped++;
|
||||
}
|
||||
// write wav samples
|
||||
wav_writer_write_int16(num_bis * number_samples_per_frame, pcm);
|
||||
// store samples in playback buffer
|
||||
uint32_t bytes_to_store = num_bis * number_samples_per_frame * 2;
|
||||
samples_received += number_samples_per_frame;
|
||||
if (btstack_ring_buffer_bytes_free(&playback_buffer) >= bytes_to_store) {
|
||||
btstack_ring_buffer_write(&playback_buffer, (uint8_t *) pcm, bytes_to_store);
|
||||
} else {
|
||||
samples_dropped += number_samples_per_frame;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -253,7 +253,6 @@ static uint8_t menu_variant;
|
||||
static int hxcmod_initialized;
|
||||
static modcontext mod_context;
|
||||
static tracker_buffer_state trkbuf;
|
||||
static int16_t mod_pcm[MAX_NUM_BIS * MAX_SAMPLES_PER_FRAME];
|
||||
|
||||
// sine generator
|
||||
static uint8_t sine_step;
|
||||
@ -379,7 +378,7 @@ static void generate_audio(void){
|
||||
uint8_t channel;
|
||||
for (channel = 0; channel < num_bis; channel++) {
|
||||
int16_t value = sine_int16[sine_phases[channel]] / 4;
|
||||
pcm[channel * MAX_SAMPLES_PER_FRAME + sample] = value;
|
||||
pcm[sample * num_bis + channel] = value;
|
||||
sine_phases[channel] += sine_step * (1+channel); // second channel, double frequency
|
||||
if (sine_phases[channel] >= (sizeof(sine_int16) / sizeof(int16_t))) {
|
||||
sine_phases[channel] = 0;
|
||||
@ -389,18 +388,12 @@ static void generate_audio(void){
|
||||
break;
|
||||
case AUDIO_SOURCE_MODPLAYER:
|
||||
// mod player configured for stereo
|
||||
hxcmod_fillbuffer(&mod_context, (unsigned short *) &mod_pcm[0], number_samples_per_frame, &trkbuf);
|
||||
uint16_t i;
|
||||
if (num_bis == 1){
|
||||
hxcmod_fillbuffer(&mod_context, (unsigned short *) pcm, number_samples_per_frame, &trkbuf);
|
||||
if (num_bis == 1) {
|
||||
// stereo -> mono
|
||||
uint16_t i;
|
||||
for (i=0;i<number_samples_per_frame;i++){
|
||||
pcm[i] = (mod_pcm[2*i] / 2) + (mod_pcm[2*i+1] / 2);
|
||||
}
|
||||
} else {
|
||||
// sort interleaved samples
|
||||
for (i=0;i<number_samples_per_frame;i++){
|
||||
pcm[i] = mod_pcm[2*i];
|
||||
pcm[MAX_SAMPLES_PER_FRAME+i] = mod_pcm[2*i+1];
|
||||
pcm[i] = (pcm[2*i] / 2) + (pcm[2*i+1] / 2);
|
||||
}
|
||||
}
|
||||
break;
|
||||
@ -446,7 +439,7 @@ static void encode_and_send(uint8_t bis_index){
|
||||
memset(&buffer[9], iso_frame_counter, octets_per_frame - 1);
|
||||
#else
|
||||
// encode as lc3
|
||||
lc3_encoder->encode_signed_16(&encoder_contexts[bis_index], &pcm[bis_index * MAX_SAMPLES_PER_FRAME], 1, &buffer[8], octets_per_frame);
|
||||
lc3_encoder->encode_signed_16(&encoder_contexts[bis_index], &pcm[bis_index], num_bis, &buffer[8], octets_per_frame);
|
||||
#endif
|
||||
// send
|
||||
hci_send_iso_packet_buffer(4 + 0 + 4 + octets_per_frame);
|
||||
|
@ -582,33 +582,21 @@ static void iso_packet_handler(uint8_t packet_type, uint16_t channel, uint8_t *p
|
||||
uint8_t tmp_BEC_detect;
|
||||
uint8_t BFI = 0;
|
||||
(void) lc3_decoder->decode_signed_16(&decoder_contexts[channel], &packet[offset], octets_per_frame, BFI,
|
||||
&pcm[channel * MAX_SAMPLES_PER_FRAME], 1,
|
||||
&pcm[channel], num_channels,
|
||||
&tmp_BEC_detect);
|
||||
offset += octets_per_frame;
|
||||
}
|
||||
|
||||
// interleave channel samples
|
||||
uint16_t sample;
|
||||
int16_t wav_frame[MAX_CHANNELS];
|
||||
uint8_t wav_channel;
|
||||
for (sample = 0; sample < number_samples_per_frame; sample++) {
|
||||
for (wav_channel = 0; wav_channel < num_channels; wav_channel++) {
|
||||
wav_frame[wav_channel] = pcm[wav_channel * MAX_SAMPLES_PER_FRAME + sample];
|
||||
}
|
||||
// write wav samples
|
||||
wav_writer_write_int16(num_channels * number_samples_per_frame, pcm);
|
||||
|
||||
// write wav sample
|
||||
if (lc3_frames < DUMP_LEN_LC3_FRAMES) {
|
||||
wav_writer_write_int16(num_channels, wav_frame);
|
||||
}
|
||||
|
||||
// store sample in playback buffer
|
||||
uint32_t bytes_to_store = num_channels * 2;
|
||||
samples_received++;
|
||||
if (btstack_ring_buffer_bytes_free(&playback_buffer) >= bytes_to_store) {
|
||||
btstack_ring_buffer_write(&playback_buffer, (uint8_t *) wav_frame, bytes_to_store);
|
||||
} else {
|
||||
samples_dropped++;
|
||||
}
|
||||
// store samples in playback buffer
|
||||
uint32_t bytes_to_store = num_channels * number_samples_per_frame * 2;
|
||||
samples_received += number_samples_per_frame;
|
||||
if (btstack_ring_buffer_bytes_free(&playback_buffer) >= bytes_to_store) {
|
||||
btstack_ring_buffer_write(&playback_buffer, (uint8_t *) pcm, bytes_to_store);
|
||||
} else {
|
||||
samples_dropped += number_samples_per_frame;
|
||||
}
|
||||
|
||||
log_info("Samples in playback buffer %5u", btstack_ring_buffer_bytes_available(&playback_buffer) / (num_channels * 2));
|
||||
|
@ -170,7 +170,6 @@ static uint8_t menu_variant;
|
||||
static int hxcmod_initialized;
|
||||
static modcontext mod_context;
|
||||
static tracker_buffer_state trkbuf;
|
||||
static int16_t mod_pcm[MAX_CHANNELS * MAX_SAMPLES_PER_FRAME];
|
||||
|
||||
// sine generator
|
||||
static uint8_t sine_step;
|
||||
@ -296,7 +295,7 @@ static void generate_audio(void){
|
||||
uint8_t channel;
|
||||
for (channel = 0; channel < num_channels; channel++) {
|
||||
int16_t value = sine_int16[sine_phases[channel]] / 4;
|
||||
pcm[channel * MAX_SAMPLES_PER_FRAME + sample] = value;
|
||||
pcm[sample * num_channels + channel] = value;
|
||||
sine_phases[channel] += sine_step * (1+channel); // second channel, double frequency
|
||||
if (sine_phases[channel] >= (sizeof(sine_int16) / sizeof(int16_t))) {
|
||||
sine_phases[channel] = 0;
|
||||
@ -306,18 +305,12 @@ static void generate_audio(void){
|
||||
break;
|
||||
case AUDIO_SOURCE_MODPLAYER:
|
||||
// mod player configured for stereo
|
||||
hxcmod_fillbuffer(&mod_context, (unsigned short *) &mod_pcm[0], number_samples_per_frame, &trkbuf);
|
||||
uint16_t i;
|
||||
if (num_channels == 1){
|
||||
hxcmod_fillbuffer(&mod_context, (unsigned short *) pcm, number_samples_per_frame, &trkbuf);
|
||||
if (num_channels == 1) {
|
||||
// stereo -> mono
|
||||
uint16_t i;
|
||||
for (i=0;i<number_samples_per_frame;i++){
|
||||
pcm[i] = (mod_pcm[2*i] / 2) + (mod_pcm[2*i+1] / 2);
|
||||
}
|
||||
} else {
|
||||
// sort interleaved samples
|
||||
for (i=0;i<number_samples_per_frame;i++){
|
||||
pcm[i] = mod_pcm[2*i];
|
||||
pcm[MAX_SAMPLES_PER_FRAME+i] = mod_pcm[2*i+1];
|
||||
pcm[i] = (pcm[2*i] / 2) + (pcm[2*i+1] / 2);
|
||||
}
|
||||
}
|
||||
break;
|
||||
@ -366,7 +359,7 @@ static void encode_and_send(uint8_t cis_index){
|
||||
uint8_t channel;
|
||||
uint16_t offset = 8;
|
||||
for (channel = 0; channel < num_channels; channel++){
|
||||
lc3_encoder->encode_signed_16(&encoder_contexts[channel], &pcm[channel * MAX_SAMPLES_PER_FRAME], 1, &buffer[offset], octets_per_frame);
|
||||
lc3_encoder->encode_signed_16(&encoder_contexts[channel], &pcm[channel], num_channels, &buffer[offset], octets_per_frame);
|
||||
offset += octets_per_frame;
|
||||
}
|
||||
#endif
|
||||
|
Loading…
x
Reference in New Issue
Block a user