[vlc-devel] [PATCH] ActiveX: Added "inputSlave" property.
Sergey Radionov
rsatom at gmail.com
Sat Apr 21 18:24:39 CEST 2012
2012/4/21 Sergey Radionov <rsatom at gmail.com>:
> ---
> activex/axvlc.idl | 5 +++++
> activex/persistpropbag.cpp | 13 +++++++++++++
> activex/plugin.cpp | 15 +++++++++++++++
> activex/plugin.h | 10 ++++++++++
> activex/vlccontrol2.cpp | 17 +++++++++++++++++
> activex/vlccontrol2.h | 2 ++
> 6 files changed, 62 insertions(+), 0 deletions(-)
>
> diff --git a/activex/axvlc.idl b/activex/axvlc.idl
> index 63dba0b..76cc368 100644
> --- a/activex/axvlc.idl
> +++ b/activex/axvlc.idl
> @@ -698,6 +698,11 @@ library AXVLC
>
> [propget, helpstring("Returns the media description object.")]
> HRESULT mediaDescription([out, retval] IVLCMediaDescription** obj);
> +
> + [propget]
> + HRESULT inputSlave([out, retval] BSTR* InputSlave);
> + [propput]
> + HRESULT inputSlave([in] BSTR InputSlave);
> };
>
> [
> diff --git a/activex/persistpropbag.cpp b/activex/persistpropbag.cpp
> index f0f842e..a08800e 100644
> --- a/activex/persistpropbag.cpp
> +++ b/activex/persistpropbag.cpp
> @@ -219,6 +219,13 @@ STDMETHODIMP VLCPersistPropertyBag::Load(LPPROPERTYBAG pPropBag, LPERRORLOG pErr
> VariantClear(&value);
> }
>
> + V_VT(&value) = VT_BSTR;
> + if( S_OK == pPropBag->Read(OLESTR("InputSlave"), &value, pErrorLog) )
> + {
> + _p_instance->setInputSlave(V_BSTR(&value));
> + VariantClear(&value);
> + }
> +
> return _p_instance->onLoad();
> };
>
> @@ -290,6 +297,12 @@ STDMETHODIMP VLCPersistPropertyBag::Save(LPPROPERTYBAG pPropBag, BOOL fClearDirt
> pPropBag->Write(OLESTR("FullscreenEnabled"), &value);
> VariantClear(&value);
>
> + V_VT(&value) = VT_BSTR;
> + V_BSTR(&value) = SysAllocStringLen(_p_instance->getInputSlave(),
> + SysStringLen(_p_instance->getInputSlave()));
> + pPropBag->Write(OLESTR("InputSlave"), &value);
> + VariantClear(&value);
> +
> if( fClearDirty )
> _p_instance->setDirty(FALSE);
>
> diff --git a/activex/plugin.cpp b/activex/plugin.cpp
> index 7db51f7..065e76a 100644
> --- a/activex/plugin.cpp
> +++ b/activex/plugin.cpp
> @@ -303,6 +303,7 @@ VLCPlugin::~VLCPlugin()
>
> SysFreeString(_bstr_mrl);
> SysFreeString(_bstr_baseurl);
> + SysFreeString(_bstr_input_slave);
>
> if( vlc_player::is_open() )
> {
> @@ -407,6 +408,7 @@ HRESULT VLCPlugin::onInit(void)
> _i_volume = 50;
> _i_time = 0;
> _i_backcolor = 0;
> + _bstr_input_slave = NULL;
> // set default/preferred size (320x240) pixels in HIMETRIC
> HDC hDC = CreateDevDC(NULL);
> _extent.cx = 320;
> @@ -522,7 +524,20 @@ void VLCPlugin::initVLC()
> ppsz_argv[ppsz_argc++] = "--intf=dummy";
> ppsz_argv[ppsz_argc++] = "--no-video-title-show";
>
> +
> + char *psz_input_slave = NULL;
> + if( SysStringLen(_bstr_input_slave) > 0 ) {
> + psz_input_slave = CStrFromBSTR(CP_UTF8, _bstr_input_slave);
> + if( psz_input_slave ) {
> + ppsz_argv[ppsz_argc++] = "--input-slave";
> + ppsz_argv[ppsz_argc++] = psz_input_slave;
> + }
> + }
> +
> _p_libvlc = libvlc_new(ppsz_argc, ppsz_argv);
> +
> + CoTaskMemFree(psz_input_slave);
> +
> if( !_p_libvlc )
> return;
>
> diff --git a/activex/plugin.h b/activex/plugin.h
> index 06fb5c0..4266b97 100644
> --- a/activex/plugin.h
> +++ b/activex/plugin.h
> @@ -114,6 +114,14 @@ public:
> };
> BSTR getMRL(void) { return _bstr_mrl; };
>
> + void setInputSlave(BSTR input_slave)
> + {
> + SysFreeString(_bstr_input_slave);
> + _bstr_input_slave = SysAllocStringLen( input_slave, SysStringLen(input_slave) );
> + setDirty(TRUE);
> + };
> + BSTR getInputSlave(void) { return _bstr_input_slave; };
> +
> inline void setAutoPlay(BOOL autoplay)
> {
> set_autoplay(autoplay != FALSE);
> @@ -384,6 +392,8 @@ private:
> int _i_time;
> SIZEL _extent;
> OLE_COLOR _i_backcolor;
> + BSTR _bstr_input_slave;
> +
> // indicates whether properties needs persisting
> BOOL _b_dirty;
> };
> diff --git a/activex/vlccontrol2.cpp b/activex/vlccontrol2.cpp
> index 2cede90..84cb90e 100644
> --- a/activex/vlccontrol2.cpp
> +++ b/activex/vlccontrol2.cpp
> @@ -1492,3 +1492,20 @@ STDMETHODIMP VLCControl2::get_mediaDescription(IVLCMediaDescription** obj)
> {
> return object_get<IVLCMediaDescription>(obj, &_p_vlcmedia_desc);
> }
> +
> +STDMETHODIMP VLCControl2::get_inputSlave(BSTR *InputSlave)
> +{
> + if( NULL == InputSlave )
> + return E_POINTER;
> +
> + *InputSlave = SysAllocStringLen(_p_instance->getInputSlave(),
> + SysStringLen(_p_instance->getInputSlave()));
> + return NOERROR;
> +};
> +
> +STDMETHODIMP VLCControl2::put_inputSlave(BSTR InputSlave)
> +{
> + _p_instance->setInputSlave(InputSlave);
> +
> + return S_OK;
> +};
> diff --git a/activex/vlccontrol2.h b/activex/vlccontrol2.h
> index cf25258..d035094 100644
> --- a/activex/vlccontrol2.h
> +++ b/activex/vlccontrol2.h
> @@ -420,6 +420,8 @@ public:
> STDMETHODIMP get_subtitle(IVLCSubtitle**);
> STDMETHODIMP get_video(IVLCVideo**);
> STDMETHODIMP get_mediaDescription(IVLCMediaDescription**);
> + STDMETHODIMP get_inputSlave(BSTR *InputSlave);
> + STDMETHODIMP put_inputSlave(BSTR InputSlave);
>
> protected:
> HRESULT loadTypeInfo();
> --
> 1.7.7.1.msysgit.0
>
please ignore this patch. I am forget about WIDL again...
More information about the vlc-devel
mailing list