⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 vlccontrol2.cpp

📁 VLC Player Source Code
💻 CPP
📖 第 1 页 / 共 5 页
字号:
STDMETHODIMP VLCPlaylistItems::Invoke(DISPID dispIdMember, REFIID riid,        LCID lcid, WORD wFlags, DISPPARAMS* pDispParams,        VARIANT* pVarResult, EXCEPINFO* pExcepInfo, UINT* puArgErr){    if( SUCCEEDED(loadTypeInfo()) )    {        return DispInvoke(this, _p_typeinfo, dispIdMember, wFlags, pDispParams,                pVarResult, pExcepInfo, puArgErr);    }    return E_NOTIMPL;};STDMETHODIMP VLCPlaylistItems::get_count(long* count){    if( NULL == count )        return E_POINTER;    libvlc_instance_t* p_libvlc;    HRESULT hr = _p_instance->getVLC(&p_libvlc);    if( SUCCEEDED(hr) )    {        libvlc_exception_t ex;        libvlc_exception_init(&ex);        *count = libvlc_playlist_items_count(p_libvlc, &ex);        if( libvlc_exception_raised(&ex) )        {            _p_instance->setErrorInfo(IID_IVLCPlaylistItems,                         libvlc_exception_get_message(&ex));            libvlc_exception_clear(&ex);            return E_FAIL;        }        return NOERROR;    }    return hr;};STDMETHODIMP VLCPlaylistItems::clear(){    libvlc_instance_t* p_libvlc;    HRESULT hr = _p_instance->getVLC(&p_libvlc);    if( SUCCEEDED(hr) )    {        libvlc_exception_t ex;        libvlc_exception_init(&ex);        libvlc_playlist_clear(p_libvlc, &ex);        if( libvlc_exception_raised(&ex) )        {            _p_instance->setErrorInfo(IID_IVLCPlaylistItems,                         libvlc_exception_get_message(&ex));            libvlc_exception_clear(&ex);            return E_FAIL;        }        return NOERROR;    }    return hr;};STDMETHODIMP VLCPlaylistItems::remove(long item){    libvlc_instance_t* p_libvlc;    HRESULT hr = _p_instance->getVLC(&p_libvlc);    if( SUCCEEDED(hr) )    {        libvlc_exception_t ex;        libvlc_exception_init(&ex);        libvlc_playlist_delete_item(p_libvlc, item, &ex);        if( libvlc_exception_raised(&ex) )        {            _p_instance->setErrorInfo(IID_IVLCPlaylistItems,                         libvlc_exception_get_message(&ex));            libvlc_exception_clear(&ex);            return E_FAIL;        }        return NOERROR;    }    return hr;};/*******************************************************************************/VLCPlaylist::~VLCPlaylist(){    delete _p_vlcplaylistitems;    if( _p_typeinfo )        _p_typeinfo->Release();};HRESULT VLCPlaylist::loadTypeInfo(void){    HRESULT hr = NOERROR;    if( NULL == _p_typeinfo )    {        ITypeLib *p_typelib;        hr = _p_instance->getTypeLib(LOCALE_USER_DEFAULT, &p_typelib);        if( SUCCEEDED(hr) )        {            hr = p_typelib->GetTypeInfoOfGuid(IID_IVLCPlaylist, &_p_typeinfo);            if( FAILED(hr) )            {                _p_typeinfo = NULL;            }            p_typelib->Release();        }    }    return hr;};STDMETHODIMP VLCPlaylist::GetTypeInfoCount(UINT* pctInfo){    if( NULL == pctInfo )        return E_INVALIDARG;    if( SUCCEEDED(loadTypeInfo()) )        *pctInfo = 1;    else        *pctInfo = 0;    return NOERROR;};STDMETHODIMP VLCPlaylist::GetTypeInfo(UINT iTInfo, LCID lcid, LPTYPEINFO* ppTInfo){    if( NULL == ppTInfo )        return E_INVALIDARG;    if( SUCCEEDED(loadTypeInfo()) )    {        _p_typeinfo->AddRef();        *ppTInfo = _p_typeinfo;        return NOERROR;    }    *ppTInfo = NULL;    return E_NOTIMPL;};STDMETHODIMP VLCPlaylist::GetIDsOfNames(REFIID riid, LPOLESTR* rgszNames,        UINT cNames, LCID lcid, DISPID* rgDispID){    if( SUCCEEDED(loadTypeInfo()) )    {        return DispGetIDsOfNames(_p_typeinfo, rgszNames, cNames, rgDispID);    }    return E_NOTIMPL;};STDMETHODIMP VLCPlaylist::Invoke(DISPID dispIdMember, REFIID riid,        LCID lcid, WORD wFlags, DISPPARAMS* pDispParams,        VARIANT* pVarResult, EXCEPINFO* pExcepInfo, UINT* puArgErr){    if( SUCCEEDED(loadTypeInfo()) )    {        return DispInvoke(this, _p_typeinfo, dispIdMember, wFlags, pDispParams,                pVarResult, pExcepInfo, puArgErr);    }    return E_NOTIMPL;};STDMETHODIMP VLCPlaylist::get_itemCount(long* count){    if( NULL == count )        return E_POINTER;    *count = 0;    libvlc_instance_t* p_libvlc;    HRESULT hr = _p_instance->getVLC(&p_libvlc);    if( SUCCEEDED(hr) )    {        libvlc_exception_t ex;        libvlc_exception_init(&ex);        *count = libvlc_playlist_items_count(p_libvlc, &ex);        if( libvlc_exception_raised(&ex) )        {            _p_instance->setErrorInfo(IID_IVLCPlaylist,                         libvlc_exception_get_message(&ex));            libvlc_exception_clear(&ex);            return E_FAIL;        }        return NOERROR;    }    return hr;};STDMETHODIMP VLCPlaylist::get_isPlaying(VARIANT_BOOL* isPlaying){    if( NULL == isPlaying )        return E_POINTER;    libvlc_instance_t* p_libvlc;    HRESULT hr = _p_instance->getVLC(&p_libvlc);    if( SUCCEEDED(hr) )    {        libvlc_exception_t ex;        libvlc_exception_init(&ex);        *isPlaying = libvlc_playlist_isplaying(p_libvlc, &ex) ?                                    VARIANT_TRUE: VARIANT_FALSE;        if( libvlc_exception_raised(&ex) )        {            _p_instance->setErrorInfo(IID_IVLCPlaylist,                         libvlc_exception_get_message(&ex));            libvlc_exception_clear(&ex);            return E_FAIL;        }        return NOERROR;    }    return hr;};STDMETHODIMP VLCPlaylist::add(BSTR uri, VARIANT name, VARIANT options, long* item){    if( NULL == item )        return E_POINTER;    if( 0 == SysStringLen(uri) )        return E_INVALIDARG;    libvlc_instance_t* p_libvlc;    HRESULT hr = _p_instance->getVLC(&p_libvlc);    if( SUCCEEDED(hr) )    {        libvlc_exception_t ex;        libvlc_exception_init(&ex);        char *psz_uri = NULL;        if( SysStringLen(_p_instance->getBaseURL()) > 0 )        {            /*            ** if the MRL a relative URL, we should end up with an absolute URL            */            LPWSTR abs_url = CombineURL(_p_instance->getBaseURL(), uri);            if( NULL != abs_url )            {                psz_uri = CStrFromWSTR(CP_UTF8, abs_url, wcslen(abs_url));                CoTaskMemFree(abs_url);            }            else            {                psz_uri = CStrFromBSTR(CP_UTF8, uri);            }        }        else        {            /*            ** baseURL is empty, assume MRL is absolute            */            psz_uri = CStrFromBSTR(CP_UTF8, uri);        }        if( NULL == psz_uri )        {            return E_OUTOFMEMORY;        }        int i_options;        char **ppsz_options;        hr = VLCControl::CreateTargetOptions(CP_UTF8, &options, &ppsz_options, &i_options);        if( FAILED(hr) )        {            CoTaskMemFree(psz_uri);            return hr;        }        char *psz_name = NULL;        VARIANT v_name;        VariantInit(&v_name);        if( SUCCEEDED(VariantChangeType(&v_name, &name, 0, VT_BSTR)) )        {            if( SysStringLen(V_BSTR(&v_name)) > 0 )                psz_name = CStrFromBSTR(CP_UTF8, V_BSTR(&v_name));            VariantClear(&v_name);        }        *item = libvlc_playlist_add_extended(p_libvlc,                    psz_uri,                    psz_name,                    i_options,                    const_cast<const char **>(ppsz_options),                    &ex);        VLCControl::FreeTargetOptions(ppsz_options, i_options);        CoTaskMemFree(psz_uri);        if( psz_name )            CoTaskMemFree(psz_name);        if( libvlc_exception_raised(&ex) )        {            _p_instance->setErrorInfo(IID_IVLCPlaylist,                libvlc_exception_get_message(&ex));            libvlc_exception_clear(&ex);            return E_FAIL;        }        return NOERROR;    }    return hr;};STDMETHODIMP VLCPlaylist::play(){    libvlc_instance_t* p_libvlc;    HRESULT hr = _p_instance->getVLC(&p_libvlc);    if( SUCCEEDED(hr) )    {        libvlc_exception_t ex;        libvlc_exception_init(&ex);        libvlc_playlist_play(p_libvlc, -1, 0, NULL, &ex);        if( libvlc_exception_raised(&ex) )        {            libvlc_exception_clear(&ex);            return E_FAIL;        }        return NOERROR;    }    return hr;};STDMETHODIMP VLCPlaylist::playItem(long item){    libvlc_instance_t* p_libvlc;    HRESULT hr = _p_instance->getVLC(&p_libvlc);    if( SUCCEEDED(hr) )    {        libvlc_exception_t ex;        libvlc_exception_init(&ex);        libvlc_playlist_play(p_libvlc, item, 0, NULL, &ex);        if( libvlc_exception_raised(&ex) )        {            _p_instance->setErrorInfo(IID_IVLCPlaylist,                libvlc_exception_get_message(&ex));            libvlc_exception_clear(&ex);            return E_FAIL;        }        return NOERROR;    }    return hr;};STDMETHODIMP VLCPlaylist::togglePause(){    libvlc_instance_t* p_libvlc;    HRESULT hr = _p_instance->getVLC(&p_libvlc);    if( SUCCEEDED(hr) )    {        libvlc_exception_t ex;        libvlc_exception_init(&ex);        libvlc_playlist_pause(p_libvlc, &ex);        if( libvlc_exception_raised(&ex) )        {            _p_instance->setErrorInfo(IID_IVLCPlaylist,                libvlc_exception_get_message(&ex));            libvlc_exception_clear(&ex);            return E_FAIL;        }        return NOERROR;    }    return hr;};STDMETHODIMP VLCPlaylist::stop(){    libvlc_instance_t* p_libvlc;    HRESULT hr = _p_instance->getVLC(&p_libvlc);    if( SUCCEEDED(hr) )    {        libvlc_exception_t ex;        libvlc_exception_init(&ex);        libvlc_playlist_stop(p_libvlc, &ex);        if( libvlc_exception_raised(&ex) )        {            _p_instance->setErrorInfo(IID_IVLCPlaylist,                libvlc_exception_get_message(&ex));            libvlc_exception_clear(&ex);            return E_FAIL;        }        return NOERROR;    }    return hr;};STDMETHODIMP VLCPlaylist::next(){    libvlc_instance_t* p_libvlc;    HRESULT hr = _p_instance->getVLC(&p_libvlc);    if( SUCCEEDED(hr) )    {        libvlc_exception_t ex;        libvlc_exception_init(&ex);        libvlc_playlist_next(p_libvlc, &ex);        if( libvlc_exception_raised(&ex) )        {            _p_instance->setErrorInfo(IID_IVLCPlaylist,                libvlc_exception_get_message(&ex));            libvlc_exception_clear(&ex);            return E_FAIL;        }        return NOERROR;    }    return hr;};STDMETHODIMP VLCPlaylist::prev(){    libvlc_instance_t* p_libvlc;    HRESULT hr = _p_instance->getVLC(&p_libvlc);    if( SUCCEEDED(hr) )    {        libvlc_exception_t ex;        libvlc_exception_init(&ex);        libvlc_playlist_prev(p_libvlc, &ex);        if( libvlc_exception_raised(&ex) )        {            _p_instance->setErrorInfo(IID_IVLCPlaylist,                libvlc_exception_get_message(&ex));            libvlc_exception_clear(&ex);            return E_FAIL;        }        return NOERROR;    }    return hr;};STDMETHODIMP VLCPlaylist::clear(){    libvlc_instance_t* p_libvlc;    HRESULT hr = _p_instance->getVLC(&p_libvlc);    if( SUCCEEDED(hr) )    {        libvlc_exception_t ex;        libvlc_exception_init(&ex);        libvlc_playlist_clear(p_libvlc, &ex);        if( libvlc_exception_raised(&ex) )        {            _p_instance->setErrorInfo(IID_IVLCPlaylist,                libvlc_exception_get_message(&ex));            libvlc_exception_clear(&ex);            return E_FAIL;        }        return NOERROR;    }    return hr;};STDMETHODIMP VLCPlaylist::removeItem(long item){    libvlc_instance_t* p_libvlc;    HRESULT hr = _p_instance->getVLC(&p_libvlc);    if( SUCCEEDED(hr) )    {        libvlc_exception_t ex;        libvlc_exception_init(&ex);        libvlc_playlist_delete_item(p_libvlc, item, &ex);        if( libvlc_exception_raised(&ex) )        {            _p_instance->setErrorInfo(IID_IVLCPlaylist,                libvlc_exception_get_message(&ex));            libvlc_exception_clear(&ex);            return E_FAIL;        }        return NOERROR;    }    return hr;};STDMETHODIMP VLCPlaylist::get_items(IVLCPlaylistItems** obj){    if( NULL == obj )        return E_POINTER;    *obj = _p_vlcplaylistitems;    if( NULL != _p_vlcplaylistitems )    {        _p_vlcplaylistitems->AddRef();        return NOERROR;    }    return E_OUTOFMEMORY;};/*******************************************************************************/VLCVideo::~VLCVideo(){    if( _p_typeinfo )        _p_typeinfo->Release();};HRESULT VLCVideo::loadTypeInfo(void){

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -