[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