From df565be3f2e31ea5be2a89e831ec677787ecd6cd Mon Sep 17 00:00:00 2001 From: odrling Date: Sat, 5 Mar 2022 03:08:45 +0100 Subject: [PATCH] don't delay audio on matroska files --- src/audio_provider_ffmpegsource.cpp | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/src/audio_provider_ffmpegsource.cpp b/src/audio_provider_ffmpegsource.cpp index 46e1412f5..a36f04743 100644 --- a/src/audio_provider_ffmpegsource.cpp +++ b/src/audio_provider_ffmpegsource.cpp @@ -43,6 +43,8 @@ #include +#include + namespace { class FFmpegSourceAudioProvider final : public agi::AudioProvider, FFmpegSourceProvider { /// audio source object @@ -90,6 +92,8 @@ void FFmpegSourceAudioProvider::LoadAudio(agi::fs::path const& filename) { throw agi::AudioDataNotFound(ErrInfo.Buffer); } + const char* container = FFMS_GetFormatNameI(Indexer); + std::map TrackList = GetTracksOfType(Indexer, FFMS_TYPE_AUDIO); // initialize the track number to an invalid value so we can detect later on @@ -142,8 +146,13 @@ void FFmpegSourceAudioProvider::LoadAudio(agi::fs::path const& filename) { // update access time of index file so it won't get cleaned away agi::fs::Touch(CacheName); - AudioSource = FFMS_CreateAudioSource(filename.string().c_str(), TrackNumber, Index, FFMS_DELAY_FIRST_VIDEO_TRACK, &ErrInfo); - if (!AudioSource) + int delay_mode; + if (boost::algorithm::contains(container, "matroska")) + delay_mode = FFMS_DELAY_TIME_ZERO; + else + delay_mode = FFMS_DELAY_FIRST_VIDEO_TRACK; + + AudioSource = FFMS_CreateAudioSource(filename.string().c_str(), TrackNumber, Index, delay_mode, &ErrInfo); if (!AudioSource) throw agi::AudioProviderError(std::string("Failed to open audio track: ") + ErrInfo.Buffer); const FFMS_AudioProperties AudioInfo = *FFMS_GetAudioProperties(AudioSource);