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_count(long*);
72 STDMETHODIMP get_channel(long*);
73 STDMETHODIMP put_channel(long);
74 STDMETHODIMP toggleMute();
75 STDMETHODIMP description(long, BSTR*);
78 HRESULT loadTypeInfo();
79 HRESULT exception_bridge(libvlc_exception_t *ex);
82 VLCPlugin* _p_instance;
83 ITypeInfo* _p_typeinfo;
87 class VLCInput : public IVLCInput
91 VLCInput(VLCPlugin *p_instance) :
92 _p_instance(p_instance), _p_typeinfo(NULL) {};
96 STDMETHODIMP QueryInterface(REFIID riid, void **ppv)
100 if( (IID_IUnknown == riid)
101 || (IID_IDispatch == riid)
102 || (IID_IVLCInput == riid) )
105 *ppv = reinterpret_cast<LPVOID>(this);
108 // behaves as a standalone object
109 return E_NOINTERFACE;
112 STDMETHODIMP_(ULONG) AddRef(void) { return _p_instance->pUnkOuter->AddRef(); };
113 STDMETHODIMP_(ULONG) Release(void) { return _p_instance->pUnkOuter->Release(); };
116 STDMETHODIMP GetTypeInfoCount(UINT*);
117 STDMETHODIMP GetTypeInfo(UINT, LCID, LPTYPEINFO*);
118 STDMETHODIMP GetIDsOfNames(REFIID,LPOLESTR*,UINT,LCID,DISPID*);
119 STDMETHODIMP Invoke(DISPID,REFIID,LCID,WORD,DISPPARAMS*,VARIANT*,EXCEPINFO*,UINT*);
122 STDMETHODIMP get_length(double*);
123 STDMETHODIMP get_position(double*);
124 STDMETHODIMP put_position(double);
125 STDMETHODIMP get_time(double*);
126 STDMETHODIMP put_time(double);
127 STDMETHODIMP get_state(long*);
128 STDMETHODIMP get_rate(double*);
129 STDMETHODIMP put_rate(double);
130 STDMETHODIMP get_fps(double*);
131 STDMETHODIMP get_hasVout(VARIANT_BOOL*);
134 HRESULT loadTypeInfo();
135 HRESULT exception_bridge(libvlc_exception_t *ex);
138 VLCPlugin* _p_instance;
139 ITypeInfo* _p_typeinfo;
143 class VLCMessage: public IVLCMessage
147 VLCMessage(VLCPlugin *p_instance, struct libvlc_log_message_t &msg) :
148 _p_instance(p_instance),
152 virtual ~VLCMessage();
155 STDMETHODIMP QueryInterface(REFIID riid, void **ppv)
159 if( (IID_IUnknown == riid)
160 || (IID_IDispatch == riid)
161 || (IID_IVLCMessage == riid) )
164 *ppv = reinterpret_cast<LPVOID>(this);
167 // behaves as a standalone object
168 return E_NOINTERFACE;
171 STDMETHODIMP_(ULONG) AddRef(void) { return InterlockedIncrement(&_refcount); };
172 STDMETHODIMP_(ULONG) Release(void)
174 ULONG refcount = InterlockedDecrement(&_refcount);
184 STDMETHODIMP GetTypeInfoCount(UINT*);
185 STDMETHODIMP GetTypeInfo(UINT, LCID, LPTYPEINFO*);
186 STDMETHODIMP GetIDsOfNames(REFIID,LPOLESTR*,UINT,LCID,DISPID*);
187 STDMETHODIMP Invoke(DISPID,REFIID,LCID,WORD,DISPPARAMS*,VARIANT*,EXCEPINFO*,UINT*);
189 // IVLCMessage methods
190 STDMETHODIMP get__Value(VARIANT *);
191 STDMETHODIMP get_severity(long *);
192 STDMETHODIMP get_type(BSTR *);
193 STDMETHODIMP get_name(BSTR *);
194 STDMETHODIMP get_header(BSTR *);
195 STDMETHODIMP get_message(BSTR *);
198 HRESULT loadTypeInfo();
201 VLCPlugin* _p_instance;
202 ITypeInfo* _p_typeinfo;
205 struct libvlc_log_message_t _msg;
210 class VLCMessageIterator : public IVLCMessageIterator
214 VLCMessageIterator(VLCPlugin *p_instance, VLCLog* p_vlclog);
215 virtual ~VLCMessageIterator();
218 STDMETHODIMP QueryInterface(REFIID riid, void **ppv)
222 if( (IID_IUnknown == riid)
223 || (IID_IDispatch == riid)
224 || (IID_IVLCMessageIterator == riid) )
227 *ppv = reinterpret_cast<LPVOID>(this);
230 // behaves as a standalone object
231 return E_NOINTERFACE;
234 STDMETHODIMP_(ULONG) AddRef(void) { return InterlockedIncrement(&_refcount); };
235 STDMETHODIMP_(ULONG) Release(void)
237 ULONG refcount = InterlockedDecrement(&_refcount);
247 STDMETHODIMP GetTypeInfoCount(UINT*);
248 STDMETHODIMP GetTypeInfo(UINT, LCID, LPTYPEINFO*);
249 STDMETHODIMP GetIDsOfNames(REFIID,LPOLESTR*,UINT,LCID,DISPID*);
250 STDMETHODIMP Invoke(DISPID,REFIID,LCID,WORD,DISPPARAMS*,VARIANT*,EXCEPINFO*,UINT*);
252 // IVLCMessageIterator methods
253 STDMETHODIMP get_hasNext(VARIANT_BOOL*);
254 STDMETHODIMP next(IVLCMessage**);
257 HRESULT loadTypeInfo();
258 HRESULT exception_bridge(libvlc_exception_t *ex);
261 VLCPlugin* _p_instance;
262 ITypeInfo* _p_typeinfo;
266 libvlc_log_iterator_t* _p_iter;
269 class VLCMessages : public IVLCMessages
273 VLCMessages(VLCPlugin *p_instance, VLCLog *p_vlclog) :
275 _p_instance(p_instance),
277 virtual ~VLCMessages();
280 STDMETHODIMP QueryInterface(REFIID riid, void **ppv)
284 if( (IID_IUnknown == riid)
285 || (IID_IDispatch == riid)
286 || (IID_IVLCMessages == riid) )
289 *ppv = reinterpret_cast<LPVOID>(this);
292 // behaves as a standalone object
293 return E_NOINTERFACE;
296 STDMETHODIMP_(ULONG) AddRef(void) { return _p_instance->pUnkOuter->AddRef(); };
297 STDMETHODIMP_(ULONG) Release(void) { return _p_instance->pUnkOuter->Release(); };
300 STDMETHODIMP GetTypeInfoCount(UINT*);
301 STDMETHODIMP GetTypeInfo(UINT, LCID, LPTYPEINFO*);
302 STDMETHODIMP GetIDsOfNames(REFIID,LPOLESTR*,UINT,LCID,DISPID*);
303 STDMETHODIMP Invoke(DISPID,REFIID,LCID,WORD,DISPPARAMS*,VARIANT*,EXCEPINFO*,UINT*);
305 // IVLCMessages methods
306 STDMETHODIMP get__NewEnum(LPUNKNOWN*);
307 STDMETHODIMP clear();
308 STDMETHODIMP get_count(long*);
309 STDMETHODIMP iterator(IVLCMessageIterator**);
312 HRESULT loadTypeInfo();
313 HRESULT exception_bridge(libvlc_exception_t *ex);
318 VLCPlugin* _p_instance;
319 ITypeInfo* _p_typeinfo;
322 class VLCLog : public IVLCLog
326 friend class VLCMessages;
327 friend class VLCMessageIterator;
329 VLCLog(VLCPlugin *p_instance) :
331 _p_instance(p_instance),
335 _p_vlcmessages = new VLCMessages(p_instance, this);
340 STDMETHODIMP QueryInterface(REFIID riid, void **ppv)
344 if( (IID_IUnknown == riid)
345 || (IID_IDispatch == riid)
346 || (IID_IVLCLog == riid) )
349 *ppv = reinterpret_cast<LPVOID>(this);
352 // behaves as a standalone object
353 return E_NOINTERFACE;
356 STDMETHODIMP_(ULONG) AddRef(void) { return _p_instance->pUnkOuter->AddRef(); };
357 STDMETHODIMP_(ULONG) Release(void) { return _p_instance->pUnkOuter->Release(); };
360 STDMETHODIMP GetTypeInfoCount(UINT*);
361 STDMETHODIMP GetTypeInfo(UINT, LCID, LPTYPEINFO*);
362 STDMETHODIMP GetIDsOfNames(REFIID,LPOLESTR*,UINT,LCID,DISPID*);
363 STDMETHODIMP Invoke(DISPID,REFIID,LCID,WORD,DISPPARAMS*,VARIANT*,EXCEPINFO*,UINT*);
366 STDMETHODIMP get_messages(IVLCMessages**);
367 STDMETHODIMP get_verbosity(long *);
368 STDMETHODIMP put_verbosity(long);
371 HRESULT loadTypeInfo();
372 HRESULT exception_bridge(libvlc_exception_t *ex);
374 libvlc_log_t *_p_log;
377 VLCPlugin* _p_instance;
378 ITypeInfo* _p_typeinfo;
380 VLCMessages* _p_vlcmessages;
383 class VLCPlaylistItems : public IVLCPlaylistItems
386 VLCPlaylistItems(VLCPlugin *p_instance) :
387 _p_instance(p_instance), _p_typeinfo(NULL) {};
388 virtual ~VLCPlaylistItems();
391 STDMETHODIMP QueryInterface(REFIID riid, void **ppv)
395 if( (IID_IUnknown == riid)
396 || (IID_IDispatch == riid)
397 || (IID_IVLCPlaylistItems == riid) )
400 *ppv = reinterpret_cast<LPVOID>(this);
403 // behaves as a standalone object
404 return E_NOINTERFACE;
407 STDMETHODIMP_(ULONG) AddRef(void) { return _p_instance->pUnkOuter->AddRef(); };
408 STDMETHODIMP_(ULONG) Release(void) { return _p_instance->pUnkOuter->Release(); };
411 STDMETHODIMP GetTypeInfoCount(UINT*);
412 STDMETHODIMP GetTypeInfo(UINT, LCID, LPTYPEINFO*);
413 STDMETHODIMP GetIDsOfNames(REFIID,LPOLESTR*,UINT,LCID,DISPID*);
414 STDMETHODIMP Invoke(DISPID,REFIID,LCID,WORD,DISPPARAMS*,VARIANT*,EXCEPINFO*,UINT*);
416 // IVLCPlaylistItems methods
417 STDMETHODIMP get_count(long*);
418 STDMETHODIMP clear();
419 STDMETHODIMP remove(long);
422 HRESULT loadTypeInfo();
423 HRESULT exception_bridge(libvlc_exception_t *ex);
426 VLCPlugin* _p_instance;
427 ITypeInfo* _p_typeinfo;
431 class VLCPlaylist : public IVLCPlaylist
434 VLCPlaylist(VLCPlugin *p_instance) :
435 _p_instance(p_instance),
437 _p_vlcplaylistitems(NULL)
439 _p_vlcplaylistitems = new VLCPlaylistItems(p_instance);
441 virtual ~VLCPlaylist();
444 STDMETHODIMP QueryInterface(REFIID riid, void **ppv)
448 if( (IID_IUnknown == riid)
449 || (IID_IDispatch == riid)
450 || (IID_IVLCPlaylist == riid) )
453 *ppv = reinterpret_cast<LPVOID>(this);
456 // behaves as a standalone object
457 return E_NOINTERFACE;
460 STDMETHODIMP_(ULONG) AddRef(void) { return _p_instance->pUnkOuter->AddRef(); };
461 STDMETHODIMP_(ULONG) Release(void) { return _p_instance->pUnkOuter->Release(); };
464 STDMETHODIMP GetTypeInfoCount(UINT*);
465 STDMETHODIMP GetTypeInfo(UINT, LCID, LPTYPEINFO*);
466 STDMETHODIMP GetIDsOfNames(REFIID,LPOLESTR*,UINT,LCID,DISPID*);
467 STDMETHODIMP Invoke(DISPID,REFIID,LCID,WORD,DISPPARAMS*,VARIANT*,EXCEPINFO*,UINT*);
469 // IVLCPlaylist methods
470 STDMETHODIMP get_itemCount(long*);
471 STDMETHODIMP get_isPlaying(VARIANT_BOOL*);
472 STDMETHODIMP add(BSTR, VARIANT, VARIANT, long*);
474 STDMETHODIMP playItem(long);
475 STDMETHODIMP togglePause();
479 STDMETHODIMP clear();
480 STDMETHODIMP removeItem(long);
481 STDMETHODIMP get_items(IVLCPlaylistItems**);
484 HRESULT loadTypeInfo();
485 HRESULT exception_bridge(libvlc_exception_t *ex);
488 VLCPlugin* _p_instance;
489 ITypeInfo* _p_typeinfo;
491 VLCPlaylistItems* _p_vlcplaylistitems;
494 class VLCSubtitle : public IVLCSubtitle
497 VLCSubtitle(VLCPlugin *p_instance) :
498 _p_instance(p_instance), _p_typeinfo(NULL) {};
499 virtual ~VLCSubtitle();
502 STDMETHODIMP QueryInterface(REFIID riid, void **ppv)
506 if( (IID_IUnknown == riid)
507 || (IID_IDispatch == riid)
508 || (IID_IVLCSubtitle == riid) )
511 *ppv = reinterpret_cast<LPVOID>(this);
514 // behaves as a standalone object
515 return E_NOINTERFACE;
518 STDMETHODIMP_(ULONG) AddRef(void) { return _p_instance->pUnkOuter->AddRef(); };
519 STDMETHODIMP_(ULONG) Release(void) { return _p_instance->pUnkOuter->Release(); };
522 STDMETHODIMP GetTypeInfoCount(UINT*);
523 STDMETHODIMP GetTypeInfo(UINT, LCID, LPTYPEINFO*);
524 STDMETHODIMP GetIDsOfNames(REFIID,LPOLESTR*,UINT,LCID,DISPID*);
525 STDMETHODIMP Invoke(DISPID,REFIID,LCID,WORD,DISPPARAMS*,VARIANT*,EXCEPINFO*,UINT*);
527 // IVLCSubtitle methods
528 STDMETHODIMP get_track(long*);
529 STDMETHODIMP put_track(long);
530 STDMETHODIMP get_count(long*);
531 STDMETHODIMP description(long, BSTR*);
534 HRESULT loadTypeInfo();
535 HRESULT exception_bridge(libvlc_exception_t *ex);
538 VLCPlugin* _p_instance;
539 ITypeInfo* _p_typeinfo;
543 class VLCVideo : public IVLCVideo
546 VLCVideo(VLCPlugin *p_instance) :
547 _p_instance(p_instance), _p_typeinfo(NULL) {};
551 STDMETHODIMP QueryInterface(REFIID riid, void **ppv)
555 if( (IID_IUnknown == riid)
556 || (IID_IDispatch == riid)
557 || (IID_IVLCVideo == riid) )
560 *ppv = reinterpret_cast<LPVOID>(this);
563 // behaves as a standalone object
564 return E_NOINTERFACE;
567 STDMETHODIMP_(ULONG) AddRef(void) { return _p_instance->pUnkOuter->AddRef(); };
568 STDMETHODIMP_(ULONG) Release(void) { return _p_instance->pUnkOuter->Release(); };
571 STDMETHODIMP GetTypeInfoCount(UINT*);
572 STDMETHODIMP GetTypeInfo(UINT, LCID, LPTYPEINFO*);
573 STDMETHODIMP GetIDsOfNames(REFIID,LPOLESTR*,UINT,LCID,DISPID*);
574 STDMETHODIMP Invoke(DISPID,REFIID,LCID,WORD,DISPPARAMS*,VARIANT*,EXCEPINFO*,UINT*);
577 STDMETHODIMP get_fullscreen(VARIANT_BOOL*);
578 STDMETHODIMP put_fullscreen(VARIANT_BOOL);
579 STDMETHODIMP get_width(long*);
580 STDMETHODIMP get_height(long*);
581 STDMETHODIMP get_aspectRatio(BSTR*);
582 STDMETHODIMP put_aspectRatio(BSTR);
583 STDMETHODIMP get_subtitle(long*);
584 STDMETHODIMP put_subtitle(long);
585 STDMETHODIMP get_crop(BSTR*);
586 STDMETHODIMP put_crop(BSTR);
587 STDMETHODIMP get_teletext(long*);
588 STDMETHODIMP put_teletext(long);
589 STDMETHODIMP deinterlaceDisable();
590 STDMETHODIMP deinterlaceEnable(BSTR);
591 STDMETHODIMP takeSnapshot(LPPICTUREDISP*);
592 STDMETHODIMP toggleFullscreen();
593 STDMETHODIMP toggleTeletext();
596 HRESULT loadTypeInfo();
597 HRESULT exception_bridge(libvlc_exception_t *ex);
600 VLCPlugin* _p_instance;
601 ITypeInfo* _p_typeinfo;
605 class VLCControl2 : public IVLCControl2
609 VLCControl2(VLCPlugin *p_instance);
610 virtual ~VLCControl2();
613 STDMETHODIMP QueryInterface(REFIID riid, void **ppv)
617 if( (IID_IUnknown == riid)
618 || (IID_IDispatch == riid)
619 || (IID_IVLCControl2 == riid) )
622 *ppv = reinterpret_cast<LPVOID>(this);
625 return _p_instance->pUnkOuter->QueryInterface(riid, ppv);
628 STDMETHODIMP_(ULONG) AddRef(void) { return _p_instance->pUnkOuter->AddRef(); };
629 STDMETHODIMP_(ULONG) Release(void) { return _p_instance->pUnkOuter->Release(); };
632 STDMETHODIMP GetTypeInfoCount(UINT*);
633 STDMETHODIMP GetTypeInfo(UINT, LCID, LPTYPEINFO*);
634 STDMETHODIMP GetIDsOfNames(REFIID,LPOLESTR*,UINT,LCID,DISPID*);
635 STDMETHODIMP Invoke(DISPID,REFIID,LCID,WORD,DISPPARAMS*,VARIANT*,EXCEPINFO*,UINT*);
637 // IVLCControl2 methods
638 STDMETHODIMP get_AutoLoop(VARIANT_BOOL *autoloop);
639 STDMETHODIMP put_AutoLoop(VARIANT_BOOL autoloop);
640 STDMETHODIMP get_AutoPlay(VARIANT_BOOL *autoplay);
641 STDMETHODIMP put_AutoPlay(VARIANT_BOOL autoplay);
642 STDMETHODIMP get_BaseURL(BSTR *url);
643 STDMETHODIMP put_BaseURL(BSTR url);
644 STDMETHODIMP get_MRL(BSTR *mrl);
645 STDMETHODIMP put_MRL(BSTR mrl);
646 STDMETHODIMP get_Toolbar(VARIANT_BOOL *visible);
647 STDMETHODIMP put_Toolbar(VARIANT_BOOL visible);
648 STDMETHODIMP get_StartTime(long *seconds);
649 STDMETHODIMP put_StartTime(long seconds);
650 STDMETHODIMP get_VersionInfo(BSTR *version);
651 STDMETHODIMP get_Visible(VARIANT_BOOL *visible);
652 STDMETHODIMP put_Visible(VARIANT_BOOL visible);
653 STDMETHODIMP get_Volume(long *volume);
654 STDMETHODIMP put_Volume(long volume);
655 STDMETHODIMP get_BackColor(OLE_COLOR *backcolor);
656 STDMETHODIMP put_BackColor(OLE_COLOR backcolor);
658 STDMETHODIMP get_audio(IVLCAudio**);
659 STDMETHODIMP get_input(IVLCInput**);
660 STDMETHODIMP get_log(IVLCLog**);
661 STDMETHODIMP get_playlist(IVLCPlaylist**);
662 STDMETHODIMP get_subtitle(IVLCSubtitle**);
663 STDMETHODIMP get_video(IVLCVideo**);
666 HRESULT loadTypeInfo();
669 VLCPlugin* _p_instance;
670 ITypeInfo* _p_typeinfo;
672 VLCAudio* _p_vlcaudio;
673 VLCInput* _p_vlcinput;
675 VLCPlaylist* _p_vlcplaylist;
676 VLCSubtitle* _p_vlcsubtitle;
677 VLCVideo* _p_vlcvideo;