From 2bc7bac0f34e78f1e7bd2fdfbb9caa2d90b57887 Mon Sep 17 00:00:00 2001 From: Timotej Lazar Date: Sun, 31 May 2020 12:34:18 +0200 Subject: [PATCH] Bink: move format-independent AL initialization to BinkStartMovie --- src/bink.c | 39 +++++++++++++++++++-------------------- 1 file changed, 19 insertions(+), 20 deletions(-) diff --git a/src/bink.c b/src/bink.c index d3310f6..eba59e3 100644 --- a/src/bink.c +++ b/src/bink.c @@ -148,26 +148,6 @@ static int DecodeAudioFrame(struct binkMovie* aMovie) return 0; if (!aMovie->alInited) { - alGenSources(1, &aMovie->alSource); - AL_CHECK(); - - alGenBuffers(FRAMEQUEUESIZE, aMovie->alBuffers); - AL_CHECK(); - - alSource3f(aMovie->alSource, AL_POSITION, 0.0, 0.0, 0.0); - alSource3f(aMovie->alSource, AL_VELOCITY, 0.0, 0.0, 0.0); - alSource3f(aMovie->alSource, AL_DIRECTION, 0.0, 0.0, 0.0); - alSourcef(aMovie->alSource, AL_ROLLOFF_FACTOR, 0.0); - alSourcei(aMovie->alSource, AL_SOURCE_RELATIVE, AL_TRUE); - alSourcef(aMovie->alSource, AL_PITCH, 1); - alSourcef(aMovie->alSource, AL_GAIN, 1.0); - - AL_CHECK(); - - aMovie->alNumFreeBuffers = FRAMEQUEUESIZE; - for (int i=0; i < aMovie->alNumFreeBuffers; i++) - aMovie->alFreeBuffers[i] = aMovie->alBuffers[i]; - switch (aMovie->audioFrame->channel_layout) { case AV_CH_LAYOUT_MONO: aMovie->alFormat = (aMovie->audioFrame->format == AV_SAMPLE_FMT_U8) ? @@ -373,6 +353,25 @@ static int BinkStartMovie(struct binkMovie* aMovie, const char* aFilename, aMovie->audioCodecContext = context; aMovie->audioStreamIndex = i; aMovie->audioFrame = av_frame_alloc(); + + alGenSources(1, &aMovie->alSource); + AL_CHECK(); + + alGenBuffers(FRAMEQUEUESIZE, aMovie->alBuffers); + AL_CHECK(); + + alSource3f(aMovie->alSource, AL_POSITION, 0.0, 0.0, 0.0); + alSource3f(aMovie->alSource, AL_VELOCITY, 0.0, 0.0, 0.0); + alSource3f(aMovie->alSource, AL_DIRECTION, 0.0, 0.0, 0.0); + alSourcef(aMovie->alSource, AL_ROLLOFF_FACTOR, 0.0); + alSourcei(aMovie->alSource, AL_SOURCE_RELATIVE, AL_TRUE); + alSourcef(aMovie->alSource, AL_PITCH, 1.0); + alSourcef(aMovie->alSource, AL_GAIN, 1.0); + + aMovie->alNumFreeBuffers = FRAMEQUEUESIZE; + for (int i = 0; i < aMovie->alNumFreeBuffers; i++) + aMovie->alFreeBuffers[i] = aMovie->alBuffers[i]; + numStreams++; } else { avcodec_free_context(&context);