From 6b12f54d72db72fece8d52ff7f0e8870597861b8 Mon Sep 17 00:00:00 2001
From: Rodrigo Braz Monteiro <zeratul@cellosoft.com>
Date: Fri, 7 Mar 2008 21:24:14 +0000
Subject: [PATCH] Changed video provider to not depend on wxWidgets.

Originally committed to SVN as r1958.
---
 aegisub/include/aegisub/aegisub.h        |  3 +++
 aegisub/include/aegisub/video_provider.h |  8 ++++----
 aegisub/vfr.cpp                          |  6 ++----
 aegisub/vfr.h                            |  5 +++--
 aegisub/video_provider_avs.cpp           | 18 +++++++++---------
 aegisub/video_provider_avs.h             | 16 ++++++++--------
 aegisub/video_provider_cache.cpp         |  6 +++---
 aegisub/video_provider_cache.h           |  6 +++---
 aegisub/video_provider_dshow.cpp         | 14 +++++++-------
 aegisub/video_provider_dshow.h           | 10 +++++-----
 aegisub/video_provider_dummy.cpp         |  7 ++++---
 aegisub/video_provider_dummy.h           |  4 ++--
 aegisub/video_provider_manager.cpp       |  4 ++--
 13 files changed, 55 insertions(+), 52 deletions(-)

diff --git a/aegisub/include/aegisub/aegisub.h b/aegisub/include/aegisub/aegisub.h
index 721314d41..385b68901 100644
--- a/aegisub/include/aegisub/aegisub.h
+++ b/aegisub/include/aegisub/aegisub.h
@@ -52,6 +52,9 @@ namespace Aegisub {
 
 	// String array
 	typedef std::vector<String> StringArray;
+
+	// Integer array
+	typedef std::vector<int> IntArray;
 };
 
 
diff --git a/aegisub/include/aegisub/video_provider.h b/aegisub/include/aegisub/video_provider.h
index bfd9c43fc..b7f66ad3f 100644
--- a/aegisub/include/aegisub/video_provider.h
+++ b/aegisub/include/aegisub/video_provider.h
@@ -66,17 +66,17 @@ public:
 	virtual double GetFPS()=0;					// Get framerate in frames per second
 
 	// Use this to set any post-loading warnings, such as "being loaded with unreliable seeking"
-	virtual wxString GetWarning() { return _T(""); }
+	virtual Aegisub::String GetWarning() { return L""; }
 
 	// Name of decoder, e.g. "Avisynth/FFMPegSource"
-	virtual wxString GetDecoderName() { return _("Unknown"); }
+	virtual Aegisub::String GetDecoderName() { return L"Unknown"; }
 
 	// How many frames does this provider wants that Aegisub caches? Set to 0 if it doesn't require caching.
 	virtual int GetDesiredCacheSize() { return 0; }
 
 	// For providers that are natively time-based (e.g. DirectShow)
 	virtual bool IsNativelyByFrames() { return true; }
-	virtual void OverrideFrameTimeList(wxArrayInt list) {}	// Override the list with the provided one, for VFR handling
+	virtual void OverrideFrameTimeList(Aegisub::IntArray list) {}	// Override the list with the provided one, for VFR handling
 
 	// If this video provider has a built-in subtitles provider, return that
 	virtual SubtitlesProvider *GetAsSubtitlesProvider() { return NULL; }
@@ -87,5 +87,5 @@ public:
 // Factory
 class VideoProviderFactory {
 public:
-	virtual VideoProvider *CreateProvider(wxString video,double fps=0.0)=0;
+	virtual VideoProvider *CreateProvider(Aegisub::String video,double fps=0.0)=0;
 };
