From 7ff196e6ae988dc10fe43bdd577e2d6d01c078f8 Mon Sep 17 00:00:00 2001 From: Martin Pulec Date: Mon, 18 Sep 2023 08:59:57 +0200 Subject: [PATCH] vidcap testcard audio: support for >1 channels --- src/video_capture/testcard.c | 19 +++++++++++++++---- 1 file changed, 15 insertions(+), 4 deletions(-) diff --git a/src/video_capture/testcard.c b/src/video_capture/testcard.c index 9e8d93338..92e162bed 100644 --- a/src/video_capture/testcard.c +++ b/src/video_capture/testcard.c @@ -128,12 +128,23 @@ struct testcard_state { }; static void configure_fallback_audio(struct testcard_state *s) { - static_assert(AUDIO_BPS == sizeof(int16_t), "Only 2-byte audio is supported for testcard audio at the moment"); + static_assert( + AUDIO_BPS == sizeof(int16_t), + "Only 2-byte audio is supported for testcard audio at the moment"); const double scale = 0.1; + int16_t *out = (int16_t *) s->audio_data; - for (int i = 0; i < AUDIO_BUFFER_SIZE(s->audio.ch_count) / AUDIO_BPS; i += 1) { - *((int16_t*)(void *)(&s->audio_data[i * AUDIO_BPS])) = round(sin(((double) i / ((double) AUDIO_SAMPLE_RATE / s->audio_frequency)) * M_PI * 2. ) * ((1U << (AUDIO_BPS * 8U - 1)) - 1) * scale); - + for (int i = 0; i < AUDIO_BUFFER_SIZE(s->audio.ch_count) / AUDIO_BPS / + s->audio.ch_count; + i += 1) { + const int16_t val = + round(sin(((double) i / ((double) AUDIO_SAMPLE_RATE / + s->audio_frequency)) * + M_PI * 2.) * + ((1U << (AUDIO_BPS * CHAR_BIT - 1)) - 1) * scale); + for (int j = 0; j < s->audio.ch_count; ++j) { + *out++ = val; + } } }