From 1b96e656ff30cb72b5c64604d35d79e3d0c372f8 Mon Sep 17 00:00:00 2001 From: Rodrigo Braz Monteiro Date: Wed, 5 Mar 2008 02:58:11 +0000 Subject: [PATCH] ...And done making subtitle providers register manually. If anything goes wrong, blame movax. Originally committed to SVN as r1894. --- aegisub/subtitles_provider.cpp | 24 ++++++++ aegisub/subtitles_provider.h | 1 + aegisub/subtitles_provider_csri.cpp | 83 ++++++++------------------- aegisub/subtitles_provider_csri.h | 77 +++++++++++++++++++++++++ aegisub/subtitles_provider_libass.cpp | 36 ------------ aegisub/subtitles_provider_libass.h | 79 +++++++++++++++++++++++++ 6 files changed, 206 insertions(+), 94 deletions(-) create mode 100644 aegisub/subtitles_provider_csri.h create mode 100644 aegisub/subtitles_provider_libass.h diff --git a/aegisub/subtitles_provider.cpp b/aegisub/subtitles_provider.cpp index 95f436714..33eb818e4 100644 --- a/aegisub/subtitles_provider.cpp +++ b/aegisub/subtitles_provider.cpp @@ -37,6 +37,12 @@ /////////// // Headers #include "subtitles_provider.h" +#ifdef WITH_CSRI +#include "subtitles_provider_csri.h" +#endif +#ifdef WITH_LIBASS +#include "subtitles_provider_libass.h" +#endif #include "options.h" @@ -59,6 +65,12 @@ bool SubtitlesProviderFactory::ProviderAvailable() { //////////////// // Get provider SubtitlesProvider* SubtitlesProviderFactory::GetProvider() { + // Register them + // HACK: fix me + static bool init = false; + if (!init) RegisterProviders(); + init = true; + // List of providers wxArrayString list = GetFactoryList(Options.AsText(_T("Subtitles provider"))); @@ -85,6 +97,18 @@ SubtitlesProvider* SubtitlesProviderFactory::GetProvider() { } +////////////////////// +// Register providers +void SubtitlesProviderFactory::RegisterProviders() { +#ifdef WITH_CSRI + new CSRISubtitlesProviderFactory(); +#endif +#ifdef WITH_LIBASS + new LibassSubtitlesProviderFactory(); +#endif +} + + ////////// // Static template std::map* AegisubFactory::factories=NULL; diff --git a/aegisub/subtitles_provider.h b/aegisub/subtitles_provider.h index ceb79855f..af320dca6 100644 --- a/aegisub/subtitles_provider.h +++ b/aegisub/subtitles_provider.h @@ -75,5 +75,6 @@ protected: public: virtual ~SubtitlesProviderFactory() {} static SubtitlesProvider *GetProvider(); + static void RegisterProviders(); static bool ProviderAvailable(); }; diff --git a/aegisub/subtitles_provider_csri.cpp b/aegisub/subtitles_provider_csri.cpp index c51bc575d..7f7315d54 100644 --- a/aegisub/subtitles_provider_csri.cpp +++ b/aegisub/subtitles_provider_csri.cpp @@ -40,66 +40,9 @@ #ifdef WITH_CSRI #include -#include "subtitles_provider.h" +#include "subtitles_provider_csri.h" #include "ass_file.h" #include "video_context.h" -#ifdef WIN32 -#define CSRIAPI -#endif -#include "csri/csri.h" - - -/////////////////// -// Link to library -#if __VISUALC__ >= 1200 -//#pragma comment(lib,"asa.lib") -#endif - - -///////////////////////////////////////////////// -// Common Subtitles Rendering Interface provider -class CSRISubtitlesProvider : public SubtitlesProvider { -private: - wxString subType; - csri_inst *instance; - -public: - CSRISubtitlesProvider(wxString subType); - ~CSRISubtitlesProvider(); - - bool CanRaster() { return true; } - - void LoadSubtitles(AssFile *subs); - void DrawSubtitles(AegiVideoFrame &dst,double time); -}; - - -/////////// -// Factory -class CSRISubtitlesProviderFactory : public SubtitlesProviderFactory { -public: - SubtitlesProvider *CreateProvider(wxString subType=_T("")) { return new CSRISubtitlesProvider(subType); } - wxArrayString GetSubTypes() { - csri_info *info; - wxArrayString final; - for (csri_rend *cur = csri_renderer_default();cur;cur = csri_renderer_next(cur)) { - // Get renderer name - info = csri_renderer_info(cur); - const char* buffer = info->name; - - // wxWidgets isn't initialized, so h4x into a wxString - int len = strlen(buffer); - wxString str; - str.Alloc(len+1); - for (int i=0;iname; + + // wxWidgets isn't initialized, so h4x into a wxString + int len = strlen(buffer); + wxString str; + str.Alloc(len+1); + for (int i=0;i +#include "subtitles_provider.h" +#ifdef WIN32 +#define CSRIAPI +#endif +#include "csri/csri.h" + + +///////////////////////////////////////////////// +// Common Subtitles Rendering Interface provider +class CSRISubtitlesProvider : public SubtitlesProvider { +private: + wxString subType; + csri_inst *instance; + +public: + CSRISubtitlesProvider(wxString subType); + ~CSRISubtitlesProvider(); + + bool CanRaster() { return true; } + + void LoadSubtitles(AssFile *subs); + void DrawSubtitles(AegiVideoFrame &dst,double time); +}; + + +/////////// +// Factory +class CSRISubtitlesProviderFactory : public SubtitlesProviderFactory { +public: + SubtitlesProvider *CreateProvider(wxString subType=_T("")) { return new CSRISubtitlesProvider(subType); } + wxArrayString GetSubTypes(); + CSRISubtitlesProviderFactory() : SubtitlesProviderFactory(_T("csri"),GetSubTypes()) {} +}; + +#endif diff --git a/aegisub/subtitles_provider_libass.cpp b/aegisub/subtitles_provider_libass.cpp index c2ac95810..d7610b2a4 100644 --- a/aegisub/subtitles_provider_libass.cpp +++ b/aegisub/subtitles_provider_libass.cpp @@ -42,42 +42,6 @@ #include "ass_file.h" #include "video_context.h" #include "utils.h" -extern "C" { -#ifdef __VISUALC__ -#include "stdint.h" -#endif -#include "../libass/ass.h" -} - - -/////////////////// -// libass provider -class LibassSubtitlesProvider : public SubtitlesProvider { -private: - static ass_library_t* ass_library; - ass_renderer_t* ass_renderer; - ass_track_t* ass_track; - -public: - LibassSubtitlesProvider(); - ~LibassSubtitlesProvider(); - - bool CanRaster() { return true; } - - void LoadSubtitles(AssFile *subs); - void DrawSubtitles(AegiVideoFrame &dst,double time); -}; - -ass_library_t* LibassSubtitlesProvider::ass_library; - - -/////////// -// Factory -class LibassSubtitlesProviderFactory : public SubtitlesProviderFactory { -public: - SubtitlesProvider *CreateProvider(wxString subType=_T("")) { return new LibassSubtitlesProvider(); } - LibassSubtitlesProviderFactory() : SubtitlesProviderFactory(_T("libass")) {} -} registerLibass; /////////////// diff --git a/aegisub/subtitles_provider_libass.h b/aegisub/subtitles_provider_libass.h new file mode 100644 index 000000000..adff2e08c --- /dev/null +++ b/aegisub/subtitles_provider_libass.h @@ -0,0 +1,79 @@ +// Copyright (c) 2006-2007, Rodrigo Braz Monteiro, Evgeniy Stepanov +// 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_LIBASS + +#include "subtitles_provider.h" +extern "C" { +#ifdef __VISUALC__ +#include "stdint.h" +#endif +#include "../libass/ass.h" +} + + +/////////////////// +// libass provider +class LibassSubtitlesProvider : public SubtitlesProvider { +private: + static ass_library_t* ass_library; + ass_renderer_t* ass_renderer; + ass_track_t* ass_track; + +public: + LibassSubtitlesProvider(); + ~LibassSubtitlesProvider(); + + bool CanRaster() { return true; } + + void LoadSubtitles(AssFile *subs); + void DrawSubtitles(AegiVideoFrame &dst,double time); +}; + +ass_library_t* LibassSubtitlesProvider::ass_library; + + +/////////// +// Factory +class LibassSubtitlesProviderFactory : public SubtitlesProviderFactory { +public: + SubtitlesProvider *CreateProvider(wxString subType=_T("")) { return new LibassSubtitlesProvider(); } + LibassSubtitlesProviderFactory() : SubtitlesProviderFactory(_T("libass")) {} +}; + +#endif