forked from mia/Aegisub
Modified all providers to separate them between factory and factory manager. This will make plugin system easier. Also, made hunspell register manually as well.
Originally committed to SVN as r1946.
This commit is contained in:
parent
6bdee2a765
commit
974efa126b
29 changed files with 325 additions and 135 deletions
|
@ -878,15 +878,15 @@ void AudioDisplay::SetFile(wxString file) {
|
||||||
is_dummy = true;
|
is_dummy = true;
|
||||||
provider = new DummyAudioProvider(150*60*1000, true); // 150 minutes noise
|
provider = new DummyAudioProvider(150*60*1000, true); // 150 minutes noise
|
||||||
} else {
|
} else {
|
||||||
provider = AudioProviderFactory::GetAudioProvider(file);
|
provider = AudioProviderFactoryManager::GetAudioProvider(file);
|
||||||
}
|
}
|
||||||
#else
|
#else
|
||||||
provider = AudioProviderFactory::GetAudioProvider(file);
|
provider = AudioProviderFactoryManager::GetAudioProvider(file);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
// Get player
|
// Get player
|
||||||
wxLogDebug(_T("AudioDisplay::SetFile: get audio player"));
|
wxLogDebug(_T("AudioDisplay::SetFile: get audio player"));
|
||||||
player = AudioPlayerFactory::GetAudioPlayer();
|
player = AudioPlayerFactoryManager::GetAudioPlayer();
|
||||||
player->SetDisplayTimer(&UpdateTimer);
|
player->SetDisplayTimer(&UpdateTimer);
|
||||||
player->SetProvider(provider);
|
player->SetProvider(provider);
|
||||||
player->OpenStream();
|
player->OpenStream();
|
||||||
|
@ -1022,12 +1022,12 @@ void AudioDisplay::Play(int start,int end) {
|
||||||
try {
|
try {
|
||||||
// Get provider
|
// Get provider
|
||||||
if (!VideoContext::Get()->videoName.StartsWith(_T("?dummy")))
|
if (!VideoContext::Get()->videoName.StartsWith(_T("?dummy")))
|
||||||
provider = AudioProviderFactory::GetAudioProvider(VideoContext::Get()->videoName, 0);
|
provider = AudioProviderFactoryManager::GetAudioProvider(VideoContext::Get()->videoName, 0);
|
||||||
else
|
else
|
||||||
return;
|
return;
|
||||||
|
|
||||||
// Get player
|
// Get player
|
||||||
player = AudioPlayerFactory::GetAudioPlayer();
|
player = AudioPlayerFactoryManager::GetAudioPlayer();
|
||||||
player->SetDisplayTimer(&UpdateTimer);
|
player->SetDisplayTimer(&UpdateTimer);
|
||||||
player->SetProvider(provider);
|
player->SetProvider(provider);
|
||||||
player->OpenStream();
|
player->OpenStream();
|
||||||
|
|
|
@ -126,7 +126,7 @@ void AudioPlayer::OnStopAudio(wxCommandEvent &event) {
|
||||||
|
|
||||||
//////////////
|
//////////////
|
||||||
// Get player
|
// Get player
|
||||||
AudioPlayer* AudioPlayerFactory::GetAudioPlayer() {
|
AudioPlayer* AudioPlayerFactoryManager::GetAudioPlayer() {
|
||||||
// List of providers
|
// List of providers
|
||||||
wxArrayString list = GetFactoryList(Options.AsText(_T("Audio player")));
|
wxArrayString list = GetFactoryList(Options.AsText(_T("Audio player")));
|
||||||
|
|
||||||
|
@ -152,26 +152,26 @@ AudioPlayer* AudioPlayerFactory::GetAudioPlayer() {
|
||||||
|
|
||||||
//////////////////////////
|
//////////////////////////
|
||||||
// Register all factories
|
// Register all factories
|
||||||
void AudioPlayerFactory::RegisterProviders() {
|
void AudioPlayerFactoryManager::RegisterProviders() {
|
||||||
#ifdef WITH_ALSA
|
#ifdef WITH_ALSA
|
||||||
new AlsaPlayerFactory();
|
RegisterFactory(new AlsaPlayerFactory(),_T("ALSA"));
|
||||||
#endif
|
#endif
|
||||||
#ifdef WITH_DIRECTSOUND
|
#ifdef WITH_DIRECTSOUND
|
||||||
new DirectSoundPlayerFactory();
|
RegisterFactory(new DirectSoundPlayerFactory(),_T("DirectSound"));
|
||||||
#endif
|
#endif
|
||||||
#ifdef WITH_OPENAL
|
#ifdef WITH_OPENAL
|
||||||
new OpenALPlayerFactory();
|
RegisterFactory(new OpenALPlayerFactory(),_T("OpenAL"));
|
||||||
#endif
|
#endif
|
||||||
#ifdef WITH_PORTAUDIO
|
#ifdef WITH_PORTAUDIO
|
||||||
new PortAudioPlayerFactory();
|
RegisterFactory(new PortAudioPlayerFactory(),_T("PortAudio"));
|
||||||
#endif
|
#endif
|
||||||
#ifdef WITH_PULSEAUDIO
|
#ifdef WITH_PULSEAUDIO
|
||||||
new PulseAudioPlayerFactory();
|
RegisterFactory(new PulseAudioPlayerFactory(),_T("PulseAudio"));
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
//////////
|
//////////
|
||||||
// Static
|
// Static
|
||||||
template <class AudioPlayerFactory> std::map<wxString,AudioPlayerFactory*>* AegisubFactory<AudioPlayerFactory>::factories=NULL;
|
template <class AudioPlayerFactory> std::map<wxString,AudioPlayerFactory*>* FactoryManager<AudioPlayerFactory>::factories=NULL;
|
||||||
|
|
||||||
|
|
|
@ -44,7 +44,7 @@
|
||||||
#include <wx/timer.h>
|
#include <wx/timer.h>
|
||||||
#include <wx/thread.h>
|
#include <wx/thread.h>
|
||||||
#include <stdint.h>
|
#include <stdint.h>
|
||||||
#include "factory.h"
|
#include "factory_manager.h"
|
||||||
|
|
||||||
|
|
||||||
//////////////
|
//////////////
|
||||||
|
@ -96,18 +96,22 @@ public:
|
||||||
|
|
||||||
///////////
|
///////////
|
||||||
// Factory
|
// Factory
|
||||||
class AudioPlayerFactory : public AegisubFactory<AudioPlayerFactory> {
|
class AudioPlayerFactory {
|
||||||
protected:
|
public:
|
||||||
virtual AudioPlayer *CreatePlayer()=0;
|
virtual AudioPlayer *CreatePlayer()=0;
|
||||||
AudioPlayerFactory(wxString name) { RegisterFactory(name); }
|
};
|
||||||
|
|
||||||
|
|
||||||
|
///////////////////
|
||||||
|
// Factory Manager
|
||||||
|
class AudioPlayerFactoryManager : public FactoryManager<AudioPlayerFactory> {
|
||||||
public:
|
public:
|
||||||
virtual ~AudioPlayerFactory() {}
|
|
||||||
static AudioPlayer *GetAudioPlayer();
|
static AudioPlayer *GetAudioPlayer();
|
||||||
static void RegisterProviders();
|
static void RegisterProviders();
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/////////
|
/////////
|
||||||
// Event
|
// Event
|
||||||
DECLARE_EVENT_TYPE(wxEVT_STOP_AUDIO, -1)
|
DECLARE_EVENT_TYPE(wxEVT_STOP_AUDIO, -1)
|
||||||
|
|
|
@ -137,7 +137,6 @@ public:
|
||||||
class DirectSoundPlayerFactory : public AudioPlayerFactory {
|
class DirectSoundPlayerFactory : public AudioPlayerFactory {
|
||||||
public:
|
public:
|
||||||
AudioPlayer *CreatePlayer() { return new DirectSoundPlayer(); }
|
AudioPlayer *CreatePlayer() { return new DirectSoundPlayer(); }
|
||||||
DirectSoundPlayerFactory() : AudioPlayerFactory(_T("dsound")) {}
|
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -191,7 +191,7 @@ void AudioProvider::GetAudioWithVolume(void *buf, int64_t start, int64_t count,
|
||||||
|
|
||||||
////////////////
|
////////////////
|
||||||
// Get provider
|
// Get provider
|
||||||
AudioProvider *AudioProviderFactory::GetAudioProvider(wxString filename, int cache) {
|
AudioProvider *AudioProviderFactoryManager::GetAudioProvider(wxString filename, int cache) {
|
||||||
// Prepare provider
|
// Prepare provider
|
||||||
AudioProvider *provider = NULL;
|
AudioProvider *provider = NULL;
|
||||||
|
|
||||||
|
@ -254,16 +254,16 @@ AudioProvider *AudioProviderFactory::GetAudioProvider(wxString filename, int cac
|
||||||
|
|
||||||
///////////////////////////
|
///////////////////////////
|
||||||
// Register all providers
|
// Register all providers
|
||||||
void AudioProviderFactory::RegisterProviders() {
|
void AudioProviderFactoryManager::RegisterProviders() {
|
||||||
#ifdef WITH_AVISYNTH
|
#ifdef WITH_AVISYNTH
|
||||||
new AvisynthAudioProviderFactory();
|
RegisterFactory(new AvisynthAudioProviderFactory(),_T("Avisynth"));
|
||||||
#endif
|
#endif
|
||||||
#ifdef WITH_FFMPEG
|
#ifdef WITH_FFMPEG
|
||||||
new LAVCAudioProviderFactory();
|
RegisterFactory(new LAVCAudioProviderFactory(),_T("FFMPEG"));
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
//////////
|
//////////
|
||||||
// Static
|
// Static
|
||||||
template <class AudioProviderFactory> std::map<wxString,AudioProviderFactory*>* AegisubFactory<AudioProviderFactory>::factories=NULL;
|
template <class AudioProviderFactory> std::map<wxString,AudioProviderFactory*>* FactoryManager<AudioProviderFactory>::factories=NULL;
|
||||||
|
|
|
@ -41,7 +41,7 @@
|
||||||
// Headers
|
// Headers
|
||||||
#include <wx/wxprec.h>
|
#include <wx/wxprec.h>
|
||||||
#include <stdint.h>
|
#include <stdint.h>
|
||||||
#include "factory.h"
|
#include "factory_manager.h"
|
||||||
|
|
||||||
|
|
||||||
//////////////
|
//////////////
|
||||||
|
@ -84,13 +84,16 @@ public:
|
||||||
|
|
||||||
///////////
|
///////////
|
||||||
// Factory
|
// Factory
|
||||||
class AudioProviderFactory : public AegisubFactory<AudioProviderFactory> {
|
class AudioProviderFactory {
|
||||||
protected:
|
|
||||||
virtual AudioProvider *CreateProvider(wxString filename)=0;
|
|
||||||
AudioProviderFactory(wxString name) { RegisterFactory(name); }
|
|
||||||
|
|
||||||
public:
|
public:
|
||||||
virtual ~AudioProviderFactory() {}
|
virtual AudioProvider *CreateProvider(wxString filename)=0;
|
||||||
static AudioProvider *GetAudioProvider(wxString filename, int cache=-1);
|
};
|
||||||
static void RegisterProviders();
|
|
||||||
|
|
||||||
|
///////////////////
|
||||||
|
// Factory Manager
|
||||||
|
class AudioProviderFactoryManager : public FactoryManager<AudioProviderFactory> {
|
||||||
|
public:
|
||||||
|
static void RegisterProviders();
|
||||||
|
static AudioProvider *GetAudioProvider(wxString filename, int cache=-1);
|
||||||
};
|
};
|
||||||
|
|
|
@ -71,7 +71,6 @@ public:
|
||||||
class AvisynthAudioProviderFactory : public AudioProviderFactory {
|
class AvisynthAudioProviderFactory : public AudioProviderFactory {
|
||||||
public:
|
public:
|
||||||
AudioProvider *CreateProvider(wxString file) { return new AvisynthAudioProvider(file); }
|
AudioProvider *CreateProvider(wxString file) { return new AvisynthAudioProvider(file); }
|
||||||
AvisynthAudioProviderFactory() : AudioProviderFactory(_T("avisynth")) {}
|
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -390,12 +390,12 @@ DialogOptions::DialogOptions(wxWindow *parent)
|
||||||
|
|
||||||
// Second sizer
|
// Second sizer
|
||||||
videoSizer4->Add(new wxStaticText(videoPage,-1,_("Video provider: ")),0,wxALIGN_CENTER_VERTICAL | wxRIGHT,10);
|
videoSizer4->Add(new wxStaticText(videoPage,-1,_("Video provider: ")),0,wxALIGN_CENTER_VERTICAL | wxRIGHT,10);
|
||||||
wxArrayString choices4 = VideoProviderFactory::GetFactoryList();
|
wxArrayString choices4 = VideoProviderFactoryManager::GetFactoryList();
|
||||||
control = new wxComboBox(videoPage,-1,_T(""),wxDefaultPosition,wxDefaultSize,choices4,wxCB_DROPDOWN | wxCB_READONLY);
|
control = new wxComboBox(videoPage,-1,_T(""),wxDefaultPosition,wxDefaultSize,choices4,wxCB_DROPDOWN | wxCB_READONLY);
|
||||||
Bind(control,_T("Video provider"),1);
|
Bind(control,_T("Video provider"),1);
|
||||||
videoSizer4->Add(control,1,wxEXPAND);
|
videoSizer4->Add(control,1,wxEXPAND);
|
||||||
videoSizer4->Add(new wxStaticText(videoPage,-1,_("Subtitles provider: ")),0,wxALIGN_CENTER_VERTICAL | wxRIGHT,10);
|
videoSizer4->Add(new wxStaticText(videoPage,-1,_("Subtitles provider: ")),0,wxALIGN_CENTER_VERTICAL | wxRIGHT,10);
|
||||||
wxArrayString choices5 = SubtitlesProviderFactory::GetFactoryList();
|
wxArrayString choices5 = SubtitlesProviderFactoryManager::GetFactoryList();
|
||||||
control = new wxComboBox(videoPage,-1,_T(""),wxDefaultPosition,wxDefaultSize,choices5,wxCB_DROPDOWN | wxCB_READONLY);
|
control = new wxComboBox(videoPage,-1,_T(""),wxDefaultPosition,wxDefaultSize,choices5,wxCB_DROPDOWN | wxCB_READONLY);
|
||||||
Bind(control,_T("Subtitles provider"),1);
|
Bind(control,_T("Subtitles provider"),1);
|
||||||
videoSizer4->Add(control,1,wxEXPAND);
|
videoSizer4->Add(control,1,wxEXPAND);
|
||||||
|
@ -529,8 +529,8 @@ DialogOptions::DialogOptions(wxWindow *parent)
|
||||||
wxString choices3[3] = { _T("ConvertToMono"), _T("GetLeftChannel"), _T("GetRightChannel") };
|
wxString choices3[3] = { _T("ConvertToMono"), _T("GetLeftChannel"), _T("GetRightChannel") };
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
AddComboControl(audioAdvPage,audioAdvSizer1,_("Audio provider"),_T("Audio Provider"),AudioProviderFactory::GetFactoryList(),true,1);
|
AddComboControl(audioAdvPage,audioAdvSizer1,_("Audio provider"),_T("Audio Provider"),AudioProviderFactoryManager::GetFactoryList(),true,1);
|
||||||
AddComboControl(audioAdvPage,audioAdvSizer1,_("Audio player"),_T("Audio Player"),AudioPlayerFactory::GetFactoryList(),true,1);
|
AddComboControl(audioAdvPage,audioAdvSizer1,_("Audio player"),_T("Audio Player"),AudioPlayerFactoryManager::GetFactoryList(),true,1);
|
||||||
AddComboControl(audioAdvPage,audioAdvSizer1,_("Cache type"),_T("Audio Cache"),wxArrayString(3,choices2),true);
|
AddComboControl(audioAdvPage,audioAdvSizer1,_("Cache type"),_T("Audio Cache"),wxArrayString(3,choices2),true);
|
||||||
#ifdef WIN32
|
#ifdef WIN32
|
||||||
AddComboControl(audioAdvPage,audioAdvSizer1,_("Avisynth down-mixer"),_T("Audio Downmixer"),wxArrayString(3,choices3),false);
|
AddComboControl(audioAdvPage,audioAdvSizer1,_("Avisynth down-mixer"),_T("Audio Downmixer"),wxArrayString(3,choices3),false);
|
||||||
|
|
|
@ -70,7 +70,7 @@ DialogSpellChecker::DialogSpellChecker(wxFrame *parent)
|
||||||
SetIcon(BitmapToIcon(wxBITMAP(spellcheck_toolbutton)));
|
SetIcon(BitmapToIcon(wxBITMAP(spellcheck_toolbutton)));
|
||||||
|
|
||||||
// Get spell checker
|
// Get spell checker
|
||||||
spellchecker = SpellCheckerFactory::GetSpellChecker();
|
spellchecker = SpellCheckerFactoryManager::GetSpellChecker();
|
||||||
if (!spellchecker) {
|
if (!spellchecker) {
|
||||||
wxMessageBox(_T("No spellchecker available."),_T("Error"),wxICON_ERROR);
|
wxMessageBox(_T("No spellchecker available."),_T("Error"),wxICON_ERROR);
|
||||||
Destroy();
|
Destroy();
|
||||||
|
|
|
@ -299,7 +299,7 @@ DialogStyleEditor::DialogStyleEditor (wxWindow *parent, AssStyle *_style, Subtit
|
||||||
// Preview
|
// Preview
|
||||||
SubsPreview = NULL;
|
SubsPreview = NULL;
|
||||||
PreviewText = NULL;
|
PreviewText = NULL;
|
||||||
if (SubtitlesProviderFactory::ProviderAvailable()) {
|
if (SubtitlesProviderFactoryManager::ProviderAvailable()) {
|
||||||
PreviewText = new wxTextCtrl(this,TEXT_PREVIEW,Options.AsText(_T("Style editor preview text")));
|
PreviewText = new wxTextCtrl(this,TEXT_PREVIEW,Options.AsText(_T("Style editor preview text")));
|
||||||
previewButton = new ColourButton(this,BUTTON_PREVIEW_COLOR,wxSize(45,16),Options.AsColour(_T("Style editor preview background")));
|
previewButton = new ColourButton(this,BUTTON_PREVIEW_COLOR,wxSize(45,16),Options.AsColour(_T("Style editor preview background")));
|
||||||
SubsPreview = new SubtitlesPreview(this,-1,wxDefaultPosition,wxSize(100,60),wxSUNKEN_BORDER,Options.AsColour(_T("Style editor preview background")));
|
SubsPreview = new SubtitlesPreview(this,-1,wxDefaultPosition,wxSize(100,60),wxSUNKEN_BORDER,Options.AsColour(_T("Style editor preview background")));
|
||||||
|
|
107
aegisub/factory_manager.h
Normal file
107
aegisub/factory_manager.h
Normal file
|
@ -0,0 +1,107 @@
|
||||||
|
// Copyright (c) 2007-2008, Rodrigo Braz Monteiro
|
||||||
|
// All rights reserved.
|
||||||
|
//
|
||||||
|
// Redistribution and use in source and binary forms, with or without
|
||||||
|
// modification, are permitted provided that the following conditions are met:
|
||||||
|
//
|
||||||
|
// * Redistributions of source code must retain the above copyright notice,
|
||||||
|
// this list of conditions and the following disclaimer.
|
||||||
|
// * Redistributions in binary form must reproduce the above copyright notice,
|
||||||
|
// this list of conditions and the following disclaimer in the documentation
|
||||||
|
// and/or other materials provided with the distribution.
|
||||||
|
// * Neither the name of the Aegisub Group nor the names of its contributors
|
||||||
|
// may be used to endorse or promote products derived from this software
|
||||||
|
// without specific prior written permission.
|
||||||
|
//
|
||||||
|
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
||||||
|
// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||||
|
// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||||
|
// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
|
||||||
|
// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
||||||
|
// CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
|
||||||
|
// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
||||||
|
// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
|
||||||
|
// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
||||||
|
// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
||||||
|
// POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
//
|
||||||
|
// -----------------------------------------------------------------------------
|
||||||
|
//
|
||||||
|
// AEGISUB
|
||||||
|
//
|
||||||
|
// Website: http://aegisub.cellosoft.com
|
||||||
|
// Contact: mailto:zeratul@cellosoft.com
|
||||||
|
//
|
||||||
|
|
||||||
|
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
|
||||||
|
///////////
|
||||||
|
// Headers
|
||||||
|
#include <map>
|
||||||
|
#include <wx/string.h>
|
||||||
|
#include <wx/arrstr.h>
|
||||||
|
|
||||||
|
|
||||||
|
/////////////////
|
||||||
|
// Factory class
|
||||||
|
template <class T>
|
||||||
|
class FactoryManager {
|
||||||
|
protected:
|
||||||
|
// Static map of all factories
|
||||||
|
static std::map<wxString,T*> *factories;
|
||||||
|
|
||||||
|
// Register one factory type (with possible subtypes)
|
||||||
|
static void RegisterFactory(T* factory,wxString name, wxArrayString subTypes=wxArrayString()) {
|
||||||
|
// Create factories if it doesn't exist
|
||||||
|
if (factories == NULL) factories = new std::map<wxString,T*>;
|
||||||
|
|
||||||
|
// Prepare subtypes
|
||||||
|
if (subTypes.GetCount() == 0) subTypes.Add(_T(""));
|
||||||
|
else {
|
||||||
|
for (unsigned int i=0;i<subTypes.GetCount();i++) {
|
||||||
|
subTypes[i] = _T("/") + subTypes[i];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Insert each subtype
|
||||||
|
for (unsigned int i=0;i<subTypes.GetCount();i++) {
|
||||||
|
factories->insert(std::make_pair(name.Lower() + subTypes[i],factory));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Get a factory with name
|
||||||
|
static T *GetFactory(wxString name) {
|
||||||
|
// No factories
|
||||||
|
if (factories == NULL) {
|
||||||
|
factories = new std::map<wxString,T*>;
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Search for factory that matches
|
||||||
|
typename std::map<wxString,T*>::iterator cur;
|
||||||
|
for (cur = factories->begin();cur != factories->end();cur++) {
|
||||||
|
if (cur->first.StartsWith(name)) return cur->second;
|
||||||
|
}
|
||||||
|
|
||||||
|
// None found
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
public:
|
||||||
|
// Virtual destructor
|
||||||
|
virtual ~FactoryManager() {}
|
||||||
|
|
||||||
|
// Get list of all factories, with favourite as first
|
||||||
|
static wxArrayString GetFactoryList(wxString favourite=_T("")) {
|
||||||
|
if (factories == NULL) factories = new std::map<wxString,T*>;
|
||||||
|
wxArrayString list;
|
||||||
|
favourite = favourite.Lower();
|
||||||
|
for (typename std::map<wxString,T*>::iterator cur=factories->begin();cur!=factories->end();cur++) {
|
||||||
|
if (cur->first == favourite) list.Insert(cur->first,0);
|
||||||
|
else list.Add(cur->first);
|
||||||
|
}
|
||||||
|
return list;
|
||||||
|
}
|
||||||
|
};
|
|
@ -160,7 +160,11 @@ void OptionsManager::LoadDefaults(bool onlyDefaults,bool doOverride) {
|
||||||
SetModificationType(MOD_VIDEO_RELOAD);
|
SetModificationType(MOD_VIDEO_RELOAD);
|
||||||
SetInt(_T("Avisynth MemoryMax"),64,1700);
|
SetInt(_T("Avisynth MemoryMax"),64,1700);
|
||||||
SetBool(_T("Threaded Video"),false,1700);
|
SetBool(_T("Threaded Video"),false,1700);
|
||||||
|
#ifdef __WINDOWS__
|
||||||
SetText(_T("Video Provider"),_T("Avisynth"),1700);
|
SetText(_T("Video Provider"),_T("Avisynth"),1700);
|
||||||
|
#else
|
||||||
|
SetText(_T("Video Provider"),_T("FFMPEG"),1945);
|
||||||
|
#endif
|
||||||
SetBool(_T("Allow Ancient Avisynth"),false,1700);
|
SetBool(_T("Allow Ancient Avisynth"),false,1700);
|
||||||
SetText(_T("Avisynth subs renderer"),_T("vsfilter"),1700);
|
SetText(_T("Avisynth subs renderer"),_T("vsfilter"),1700);
|
||||||
SetBool(_T("Avisynth render own subs"),true,1700);
|
SetBool(_T("Avisynth render own subs"),true,1700);
|
||||||
|
@ -190,13 +194,15 @@ void OptionsManager::LoadDefaults(bool onlyDefaults,bool doOverride) {
|
||||||
SetModificationType(MOD_AUDIO_RELOAD);
|
SetModificationType(MOD_AUDIO_RELOAD);
|
||||||
SetInt(_T("Audio Cache"),1,1700);
|
SetInt(_T("Audio Cache"),1,1700);
|
||||||
#if defined(__WINDOWS__)
|
#if defined(__WINDOWS__)
|
||||||
SetText(_T("Audio Player"),_T("dsound"),1700);
|
SetText(_T("Audio Player"),_T("DirectSound"),1945);
|
||||||
|
SetText(_T("Audio Provider"),_T("avisynth"),1700);
|
||||||
#elif defined(__APPLE__)
|
#elif defined(__APPLE__)
|
||||||
SetText(_T("Audio Player"), _T("openal"));
|
SetText(_T("Audio Player"), _T("openal"));
|
||||||
|
SetText(_T("Audio Provider"),_T("FFMPEG"),1945);
|
||||||
#else
|
#else
|
||||||
SetText(_T("Audio Player"),_T("portaudio")); // FIXME: should this be something else? perhaps alsa on linux and portaudio on everything else?
|
SetText(_T("Audio Player"),_T("portaudio")); // FIXME: should this be something else? perhaps alsa on linux and portaudio on everything else?
|
||||||
|
SetText(_T("Audio Provider"),_T("FFMPEG"),1945);
|
||||||
#endif
|
#endif
|
||||||
SetText(_T("Audio Provider"),_T("avisynth"),1700); // TODO: proper default on non-windows
|
|
||||||
SetText(_T("Audio Downmixer"),_T("ConvertToMono"),1700);
|
SetText(_T("Audio Downmixer"),_T("ConvertToMono"),1700);
|
||||||
SetText(_T("Audio Alsa Device"), _T("plughw:0,0"));
|
SetText(_T("Audio Alsa Device"), _T("plughw:0,0"));
|
||||||
SetText(_T("Audio HD Cache Location"),_T("default"),1700);
|
SetText(_T("Audio HD Cache Location"),_T("default"),1700);
|
||||||
|
|
|
@ -41,6 +41,7 @@
|
||||||
#include "audio_provider.h"
|
#include "audio_provider.h"
|
||||||
#include "audio_player.h"
|
#include "audio_player.h"
|
||||||
#include "subtitles_provider.h"
|
#include "subtitles_provider.h"
|
||||||
|
#include "spellchecker.h"
|
||||||
|
|
||||||
|
|
||||||
///////////////
|
///////////////
|
||||||
|
@ -60,10 +61,11 @@ PluginManager::~PluginManager() {
|
||||||
// Registers all built-in plugins
|
// Registers all built-in plugins
|
||||||
void PluginManager::RegisterBuiltInPlugins() {
|
void PluginManager::RegisterBuiltInPlugins() {
|
||||||
if (!init) {
|
if (!init) {
|
||||||
VideoProviderFactory::RegisterProviders();
|
VideoProviderFactoryManager::RegisterProviders();
|
||||||
AudioProviderFactory::RegisterProviders();
|
AudioProviderFactoryManager::RegisterProviders();
|
||||||
AudioPlayerFactory::RegisterProviders();
|
AudioPlayerFactoryManager::RegisterProviders();
|
||||||
SubtitlesProviderFactory::RegisterProviders();
|
SubtitlesProviderFactoryManager::RegisterProviders();
|
||||||
|
SpellCheckerFactoryManager::RegisterProviders();
|
||||||
}
|
}
|
||||||
|
|
||||||
// Done
|
// Done
|
||||||
|
|
|
@ -37,12 +37,15 @@
|
||||||
///////////
|
///////////
|
||||||
// Headers
|
// Headers
|
||||||
#include "spellchecker.h"
|
#include "spellchecker.h"
|
||||||
|
#ifdef WITH_HUNSPELL
|
||||||
|
#include "spellchecker_hunspell.h"
|
||||||
|
#endif
|
||||||
#include "options.h"
|
#include "options.h"
|
||||||
|
|
||||||
|
|
||||||
/////////////////////
|
/////////////////////
|
||||||
// Get spell checker
|
// Get spell checker
|
||||||
SpellChecker *SpellCheckerFactory::GetSpellChecker() {
|
SpellChecker *SpellCheckerFactoryManager::GetSpellChecker() {
|
||||||
// List of providers
|
// List of providers
|
||||||
wxArrayString list = GetFactoryList(Options.AsText(_T("Spell Checker")));
|
wxArrayString list = GetFactoryList(Options.AsText(_T("Spell Checker")));
|
||||||
|
|
||||||
|
@ -66,6 +69,15 @@ SpellChecker *SpellCheckerFactory::GetSpellChecker() {
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
//////////////////////////
|
||||||
|
// Register all providers
|
||||||
|
void SpellCheckerFactoryManager::RegisterProviders() {
|
||||||
|
#ifdef WITH_HUNSPELL
|
||||||
|
RegisterFactory(new HunspellSpellCheckerFactory(),_T("Hunspell"));
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
//////////
|
//////////
|
||||||
// Static
|
// Static
|
||||||
template <class SpellCheckerFactory> std::map<wxString,SpellCheckerFactory*>* AegisubFactory<SpellCheckerFactory>::factories=NULL;
|
template <class SpellCheckerFactory> std::map<wxString,SpellCheckerFactory*>* FactoryManager<SpellCheckerFactory>::factories=NULL;
|
||||||
|
|
|
@ -40,7 +40,7 @@
|
||||||
///////////
|
///////////
|
||||||
// Headers
|
// Headers
|
||||||
#include <wx/wxprec.h>
|
#include <wx/wxprec.h>
|
||||||
#include "factory.h"
|
#include "factory_manager.h"
|
||||||
|
|
||||||
|
|
||||||
///////////////////////////
|
///////////////////////////
|
||||||
|
@ -63,12 +63,16 @@ public:
|
||||||
|
|
||||||
///////////
|
///////////
|
||||||
// Factory
|
// Factory
|
||||||
class SpellCheckerFactory : public AegisubFactory<SpellCheckerFactory> {
|
class SpellCheckerFactory {
|
||||||
protected:
|
|
||||||
virtual SpellChecker *CreateSpellChecker()=0;
|
|
||||||
SpellCheckerFactory(wxString name) { RegisterFactory(name); }
|
|
||||||
|
|
||||||
public:
|
public:
|
||||||
virtual ~SpellCheckerFactory() {}
|
virtual SpellChecker *CreateSpellChecker()=0;
|
||||||
static SpellChecker *GetSpellChecker();
|
};
|
||||||
|
|
||||||
|
|
||||||
|
///////////////////
|
||||||
|
// Factory Manager
|
||||||
|
class SpellCheckerFactoryManager : public FactoryManager<SpellCheckerFactory> {
|
||||||
|
public:
|
||||||
|
static SpellChecker *GetSpellChecker();
|
||||||
|
static void RegisterProviders();
|
||||||
};
|
};
|
||||||
|
|
|
@ -39,7 +39,7 @@
|
||||||
|
|
||||||
#ifdef WITH_HUNSPELL
|
#ifdef WITH_HUNSPELL
|
||||||
|
|
||||||
#include "spellchecker.h"
|
#include "spellchecker_hunspell.h"
|
||||||
#include "standard_paths.h"
|
#include "standard_paths.h"
|
||||||
#include "utils.h"
|
#include "utils.h"
|
||||||
#include "options.h"
|
#include "options.h"
|
||||||
|
@ -52,42 +52,6 @@
|
||||||
#include <wx/txtstrm.h>
|
#include <wx/txtstrm.h>
|
||||||
|
|
||||||
|
|
||||||
//////////////////
|
|
||||||
// Hunspell class
|
|
||||||
class HunspellSpellChecker : public SpellChecker {
|
|
||||||
private:
|
|
||||||
Hunspell *hunspell;
|
|
||||||
wxCSConv *conv;
|
|
||||||
wxString affpath;
|
|
||||||
wxString dicpath;
|
|
||||||
wxString usrdicpath;
|
|
||||||
|
|
||||||
void Reset();
|
|
||||||
|
|
||||||
public:
|
|
||||||
HunspellSpellChecker();
|
|
||||||
~HunspellSpellChecker();
|
|
||||||
|
|
||||||
void AddWord(wxString word);
|
|
||||||
bool CanAddWord(wxString word);
|
|
||||||
|
|
||||||
bool CheckWord(wxString word);
|
|
||||||
wxArrayString GetSuggestions(wxString word);
|
|
||||||
|
|
||||||
wxArrayString GetLanguageList();
|
|
||||||
void SetLanguage(wxString language);
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
///////////
|
|
||||||
// Factory
|
|
||||||
class HunspellSpellCheckerFactory : public SpellCheckerFactory {
|
|
||||||
public:
|
|
||||||
SpellChecker *CreateSpellChecker() { return new HunspellSpellChecker(); }
|
|
||||||
HunspellSpellCheckerFactory() : SpellCheckerFactory(_T("hunspell")) {}
|
|
||||||
} registerHunspell;
|
|
||||||
|
|
||||||
|
|
||||||
///////////////
|
///////////////
|
||||||
// Constructor
|
// Constructor
|
||||||
HunspellSpellChecker::HunspellSpellChecker() {
|
HunspellSpellChecker::HunspellSpellChecker() {
|
||||||
|
|
82
aegisub/spellchecker_hunspell.h
Normal file
82
aegisub/spellchecker_hunspell.h
Normal file
|
@ -0,0 +1,82 @@
|
||||||
|
// Copyright (c) 2008, Rodrigo Braz Monteiro
|
||||||
|
// All rights reserved.
|
||||||
|
//
|
||||||
|
// Redistribution and use in source and binary forms, with or without
|
||||||
|
// modification, are permitted provided that the following conditions are met:
|
||||||
|
//
|
||||||
|
// * Redistributions of source code must retain the above copyright notice,
|
||||||
|
// this list of conditions and the following disclaimer.
|
||||||
|
// * Redistributions in binary form must reproduce the above copyright notice,
|
||||||
|
// this list of conditions and the following disclaimer in the documentation
|
||||||
|
// and/or other materials provided with the distribution.
|
||||||
|
// * Neither the name of the Aegisub Group nor the names of its contributors
|
||||||
|
// may be used to endorse or promote products derived from this software
|
||||||
|
// without specific prior written permission.
|
||||||
|
//
|
||||||
|
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
||||||
|
// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||||
|
// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||||
|
// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
|
||||||
|
// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
||||||
|
// CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
|
||||||
|
// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
||||||
|
// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
|
||||||
|
// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
||||||
|
// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
||||||
|
// POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
//
|
||||||
|
// -----------------------------------------------------------------------------
|
||||||
|
//
|
||||||
|
// AEGISUB
|
||||||
|
//
|
||||||
|
// Website: http://aegisub.cellosoft.com
|
||||||
|
// Contact: mailto:zeratul@cellosoft.com
|
||||||
|
//
|
||||||
|
|
||||||
|
|
||||||
|
///////////
|
||||||
|
// Headers
|
||||||
|
|
||||||
|
#ifdef WITH_HUNSPELL
|
||||||
|
|
||||||
|
#include "spellchecker.h"
|
||||||
|
#include <hunspell/hunspell.hxx>
|
||||||
|
#include <wx/wxprec.h>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
//////////////////
|
||||||
|
// Hunspell class
|
||||||
|
class HunspellSpellChecker : public SpellChecker {
|
||||||
|
private:
|
||||||
|
Hunspell *hunspell;
|
||||||
|
wxCSConv *conv;
|
||||||
|
wxString affpath;
|
||||||
|
wxString dicpath;
|
||||||
|
wxString usrdicpath;
|
||||||
|
|
||||||
|
void Reset();
|
||||||
|
|
||||||
|
public:
|
||||||
|
HunspellSpellChecker();
|
||||||
|
~HunspellSpellChecker();
|
||||||
|
|
||||||
|
void AddWord(wxString word);
|
||||||
|
bool CanAddWord(wxString word);
|
||||||
|
|
||||||
|
bool CheckWord(wxString word);
|
||||||
|
wxArrayString GetSuggestions(wxString word);
|
||||||
|
|
||||||
|
wxArrayString GetLanguageList();
|
||||||
|
void SetLanguage(wxString language);
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
///////////
|
||||||
|
// Factory
|
||||||
|
class HunspellSpellCheckerFactory : public SpellCheckerFactory {
|
||||||
|
public:
|
||||||
|
SpellChecker *CreateSpellChecker() { return new HunspellSpellChecker(); }
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif
|
|
@ -70,7 +70,7 @@ SubsTextEditCtrl::SubsTextEditCtrl(wxWindow* parent, wxWindowID id, const wxStri
|
||||||
CmdKeyClear('U',wxSTC_SCMOD_CTRL);
|
CmdKeyClear('U',wxSTC_SCMOD_CTRL);
|
||||||
|
|
||||||
// Set spellchecker
|
// Set spellchecker
|
||||||
spellchecker = SpellCheckerFactory::GetSpellChecker();
|
spellchecker = SpellCheckerFactoryManager::GetSpellChecker();
|
||||||
|
|
||||||
// Set thesaurus
|
// Set thesaurus
|
||||||
thesaurus = Thesaurus::GetThesaurus();
|
thesaurus = Thesaurus::GetThesaurus();
|
||||||
|
|
|
@ -143,7 +143,7 @@ void SubtitlesPreview::UpdateBitmap(int w,int h) {
|
||||||
// Try to get subtitles provider
|
// Try to get subtitles provider
|
||||||
SubtitlesProvider *provider = NULL;
|
SubtitlesProvider *provider = NULL;
|
||||||
try {
|
try {
|
||||||
provider = SubtitlesProviderFactory::GetProvider();
|
provider = SubtitlesProviderFactoryManager::GetProvider();
|
||||||
}
|
}
|
||||||
catch (...) {
|
catch (...) {
|
||||||
wxMessageBox(_T("Could not get any subtitles provider for the preview box. Make sure that you have a provider installed."),_T("No subtitles provider"),wxICON_ERROR);
|
wxMessageBox(_T("Could not get any subtitles provider for the preview box. Make sure that you have a provider installed."),_T("No subtitles provider"),wxICON_ERROR);
|
||||||
|
|
|
@ -97,7 +97,7 @@ void DVDSubtitleFormat::GetSubPictureList(std::vector<SubPicture> &pics) {
|
||||||
pics.resize(count);
|
pics.resize(count);
|
||||||
|
|
||||||
SubtitlesProvider *provider = NULL;
|
SubtitlesProvider *provider = NULL;
|
||||||
provider = SubtitlesProviderFactory::GetProvider();
|
provider = SubtitlesProviderFactoryManager::GetProvider();
|
||||||
provider->LoadSubtitles(GetAssFile());
|
provider->LoadSubtitles(GetAssFile());
|
||||||
|
|
||||||
// Write lines
|
// Write lines
|
||||||
|
|
|
@ -54,7 +54,7 @@ SubtitlesProvider::~SubtitlesProvider() {
|
||||||
|
|
||||||
////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////
|
||||||
// Check if provider available (doesn't verify provider works!)
|
// Check if provider available (doesn't verify provider works!)
|
||||||
bool SubtitlesProviderFactory::ProviderAvailable() {
|
bool SubtitlesProviderFactoryManager::ProviderAvailable() {
|
||||||
// List of providers
|
// List of providers
|
||||||
wxArrayString list = GetFactoryList(Options.AsText(_T("Subtitles provider")));
|
wxArrayString list = GetFactoryList(Options.AsText(_T("Subtitles provider")));
|
||||||
|
|
||||||
|
@ -65,7 +65,7 @@ bool SubtitlesProviderFactory::ProviderAvailable() {
|
||||||
|
|
||||||
////////////////
|
////////////////
|
||||||
// Get provider
|
// Get provider
|
||||||
SubtitlesProvider* SubtitlesProviderFactory::GetProvider() {
|
SubtitlesProvider* SubtitlesProviderFactoryManager::GetProvider() {
|
||||||
// List of providers
|
// List of providers
|
||||||
wxArrayString list = GetFactoryList(Options.AsText(_T("Subtitles provider")));
|
wxArrayString list = GetFactoryList(Options.AsText(_T("Subtitles provider")));
|
||||||
|
|
||||||
|
@ -94,16 +94,17 @@ SubtitlesProvider* SubtitlesProviderFactory::GetProvider() {
|
||||||
|
|
||||||
//////////////////////
|
//////////////////////
|
||||||
// Register providers
|
// Register providers
|
||||||
void SubtitlesProviderFactory::RegisterProviders() {
|
void SubtitlesProviderFactoryManager::RegisterProviders() {
|
||||||
#ifdef WITH_CSRI
|
#ifdef WITH_CSRI
|
||||||
new CSRISubtitlesProviderFactory();
|
CSRISubtitlesProviderFactory *csri = new CSRISubtitlesProviderFactory();
|
||||||
|
RegisterFactory(csri,_T("CSRI"),csri->GetSubTypes());
|
||||||
#endif
|
#endif
|
||||||
#ifdef WITH_LIBASS
|
#ifdef WITH_LIBASS
|
||||||
new LibassSubtitlesProviderFactory();
|
RegisterFactory(new LibassSubtitlesProviderFactory(),_T("libass"));
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
//////////
|
//////////
|
||||||
// Static
|
// Static
|
||||||
template <class SubtitlesProviderFactory> std::map<wxString,SubtitlesProviderFactory*>* AegisubFactory<SubtitlesProviderFactory>::factories=NULL;
|
template <class SubtitlesProviderFactory> std::map<wxString,SubtitlesProviderFactory*>* FactoryManager<SubtitlesProviderFactory>::factories=NULL;
|
||||||
|
|
|
@ -41,7 +41,7 @@
|
||||||
// Headers
|
// Headers
|
||||||
#include <wx/wxprec.h>
|
#include <wx/wxprec.h>
|
||||||
#include "video_frame.h"
|
#include "video_frame.h"
|
||||||
#include "factory.h"
|
#include "factory_manager.h"
|
||||||
|
|
||||||
|
|
||||||
//////////////
|
//////////////
|
||||||
|
@ -65,16 +65,19 @@ public:
|
||||||
|
|
||||||
///////////
|
///////////
|
||||||
// Factory
|
// Factory
|
||||||
class SubtitlesProviderFactory : public AegisubFactory<SubtitlesProviderFactory> {
|
class SubtitlesProviderFactory {
|
||||||
protected:
|
|
||||||
virtual SubtitlesProvider *CreateProvider(wxString subType=_T(""))=0;
|
|
||||||
SubtitlesProviderFactory(wxString name,wxArrayString subTypes=wxArrayString()) {
|
|
||||||
RegisterFactory(name,subTypes);
|
|
||||||
}
|
|
||||||
|
|
||||||
public:
|
public:
|
||||||
virtual ~SubtitlesProviderFactory() {}
|
virtual ~SubtitlesProviderFactory() {}
|
||||||
|
virtual SubtitlesProvider *CreateProvider(wxString subType=_T(""))=0;
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
///////////////////
|
||||||
|
// Factory Manager
|
||||||
|
class SubtitlesProviderFactoryManager : public FactoryManager<SubtitlesProviderFactory> {
|
||||||
|
public:
|
||||||
static SubtitlesProvider *GetProvider();
|
static SubtitlesProvider *GetProvider();
|
||||||
static void RegisterProviders();
|
static void RegisterProviders();
|
||||||
static bool ProviderAvailable();
|
static bool ProviderAvailable();
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -75,7 +75,6 @@ class CSRISubtitlesProviderFactory : public SubtitlesProviderFactory {
|
||||||
public:
|
public:
|
||||||
SubtitlesProvider *CreateProvider(wxString subType=_T("")) { return new CSRISubtitlesProvider(subType); }
|
SubtitlesProvider *CreateProvider(wxString subType=_T("")) { return new CSRISubtitlesProvider(subType); }
|
||||||
wxArrayString GetSubTypes();
|
wxArrayString GetSubTypes();
|
||||||
CSRISubtitlesProviderFactory() : SubtitlesProviderFactory(_T("csri"),GetSubTypes()) {}
|
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -329,13 +329,13 @@ void VideoContext::SetVideo(const wxString &filename) {
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
// Choose a provider
|
// Choose a provider
|
||||||
provider = VideoProviderFactory::GetProvider(filename,overFps);
|
provider = VideoProviderFactoryManager::GetProvider(filename,overFps);
|
||||||
loaded = provider != NULL;
|
loaded = provider != NULL;
|
||||||
|
|
||||||
// Get subtitles provider
|
// Get subtitles provider
|
||||||
try {
|
try {
|
||||||
subsProvider = provider->GetAsSubtitlesProvider();
|
subsProvider = provider->GetAsSubtitlesProvider();
|
||||||
if (!subsProvider) subsProvider = SubtitlesProviderFactory::GetProvider();
|
if (!subsProvider) subsProvider = SubtitlesProviderFactoryManager::GetProvider();
|
||||||
}
|
}
|
||||||
catch (wxString err) { wxMessageBox(_T("Error while loading subtitles provider: ") + err,_T("Subtitles provider")); }
|
catch (wxString err) { wxMessageBox(_T("Error while loading subtitles provider: ") + err,_T("Subtitles provider")); }
|
||||||
catch (const wchar_t *err) { wxMessageBox(_T("Error while loading subtitles provider: ") + wxString(err),_T("Subtitles provider")); }
|
catch (const wchar_t *err) { wxMessageBox(_T("Error while loading subtitles provider: ") + wxString(err),_T("Subtitles provider")); }
|
||||||
|
|
|
@ -55,7 +55,7 @@
|
||||||
|
|
||||||
////////////////
|
////////////////
|
||||||
// Get provider
|
// Get provider
|
||||||
VideoProvider *VideoProviderFactory::GetProvider(wxString video,double fps) {
|
VideoProvider *VideoProviderFactoryManager::GetProvider(wxString video,double fps) {
|
||||||
// First check special case of dummy video
|
// First check special case of dummy video
|
||||||
if (video.StartsWith(_T("?dummy:"))) {
|
if (video.StartsWith(_T("?dummy:"))) {
|
||||||
return new DummyVideoProvider(video, fps);
|
return new DummyVideoProvider(video, fps);
|
||||||
|
@ -93,19 +93,19 @@ VideoProvider *VideoProviderFactory::GetProvider(wxString video,double fps) {
|
||||||
|
|
||||||
//////////////////////////
|
//////////////////////////
|
||||||
// Register all providers
|
// Register all providers
|
||||||
void VideoProviderFactory::RegisterProviders() {
|
void VideoProviderFactoryManager::RegisterProviders() {
|
||||||
#ifdef WITH_AVISYNTH
|
#ifdef WITH_AVISYNTH
|
||||||
new AvisynthVideoProviderFactory();
|
RegisterFactory(new AvisynthVideoProviderFactory(),_T("Avisynth"));
|
||||||
#endif
|
#endif
|
||||||
#ifdef WITH_DIRECTSHOW
|
#ifdef WITH_DIRECTSHOW
|
||||||
new DirectShowVideoProviderFactory();
|
RegisterFactory(new DirectShowVideoProviderFactory(),_T("DirectShow"));
|
||||||
#endif
|
#endif
|
||||||
#ifdef WITH_FFMPEG
|
#ifdef WITH_FFMPEG
|
||||||
new LAVCVideoProviderFactory();
|
RegisterFactory(new LAVCVideoProviderFactory(),_T("FFMPEG"));
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
//////////
|
//////////
|
||||||
// Static
|
// Static
|
||||||
template <class VideoProviderFactory> std::map<wxString,VideoProviderFactory*>* AegisubFactory<VideoProviderFactory>::factories=NULL;
|
template <class VideoProviderFactory> std::map<wxString,VideoProviderFactory*>* FactoryManager<VideoProviderFactory>::factories=NULL;
|
||||||
|
|
|
@ -41,7 +41,7 @@
|
||||||
// Headers
|
// Headers
|
||||||
#include <wx/intl.h>
|
#include <wx/intl.h>
|
||||||
#include "video_frame.h"
|
#include "video_frame.h"
|
||||||
#include "factory.h"
|
#include "factory_manager.h"
|
||||||
|
|
||||||
|
|
||||||
//////////////
|
//////////////
|
||||||
|
@ -86,14 +86,16 @@ public:
|
||||||
|
|
||||||
///////////
|
///////////
|
||||||
// Factory
|
// Factory
|
||||||
class VideoProviderFactory : public AegisubFactory<VideoProviderFactory> {
|
class VideoProviderFactory {
|
||||||
protected:
|
|
||||||
virtual VideoProvider *CreateProvider(wxString video,double fps=0.0)=0;
|
|
||||||
VideoProviderFactory(wxString name) { RegisterFactory(name); }
|
|
||||||
|
|
||||||
public:
|
public:
|
||||||
virtual ~VideoProviderFactory() {}
|
virtual VideoProvider *CreateProvider(wxString video,double fps=0.0)=0;
|
||||||
static VideoProvider *GetProvider(wxString video,double fps=0.0);
|
};
|
||||||
|
|
||||||
static void RegisterProviders();
|
|
||||||
|
///////////////////
|
||||||
|
// Factory Manager
|
||||||
|
class VideoProviderFactoryManager : public FactoryManager<VideoProviderFactory> {
|
||||||
|
public:
|
||||||
|
static void RegisterProviders();
|
||||||
|
static VideoProvider *GetProvider(wxString video,double fps=0.0);
|
||||||
};
|
};
|
||||||
|
|
|
@ -101,7 +101,6 @@ public:
|
||||||
class AvisynthVideoProviderFactory : public VideoProviderFactory {
|
class AvisynthVideoProviderFactory : public VideoProviderFactory {
|
||||||
public:
|
public:
|
||||||
VideoProvider *CreateProvider(wxString video,double fps=0.0) { return new AvisynthVideoProvider(video,fps); }
|
VideoProvider *CreateProvider(wxString video,double fps=0.0) { return new AvisynthVideoProvider(video,fps); }
|
||||||
AvisynthVideoProviderFactory() : VideoProviderFactory(_T("avisynth")) {}
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -124,7 +124,6 @@ public:
|
||||||
class DirectShowVideoProviderFactory : public VideoProviderFactory {
|
class DirectShowVideoProviderFactory : public VideoProviderFactory {
|
||||||
public:
|
public:
|
||||||
VideoProvider *CreateProvider(wxString video,double fps=0.0) { return new DirectShowVideoProvider(video,fps); }
|
VideoProvider *CreateProvider(wxString video,double fps=0.0) { return new DirectShowVideoProvider(video,fps); }
|
||||||
DirectShowVideoProviderFactory() : VideoProviderFactory(_T("dshow")) {}
|
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -222,10 +222,11 @@
|
||||||
OpenMP="true"
|
OpenMP="true"
|
||||||
UsePrecompiledHeader="2"
|
UsePrecompiledHeader="2"
|
||||||
PrecompiledHeaderThrough="stdwx.h"
|
PrecompiledHeaderThrough="stdwx.h"
|
||||||
|
ProgramDataBaseFileName="$(IntDir)\vc90.pdb"
|
||||||
WarningLevel="3"
|
WarningLevel="3"
|
||||||
WarnAsError="true"
|
WarnAsError="true"
|
||||||
Detect64BitPortabilityProblems="false"
|
Detect64BitPortabilityProblems="false"
|
||||||
DebugInformationFormat="3"
|
DebugInformationFormat="0"
|
||||||
DisableSpecificWarnings="4267"
|
DisableSpecificWarnings="4267"
|
||||||
ForcedIncludeFiles="stdwx.h;config.h"
|
ForcedIncludeFiles="stdwx.h;config.h"
|
||||||
/>
|
/>
|
||||||
|
@ -917,7 +918,7 @@
|
||||||
>
|
>
|
||||||
</File>
|
</File>
|
||||||
<File
|
<File
|
||||||
RelativePath="..\..\aegisub\factory.h"
|
RelativePath="..\..\aegisub\factory_manager.h"
|
||||||
>
|
>
|
||||||
</File>
|
</File>
|
||||||
<File
|
<File
|
||||||
|
@ -1672,6 +1673,10 @@
|
||||||
RelativePath="..\..\aegisub\spellchecker_hunspell.cpp"
|
RelativePath="..\..\aegisub\spellchecker_hunspell.cpp"
|
||||||
>
|
>
|
||||||
</File>
|
</File>
|
||||||
|
<File
|
||||||
|
RelativePath="..\..\aegisub\spellchecker_hunspell.h"
|
||||||
|
>
|
||||||
|
</File>
|
||||||
<File
|
<File
|
||||||
RelativePath="..\..\aegisub\thesaurus.cpp"
|
RelativePath="..\..\aegisub\thesaurus.cpp"
|
||||||
>
|
>
|
||||||
|
|
Loading…
Reference in a new issue