1 /*****************************************************************************
2 * vlccontrol.h: ActiveX control for VLC
3 *****************************************************************************
4 * Copyright (C) 2006 the VideoLAN team
6 * Authors: Damien Fouilleul <Damien.Fouilleul@laposte.net>
7 * Jean-Paul Saman <jpsaman _at_ m2x _dot_ nl>
9 * This program is free software; you can redistribute it and/or modify
10 * it under the terms of the GNU General Public License as published by
11 * the Free Software Foundation; either version 2 of the License, or
12 * (at your option) any later version.
14 * This program is distributed in the hope that it will be useful,
15 * but WITHOUT ANY WARRANTY; without even the implied warranty of
16 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
17 * GNU General Public License for more details.
19 * You should have received a copy of the GNU General Public License along
20 * with this program; if not, write to the Free Software Foundation, Inc.,
21 * 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA.
22 *****************************************************************************/
24 #ifndef _VLCCONTROL2_H_
25 #define _VLCCONTROL2_H_
27 #include "axvlc_idl.h"
29 #include <vlc/libvlc.h>
31 class VLCAudio : public IVLCAudio
34 VLCAudio(VLCPlugin *p_instance) :
35 _p_instance(p_instance), _p_typeinfo(NULL) {};
39 STDMETHODIMP QueryInterface(REFIID riid, void **ppv)
43 if( (IID_IUnknown == riid)
44 || (IID_IDispatch == riid)
45 || (IID_IVLCAudio == riid) )
48 *ppv = reinterpret_cast<LPVOID>(this);
51 // behaves as a standalone object
55 STDMETHODIMP_(ULONG) AddRef(void) { return _p_instance->pUnkOuter->AddRef(); };
56 STDMETHODIMP_(ULONG) Release(void) { return _p_instance->pUnkOuter->Release(); };
59 STDMETHODIMP GetTypeInfoCount(UINT*);
60 STDMETHODIMP GetTypeInfo(UINT, LCID, LPTYPEINFO*);
61 STDMETHODIMP GetIDsOfNames(REFIID,LPOLESTR*,UINT,LCID,DISPID*);
62 STDMETHODIMP Invoke(DISPID,REFIID,LCID,WORD,DISPPARAMS*,VARIANT*,EXCEPINFO*,UINT*);
65 STDMETHODIMP get_mute(VARIANT_BOOL*);
66 STDMETHODIMP put_mute(VARIANT_BOOL);
67 STDMETHODIMP get_volume(long*);
68 STDMETHODIMP put_volume(long);
69 STDMETHODIMP get_track(long*);
70 STDMETHODIMP put_track(long);
71 STDMETHODIMP get_channel(long*);
72 STDMETHODIMP put_channel(long);
73 STDMETHODIMP toggleMute();
76 HRESULT loadTypeInfo();
77 HRESULT exception_bridge(libvlc_exception_t *ex);
80 VLCPlugin* _p_instance;
81 ITypeInfo* _p_typeinfo;
85 class VLCInput : public IVLCInput
89 VLCInput(VLCPlugin *p_instance) :
90 _p_instance(p_instance), _p_typeinfo(NULL) {};
94 STDMETHODIMP QueryInterface(REFIID riid, void **ppv)
98 if( (IID_IUnknown == riid)
99 || (IID_IDispatch == riid)
100 || (IID_IVLCInput == riid) )
103 *ppv = reinterpret_cast<LPVOID>(this);
106 // behaves as a standalone object
107 return E_NOINTERFACE;
110 STDMETHODIMP_(ULONG) AddRef(void) { return _p_instance->pUnkOuter->AddRef(); };
111 STDMETHODIMP_(ULONG) Release(void) { return _p_instance->pUnkOuter->Release(); };
114 STDMETHODIMP GetTypeInfoCount(UINT*);
115 STDMETHODIMP GetTypeInfo(UINT, LCID, LPTYPEINFO*);
116 STDMETHODIMP GetIDsOfNames(REFIID,LPOLESTR*,UINT,LCID,DISPID*);
117 STDMETHODIMP Invoke(DISPID,REFIID,LCID,WORD,DISPPARAMS*,VARIANT*,EXCEPINFO*,UINT*);
120 STDMETHODIMP get_length(double*);
121 STDMETHODIMP get_position(double*);
122 STDMETHODIMP put_position(double);
123 STDMETHODIMP get_time(double*);
124 STDMETHODIMP put_time(double);
125 STDMETHODIMP get_state(long*);
126 STDMETHODIMP get_rate(double*);
127 STDMETHODIMP put_rate(double);
128 STDMETHODIMP get_fps(double*);
129 STDMETHODIMP get_hasVout(VARIANT_BOOL*);
132 HRESULT loadTypeInfo();
133 HRESULT exception_bridge(libvlc_exception_t *ex);
136 VLCPlugin* _p_instance;
137 ITypeInfo* _p_typeinfo;
141 class VLCMessage: public IVLCMessage
145 VLCMessage(VLCPlugin *p_instance, struct libvlc_log_message_t &msg) :
146 _p_instance(p_instance),
150 virtual ~VLCMessage();
153 STDMETHODIMP QueryInterface(REFIID riid, void **ppv)
157 if( (IID_IUnknown == riid)
158 || (IID_IDispatch == riid)
159 || (IID_IVLCMessage == riid) )
162 *ppv = reinterpret_cast<LPVOID>(this);
165 // behaves as a standalone object
166 return E_NOINTERFACE;
169 STDMETHODIMP_(ULONG) AddRef(void) { return InterlockedIncrement(&_refcount); };
170 STDMETHODIMP_(ULONG) Release(void)
172 ULONG refcount = InterlockedDecrement(&_refcount);
182 STDMETHODIMP GetTypeInfoCount(UINT*);
183 STDMETHODIMP GetTypeInfo(UINT, LCID, LPTYPEINFO*);
184 STDMETHODIMP GetIDsOfNames(REFIID,LPOLESTR*,UINT,LCID,DISPID*);
185 STDMETHODIMP Invoke(DISPID,REFIID,LCID,WORD,DISPPARAMS*,VARIANT*,EXCEPINFO*,UINT*);
187 // IVLCMessage methods
188 STDMETHODIMP get__Value(VARIANT *);
189 STDMETHODIMP get_severity(long *);
190 STDMETHODIMP get_type(BSTR *);
191 STDMETHODIMP get_name(BSTR *);
192 STDMETHODIMP get_header(BSTR *);
193 STDMETHODIMP get_message(BSTR *);
196 HRESULT loadTypeInfo();
199 VLCPlugin* _p_instance;
200 ITypeInfo* _p_typeinfo;
203 struct libvlc_log_message_t _msg;
208 class VLCMessageIterator : public IVLCMessageIterator
212 VLCMessageIterator(VLCPlugin *p_instance, VLCLog* p_vlclog);
213 virtual ~VLCMessageIterator();
216 STDMETHODIMP QueryInterface(REFIID riid, void **ppv)
220 if( (IID_IUnknown == riid)
221 || (IID_IDispatch == riid)
222 || (IID_IVLCMessageIterator == riid) )
225 *ppv = reinterpret_cast<LPVOID>(this);
228 // behaves as a standalone object
229 return E_NOINTERFACE;
232 STDMETHODIMP_(ULONG) AddRef(void) { return InterlockedIncrement(&_refcount); };
233 STDMETHODIMP_(ULONG) Release(void)
235 ULONG refcount = InterlockedDecrement(&_refcount);
245 STDMETHODIMP GetTypeInfoCount(UINT*);
246 STDMETHODIMP GetTypeInfo(UINT, LCID, LPTYPEINFO*);
247 STDMETHODIMP GetIDsOfNames(REFIID,LPOLESTR*,UINT,LCID,DISPID*);
248 STDMETHODIMP Invoke(DISPID,REFIID,LCID,WORD,DISPPARAMS*,VARIANT*,EXCEPINFO*,UINT*);
250 // IVLCMessageIterator methods
251 STDMETHODIMP get_hasNext(VARIANT_BOOL*);
252 STDMETHODIMP next(IVLCMessage**);
255 HRESULT loadTypeInfo();
256 HRESULT exception_bridge(libvlc_exception_t *ex);
259 VLCPlugin* _p_instance;
260 ITypeInfo* _p_typeinfo;
264 libvlc_log_iterator_t* _p_iter;
267 class VLCMessages : public IVLCMessages
271 VLCMessages(VLCPlugin *p_instance, VLCLog *p_vlclog) :
273 _p_instance(p_instance),
275 virtual ~VLCMessages();
278 STDMETHODIMP QueryInterface(REFIID riid, void **ppv)
282 if( (IID_IUnknown == riid)
283 || (IID_IDispatch == riid)
284 || (IID_IVLCMessages == riid) )
287 *ppv = reinterpret_cast<LPVOID>(this);
290 // behaves as a standalone object
291 return E_NOINTERFACE;
294 STDMETHODIMP_(ULONG) AddRef(void) { return _p_instance->pUnkOuter->AddRef(); };
295 STDMETHODIMP_(ULONG) Release(void) { return _p_instance->pUnkOuter->Release(); };
298 STDMETHODIMP GetTypeInfoCount(UINT*);
299 STDMETHODIMP GetTypeInfo(UINT, LCID, LPTYPEINFO*);
300 STDMETHODIMP GetIDsOfNames(REFIID,LPOLESTR*,UINT,LCID,DISPID*);
301 STDMETHODIMP Invoke(DISPID,REFIID,LCID,WORD,DISPPARAMS*,VARIANT*,EXCEPINFO*,UINT*);
303 // IVLCMessages methods
304 STDMETHODIMP get__NewEnum(LPUNKNOWN*);
305 STDMETHODIMP clear();
306 STDMETHODIMP get_count(long*);
307 STDMETHODIMP iterator(IVLCMessageIterator**);
310 HRESULT loadTypeInfo();
311 HRESULT exception_bridge(libvlc_exception_t *ex);
316 VLCPlugin* _p_instance;
317 ITypeInfo* _p_typeinfo;
320 class VLCLog : public IVLCLog
324 friend class VLCMessages;
325 friend class VLCMessageIterator;
327 VLCLog(VLCPlugin *p_instance) :
329 _p_instance(p_instance),
333 _p_vlcmessages = new VLCMessages(p_instance, this);
338 STDMETHODIMP QueryInterface(REFIID riid, void **ppv)
342 if( (IID_IUnknown == riid)
343 || (IID_IDispatch == riid)
344 || (IID_IVLCLog == riid) )
347 *ppv = reinterpret_cast<LPVOID>(this);
350 // behaves as a standalone object
351 return E_NOINTERFACE;
354 STDMETHODIMP_(ULONG) AddRef(void) { return _p_instance->pUnkOuter->AddRef(); };
355 STDMETHODIMP_(ULONG) Release(void) { return _p_instance->pUnkOuter->Release(); };
358 STDMETHODIMP GetTypeInfoCount(UINT*);
359 STDMETHODIMP GetTypeInfo(UINT, LCID, LPTYPEINFO*);
360 STDMETHODIMP GetIDsOfNames(REFIID,LPOLESTR*,UINT,LCID,DISPID*);
361 STDMETHODIMP Invoke(DISPID,REFIID,LCID,WORD,DISPPARAMS*,VARIANT*,EXCEPINFO*,UINT*);
364 STDMETHODIMP get_messages(IVLCMessages**);
365 STDMETHODIMP get_verbosity(long *);
366 STDMETHODIMP put_verbosity(long);
369 HRESULT loadTypeInfo();
370 HRESULT exception_bridge(libvlc_exception_t *ex);
372 libvlc_log_t *_p_log;
375 VLCPlugin* _p_instance;
376 ITypeInfo* _p_typeinfo;
378 VLCMessages* _p_vlcmessages;
381 class VLCPlaylistItems : public IVLCPlaylistItems
384 VLCPlaylistItems(VLCPlugin *p_instance) :
385 _p_instance(p_instance), _p_typeinfo(NULL) {};
386 virtual ~VLCPlaylistItems();
389 STDMETHODIMP QueryInterface(REFIID riid, void **ppv)
393 if( (IID_IUnknown == riid)
394 || (IID_IDispatch == riid)
395 || (IID_IVLCPlaylistItems == riid) )
398 *ppv = reinterpret_cast<LPVOID>(this);
401 // behaves as a standalone object
402 return E_NOINTERFACE;
405 STDMETHODIMP_(ULONG) AddRef(void) { return _p_instance->pUnkOuter->AddRef(); };
406 STDMETHODIMP_(ULONG) Release(void) { return _p_instance->pUnkOuter->Release(); };
409 STDMETHODIMP GetTypeInfoCount(UINT*);
410 STDMETHODIMP GetTypeInfo(UINT, LCID, LPTYPEINFO*);
411 STDMETHODIMP GetIDsOfNames(REFIID,LPOLESTR*,UINT,LCID,DISPID*);
412 STDMETHODIMP Invoke(DISPID,REFIID,LCID,WORD,DISPPARAMS*,VARIANT*,EXCEPINFO*,UINT*);
414 // IVLCPlaylistItems methods
415 STDMETHODIMP get_count(long*);
416 STDMETHODIMP clear();
417 STDMETHODIMP remove(long);
420 HRESULT loadTypeInfo();
421 HRESULT exception_bridge(libvlc_exception_t *ex);
424 VLCPlugin* _p_instance;
425 ITypeInfo* _p_typeinfo;
429 class VLCPlaylist : public IVLCPlaylist
432 VLCPlaylist(VLCPlugin *p_instance) :
433 _p_instance(p_instance),
435 _p_vlcplaylistitems(NULL)
437 _p_vlcplaylistitems = new VLCPlaylistItems(p_instance);
439 virtual ~VLCPlaylist();
442 STDMETHODIMP QueryInterface(REFIID riid, void **ppv)
446 if( (IID_IUnknown == riid)
447 || (IID_IDispatch == riid)
448 || (IID_IVLCPlaylist == riid) )
451 *ppv = reinterpret_cast<LPVOID>(this);
454 // behaves as a standalone object
455 return E_NOINTERFACE;
458 STDMETHODIMP_(ULONG) AddRef(void) { return _p_instance->pUnkOuter->AddRef(); };
459 STDMETHODIMP_(ULONG) Release(void) { return _p_instance->pUnkOuter->Release(); };
462 STDMETHODIMP GetTypeInfoCount(UINT*);
463 STDMETHODIMP GetTypeInfo(UINT, LCID, LPTYPEINFO*);
464 STDMETHODIMP GetIDsOfNames(REFIID,LPOLESTR*,UINT,LCID,DISPID*);
465 STDMETHODIMP Invoke(DISPID,REFIID,LCID,WORD,DISPPARAMS*,VARIANT*,EXCEPINFO*,UINT*);
467 // IVLCPlaylist methods
468 STDMETHODIMP get_itemCount(long*);
469 STDMETHODIMP get_isPlaying(VARIANT_BOOL*);
470 STDMETHODIMP add(BSTR, VARIANT, VARIANT, long*);
472 STDMETHODIMP playItem(long);
473 STDMETHODIMP togglePause();
477 STDMETHODIMP clear();
478 STDMETHODIMP removeItem(long);
479 STDMETHODIMP get_items(IVLCPlaylistItems**);
482 HRESULT loadTypeInfo();
483 HRESULT exception_bridge(libvlc_exception_t *ex);
486 VLCPlugin* _p_instance;
487 ITypeInfo* _p_typeinfo;
489 VLCPlaylistItems* _p_vlcplaylistitems;
492 class VLCVideo : public IVLCVideo
495 VLCVideo(VLCPlugin *p_instance) :
496 _p_instance(p_instance), _p_typeinfo(NULL) {};
500 STDMETHODIMP QueryInterface(REFIID riid, void **ppv)
504 if( (IID_IUnknown == riid)
505 || (IID_IDispatch == riid)
506 || (IID_IVLCVideo == riid) )
509 *ppv = reinterpret_cast<LPVOID>(this);
512 // behaves as a standalone object
513 return E_NOINTERFACE;
516 STDMETHODIMP_(ULONG) AddRef(void) { return _p_instance->pUnkOuter->AddRef(); };
517 STDMETHODIMP_(ULONG) Release(void) { return _p_instance->pUnkOuter->Release(); };
520 STDMETHODIMP GetTypeInfoCount(UINT*);
521 STDMETHODIMP GetTypeInfo(UINT, LCID, LPTYPEINFO*);
522 STDMETHODIMP GetIDsOfNames(REFIID,LPOLESTR*,UINT,LCID,DISPID*);
523 STDMETHODIMP Invoke(DISPID,REFIID,LCID,WORD,DISPPARAMS*,VARIANT*,EXCEPINFO*,UINT*);
526 STDMETHODIMP get_fullscreen(VARIANT_BOOL*);
527 STDMETHODIMP put_fullscreen(VARIANT_BOOL);
528 STDMETHODIMP get_width(long*);
529 STDMETHODIMP get_height(long*);
530 STDMETHODIMP get_aspectRatio(BSTR*);
531 STDMETHODIMP put_aspectRatio(BSTR);
532 STDMETHODIMP get_subtitle(long*);
533 STDMETHODIMP put_subtitle(long);
534 STDMETHODIMP get_crop(BSTR*);
535 STDMETHODIMP put_crop(BSTR);
536 STDMETHODIMP get_teletext(long*);
537 STDMETHODIMP put_teletext(long);
538 STDMETHODIMP takeSnapshot(LPPICTUREDISP*);
539 STDMETHODIMP toggleFullscreen();
540 STDMETHODIMP toggleTeletext();
543 HRESULT loadTypeInfo();
544 HRESULT exception_bridge(libvlc_exception_t *ex);
547 VLCPlugin* _p_instance;
548 ITypeInfo* _p_typeinfo;
552 class VLCControl2 : public IVLCControl2
556 VLCControl2(VLCPlugin *p_instance);
557 virtual ~VLCControl2();
560 STDMETHODIMP QueryInterface(REFIID riid, void **ppv)
564 if( (IID_IUnknown == riid)
565 || (IID_IDispatch == riid)
566 || (IID_IVLCControl2 == riid) )
569 *ppv = reinterpret_cast<LPVOID>(this);
572 return _p_instance->pUnkOuter->QueryInterface(riid, ppv);
575 STDMETHODIMP_(ULONG) AddRef(void) { return _p_instance->pUnkOuter->AddRef(); };
576 STDMETHODIMP_(ULONG) Release(void) { return _p_instance->pUnkOuter->Release(); };
579 STDMETHODIMP GetTypeInfoCount(UINT*);
580 STDMETHODIMP GetTypeInfo(UINT, LCID, LPTYPEINFO*);
581 STDMETHODIMP GetIDsOfNames(REFIID,LPOLESTR*,UINT,LCID,DISPID*);
582 STDMETHODIMP Invoke(DISPID,REFIID,LCID,WORD,DISPPARAMS*,VARIANT*,EXCEPINFO*,UINT*);
584 // IVLCControl2 methods
585 STDMETHODIMP get_AutoLoop(VARIANT_BOOL *autoloop);
586 STDMETHODIMP put_AutoLoop(VARIANT_BOOL autoloop);
587 STDMETHODIMP get_AutoPlay(VARIANT_BOOL *autoplay);
588 STDMETHODIMP put_AutoPlay(VARIANT_BOOL autoplay);
589 STDMETHODIMP get_BaseURL(BSTR *url);
590 STDMETHODIMP put_BaseURL(BSTR url);
591 STDMETHODIMP get_MRL(BSTR *mrl);
592 STDMETHODIMP put_MRL(BSTR mrl);
593 STDMETHODIMP get_Toolbar(VARIANT_BOOL *visible);
594 STDMETHODIMP put_Toolbar(VARIANT_BOOL visible);
595 STDMETHODIMP get_StartTime(long *seconds);
596 STDMETHODIMP put_StartTime(long seconds);
597 STDMETHODIMP get_VersionInfo(BSTR *version);
598 STDMETHODIMP get_Visible(VARIANT_BOOL *visible);
599 STDMETHODIMP put_Visible(VARIANT_BOOL visible);
600 STDMETHODIMP get_Volume(long *volume);
601 STDMETHODIMP put_Volume(long volume);
602 STDMETHODIMP get_BackColor(OLE_COLOR *backcolor);
603 STDMETHODIMP put_BackColor(OLE_COLOR backcolor);
605 STDMETHODIMP get_audio(IVLCAudio**);
606 STDMETHODIMP get_input(IVLCInput**);
607 STDMETHODIMP get_log(IVLCLog**);
608 STDMETHODIMP get_playlist(IVLCPlaylist**);
609 STDMETHODIMP get_video(IVLCVideo**);
612 HRESULT loadTypeInfo();
615 VLCPlugin* _p_instance;
616 ITypeInfo* _p_typeinfo;
618 VLCAudio* _p_vlcaudio;
619 VLCInput* _p_vlcinput;
621 VLCPlaylist* _p_vlcplaylist;
622 VLCVideo* _p_vlcvideo;