From 4133806fe7404d20845eb87c783bb8e4d6542f08 Mon Sep 17 00:00:00 2001 From: Thomas Goyne Date: Thu, 22 Dec 2011 21:29:29 +0000 Subject: [PATCH] Allow opening video with no working subtitle providers enabled Originally committed to SVN as r6126. --- aegisub/src/subtitles_provider.cpp | 2 +- aegisub/src/threaded_frame_source.cpp | 14 ++++++++++++-- aegisub/src/threaded_frame_source.h | 6 ++++-- 3 files changed, 17 insertions(+), 5 deletions(-) diff --git a/aegisub/src/subtitles_provider.cpp b/aegisub/src/subtitles_provider.cpp index 7c1a0cf3d..ec8d4286b 100644 --- a/aegisub/src/subtitles_provider.cpp +++ b/aegisub/src/subtitles_provider.cpp @@ -53,7 +53,7 @@ /// SubtitlesProvider* SubtitlesProviderFactory::GetProvider() { std::vector list = GetClasses(OPT_GET("Subtitle/Provider")->GetString()); - if (list.empty()) throw "No subtitle providers are available."; + if (list.empty()) throw wxString("No subtitle providers are available."); // Get provider wxString error; diff --git a/aegisub/src/threaded_frame_source.cpp b/aegisub/src/threaded_frame_source.cpp index bbdd9ed7f..e6e43f507 100644 --- a/aegisub/src/threaded_frame_source.cpp +++ b/aegisub/src/threaded_frame_source.cpp @@ -76,7 +76,7 @@ std::tr1::shared_ptr ThreadedFrameSource::ProcFrame(int frameNum // This deliberately results in a call to LoadSubtitles while a render // is pending making the queued render use the new file - if (!raw) { + if (!raw && provider) { try { wxMutexLocker locker(fileMutex); if (subs.get() && singleFrame != frameNum) { @@ -167,9 +167,19 @@ void *ThreadedFrameSource::Entry() { return EXIT_SUCCESS; } +static SubtitlesProvider *get_subs_provider(wxEvtHandler *parent) { + try { + return SubtitlesProviderFactory::GetProvider(); + } + catch (wxString const& err) { + parent->AddPendingEvent(SubtitlesProviderErrorEvent(err)); + return 0; + } +} + ThreadedFrameSource::ThreadedFrameSource(wxString videoFileName, wxEvtHandler *parent) : wxThread(wxTHREAD_JOINABLE) -, provider(SubtitlesProviderFactory::GetProvider()) +, provider(get_subs_provider(parent)) , videoProvider(VideoProviderFactory::GetProvider(videoFileName)) , parent(parent) , nextTime(-1.) diff --git a/aegisub/src/threaded_frame_source.h b/aegisub/src/threaded_frame_source.h index 2481eef9c..90b8c0fa5 100644 --- a/aegisub/src/threaded_frame_source.h +++ b/aegisub/src/threaded_frame_source.h @@ -42,6 +42,8 @@ #endif #include +#include + #include "video_frame.h" class AssFile; @@ -53,9 +55,9 @@ class VideoProviderError; /// @brief An asynchronous video decoding and subtitle rendering wrapper class ThreadedFrameSource : public wxThread { /// Subtitles provider - std::auto_ptr provider; + agi::scoped_ptr provider; /// Video provider - std::auto_ptr videoProvider; + agi::scoped_ptr videoProvider; /// Event handler to send FrameReady events to wxEvtHandler *parent;