4 * Copyright (C) 2005-2013 Team XBMC
7 * This Program is free software; you can redistribute it and/or modify
8 * it under the terms of the GNU General Public License as published by
9 * the Free Software Foundation; either version 2, or (at your option)
12 * This Program is distributed in the hope that it will be useful,
13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 * GNU General Public License for more details.
17 * You should have received a copy of the GNU General Public License
18 * along with XBMC; see the file COPYING. If not, see
19 * <http://www.gnu.org/licenses/>.
23 #if (defined HAVE_CONFIG_H) && (!defined WIN32)
28 #include "lib/libass/libass/ass.h"
33 #include "DynamicDll.h"
34 #include "utils/log.h"
36 #ifndef LIBASS_VERSION /* Legacy version. */
37 typedef struct ass_library_s ASS_Library;
38 typedef struct render_priv_s ASS_Renderer;
39 typedef ass_image_t ASS_Image;
40 typedef ass_track_t ASS_Track;
41 typedef ass_event_t ASS_Event;
44 class DllLibassInterface
47 virtual ~DllLibassInterface() {}
48 virtual void ass_set_extract_fonts(ASS_Library* priv, int extract)=0;
49 virtual void ass_set_fonts_dir(ASS_Library* priv, const char* fonts_dir)=0;
50 virtual ASS_Library* ass_library_init(void)=0;
51 virtual ASS_Renderer* ass_renderer_init(ASS_Library* library)=0;
52 virtual void ass_set_frame_size(ASS_Renderer* priv, int w, int h)=0;
53 virtual void ass_set_margins(ASS_Renderer* priv, int t, int b, int l, int r)=0;
54 virtual void ass_set_use_margins(ASS_Renderer* priv, int use)=0;
55 virtual void ass_set_font_scale(ASS_Renderer* priv, double font_scale)=0;
56 virtual ASS_Image* ass_render_frame(ASS_Renderer *priv, ASS_Track* track, long long now, int* detect_change)=0;
57 virtual ASS_Track* ass_new_track(ASS_Library*)=0;
58 virtual ASS_Track* ass_read_file(ASS_Library* library, char* fname, char* codepage)=0;
59 virtual void ass_free_track(ASS_Track* track)=0;
60 virtual void ass_set_fonts(ASS_Renderer *priv, const char *default_font, const char *default_family, int fc, const char *config, int update) = 0;
61 virtual void ass_set_style_overrides(ASS_Library* priv, char** list)=0;
62 virtual void ass_library_done(ASS_Library* library)=0;
63 virtual void ass_renderer_done(ASS_Renderer* renderer)=0;
64 virtual void ass_process_chunk(ASS_Track* track, char *data, int size, long long timecode, long long duration)=0;
65 virtual void ass_process_codec_private(ASS_Track* track, char *data, int size)=0;
66 virtual void ass_set_message_cb(ASS_Library *priv
67 , void (*msg_cb)(int level, const char *fmt, va_list args, void *data)
71 class DllLibass : public DllDynamic, DllLibassInterface
73 DECLARE_DLL_WRAPPER(DllLibass, DLL_PATH_LIBASS)
74 DEFINE_METHOD2(void, ass_set_extract_fonts, (ASS_Library * p1, int p2))
75 DEFINE_METHOD2(void, ass_set_fonts_dir, (ASS_Library * p1, const char * p2))
76 DEFINE_METHOD0(ASS_Library *, ass_library_init)
77 DEFINE_METHOD1(ASS_Renderer *, ass_renderer_init, (ASS_Library * p1))
78 DEFINE_METHOD3(void, ass_set_frame_size, (ASS_Renderer * p1, int p2, int p3))
79 DEFINE_METHOD5(void, ass_set_margins, (ASS_Renderer * p1, int p2, int p3, int p4, int p5))
80 DEFINE_METHOD2(void, ass_set_use_margins, (ASS_Renderer * p1, int p2))
81 DEFINE_METHOD2(void, ass_set_font_scale, (ASS_Renderer * p1, double p2))
82 DEFINE_METHOD4(ASS_Image *, ass_render_frame, (ASS_Renderer * p1, ASS_Track * p2, long long p3, int * p4))
83 DEFINE_METHOD1(ASS_Track *, ass_new_track, (ASS_Library * p1))
84 DEFINE_METHOD3(ASS_Track *, ass_read_file, (ASS_Library * p1, char * p2, char * p3))
85 DEFINE_METHOD4(ASS_Track *, ass_read_memory, (ASS_Library * p1, char * p2, int p3, char * p4))
86 DEFINE_METHOD1(void, ass_free_track, (ASS_Track * p1))
87 DEFINE_METHOD6(void, ass_set_fonts, (ASS_Renderer* p1, const char* p2, const char* p3, int p4, const char* p5, int p6))
88 DEFINE_METHOD2(void, ass_set_style_overrides, (ASS_Library* p1, char** p2))
89 DEFINE_METHOD1(void, ass_library_done, (ASS_Library* p1))
90 DEFINE_METHOD1(void, ass_renderer_done, (ASS_Renderer* p1))
91 DEFINE_METHOD5(void, ass_process_chunk, (ASS_Track* p1, char* p2, int p3, long long p4, long long p5))
92 DEFINE_METHOD3(void, ass_process_codec_private, (ASS_Track* p1, char* p2, int p3))
93 DEFINE_METHOD3(void, ass_set_message_cb, (ASS_Library* p1, void (*p2)(int level, const char *fmt, va_list args, void *data), void* p3))
94 BEGIN_METHOD_RESOLVE()
95 RESOLVE_METHOD(ass_set_extract_fonts)
96 RESOLVE_METHOD(ass_set_fonts_dir)
97 RESOLVE_METHOD(ass_library_init)
98 RESOLVE_METHOD(ass_renderer_init)
99 RESOLVE_METHOD(ass_set_frame_size)
100 RESOLVE_METHOD(ass_set_margins)
101 RESOLVE_METHOD(ass_set_use_margins)
102 RESOLVE_METHOD(ass_set_font_scale)
103 RESOLVE_METHOD(ass_render_frame)
104 RESOLVE_METHOD(ass_new_track)
105 RESOLVE_METHOD(ass_read_file)
106 RESOLVE_METHOD(ass_read_memory)
107 RESOLVE_METHOD(ass_free_track)
108 RESOLVE_METHOD(ass_set_fonts)
109 RESOLVE_METHOD(ass_set_style_overrides)
110 RESOLVE_METHOD(ass_library_done)
111 RESOLVE_METHOD(ass_renderer_done)
112 RESOLVE_METHOD(ass_process_chunk)
113 RESOLVE_METHOD(ass_process_codec_private)
114 RESOLVE_METHOD(ass_set_message_cb)