Improved program flow

main
eleccoder 2022-12-21 22:00:47 +01:00
rodzic d6867e1a84
commit 43a281861a
1 zmienionych plików z 14 dodań i 8 usunięć

Wyświetl plik

@ -116,19 +116,23 @@ static void aprs_pico_renderAudioSamples(audio_buffer_pool_t* audio_buffer_pool,
assert(audio_buffer_pool != NULL); assert(audio_buffer_pool != NULL);
assert(pcm_data != NULL); assert(pcm_data != NULL);
unsigned int idx_src = 0u; unsigned int idx_src = 0u;
bool is_keep_going = true; bool is_all_samples_processed = num_samples == 0u;
// Write the PCM sample data into the audio buffer(s) while applying the 'volume' value // Write the PCM sample data into the next audio buffer while applying the 'volume' value
while (is_keep_going) while (!is_all_samples_processed)
{ {
audio_buffer_t* audio_buffer = take_audio_buffer(audio_buffer_pool, true); audio_buffer_t* audio_buffer = take_audio_buffer(audio_buffer_pool, true);
int16_t* audio_buffer_pcm_data = (int16_t*)audio_buffer->buffer->bytes; int16_t* audio_buffer_pcm_data = (int16_t*)audio_buffer->buffer->bytes;
for (unsigned int idx_dst = 0u; idx_dst < audio_buffer->max_sample_count; idx_dst++) unsigned int idx_dst = 0u;
while (!is_all_samples_processed && (idx_dst < audio_buffer->max_sample_count))
{ {
audio_buffer_pcm_data[idx_dst] = ((int32_t)volume * (int32_t)pcm_data[idx_src]) >> 8u; audio_buffer_pcm_data[idx_dst] = ((int32_t)volume * (int32_t)pcm_data[idx_src]) >> 8u;
idx_src++; idx_src++;
idx_dst++;
if (idx_src == num_samples) if (idx_src == num_samples)
{ {
@ -138,13 +142,15 @@ static void aprs_pico_renderAudioSamples(audio_buffer_pool_t* audio_buffer_pool,
} }
else else
{ {
is_keep_going = false; is_all_samples_processed = true;
break;
} }
} }
} }
audio_buffer->sample_count = audio_buffer->max_sample_count; assert(idx_src <= num_samples);
assert(idx_dst <= audio_buffer->max_sample_count);
audio_buffer->sample_count = idx_dst;
give_audio_buffer(audio_buffer_pool, audio_buffer); give_audio_buffer(audio_buffer_pool, audio_buffer);
} }
} }