From 3f7648013808edfd100d295adda1909c15400553 Mon Sep 17 00:00:00 2001 From: "Stephen E. Baker" Date: Mon, 26 Jan 2015 21:40:35 -0500 Subject: [PATCH] Fix stutter in ffmpeg movie audio Attempting to calculate the resampling delay for determining the number of out samples was actually causing underruns. There is no harm in not accounting for any resample delay because any samples not taken are buffered for the next conversion. --- CorsixTH/Src/th_movie.cpp | 22 ---------------------- 1 file changed, 22 deletions(-) diff --git a/CorsixTH/Src/th_movie.cpp b/CorsixTH/Src/th_movie.cpp index 28219f6676..9217ef3698 100644 --- a/CorsixTH/Src/th_movie.cpp +++ b/CorsixTH/Src/th_movie.cpp @@ -1004,7 +1004,6 @@ int THMovie::decodeAudioFrame(bool fFirst) } } -#if LIBSWRESAMPLE_VERSION_INT < AV_VERSION_INT(0, 12, 100) //over-estimate output samples iOutSamples = (int)av_rescale_rnd(m_frame->nb_samples, m_iMixerFrequency, m_pAudioCodecContext->sample_rate, AV_ROUND_UP); iSampleSize = av_get_bytes_per_sample(AV_SAMPLE_FMT_S16) * iOutSamples * m_iMixerChannels; @@ -1018,27 +1017,6 @@ int THMovie::decodeAudioFrame(bool fFirst) m_pbAudioBuffer = (uint8_t*)av_malloc(iSampleSize); m_iAudioBufferMaxSize = iSampleSize; } -#else - //output samples = (input samples + delay) * output rate / input rate - iOutSamples = (int)av_rescale_rnd( - swr_get_delay( - m_pAudioResampleContext, - m_pAudioCodecContext->sample_rate) + m_frame->nb_samples, - m_iMixerFrequency, - m_pAudioCodecContext->sample_rate, - AV_ROUND_UP); - iSampleSize = av_samples_get_buffer_size(NULL, m_iMixerChannels, iOutSamples, AV_SAMPLE_FMT_S16, 0); - - if(iSampleSize > m_iAudioBufferMaxSize) - { - if(m_iAudioBufferMaxSize > 0) - { - av_free(m_pbAudioBuffer); - } - av_samples_alloc(&m_pbAudioBuffer, NULL, m_iMixerChannels, iOutSamples, AV_SAMPLE_FMT_S16, 0); - m_iAudioBufferMaxSize = iSampleSize; - } -#endif #ifdef CORSIX_TH_USE_FFMPEG swr_convert(m_pAudioResampleContext, &m_pbAudioBuffer, iOutSamples, (const uint8_t**)&m_frame->data[0], m_frame->nb_samples);