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);