Bink: move format-independent AL initialization to BinkStartMovie

This commit is contained in:
Timotej Lazar 2020-05-31 12:34:18 +02:00
parent ea39a84273
commit 2bc7bac0f3

View file

@ -148,26 +148,6 @@ static int DecodeAudioFrame(struct binkMovie* aMovie)
return 0; return 0;
if (!aMovie->alInited) { 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) { switch (aMovie->audioFrame->channel_layout) {
case AV_CH_LAYOUT_MONO: case AV_CH_LAYOUT_MONO:
aMovie->alFormat = (aMovie->audioFrame->format == AV_SAMPLE_FMT_U8) ? 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->audioCodecContext = context;
aMovie->audioStreamIndex = i; aMovie->audioStreamIndex = i;
aMovie->audioFrame = av_frame_alloc(); 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++; numStreams++;
} else { } else {
avcodec_free_context(&context); avcodec_free_context(&context);