X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=activex%2Fvlccontrol2.h;h=23c28539638c86abee3605aa1ce573031dfc5ac1;hb=c4a2943214446cc2b5d1e9d5aad7b46801fef844;hp=2e3e60d22238ab07c907ce3092a44b12eab5e9ce;hpb=727b4c332e17015432784708514d388f1cbf3b6b;p=vlc diff --git a/activex/vlccontrol2.h b/activex/vlccontrol2.h old mode 100755 new mode 100644 index 2e3e60d222..23c2853963 --- a/activex/vlccontrol2.h +++ b/activex/vlccontrol2.h @@ -4,6 +4,7 @@ * Copyright (C) 2006 the VideoLAN team * * Authors: Damien Fouilleul + * Jean-Paul Saman * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -25,6 +26,8 @@ #include "axvlc_idl.h" +#include + class VLCAudio : public IVLCAudio { public: @@ -61,18 +64,23 @@ public: // IVLCAudio methods STDMETHODIMP get_mute(VARIANT_BOOL*); STDMETHODIMP put_mute(VARIANT_BOOL); - STDMETHODIMP get_volume(int*); - STDMETHODIMP put_volume(int); + STDMETHODIMP get_volume(long*); + STDMETHODIMP put_volume(long); + STDMETHODIMP get_track(long*); + STDMETHODIMP put_track(long); + STDMETHODIMP get_channel(long*); + STDMETHODIMP put_channel(long); STDMETHODIMP toggleMute(); - -private: - HRESULT loadTypeInfo(); - VLCPlugin* _p_instance; - ITypeInfo* _p_typeinfo; +protected: + HRESULT loadTypeInfo(); + +private: + VLCPlugin* _p_instance; + ITypeInfo* _p_typeinfo; }; - + class VLCInput : public IVLCInput { public: @@ -108,30 +116,320 @@ public: STDMETHODIMP Invoke(DISPID,REFIID,LCID,WORD,DISPPARAMS*,VARIANT*,EXCEPINFO*,UINT*); // IVLCInput methods - STDMETHODIMP get_length(__int64*); - STDMETHODIMP get_position(float*); - STDMETHODIMP put_position(float); - STDMETHODIMP get_time(__int64*); - STDMETHODIMP put_time(__int64); - STDMETHODIMP get_state(int*); - STDMETHODIMP get_rate(float*); - STDMETHODIMP put_rate(float); - STDMETHODIMP get_fps(float*); + STDMETHODIMP get_length(double*); + STDMETHODIMP get_position(double*); + STDMETHODIMP put_position(double); + STDMETHODIMP get_time(double*); + STDMETHODIMP put_time(double); + STDMETHODIMP get_state(long*); + STDMETHODIMP get_rate(double*); + STDMETHODIMP put_rate(double); + STDMETHODIMP get_fps(double*); STDMETHODIMP get_hasVout(VARIANT_BOOL*); - + +protected: + HRESULT loadTypeInfo(); + +private: + VLCPlugin* _p_instance; + ITypeInfo* _p_typeinfo; + +}; + +class VLCMessage: public IVLCMessage +{ +public: + + VLCMessage(VLCPlugin *p_instance, struct libvlc_log_message_t &msg) : + _p_instance(p_instance), + _p_typeinfo(NULL), + _refcount(1), + _msg(msg) {}; + virtual ~VLCMessage(); + + // IUnknown methods + STDMETHODIMP QueryInterface(REFIID riid, void **ppv) + { + if( NULL == ppv ) + return E_POINTER; + if( (IID_IUnknown == riid) + || (IID_IDispatch == riid) + || (IID_IVLCMessage == riid) ) + { + AddRef(); + *ppv = reinterpret_cast(this); + return NOERROR; + } + // behaves as a standalone object + return E_NOINTERFACE; + }; + + STDMETHODIMP_(ULONG) AddRef(void) { return InterlockedIncrement(&_refcount); }; + STDMETHODIMP_(ULONG) Release(void) + { + ULONG refcount = InterlockedDecrement(&_refcount); + if( 0 == refcount ) + { + delete this; + return 0; + } + return refcount; + }; + + // IDispatch methods + STDMETHODIMP GetTypeInfoCount(UINT*); + STDMETHODIMP GetTypeInfo(UINT, LCID, LPTYPEINFO*); + STDMETHODIMP GetIDsOfNames(REFIID,LPOLESTR*,UINT,LCID,DISPID*); + STDMETHODIMP Invoke(DISPID,REFIID,LCID,WORD,DISPPARAMS*,VARIANT*,EXCEPINFO*,UINT*); + + // IVLCMessage methods + STDMETHODIMP get__Value(VARIANT *); + STDMETHODIMP get_severity(long *); + STDMETHODIMP get_type(BSTR *); + STDMETHODIMP get_name(BSTR *); + STDMETHODIMP get_header(BSTR *); + STDMETHODIMP get_message(BSTR *); + +protected: + HRESULT loadTypeInfo(); + +private: + VLCPlugin* _p_instance; + ITypeInfo* _p_typeinfo; + LONG _refcount; + + struct libvlc_log_message_t _msg; +}; + +class VLCLog; + +class VLCMessageIterator : public IVLCMessageIterator +{ +public: + + VLCMessageIterator(VLCPlugin *p_instance, VLCLog* p_vlclog); + virtual ~VLCMessageIterator(); + + // IUnknown methods + STDMETHODIMP QueryInterface(REFIID riid, void **ppv) + { + if( NULL == ppv ) + return E_POINTER; + if( (IID_IUnknown == riid) + || (IID_IDispatch == riid) + || (IID_IVLCMessageIterator == riid) ) + { + AddRef(); + *ppv = reinterpret_cast(this); + return NOERROR; + } + // behaves as a standalone object + return E_NOINTERFACE; + }; + + STDMETHODIMP_(ULONG) AddRef(void) { return InterlockedIncrement(&_refcount); }; + STDMETHODIMP_(ULONG) Release(void) + { + ULONG refcount = InterlockedDecrement(&_refcount); + if( 0 == refcount ) + { + delete this; + return 0; + } + return refcount; + }; + + // IDispatch methods + STDMETHODIMP GetTypeInfoCount(UINT*); + STDMETHODIMP GetTypeInfo(UINT, LCID, LPTYPEINFO*); + STDMETHODIMP GetIDsOfNames(REFIID,LPOLESTR*,UINT,LCID,DISPID*); + STDMETHODIMP Invoke(DISPID,REFIID,LCID,WORD,DISPPARAMS*,VARIANT*,EXCEPINFO*,UINT*); + + // IVLCMessageIterator methods + STDMETHODIMP get_hasNext(VARIANT_BOOL*); + STDMETHODIMP next(IVLCMessage**); + +protected: + HRESULT loadTypeInfo(); + private: - HRESULT loadTypeInfo(); + VLCPlugin* _p_instance; + ITypeInfo* _p_typeinfo; + LONG _refcount; + + VLCLog* _p_vlclog; + libvlc_log_iterator_t* _p_iter; +}; +class VLCMessages : public IVLCMessages +{ +public: + + VLCMessages(VLCPlugin *p_instance, VLCLog *p_vlclog) : + _p_vlclog(p_vlclog), + _p_instance(p_instance), + _p_typeinfo(NULL) {} + virtual ~VLCMessages(); + + // IUnknown methods + STDMETHODIMP QueryInterface(REFIID riid, void **ppv) + { + if( NULL == ppv ) + return E_POINTER; + if( (IID_IUnknown == riid) + || (IID_IDispatch == riid) + || (IID_IVLCMessages == riid) ) + { + AddRef(); + *ppv = reinterpret_cast(this); + return NOERROR; + } + // behaves as a standalone object + return E_NOINTERFACE; + }; + + STDMETHODIMP_(ULONG) AddRef(void) { return _p_instance->pUnkOuter->AddRef(); }; + STDMETHODIMP_(ULONG) Release(void) { return _p_instance->pUnkOuter->Release(); }; + + // IDispatch methods + STDMETHODIMP GetTypeInfoCount(UINT*); + STDMETHODIMP GetTypeInfo(UINT, LCID, LPTYPEINFO*); + STDMETHODIMP GetIDsOfNames(REFIID,LPOLESTR*,UINT,LCID,DISPID*); + STDMETHODIMP Invoke(DISPID,REFIID,LCID,WORD,DISPPARAMS*,VARIANT*,EXCEPINFO*,UINT*); + + // IVLCMessages methods + STDMETHODIMP get__NewEnum(LPUNKNOWN*); + STDMETHODIMP clear(); + STDMETHODIMP get_count(long*); + STDMETHODIMP iterator(IVLCMessageIterator**); + +protected: + HRESULT loadTypeInfo(); + + VLCLog* _p_vlclog; + +private: VLCPlugin* _p_instance; ITypeInfo* _p_typeinfo; - }; +class VLCLog : public IVLCLog +{ +public: + + friend class VLCMessages; + friend class VLCMessageIterator; + + VLCLog(VLCPlugin *p_instance) : + _p_log(NULL), + _p_instance(p_instance), + _p_typeinfo(NULL), + _p_vlcmessages(NULL) + { + _p_vlcmessages = new VLCMessages(p_instance, this); + }; + virtual ~VLCLog(); + + // IUnknown methods + STDMETHODIMP QueryInterface(REFIID riid, void **ppv) + { + if( NULL == ppv ) + return E_POINTER; + if( (IID_IUnknown == riid) + || (IID_IDispatch == riid) + || (IID_IVLCLog == riid) ) + { + AddRef(); + *ppv = reinterpret_cast(this); + return NOERROR; + } + // behaves as a standalone object + return E_NOINTERFACE; + }; + + STDMETHODIMP_(ULONG) AddRef(void) { return _p_instance->pUnkOuter->AddRef(); }; + STDMETHODIMP_(ULONG) Release(void) { return _p_instance->pUnkOuter->Release(); }; + + // IDispatch methods + STDMETHODIMP GetTypeInfoCount(UINT*); + STDMETHODIMP GetTypeInfo(UINT, LCID, LPTYPEINFO*); + STDMETHODIMP GetIDsOfNames(REFIID,LPOLESTR*,UINT,LCID,DISPID*); + STDMETHODIMP Invoke(DISPID,REFIID,LCID,WORD,DISPPARAMS*,VARIANT*,EXCEPINFO*,UINT*); + + // IVLCLog methods + STDMETHODIMP get_messages(IVLCMessages**); + STDMETHODIMP get_verbosity(long *); + STDMETHODIMP put_verbosity(long); + +protected: + HRESULT loadTypeInfo(); + + libvlc_log_t *_p_log; + +private: + VLCPlugin* _p_instance; + ITypeInfo* _p_typeinfo; + + VLCMessages* _p_vlcmessages; +}; + +class VLCPlaylistItems : public IVLCPlaylistItems +{ +public: + VLCPlaylistItems(VLCPlugin *p_instance) : + _p_instance(p_instance), _p_typeinfo(NULL) {}; + virtual ~VLCPlaylistItems(); + + // IUnknown methods + STDMETHODIMP QueryInterface(REFIID riid, void **ppv) + { + if( NULL == ppv ) + return E_POINTER; + if( (IID_IUnknown == riid) + || (IID_IDispatch == riid) + || (IID_IVLCPlaylistItems == riid) ) + { + AddRef(); + *ppv = reinterpret_cast(this); + return NOERROR; + } + // behaves as a standalone object + return E_NOINTERFACE; + }; + + STDMETHODIMP_(ULONG) AddRef(void) { return _p_instance->pUnkOuter->AddRef(); }; + STDMETHODIMP_(ULONG) Release(void) { return _p_instance->pUnkOuter->Release(); }; + + // IDispatch methods + STDMETHODIMP GetTypeInfoCount(UINT*); + STDMETHODIMP GetTypeInfo(UINT, LCID, LPTYPEINFO*); + STDMETHODIMP GetIDsOfNames(REFIID,LPOLESTR*,UINT,LCID,DISPID*); + STDMETHODIMP Invoke(DISPID,REFIID,LCID,WORD,DISPPARAMS*,VARIANT*,EXCEPINFO*,UINT*); + + // IVLCPlaylistItems methods + STDMETHODIMP get_count(long*); + STDMETHODIMP clear(); + STDMETHODIMP remove(long); + +protected: + HRESULT loadTypeInfo(); + +private: + VLCPlugin* _p_instance; + ITypeInfo* _p_typeinfo; + +}; + class VLCPlaylist : public IVLCPlaylist { public: VLCPlaylist(VLCPlugin *p_instance) : - _p_instance(p_instance), _p_typeinfo(NULL) {}; + _p_instance(p_instance), + _p_typeinfo(NULL), + _p_vlcplaylistitems(NULL) + { + _p_vlcplaylistitems = new VLCPlaylistItems(p_instance); + }; virtual ~VLCPlaylist(); // IUnknown methods @@ -161,27 +459,29 @@ public: STDMETHODIMP Invoke(DISPID,REFIID,LCID,WORD,DISPPARAMS*,VARIANT*,EXCEPINFO*,UINT*); // IVLCPlaylist methods - STDMETHODIMP get_itemCount(int*); + STDMETHODIMP get_itemCount(long*); STDMETHODIMP get_isPlaying(VARIANT_BOOL*); - STDMETHODIMP add(BSTR, VARIANT, VARIANT, int*); + STDMETHODIMP add(BSTR, VARIANT, VARIANT, long*); STDMETHODIMP play(); - STDMETHODIMP playItem(int); + STDMETHODIMP playItem(long); STDMETHODIMP togglePause(); STDMETHODIMP stop(); STDMETHODIMP next(); STDMETHODIMP prev(); STDMETHODIMP clear(); - STDMETHODIMP removeItem(int); - -private: + STDMETHODIMP removeItem(long); + STDMETHODIMP get_items(IVLCPlaylistItems**); - HRESULT loadTypeInfo(); +protected: + HRESULT loadTypeInfo(); +private: VLCPlugin* _p_instance; ITypeInfo* _p_typeinfo; + VLCPlaylistItems* _p_vlcplaylistitems; }; - + class VLCVideo : public IVLCVideo { public: @@ -218,21 +518,30 @@ public: // IVLCVideo methods STDMETHODIMP get_fullscreen(VARIANT_BOOL*); STDMETHODIMP put_fullscreen(VARIANT_BOOL); - STDMETHODIMP get_width(int*); - STDMETHODIMP get_height(int*); - -private: - - HRESULT loadTypeInfo(); + STDMETHODIMP get_width(long*); + STDMETHODIMP get_height(long*); + STDMETHODIMP get_aspectRatio(BSTR*); + STDMETHODIMP put_aspectRatio(BSTR); + STDMETHODIMP get_subtitle(long*); + STDMETHODIMP put_subtitle(long); + STDMETHODIMP get_crop(BSTR*); + STDMETHODIMP put_crop(BSTR); + STDMETHODIMP get_teletext(long*); + STDMETHODIMP put_teletext(long); + STDMETHODIMP takeSnapshot(LPPICTUREDISP*); + STDMETHODIMP toggleFullscreen(); + +protected: + HRESULT loadTypeInfo(); - VLCPlugin* _p_instance; - ITypeInfo* _p_typeinfo; +private: + VLCPlugin* _p_instance; + ITypeInfo* _p_typeinfo; }; - + class VLCControl2 : public IVLCControl2 { - public: VLCControl2(VLCPlugin *p_instance); @@ -264,23 +573,42 @@ public: STDMETHODIMP Invoke(DISPID,REFIID,LCID,WORD,DISPPARAMS*,VARIANT*,EXCEPINFO*,UINT*); // IVLCControl2 methods + STDMETHODIMP get_AutoLoop(VARIANT_BOOL *autoloop); + STDMETHODIMP put_AutoLoop(VARIANT_BOOL autoloop); + STDMETHODIMP get_AutoPlay(VARIANT_BOOL *autoplay); + STDMETHODIMP put_AutoPlay(VARIANT_BOOL autoplay); + STDMETHODIMP get_BaseURL(BSTR *url); + STDMETHODIMP put_BaseURL(BSTR url); + STDMETHODIMP get_MRL(BSTR *mrl); + STDMETHODIMP put_MRL(BSTR mrl); + STDMETHODIMP get_StartTime(long *seconds); + STDMETHODIMP put_StartTime(long seconds); + STDMETHODIMP get_VersionInfo(BSTR *version); + STDMETHODIMP get_Visible(VARIANT_BOOL *visible); + STDMETHODIMP put_Visible(VARIANT_BOOL visible); + STDMETHODIMP get_Volume(long *volume); + STDMETHODIMP put_Volume(long volume); + STDMETHODIMP get_BackColor(OLE_COLOR *backcolor); + STDMETHODIMP put_BackColor(OLE_COLOR backcolor); + STDMETHODIMP get_audio(IVLCAudio**); STDMETHODIMP get_input(IVLCInput**); + STDMETHODIMP get_log(IVLCLog**); STDMETHODIMP get_playlist(IVLCPlaylist**); STDMETHODIMP get_video(IVLCVideo**); - -private: - HRESULT loadTypeInfo(); +protected: + HRESULT loadTypeInfo(); +private: VLCPlugin* _p_instance; ITypeInfo* _p_typeinfo; VLCAudio* _p_vlcaudio; VLCInput* _p_vlcinput; + VLCLog * _p_vlclog; VLCPlaylist* _p_vlcplaylist; VLCVideo* _p_vlcvideo; }; - -#endif +#endif