1 /**
2 * MltParser.cpp - MLT Wrapper
3 * Copyright (C) 2004-2015 Meltytech, LLC
4 * Author: Charles Yates <charles.yates@gmail.com>
5 *
6 * This library is free software; you can redistribute it and/or
7 * modify it under the terms of the GNU Lesser General Public
8 * License as published by the Free Software Foundation; either
9 * version 2.1 of the License, or (at your option) any later version.
10 *
11 * This library is distributed in the hope that it will be useful,
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14 * Lesser General Public License for more details.
15 *
16 * You should have received a copy of the GNU Lesser General Public
17 * License along with this library; if not, write to the Free Software
18 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
19 */
20
21 #include "Mlt.h"
22 using namespace Mlt;
23
on_invalid_cb(mlt_parser self,mlt_service object)24 static int on_invalid_cb( mlt_parser self, mlt_service object )
25 {
26 mlt_properties properties = mlt_parser_properties( self );
27 Parser *parser = ( Parser * )mlt_properties_get_data( properties, "_parser_object", NULL );
28 Service service( object );
29 return parser->on_invalid( &service );
30 }
31
on_unknown_cb(mlt_parser self,mlt_service object)32 static int on_unknown_cb( mlt_parser self, mlt_service object )
33 {
34 mlt_properties properties = mlt_parser_properties( self );
35 Parser *parser = ( Parser * )mlt_properties_get_data( properties, "_parser_object", NULL );
36 Service service( object );
37 return parser->on_unknown( &service );
38 }
39
on_start_producer_cb(mlt_parser self,mlt_producer object)40 static int on_start_producer_cb( mlt_parser self, mlt_producer object )
41 {
42 mlt_properties properties = mlt_parser_properties( self );
43 Parser *parser = ( Parser * )mlt_properties_get_data( properties, "_parser_object", NULL );
44 Producer producer( object );
45 return parser->on_start_producer( &producer );
46 }
47
on_end_producer_cb(mlt_parser self,mlt_producer object)48 static int on_end_producer_cb( mlt_parser self, mlt_producer object )
49 {
50 mlt_properties properties = mlt_parser_properties( self );
51 Parser *parser = ( Parser * )mlt_properties_get_data( properties, "_parser_object", NULL );
52 Producer producer( object );
53 return parser->on_end_producer( &producer );
54 }
55
on_start_playlist_cb(mlt_parser self,mlt_playlist object)56 static int on_start_playlist_cb( mlt_parser self, mlt_playlist object )
57 {
58 mlt_properties properties = mlt_parser_properties( self );
59 Parser *parser = ( Parser * )mlt_properties_get_data( properties, "_parser_object", NULL );
60 Playlist playlist( object );
61 return parser->on_start_playlist( &playlist );
62 }
63
on_end_playlist_cb(mlt_parser self,mlt_playlist object)64 static int on_end_playlist_cb( mlt_parser self, mlt_playlist object )
65 {
66 mlt_properties properties = mlt_parser_properties( self );
67 Parser *parser = ( Parser * )mlt_properties_get_data( properties, "_parser_object", NULL );
68 Playlist playlist( object );
69 return parser->on_end_playlist( &playlist );
70 }
71
on_start_tractor_cb(mlt_parser self,mlt_tractor object)72 static int on_start_tractor_cb( mlt_parser self, mlt_tractor object )
73 {
74 mlt_properties properties = mlt_parser_properties( self );
75 Parser *parser = ( Parser * )mlt_properties_get_data( properties, "_parser_object", NULL );
76 Tractor tractor( object );
77 return parser->on_start_tractor( &tractor );
78 }
79
on_end_tractor_cb(mlt_parser self,mlt_tractor object)80 static int on_end_tractor_cb( mlt_parser self, mlt_tractor object )
81 {
82 mlt_properties properties = mlt_parser_properties( self );
83 Parser *parser = ( Parser * )mlt_properties_get_data( properties, "_parser_object", NULL );
84 Tractor tractor( object );
85 return parser->on_end_tractor( &tractor );
86 }
87
on_start_multitrack_cb(mlt_parser self,mlt_multitrack object)88 static int on_start_multitrack_cb( mlt_parser self, mlt_multitrack object )
89 {
90 mlt_properties properties = mlt_parser_properties( self );
91 Parser *parser = ( Parser * )mlt_properties_get_data( properties, "_parser_object", NULL );
92 Multitrack multitrack( object );
93 return parser->on_start_multitrack( &multitrack );
94 }
95
on_end_multitrack_cb(mlt_parser self,mlt_multitrack object)96 static int on_end_multitrack_cb( mlt_parser self, mlt_multitrack object )
97 {
98 mlt_properties properties = mlt_parser_properties( self );
99 Parser *parser = ( Parser * )mlt_properties_get_data( properties, "_parser_object", NULL );
100 Multitrack multitrack( object );
101 return parser->on_end_multitrack( &multitrack );
102 }
103
on_start_track_cb(mlt_parser self)104 static int on_start_track_cb( mlt_parser self )
105 {
106 mlt_properties properties = mlt_parser_properties( self );
107 Parser *parser = ( Parser * )mlt_properties_get_data( properties, "_parser_object", NULL );
108 return parser->on_start_track( );
109 }
110
on_end_track_cb(mlt_parser self)111 static int on_end_track_cb( mlt_parser self )
112 {
113 mlt_properties properties = mlt_parser_properties( self );
114 Parser *parser = ( Parser * )mlt_properties_get_data( properties, "_parser_object", NULL );
115 return parser->on_end_track( );
116 }
117
on_start_filter_cb(mlt_parser self,mlt_filter object)118 static int on_start_filter_cb( mlt_parser self, mlt_filter object )
119 {
120 mlt_properties properties = mlt_parser_properties( self );
121 Parser *parser = ( Parser * )mlt_properties_get_data( properties, "_parser_object", NULL );
122 Filter filter( object );
123 return parser->on_start_filter( &filter );
124 }
125
on_end_filter_cb(mlt_parser self,mlt_filter object)126 static int on_end_filter_cb( mlt_parser self, mlt_filter object )
127 {
128 mlt_properties properties = mlt_parser_properties( self );
129 Parser *parser = ( Parser * )mlt_properties_get_data( properties, "_parser_object", NULL );
130 Filter filter( object );
131 return parser->on_end_filter( &filter );
132 }
133
on_start_transition_cb(mlt_parser self,mlt_transition object)134 static int on_start_transition_cb( mlt_parser self, mlt_transition object )
135 {
136 mlt_properties properties = mlt_parser_properties( self );
137 Parser *parser = ( Parser * )mlt_properties_get_data( properties, "_parser_object", NULL );
138 Transition transition( object );
139 return parser->on_start_transition( &transition );
140 }
141
on_end_transition_cb(mlt_parser self,mlt_transition object)142 static int on_end_transition_cb( mlt_parser self, mlt_transition object )
143 {
144 mlt_properties properties = mlt_parser_properties( self );
145 Parser *parser = ( Parser * )mlt_properties_get_data( properties, "_parser_object", NULL );
146 Transition transition( object );
147 return parser->on_end_transition( &transition );
148 }
149
on_start_chain_cb(mlt_parser self,mlt_chain object)150 static int on_start_chain_cb( mlt_parser self, mlt_chain object )
151 {
152 mlt_properties properties = mlt_parser_properties( self );
153 Parser *parser = ( Parser * )mlt_properties_get_data( properties, "_parser_object", NULL );
154 Chain chain( object );
155 return parser->on_start_chain( &chain );
156 }
157
on_end_chain_cb(mlt_parser self,mlt_chain object)158 static int on_end_chain_cb( mlt_parser self, mlt_chain object )
159 {
160 mlt_properties properties = mlt_parser_properties( self );
161 Parser *parser = ( Parser * )mlt_properties_get_data( properties, "_parser_object", NULL );
162 Chain chain( object );
163 return parser->on_end_chain( &chain );
164 }
165
on_start_link_cb(mlt_parser self,mlt_link object)166 static int on_start_link_cb( mlt_parser self, mlt_link object )
167 {
168 mlt_properties properties = mlt_parser_properties( self );
169 Parser *parser = ( Parser * )mlt_properties_get_data( properties, "_parser_object", NULL );
170 Link link( object );
171 return parser->on_start_link( &link );
172 }
173
on_end_link_cb(mlt_parser self,mlt_link object)174 static int on_end_link_cb( mlt_parser self, mlt_link object )
175 {
176 mlt_properties properties = mlt_parser_properties( self );
177 Parser *parser = ( Parser * )mlt_properties_get_data( properties, "_parser_object", NULL );
178 Link link( object );
179 return parser->on_end_link( &link );
180 }
181
Parser()182 Parser::Parser( ) :
183 Properties( false )
184 {
185 parser = mlt_parser_new( );
186 set( "_parser_object", this, 0 );
187 parser->on_invalid = on_invalid_cb;
188 parser->on_unknown = on_unknown_cb;
189 parser->on_start_producer = on_start_producer_cb;
190 parser->on_end_producer = on_end_producer_cb;
191 parser->on_start_playlist = on_start_playlist_cb;
192 parser->on_end_playlist = on_end_playlist_cb;
193 parser->on_start_tractor = on_start_tractor_cb;
194 parser->on_end_tractor = on_end_tractor_cb;
195 parser->on_start_multitrack = on_start_multitrack_cb;
196 parser->on_end_multitrack = on_end_multitrack_cb;
197 parser->on_start_track = on_start_track_cb;
198 parser->on_end_track = on_end_track_cb;
199 parser->on_start_filter = on_start_filter_cb;
200 parser->on_end_filter = on_end_filter_cb;
201 parser->on_start_transition = on_start_transition_cb;
202 parser->on_end_transition = on_end_transition_cb;
203 parser->on_start_chain = on_start_chain_cb;
204 parser->on_end_chain = on_end_chain_cb;
205 parser->on_start_link = on_start_link_cb;
206 parser->on_end_link = on_end_link_cb;
207 }
208
~Parser()209 Parser::~Parser( )
210 {
211 mlt_parser_close( parser );
212 }
213
get_properties()214 mlt_properties Parser::get_properties( )
215 {
216 return mlt_parser_properties( parser );
217 }
218
start(Service & service)219 int Parser::start( Service &service )
220 {
221 return mlt_parser_start( parser, service.get_service( ) );
222 }
223
on_invalid(Service * object)224 int Parser::on_invalid( Service *object )
225 {
226 object->debug( "Invalid" );
227 return 0;
228 }
229
on_unknown(Service * object)230 int Parser::on_unknown( Service *object )
231 {
232 object->debug( "Unknown" );
233 return 0;
234 }
235
on_start_producer(Producer * object)236 int Parser::on_start_producer( Producer *object )
237 {
238 object->debug( "on_start_producer" );
239 return 0;
240 }
241
on_end_producer(Producer * object)242 int Parser::on_end_producer( Producer *object )
243 {
244 object->debug( "on_end_producer" );
245 return 0;
246 }
247
on_start_playlist(Playlist * object)248 int Parser::on_start_playlist( Playlist *object )
249 {
250 object->debug( "on_start_playlist" );
251 return 0;
252 }
253
on_end_playlist(Playlist * object)254 int Parser::on_end_playlist( Playlist *object )
255 {
256 object->debug( "on_end_playlist" );
257 return 0;
258 }
259
on_start_tractor(Tractor * object)260 int Parser::on_start_tractor( Tractor *object )
261 {
262 object->debug( "on_start_tractor" );
263 return 0;
264 }
265
on_end_tractor(Tractor * object)266 int Parser::on_end_tractor( Tractor *object )
267 {
268 object->debug( "on_end_tractor" );
269 return 0;
270 }
271
on_start_multitrack(Multitrack * object)272 int Parser::on_start_multitrack( Multitrack *object )
273 {
274 object->debug( "on_start_multitrack" );
275 return 0;
276 }
277
on_end_multitrack(Multitrack * object)278 int Parser::on_end_multitrack( Multitrack *object )
279 {
280 object->debug( "on_end_multitrack" );
281 return 0;
282 }
283
on_start_track()284 int Parser::on_start_track( )
285 {
286 fprintf( stderr, "on_start_track\n" );
287 return 0;
288 }
289
on_end_track()290 int Parser::on_end_track( )
291 {
292 fprintf( stderr, "on_end_track\n" );
293 return 0;
294 }
295
on_start_filter(Filter * object)296 int Parser::on_start_filter( Filter *object )
297 {
298 object->debug( "on_start_filter" );
299 return 0;
300 }
301
on_end_filter(Filter * object)302 int Parser::on_end_filter( Filter *object )
303 {
304 object->debug( "on_end_filter" );
305 return 0;
306 }
307
on_start_transition(Transition * object)308 int Parser::on_start_transition( Transition *object )
309 {
310 object->debug( "on_start_transition" );
311 return 0;
312 }
313
on_end_transition(Transition * object)314 int Parser::on_end_transition( Transition *object )
315 {
316 object->debug( "on_end_transition" );
317 return 0;
318 }
319
on_start_chain(Chain * object)320 int Parser::on_start_chain( Chain *object )
321 {
322 object->debug( "on_start_chain" );
323 return 0;
324 }
325
on_end_chain(Chain * object)326 int Parser::on_end_chain( Chain *object )
327 {
328 object->debug( "on_end_chain" );
329 return 0;
330 }
331
on_start_link(Link * object)332 int Parser::on_start_link( Link *object )
333 {
334 object->debug( "on_start_link" );
335 return 0;
336 }
337
on_end_link(Link * object)338 int Parser::on_end_link( Link *object )
339 {
340 object->debug( "on_end_link" );
341 return 0;
342 }
343