diff --git a/aegisub/vfr.cpp b/aegisub/vfr.cpp
index 14f742fb2..5ea76283f 100644
--- a/aegisub/vfr.cpp
+++ b/aegisub/vfr.cpp
@@ -404,10 +404,8 @@ int FrameRate::GetTimeAtFrame(int frame,bool start,bool exact) {
 
 ////////////////////////////////////////
 // Get the current list of frames/times
-wxArrayInt FrameRate::GetFrameTimeList() {
-	wxArrayInt final;
-	for (unsigned int i=0;i<Frame.size();i++) final.Add(Frame[i]);
-	return final;
+Aegisub::IntArray FrameRate::GetFrameTimeList() {
+	return Frame;
 }
 
 
diff --git a/aegisub/vfr.h b/aegisub/vfr.h
index bf6109f06..5ded182d2 100644
--- a/aegisub/vfr.h
+++ b/aegisub/vfr.h
@@ -47,6 +47,7 @@
 #include <vector>
 #include <wx/wxprec.h>
 #include <wx/dynarray.h>
+#include "include/aegisub/aegisub.h"
 
 
 ///////////////////////
@@ -65,7 +66,7 @@ class FrameRate {
 private:
 	double last_time;
 	int last_frame;
-	std::vector<int> Frame;
+	Aegisub::IntArray Frame;
 
 	// contains the assumed fps for v1 timecodes, average for v2 and actual fps for cfr
 	double AverageFrameRate; 
@@ -101,7 +102,7 @@ public:
 	ASS_FrameRateType GetFrameRateType() { return FrameRateType; };
 	wxString GetFilename() { return vfrFile; };
 
-	wxArrayInt GetFrameTimeList();
+	Aegisub::IntArray GetFrameTimeList();
 	double GetCommonFPS();
 };
 
diff --git a/aegisub/video_provider_avs.cpp b/aegisub/video_provider_avs.cpp
index b7f39a3a3..aa1831b5f 100644
--- a/aegisub/video_provider_avs.cpp
+++ b/aegisub/video_provider_avs.cpp
@@ -52,7 +52,7 @@
 
 ///////////////
 // Constructor
-AvisynthVideoProvider::AvisynthVideoProvider(wxString _filename, double _fps) {
+AvisynthVideoProvider::AvisynthVideoProvider(Aegisub::String _filename, double _fps) {
 	AVSTRACE(wxString::Format(_T("AvisynthVideoProvider: Creating new AvisynthVideoProvider: \"%s\", \"%s\""), _filename, _subfilename));
 	bool mpeg2dec3_priority = true;
 	RGB32Video = NULL;
@@ -97,7 +97,7 @@ AvisynthVideoProvider::~AvisynthVideoProvider() {
 
 /////////////////////////////////////////
 // Actually open the video into Avisynth
-PClip AvisynthVideoProvider::OpenVideo(wxString _filename, bool mpeg2dec3_priority) {
+PClip AvisynthVideoProvider::OpenVideo(Aegisub::String _filename, bool mpeg2dec3_priority) {
 	AVSTRACE(_T("AvisynthVideoProvider::OpenVideo: Opening video"));
 	wxMutexLocker lock(AviSynthMutex);
 	AVSTRACE(_T("AvisynthVideoProvider::OpenVideo: Got AVS mutex"));
@@ -107,7 +107,7 @@ PClip AvisynthVideoProvider::OpenVideo(wxString _filename, bool mpeg2dec3_priori
 	usedDirectShow = false;
 	decoderName = _("Unknown");
 
-	wxString extension = _filename.Right(4);
+	wxString extension = wxString(_filename.c_str()).Right(4);
 	extension.LowerCase();
 
 	try {
@@ -369,7 +369,7 @@ const AegiVideoFrame AvisynthVideoProvider::GetFrame(int _n,int formatMask) {
 
 ////////////////////////////////////////////////////////
 // Apply VSFilter subtitles, or whatever is appropriate
-PClip AvisynthVideoProvider::ApplySubtitles(wxString _filename, PClip videosource) {
+PClip AvisynthVideoProvider::ApplySubtitles(Aegisub::String _filename, PClip videosource) {
 	AVSTRACE(_T("AvisynthVideoProvider::ApplySutitles: Applying subtitles"));
 	wxMutexLocker lock(AviSynthMutex);
 	AVSTRACE(_T("AvisynthVideoProvider::ApplySutitles: Got AVS mutex"));
@@ -383,7 +383,7 @@ PClip AvisynthVideoProvider::ApplySubtitles(wxString _filename, PClip videosourc
 
 	try {
 		AVSTRACE(_T("AvisynthVideoProvider::ApplySutitles: Now invoking ") + rendererCallString);
-		script = env->Invoke(rendererCallString.mb_str(wxConvUTF8), AVSValue(args,2));
+		script = env->Invoke(wxString(rendererCallString.c_str()).mb_str(wxConvUTF8), AVSValue(args,2));
 		AVSTRACE(_T("AvisynthVideoProvider::ApplySutitles: Invoked successfully"));
 	}
 	catch (AvisynthError &err) {
@@ -422,7 +422,7 @@ void AvisynthVideoProvider::LoadSubtitles(AssFile *subs) {
 	delete subs;
 
 	// Load subtitles
-	SubtitledVideo = ApplySubtitles(subfilename, RGB32Video);
+	SubtitledVideo = ApplySubtitles(subfilename.c_str(), RGB32Video);
 	AVSTRACE(_T("AvisynthVideoProvider::RefreshSubtitles: Subtitles refreshed"));
 	vi = SubtitledVideo->GetVideoInfo();
 	AVSTRACE(_T("AvisynthVideoProvider: Got video info"));
@@ -527,9 +527,9 @@ void AvisynthVideoProvider::OverrideFrameTimeList(wxArrayInt list) {
 
 ///////////////
 // Get warning
-wxString AvisynthVideoProvider::GetWarning() {
-	if (usedDirectShow) return _("Warning! The file is being opened using Avisynth's DirectShowSource, which has unreliable seeking. Frame numbers might not match the real number. PROCEED AT YOUR OWN RISK!");
-	else return _T("");
+Aegisub::String AvisynthVideoProvider::GetWarning() {
+	if (usedDirectShow) return L"Warning! The file is being opened using Avisynth's DirectShowSource, which has unreliable seeking. Frame numbers might not match the real number. PROCEED AT YOUR OWN RISK!";
+	else return L"";
 }
 
 #endif
diff --git a/aegisub/video_provider_avs.h b/aegisub/video_provider_avs.h
index 931e1a301..da82d9202 100644
--- a/aegisub/video_provider_avs.h
+++ b/aegisub/video_provider_avs.h
@@ -51,8 +51,8 @@ private:
 	AegiVideoFrame iframe;
 
 	bool usedDirectShow;
-	wxString rendererCallString;
-	wxString decoderName;
+	Aegisub::String rendererCallString;
+	Aegisub::String decoderName;
 
 	int num_frames;
 	int last_fnum;
@@ -64,15 +64,15 @@ private:
 	PClip RGB32Video;
 	PClip SubtitledVideo;
 
-	PClip OpenVideo(wxString _filename, bool mpeg2dec3_priority = true);
-	PClip ApplySubtitles(wxString _filename, PClip videosource);
+	PClip OpenVideo(Aegisub::String _filename, bool mpeg2dec3_priority = true);
+	PClip ApplySubtitles(Aegisub::String _filename, PClip videosource);
 
 	void LoadVSFilter();
 	void LoadASA();
 	void LoadRenderer();
 
 public:
-	AvisynthVideoProvider(wxString _filename, double fps=0.0);
+	AvisynthVideoProvider(Aegisub::String _filename, double fps=0.0);
 	~AvisynthVideoProvider();
 
 	SubtitlesProvider *GetAsSubtitlesProvider();
@@ -91,8 +91,8 @@ public:
 
 	void OverrideFrameTimeList(wxArrayInt list);
 	bool IsNativelyByFrames() { return byFrame; }
-	wxString GetWarning();
-	wxString GetDecoderName() { return _T("Avisynth/") + decoderName; }
+	Aegisub::String GetWarning();
+	Aegisub::String GetDecoderName() { return Aegisub::String(L"Avisynth/") + decoderName; }
 };
 
 
@@ -100,7 +100,7 @@ public:
 // Factory
 class AvisynthVideoProviderFactory : public VideoProviderFactory {
 public:
-	VideoProvider *CreateProvider(wxString video,double fps=0.0) { return new AvisynthVideoProvider(video,fps); }
+	VideoProvider *CreateProvider(Aegisub::String video,double fps=0.0) { return new AvisynthVideoProvider(video,fps); }
 };
 
 
diff --git a/aegisub/video_provider_cache.cpp b/aegisub/video_provider_cache.cpp
index 00c13929b..dbaff1bcf 100644
--- a/aegisub/video_provider_cache.cpp
+++ b/aegisub/video_provider_cache.cpp
@@ -162,15 +162,15 @@ int VideoProviderCache::GetHeight() {
 double VideoProviderCache::GetFPS() {
 	return master->GetFPS();
 }
-void VideoProviderCache::OverrideFrameTimeList(wxArrayInt list) {
+void VideoProviderCache::OverrideFrameTimeList(Aegisub::IntArray list) {
 	master->OverrideFrameTimeList(list);
 }
 bool VideoProviderCache::IsNativelyByFrames() {
 	return master->IsNativelyByFrames();
 }
-wxString VideoProviderCache::GetWarning() {
+Aegisub::String VideoProviderCache::GetWarning() {
 	return master->GetWarning();
 }
-wxString VideoProviderCache::GetDecoderName() {
+Aegisub::String VideoProviderCache::GetDecoderName() {
 	return master->GetDecoderName();
 }
diff --git a/aegisub/video_provider_cache.h b/aegisub/video_provider_cache.h
index 630a6ba7c..408da0f1c 100644
--- a/aegisub/video_provider_cache.h
+++ b/aegisub/video_provider_cache.h
@@ -86,8 +86,8 @@ public:
 	virtual int GetWidth();					// Returns the video width in pixels
 	virtual int GetHeight();				// Returns the video height in pixels
 	virtual double GetFPS();				// Get framerate in frames per second
-	virtual void OverrideFrameTimeList(wxArrayInt list);	// Override the list with the provided one, for VFR handling
+	virtual void OverrideFrameTimeList(Aegisub::IntArray list);	// Override the list with the provided one, for VFR handling
 	virtual bool IsNativelyByFrames();
-	virtual wxString GetWarning();
-	virtual wxString GetDecoderName();
+	virtual Aegisub::String GetWarning();
+	virtual Aegisub::String GetDecoderName();
 };
diff --git a/aegisub/video_provider_dshow.cpp b/aegisub/video_provider_dshow.cpp
index 532d61063..3e1549391 100644
--- a/aegisub/video_provider_dshow.cpp
+++ b/aegisub/video_provider_dshow.cpp
@@ -62,7 +62,7 @@
 ///////////////
 // Constructor
 // Based on Haali's code for DirectShowSource2
-DirectShowVideoProvider::DirectShowVideoProvider(wxString _filename, double _fps) {
+DirectShowVideoProvider::DirectShowVideoProvider(Aegisub::String _filename, double _fps) {
 	fps = _fps;
 	m_registered = false;
 	m_hFrameReady = CreateEvent(NULL, FALSE, FALSE, NULL);
@@ -387,17 +387,17 @@ int DirectShowVideoProvider::NextFrame(DF &df,int &_fn) {
 		if (df.timestamp >= 0) {
 			// CFR frame number
 			int frameno = -1;
-			if (frameTime.Count() == 0) frameno = (int)((double)df.timestamp / defd + 0.5);
+			if (frameTime.size() == 0) frameno = (int)((double)df.timestamp / defd + 0.5);
 
 			// VFR
 			else {
-				for (unsigned int i=0;i<frameTime.Count();i++) {
+				for (unsigned int i=0;i<frameTime.size();i++) {
 					if (df.timestamp < (int64_t) frameTime[i] * 10000) {
 						frameno = i-1;
 						break;
 					}
 				}
-				if (frameno == -1) frameno = frameTime.Count()-1;
+				if (frameno == -1) frameno = frameTime.size()-1;
 			}
 
 			// Got a good one
@@ -427,7 +427,7 @@ const AegiVideoFrame DirectShowVideoProvider::GetFrame(int n,int formatMask) {
 	// Time to seek to
 	REFERENCE_TIME cur;
 	cur = defd * n + 10001;
-	if (frameTime.Count() > (unsigned) n) cur = frameTime[n] * 10000 + 10001;
+	if (frameTime.size() > (unsigned) n) cur = frameTime[n] * 10000 + 10001;
 	if (cur < 0) cur = 0;
 
 	// Is next
@@ -505,9 +505,9 @@ void DirectShowVideoProvider::GetFloatFrame(float* Buffer, int n) {
 
 ////////////////////////
 // Override frame times
-void DirectShowVideoProvider::OverrideFrameTimeList(wxArrayInt list) {
+void DirectShowVideoProvider::OverrideFrameTimeList(Aegisub::IntArray list) {
 	frameTime = list;
-	num_frames = frameTime.Count();
+	num_frames = frameTime.size();
 }
 
 #endif
diff --git a/aegisub/video_provider_dshow.h b/aegisub/video_provider_dshow.h
index 55a0d25bb..6741347bc 100644
--- a/aegisub/video_provider_dshow.h
+++ b/aegisub/video_provider_dshow.h
@@ -69,7 +69,7 @@ class DirectShowVideoProvider: public VideoProvider {
 	};
 
 private:
-	wxArrayInt frameTime;
+	Aegisub::IntArray frameTime;
 
 	unsigned int last_fnum;
 	unsigned int width;
@@ -97,7 +97,7 @@ private:
 	DWORD                   m_rot_cookie;
 
 public:
-	DirectShowVideoProvider(wxString _filename, double _fps=0.0);
+	DirectShowVideoProvider(Aegisub::String _filename, double _fps=0.0);
 	~DirectShowVideoProvider();
 
 	void RefreshSubtitles();
@@ -110,10 +110,10 @@ public:
 	double GetFPS() { return fps; };
 	int GetWidth() { return width; };
 	int GetHeight() { return height; };
-	wxString GetDecoderName() { return _("DirectShow"); }
+	Aegisub::String GetDecoderName() { return L"DirectShow"; }
 	bool IsNativelyByFrames() { return false; }
 
-	void OverrideFrameTimeList(wxArrayInt list);
+	void OverrideFrameTimeList(Aegisub::IntArray list);
 	int GetDesiredCacheSize() { return 8; }
 };
 
@@ -123,7 +123,7 @@ public:
 // Factory
 class DirectShowVideoProviderFactory : public VideoProviderFactory {
 public:
-	VideoProvider *CreateProvider(wxString video,double fps=0.0) { return new DirectShowVideoProvider(video,fps); }
+	VideoProvider *CreateProvider(Aegisub::String video,double fps=0.0) { return new DirectShowVideoProvider(video,fps); }
 };
 
 #endif
diff --git a/aegisub/video_provider_dummy.cpp b/aegisub/video_provider_dummy.cpp
index 3422fbf1e..77754c33c 100644
--- a/aegisub/video_provider_dummy.cpp
+++ b/aegisub/video_provider_dummy.cpp
@@ -119,8 +119,9 @@ void DummyVideoProvider::Create(double _fps, int frames, int _width, int _height
 
 ///////////////////////
 // Parsing constructor
-DummyVideoProvider::DummyVideoProvider(wxString filename, double _fps)
+DummyVideoProvider::DummyVideoProvider(Aegisub::String _filename, double _fps)
 {
+	wxString filename = _filename;
 	wxString params;
 	if (!filename.StartsWith(_T("?dummy:"), &params)) {
 		throw _T("Attempted creating dummy video provider with non-dummy filename");
@@ -246,7 +247,7 @@ double DummyVideoProvider::GetFPS() {
 
 ////////////////////
 // Get decoder name
-wxString DummyVideoProvider::GetDecoderName() {
-	return _("Dummy Video Provider");
+Aegisub::String DummyVideoProvider::GetDecoderName() {
+	return L"Dummy Video Provider";
 }
 
diff --git a/aegisub/video_provider_dummy.h b/aegisub/video_provider_dummy.h
index 256aa00be..2377a775b 100644
--- a/aegisub/video_provider_dummy.h
+++ b/aegisub/video_provider_dummy.h
@@ -59,7 +59,7 @@ private:
 	void Create(double fps, int frames, int _width, int _height, const wxColour &colour, bool pattern);
 
 public:
-	DummyVideoProvider(wxString filename, double fps);
+	DummyVideoProvider(Aegisub::String filename, double fps);
 	DummyVideoProvider(double fps, int frames, int _width, int _height, const wxColour &colour, bool pattern);
 	~DummyVideoProvider();
 
@@ -72,7 +72,7 @@ public:
 	int GetWidth();
 	int GetHeight();
 	double GetFPS();
-	wxString GetDecoderName();
+	Aegisub::String GetDecoderName();
 };
 
 #endif
diff --git a/aegisub/video_provider_manager.cpp b/aegisub/video_provider_manager.cpp
index 6dcb32021..2125ddb81 100644
--- a/aegisub/video_provider_manager.cpp
+++ b/aegisub/video_provider_manager.cpp
@@ -58,7 +58,7 @@
 VideoProvider *VideoProviderFactoryManager::GetProvider(wxString video,double fps) {
 	// First check special case of dummy video
 	if (video.StartsWith(_T("?dummy:"))) {
-		return new DummyVideoProvider(video, fps);
+		return new DummyVideoProvider(video.c_str(), fps);
 	}
 
 	// List of providers
@@ -72,7 +72,7 @@ VideoProvider *VideoProviderFactoryManager::GetProvider(wxString video,double fp
 	for (unsigned int i=0;i<list.Count();i++) {
 		try {
 			// Create provider
-			VideoProvider *provider = GetFactory(list[i])->CreateProvider(video,fps);
+			VideoProvider *provider = GetFactory(list[i])->CreateProvider(video.c_str(),fps);
 			if (provider) {
 				// Cache if necessary
 				if (provider->GetDesiredCacheSize()) {
-- 
GitLab