diff --git a/aegisub/src/ass_exporter.cpp b/aegisub/src/ass_exporter.cpp index e74d69c14..b9087db35 100644 --- a/aegisub/src/ass_exporter.cpp +++ b/aegisub/src/ass_exporter.cpp @@ -131,9 +131,9 @@ wxArrayString AssExporter::GetAllFilterNames() { /// @param export_dialog /// @return /// -AssFile *AssExporter::ExportTransform(wxWindow *export_dialog) { +AssFile *AssExporter::ExportTransform(wxWindow *export_dialog,bool copy) { // Copy - AssFile *Subs = new AssFile(*OriginalSubs); + AssFile *Subs = copy ? new AssFile(*OriginalSubs) : OriginalSubs; // Run filters for (FilterList::iterator cur=Filters.begin();cur!=Filters.end();cur++) { @@ -151,7 +151,7 @@ AssFile *AssExporter::ExportTransform(wxWindow *export_dialog) { /// @param export_dialog /// void AssExporter::Export(wxString filename, wxString charset, wxWindow *export_dialog) { - std::auto_ptr Subs(ExportTransform(export_dialog)); + std::auto_ptr Subs(ExportTransform(export_dialog,true)); Subs->Save(filename,false,false,charset); } diff --git a/aegisub/src/ass_exporter.h b/aegisub/src/ass_exporter.h index d254ba810..d6c270a82 100644 --- a/aegisub/src/ass_exporter.h +++ b/aegisub/src/ass_exporter.h @@ -93,7 +93,7 @@ public: void AddAutoFilters(); void DrawSettings(wxWindow *parent,wxSizer *AddTo); void Export(wxString file, wxString charset, wxWindow *export_dialog=NULL); - AssFile *ExportTransform(wxWindow *export_dialog=NULL); + AssFile *ExportTransform(wxWindow *export_dialog=NULL,bool copy=false); wxSizer *GetSettingsSizer(wxString name); /// @brief DOCME diff --git a/aegisub/src/threaded_frame_source.cpp b/aegisub/src/threaded_frame_source.cpp index 0a3d1761a..437def4cf 100644 --- a/aegisub/src/threaded_frame_source.cpp +++ b/aegisub/src/threaded_frame_source.cpp @@ -86,6 +86,10 @@ std::tr1::shared_ptr ThreadedFrameSource::ProcFrame(int frameNum // other lines will probably not be viewed before the file changes // again), and if it's a different frame, export the entire file. if (singleFrame == -1) { + AssExporter exporter(subs.get()); + exporter.AddAutoFilters(); + exporter.ExportTransform(); + singleFrame = frameNum; // Copying a nontrivially sized AssFile is fairly slow, so // instead muck around with its innards to just temporarily @@ -173,14 +177,12 @@ ThreadedFrameSource::~ThreadedFrameSource() { } void ThreadedFrameSource::LoadSubtitles(AssFile *subs) throw() { - AssExporter exporter(subs); - exporter.AddAutoFilters(); - AssFile *exported = exporter.ExportTransform(); + subs = new AssFile(*subs); wxMutexLocker locker(jobMutex); // Set nextSubs and let the worker thread move it to subs so that we don't // have to lock fileMutex on the GUI thread, as that can be locked for // extended periods of time with slow-rendering subtitles - nextSubs.reset(exported); + nextSubs.reset(subs); } void ThreadedFrameSource::RequestFrame(int frame, double time) throw() {