1 /*****************************************************************************
2 * vlccontrol.h: ActiveX control for VLC
3 *****************************************************************************
4 * Copyright (C) 2006 the VideoLAN team
6 * Authors: Damien Fouilleul <Damien.Fouilleul@laposte.net>
8 * This program is free software; you can redistribute it and/or modify
9 * it under the terms of the GNU General Public License as published by
10 * the Free Software Foundation; either version 2 of the License, or
11 * (at your option) any later version.
13 * This program is distributed in the hope that it will be useful,
14 * but WITHOUT ANY WARRANTY; without even the implied warranty of
15 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16 * GNU General Public License for more details.
18 * You should have received a copy of the GNU General Public License
19 * along with this program; if not, write to the Free Software
20 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA.
21 *****************************************************************************/
23 #ifndef _VLCCONTROL2_H_
24 #define _VLCCONTROL2_H_
26 #include "axvlc_idl.h"
28 #include <vlc/libvlc.h>
30 class VLCAudio : public IVLCAudio
33 VLCAudio(VLCPlugin *p_instance) :
34 _p_instance(p_instance), _p_typeinfo(NULL) {};
38 STDMETHODIMP QueryInterface(REFIID riid, void **ppv)
42 if( (IID_IUnknown == riid)
43 || (IID_IDispatch == riid)
44 || (IID_IVLCAudio == riid) )
47 *ppv = reinterpret_cast<LPVOID>(this);
50 // behaves as a standalone object
54 STDMETHODIMP_(ULONG) AddRef(void) { return _p_instance->pUnkOuter->AddRef(); };
55 STDMETHODIMP_(ULONG) Release(void) { return _p_instance->pUnkOuter->Release(); };
58 STDMETHODIMP GetTypeInfoCount(UINT*);
59 STDMETHODIMP GetTypeInfo(UINT, LCID, LPTYPEINFO*);
60 STDMETHODIMP GetIDsOfNames(REFIID,LPOLESTR*,UINT,LCID,DISPID*);
61 STDMETHODIMP Invoke(DISPID,REFIID,LCID,WORD,DISPPARAMS*,VARIANT*,EXCEPINFO*,UINT*);
64 STDMETHODIMP get_mute(VARIANT_BOOL*);
65 STDMETHODIMP put_mute(VARIANT_BOOL);
66 STDMETHODIMP get_volume(long*);
67 STDMETHODIMP put_volume(long);
68 STDMETHODIMP toggleMute();
71 HRESULT loadTypeInfo();
74 VLCPlugin* _p_instance;
75 ITypeInfo* _p_typeinfo;
79 class VLCInput : public IVLCInput
83 VLCInput(VLCPlugin *p_instance) :
84 _p_instance(p_instance), _p_typeinfo(NULL) {};
88 STDMETHODIMP QueryInterface(REFIID riid, void **ppv)
92 if( (IID_IUnknown == riid)
93 || (IID_IDispatch == riid)
94 || (IID_IVLCInput == riid) )
97 *ppv = reinterpret_cast<LPVOID>(this);
100 // behaves as a standalone object
101 return E_NOINTERFACE;
104 STDMETHODIMP_(ULONG) AddRef(void) { return _p_instance->pUnkOuter->AddRef(); };
105 STDMETHODIMP_(ULONG) Release(void) { return _p_instance->pUnkOuter->Release(); };
108 STDMETHODIMP GetTypeInfoCount(UINT*);
109 STDMETHODIMP GetTypeInfo(UINT, LCID, LPTYPEINFO*);
110 STDMETHODIMP GetIDsOfNames(REFIID,LPOLESTR*,UINT,LCID,DISPID*);
111 STDMETHODIMP Invoke(DISPID,REFIID,LCID,WORD,DISPPARAMS*,VARIANT*,EXCEPINFO*,UINT*);
114 STDMETHODIMP get_length(double*);
115 STDMETHODIMP get_position(double*);
116 STDMETHODIMP put_position(double);
117 STDMETHODIMP get_time(double*);
118 STDMETHODIMP put_time(double);
119 STDMETHODIMP get_state(long*);
120 STDMETHODIMP get_rate(double*);
121 STDMETHODIMP put_rate(double);
122 STDMETHODIMP get_fps(double*);
123 STDMETHODIMP get_hasVout(VARIANT_BOOL*);
126 HRESULT loadTypeInfo();
129 VLCPlugin* _p_instance;
130 ITypeInfo* _p_typeinfo;
134 class VLCMessage: public IVLCMessage
138 VLCMessage(VLCPlugin *p_instance, struct libvlc_log_message_t &msg) :
139 _p_instance(p_instance),
143 virtual ~VLCMessage();
146 STDMETHODIMP QueryInterface(REFIID riid, void **ppv)
150 if( (IID_IUnknown == riid)
151 || (IID_IDispatch == riid)
152 || (IID_IVLCMessage == riid) )
155 *ppv = reinterpret_cast<LPVOID>(this);
158 // behaves as a standalone object
159 return E_NOINTERFACE;
162 STDMETHODIMP_(ULONG) AddRef(void) { return InterlockedIncrement(&_refcount); };
163 STDMETHODIMP_(ULONG) Release(void)
165 ULONG refcount = InterlockedDecrement(&_refcount);
175 STDMETHODIMP GetTypeInfoCount(UINT*);
176 STDMETHODIMP GetTypeInfo(UINT, LCID, LPTYPEINFO*);
177 STDMETHODIMP GetIDsOfNames(REFIID,LPOLESTR*,UINT,LCID,DISPID*);
178 STDMETHODIMP Invoke(DISPID,REFIID,LCID,WORD,DISPPARAMS*,VARIANT*,EXCEPINFO*,UINT*);
180 // IVLCMessage methods
181 STDMETHODIMP get__Value(VARIANT *);
182 STDMETHODIMP get_severity(long *);
183 STDMETHODIMP get_type(BSTR *);
184 STDMETHODIMP get_name(BSTR *);
185 STDMETHODIMP get_header(BSTR *);
186 STDMETHODIMP get_message(BSTR *);
189 HRESULT loadTypeInfo();
192 VLCPlugin* _p_instance;
193 ITypeInfo* _p_typeinfo;
196 struct libvlc_log_message_t _msg;
201 class VLCMessageIterator : public IVLCMessageIterator
205 VLCMessageIterator(VLCPlugin *p_instance, VLCLog* p_vlclog);
206 virtual ~VLCMessageIterator();
209 STDMETHODIMP QueryInterface(REFIID riid, void **ppv)
213 if( (IID_IUnknown == riid)
214 || (IID_IDispatch == riid)
215 || (IID_IVLCMessageIterator == riid) )
218 *ppv = reinterpret_cast<LPVOID>(this);
221 // behaves as a standalone object
222 return E_NOINTERFACE;
225 STDMETHODIMP_(ULONG) AddRef(void) { return InterlockedIncrement(&_refcount); };
226 STDMETHODIMP_(ULONG) Release(void)
228 ULONG refcount = InterlockedDecrement(&_refcount);
238 STDMETHODIMP GetTypeInfoCount(UINT*);
239 STDMETHODIMP GetTypeInfo(UINT, LCID, LPTYPEINFO*);
240 STDMETHODIMP GetIDsOfNames(REFIID,LPOLESTR*,UINT,LCID,DISPID*);
241 STDMETHODIMP Invoke(DISPID,REFIID,LCID,WORD,DISPPARAMS*,VARIANT*,EXCEPINFO*,UINT*);
243 // IVLCMessageIterator methods
244 STDMETHODIMP get_hasNext(VARIANT_BOOL*);
245 STDMETHODIMP next(IVLCMessage**);
248 HRESULT loadTypeInfo();
251 VLCPlugin* _p_instance;
252 ITypeInfo* _p_typeinfo;
256 libvlc_log_iterator_t* _p_iter;
259 class VLCMessages : public IVLCMessages
263 VLCMessages(VLCPlugin *p_instance, VLCLog *p_vlclog) :
265 _p_instance(p_instance),
267 virtual ~VLCMessages();
270 STDMETHODIMP QueryInterface(REFIID riid, void **ppv)
274 if( (IID_IUnknown == riid)
275 || (IID_IDispatch == riid)
276 || (IID_IVLCMessages == riid) )
279 *ppv = reinterpret_cast<LPVOID>(this);
282 // behaves as a standalone object
283 return E_NOINTERFACE;
286 STDMETHODIMP_(ULONG) AddRef(void) { return _p_instance->pUnkOuter->AddRef(); };
287 STDMETHODIMP_(ULONG) Release(void) { return _p_instance->pUnkOuter->Release(); };
290 STDMETHODIMP GetTypeInfoCount(UINT*);
291 STDMETHODIMP GetTypeInfo(UINT, LCID, LPTYPEINFO*);
292 STDMETHODIMP GetIDsOfNames(REFIID,LPOLESTR*,UINT,LCID,DISPID*);
293 STDMETHODIMP Invoke(DISPID,REFIID,LCID,WORD,DISPPARAMS*,VARIANT*,EXCEPINFO*,UINT*);
295 // IVLCMessages methods
296 STDMETHODIMP get__NewEnum(LPUNKNOWN*);
297 STDMETHODIMP clear();
298 STDMETHODIMP get_count(long*);
299 STDMETHODIMP iterator(IVLCMessageIterator**);
302 HRESULT loadTypeInfo();
307 VLCPlugin* _p_instance;
308 ITypeInfo* _p_typeinfo;
311 class VLCLog : public IVLCLog
315 friend class VLCMessages;
316 friend class VLCMessageIterator;
318 VLCLog(VLCPlugin *p_instance) :
320 _p_instance(p_instance),
324 _p_vlcmessages = new VLCMessages(p_instance, this);
329 STDMETHODIMP QueryInterface(REFIID riid, void **ppv)
333 if( (IID_IUnknown == riid)
334 || (IID_IDispatch == riid)
335 || (IID_IVLCLog == riid) )
338 *ppv = reinterpret_cast<LPVOID>(this);
341 // behaves as a standalone object
342 return E_NOINTERFACE;
345 STDMETHODIMP_(ULONG) AddRef(void) { return _p_instance->pUnkOuter->AddRef(); };
346 STDMETHODIMP_(ULONG) Release(void) { return _p_instance->pUnkOuter->Release(); };
349 STDMETHODIMP GetTypeInfoCount(UINT*);
350 STDMETHODIMP GetTypeInfo(UINT, LCID, LPTYPEINFO*);
351 STDMETHODIMP GetIDsOfNames(REFIID,LPOLESTR*,UINT,LCID,DISPID*);
352 STDMETHODIMP Invoke(DISPID,REFIID,LCID,WORD,DISPPARAMS*,VARIANT*,EXCEPINFO*,UINT*);
355 STDMETHODIMP get_messages(IVLCMessages**);
356 STDMETHODIMP get_verbosity(long *);
357 STDMETHODIMP put_verbosity(long);
360 HRESULT loadTypeInfo();
362 libvlc_log_t *_p_log;
365 VLCPlugin* _p_instance;
366 ITypeInfo* _p_typeinfo;
368 VLCMessages* _p_vlcmessages;
371 class VLCPlaylistItems : public IVLCPlaylistItems
374 VLCPlaylistItems(VLCPlugin *p_instance) :
375 _p_instance(p_instance), _p_typeinfo(NULL) {};
376 virtual ~VLCPlaylistItems();
379 STDMETHODIMP QueryInterface(REFIID riid, void **ppv)
383 if( (IID_IUnknown == riid)
384 || (IID_IDispatch == riid)
385 || (IID_IVLCPlaylistItems == riid) )
388 *ppv = reinterpret_cast<LPVOID>(this);
391 // behaves as a standalone object
392 return E_NOINTERFACE;
395 STDMETHODIMP_(ULONG) AddRef(void) { return _p_instance->pUnkOuter->AddRef(); };
396 STDMETHODIMP_(ULONG) Release(void) { return _p_instance->pUnkOuter->Release(); };
399 STDMETHODIMP GetTypeInfoCount(UINT*);
400 STDMETHODIMP GetTypeInfo(UINT, LCID, LPTYPEINFO*);
401 STDMETHODIMP GetIDsOfNames(REFIID,LPOLESTR*,UINT,LCID,DISPID*);
402 STDMETHODIMP Invoke(DISPID,REFIID,LCID,WORD,DISPPARAMS*,VARIANT*,EXCEPINFO*,UINT*);
404 // IVLCPlaylistItems methods
405 STDMETHODIMP get_count(long*);
406 STDMETHODIMP clear();
407 STDMETHODIMP remove(long);
410 HRESULT loadTypeInfo();
413 VLCPlugin* _p_instance;
414 ITypeInfo* _p_typeinfo;
418 class VLCPlaylist : public IVLCPlaylist
421 VLCPlaylist(VLCPlugin *p_instance) :
422 _p_instance(p_instance),
424 _p_vlcplaylistitems(NULL)
426 _p_vlcplaylistitems = new VLCPlaylistItems(p_instance);
428 virtual ~VLCPlaylist();
431 STDMETHODIMP QueryInterface(REFIID riid, void **ppv)
435 if( (IID_IUnknown == riid)
436 || (IID_IDispatch == riid)
437 || (IID_IVLCPlaylist == riid) )
440 *ppv = reinterpret_cast<LPVOID>(this);
443 // behaves as a standalone object
444 return E_NOINTERFACE;
447 STDMETHODIMP_(ULONG) AddRef(void) { return _p_instance->pUnkOuter->AddRef(); };
448 STDMETHODIMP_(ULONG) Release(void) { return _p_instance->pUnkOuter->Release(); };
451 STDMETHODIMP GetTypeInfoCount(UINT*);
452 STDMETHODIMP GetTypeInfo(UINT, LCID, LPTYPEINFO*);
453 STDMETHODIMP GetIDsOfNames(REFIID,LPOLESTR*,UINT,LCID,DISPID*);
454 STDMETHODIMP Invoke(DISPID,REFIID,LCID,WORD,DISPPARAMS*,VARIANT*,EXCEPINFO*,UINT*);
456 // IVLCPlaylist methods
457 STDMETHODIMP get_itemCount(long*);
458 STDMETHODIMP get_isPlaying(VARIANT_BOOL*);
459 STDMETHODIMP add(BSTR, VARIANT, VARIANT, long*);
461 STDMETHODIMP playItem(long);
462 STDMETHODIMP togglePause();
466 STDMETHODIMP clear();
467 STDMETHODIMP removeItem(long);
468 STDMETHODIMP get_items(IVLCPlaylistItems**);
471 HRESULT loadTypeInfo();
474 VLCPlugin* _p_instance;
475 ITypeInfo* _p_typeinfo;
477 VLCPlaylistItems* _p_vlcplaylistitems;
480 class VLCVideo : public IVLCVideo
483 VLCVideo(VLCPlugin *p_instance) :
484 _p_instance(p_instance), _p_typeinfo(NULL) {};
488 STDMETHODIMP QueryInterface(REFIID riid, void **ppv)
492 if( (IID_IUnknown == riid)
493 || (IID_IDispatch == riid)
494 || (IID_IVLCVideo == riid) )
497 *ppv = reinterpret_cast<LPVOID>(this);
500 // behaves as a standalone object
501 return E_NOINTERFACE;
504 STDMETHODIMP_(ULONG) AddRef(void) { return _p_instance->pUnkOuter->AddRef(); };
505 STDMETHODIMP_(ULONG) Release(void) { return _p_instance->pUnkOuter->Release(); };
508 STDMETHODIMP GetTypeInfoCount(UINT*);
509 STDMETHODIMP GetTypeInfo(UINT, LCID, LPTYPEINFO*);
510 STDMETHODIMP GetIDsOfNames(REFIID,LPOLESTR*,UINT,LCID,DISPID*);
511 STDMETHODIMP Invoke(DISPID,REFIID,LCID,WORD,DISPPARAMS*,VARIANT*,EXCEPINFO*,UINT*);
514 STDMETHODIMP get_fullscreen(VARIANT_BOOL*);
515 STDMETHODIMP put_fullscreen(VARIANT_BOOL);
516 STDMETHODIMP get_width(long*);
517 STDMETHODIMP get_height(long*);
518 STDMETHODIMP get_aspectRatio(BSTR*);
519 STDMETHODIMP put_aspectRatio(BSTR);
520 STDMETHODIMP toggleFullscreen();
523 HRESULT loadTypeInfo();
526 VLCPlugin* _p_instance;
527 ITypeInfo* _p_typeinfo;
531 class VLCControl2 : public IVLCControl2
536 VLCControl2(VLCPlugin *p_instance);
537 virtual ~VLCControl2();
540 STDMETHODIMP QueryInterface(REFIID riid, void **ppv)
544 if( (IID_IUnknown == riid)
545 || (IID_IDispatch == riid)
546 || (IID_IVLCControl2 == riid) )
549 *ppv = reinterpret_cast<LPVOID>(this);
552 return _p_instance->pUnkOuter->QueryInterface(riid, ppv);
555 STDMETHODIMP_(ULONG) AddRef(void) { return _p_instance->pUnkOuter->AddRef(); };
556 STDMETHODIMP_(ULONG) Release(void) { return _p_instance->pUnkOuter->Release(); };
559 STDMETHODIMP GetTypeInfoCount(UINT*);
560 STDMETHODIMP GetTypeInfo(UINT, LCID, LPTYPEINFO*);
561 STDMETHODIMP GetIDsOfNames(REFIID,LPOLESTR*,UINT,LCID,DISPID*);
562 STDMETHODIMP Invoke(DISPID,REFIID,LCID,WORD,DISPPARAMS*,VARIANT*,EXCEPINFO*,UINT*);
564 // IVLCControl2 methods
565 STDMETHODIMP get_AutoLoop(VARIANT_BOOL *autoloop);
566 STDMETHODIMP put_AutoLoop(VARIANT_BOOL autoloop);
567 STDMETHODIMP get_AutoPlay(VARIANT_BOOL *autoplay);
568 STDMETHODIMP put_AutoPlay(VARIANT_BOOL autoplay);
569 STDMETHODIMP get_BaseURL(BSTR *url);
570 STDMETHODIMP put_BaseURL(BSTR url);
571 STDMETHODIMP get_MRL(BSTR *mrl);
572 STDMETHODIMP put_MRL(BSTR mrl);
573 STDMETHODIMP get_StartTime(long *seconds);
574 STDMETHODIMP put_StartTime(long seconds);
575 STDMETHODIMP get_VersionInfo(BSTR *version);
576 STDMETHODIMP get_Visible(VARIANT_BOOL *visible);
577 STDMETHODIMP put_Visible(VARIANT_BOOL visible);
578 STDMETHODIMP get_Volume(long *volume);
579 STDMETHODIMP put_Volume(long volume);
581 STDMETHODIMP get_audio(IVLCAudio**);
582 STDMETHODIMP get_input(IVLCInput**);
583 STDMETHODIMP get_log(IVLCLog**);
584 STDMETHODIMP get_playlist(IVLCPlaylist**);
585 STDMETHODIMP get_video(IVLCVideo**);
588 HRESULT loadTypeInfo();
591 VLCPlugin* _p_instance;
592 ITypeInfo* _p_typeinfo;
594 VLCAudio* _p_vlcaudio;
595 VLCInput* _p_vlcinput;
597 VLCPlaylist* _p_vlcplaylist;
598 VLCVideo* _p_vlcvideo;