From a2c14e9c5fe1f3ceaa074e37b117e173a96c9488 Mon Sep 17 00:00:00 2001 From: Thomas Goyne Date: Mon, 17 Dec 2012 10:11:33 -0800 Subject: [PATCH] Check the error code when FFMS2 can't create an indexer Creating an indexer can fail for reasons other than the file not existing. This check is still not completely correct, since FFMS2 uses the wrong error codes in a bunch of places. --- aegisub/src/audio_provider_ffmpegsource.cpp | 8 ++++++-- aegisub/src/video_provider_ffmpegsource.cpp | 8 ++++++-- 2 files changed, 12 insertions(+), 4 deletions(-) diff --git a/aegisub/src/audio_provider_ffmpegsource.cpp b/aegisub/src/audio_provider_ffmpegsource.cpp index a2d7b46c2..baea19045 100644 --- a/aegisub/src/audio_provider_ffmpegsource.cpp +++ b/aegisub/src/audio_provider_ffmpegsource.cpp @@ -72,8 +72,12 @@ void FFmpegSourceAudioProvider::LoadAudio(wxString filename) { wxString FileNameShort = wxFileName(filename).GetShortPath(); FFMS_Indexer *Indexer = FFMS_CreateIndexer(FileNameShort.utf8_str(), &ErrInfo); - if (!Indexer) - throw agi::FileNotFoundError(ErrInfo.Buffer); + if (!Indexer) { + if (ErrInfo.SubType == FFMS_ERROR_FILE_READ) + throw agi::FileNotFoundError(ErrInfo.Buffer); + else + throw agi::AudioDataNotFoundError(ErrInfo.Buffer, 0); + } std::map TrackList = GetTracksOfType(Indexer, FFMS_TYPE_AUDIO); if (TrackList.size() <= 0) diff --git a/aegisub/src/video_provider_ffmpegsource.cpp b/aegisub/src/video_provider_ffmpegsource.cpp index ccf993be7..fea795c95 100644 --- a/aegisub/src/video_provider_ffmpegsource.cpp +++ b/aegisub/src/video_provider_ffmpegsource.cpp @@ -85,8 +85,12 @@ void FFmpegSourceVideoProvider::LoadVideo(wxString filename) { wxString FileNameShort = wxFileName(filename).GetShortPath(); FFMS_Indexer *Indexer = FFMS_CreateIndexer(FileNameShort.utf8_str(), &ErrInfo); - if (!Indexer) - throw agi::FileNotFoundError(ErrInfo.Buffer); + if (!Indexer) { + if (ErrInfo.SubType == FFMS_ERROR_FILE_READ) + throw agi::FileNotFoundError(ErrInfo.Buffer); + else + throw VideoNotSupported(ErrInfo.Buffer); + } std::map TrackList = GetTracksOfType(Indexer, FFMS_TYPE_VIDEO); if (TrackList.size() <= 0)