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

📄 vlccontrol2.cpp

📁 VLC Player Source Code
💻 CPP
📖 第 1 页 / 共 5 页
字号:
/***************************************************************************** * vlccontrol2.cpp: ActiveX control for VLC ***************************************************************************** * Copyright (C) 2006 the VideoLAN team * * Authors: Damien Fouilleul <Damien.Fouilleul@laposte.net> *          Jean-Paul Saman <jpsaman _at_ m2x _dot_ nl> * * 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 * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA. *****************************************************************************/#include "plugin.h"#include "vlccontrol2.h"#include "vlccontrol.h"#include "utils.h"#include <shlwapi.h>#include <wininet.h>#include <tchar.h>using namespace std;VLCAudio::~VLCAudio(){    if( _p_typeinfo )        _p_typeinfo->Release();};HRESULT VLCAudio::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_IVLCAudio, &_p_typeinfo);            if( FAILED(hr) )            {                _p_typeinfo = NULL;            }            p_typelib->Release();        }    }    return hr;};STDMETHODIMP VLCAudio::GetTypeInfoCount(UINT* pctInfo){    if( NULL == pctInfo )        return E_INVALIDARG;    if( SUCCEEDED(loadTypeInfo()) )        *pctInfo = 1;    else        *pctInfo = 0;    return NOERROR;};STDMETHODIMP VLCAudio::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 VLCAudio::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 VLCAudio::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 VLCAudio::get_mute(VARIANT_BOOL* mute){    if( NULL == mute )        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);        *mute = libvlc_audio_get_mute(p_libvlc, &ex) ?                        VARIANT_TRUE : VARIANT_FALSE;        if( libvlc_exception_raised(&ex) )        {            _p_instance->setErrorInfo(IID_IVLCAudio,                         libvlc_exception_get_message(&ex));            libvlc_exception_clear(&ex);            return E_FAIL;        }        return NOERROR;    }    return hr;};STDMETHODIMP VLCAudio::put_mute(VARIANT_BOOL mute){    libvlc_instance_t* p_libvlc;    HRESULT hr = _p_instance->getVLC(&p_libvlc);    if( SUCCEEDED(hr) )    {        libvlc_exception_t ex;        libvlc_exception_init(&ex);        libvlc_audio_set_mute(p_libvlc, VARIANT_FALSE != mute, &ex);        if( libvlc_exception_raised(&ex) )        {            _p_instance->setErrorInfo(IID_IVLCAudio,                         libvlc_exception_get_message(&ex));            libvlc_exception_clear(&ex);            return E_FAIL;        }        return NOERROR;    }    return hr;};STDMETHODIMP VLCAudio::get_volume(long* volume){    if( NULL == volume )        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);        *volume = libvlc_audio_get_volume(p_libvlc, &ex);        if( libvlc_exception_raised(&ex) )        {            _p_instance->setErrorInfo(IID_IVLCAudio,                         libvlc_exception_get_message(&ex));            libvlc_exception_clear(&ex);            return E_FAIL;        }        return NOERROR;    }    return hr;};STDMETHODIMP VLCAudio::put_volume(long volume){    libvlc_instance_t* p_libvlc;    HRESULT hr = _p_instance->getVLC(&p_libvlc);    if( SUCCEEDED(hr) )    {        libvlc_exception_t ex;        libvlc_exception_init(&ex);        libvlc_audio_set_volume(p_libvlc, volume, &ex);        if( libvlc_exception_raised(&ex) )        {            _p_instance->setErrorInfo(IID_IVLCAudio,                         libvlc_exception_get_message(&ex));            libvlc_exception_clear(&ex);            return E_FAIL;        }        return NOERROR;    }    return hr;};STDMETHODIMP VLCAudio::get_track(long* track){    if( NULL == track )        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);        libvlc_media_player_t *p_md;        p_md = libvlc_playlist_get_media_player(p_libvlc, &ex);        *track = libvlc_audio_get_track(p_md, &ex);        libvlc_media_player_release(p_md);        if( libvlc_exception_raised(&ex) )        {            _p_instance->setErrorInfo(IID_IVLCAudio,                         libvlc_exception_get_message(&ex));            libvlc_exception_clear(&ex);            return E_FAIL;        }        return NOERROR;    }    return hr;};STDMETHODIMP VLCAudio::put_track(long track){    libvlc_instance_t* p_libvlc;    HRESULT hr = _p_instance->getVLC(&p_libvlc);    if( SUCCEEDED(hr) )    {        libvlc_exception_t ex;        libvlc_exception_init(&ex);        libvlc_media_player_t *p_md;        p_md = libvlc_playlist_get_media_player(p_libvlc, &ex);        libvlc_audio_set_track(p_md, track, &ex);        libvlc_media_player_release(p_md);        if( libvlc_exception_raised(&ex) )        {            _p_instance->setErrorInfo(IID_IVLCAudio,                         libvlc_exception_get_message(&ex));            libvlc_exception_clear(&ex);            return E_FAIL;        }        return NOERROR;    }    return hr;};STDMETHODIMP VLCAudio::get_channel(long *channel){    if( NULL == channel )        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);        *channel = libvlc_audio_get_channel(p_libvlc, &ex);        if( libvlc_exception_raised(&ex) )        {            _p_instance->setErrorInfo(IID_IVLCAudio,                        libvlc_exception_get_message(&ex));            libvlc_exception_clear(&ex);            return E_FAIL;        }        return NOERROR;    }    return hr;};STDMETHODIMP VLCAudio::put_channel(long channel){    libvlc_instance_t* p_libvlc;    HRESULT hr = _p_instance->getVLC(&p_libvlc);    if( SUCCEEDED(hr) )    {        libvlc_exception_t ex;        libvlc_exception_init(&ex);        libvlc_audio_set_channel(p_libvlc, channel, &ex);        if( libvlc_exception_raised(&ex) )        {            _p_instance->setErrorInfo(IID_IVLCAudio,                         libvlc_exception_get_message(&ex));            libvlc_exception_clear(&ex);            return E_FAIL;        }        return NOERROR;    }    return hr;};STDMETHODIMP VLCAudio::toggleMute(){    libvlc_instance_t* p_libvlc;    HRESULT hr = _p_instance->getVLC(&p_libvlc);    if( SUCCEEDED(hr) )    {        libvlc_exception_t ex;        libvlc_exception_init(&ex);        libvlc_audio_toggle_mute(p_libvlc, &ex);        if( libvlc_exception_raised(&ex) )        {            _p_instance->setErrorInfo(IID_IVLCAudio,                         libvlc_exception_get_message(&ex));            libvlc_exception_clear(&ex);            return E_FAIL;        }        return NOERROR;    }    return hr;};/*******************************************************************************/VLCInput::~VLCInput(){    if( _p_typeinfo )        _p_typeinfo->Release();};HRESULT VLCInput::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_IVLCInput, &_p_typeinfo);            if( FAILED(hr) )            {                _p_typeinfo = NULL;            }            p_typelib->Release();        }    }    return hr;};STDMETHODIMP VLCInput::GetTypeInfoCount(UINT* pctInfo){    if( NULL == pctInfo )        return E_INVALIDARG;    if( SUCCEEDED(loadTypeInfo()) )        *pctInfo = 1;    else        *pctInfo = 0;    return NOERROR;};STDMETHODIMP VLCInput::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 VLCInput::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 VLCInput::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 VLCInput::get_length(double* length){    if( NULL == length )        return E_POINTER;    *length = 0;    libvlc_instance_t* p_libvlc;    HRESULT hr = _p_instance->getVLC(&p_libvlc);    if( SUCCEEDED(hr) )    {        libvlc_exception_t ex;        libvlc_exception_init(&ex);        libvlc_media_player_t *p_md;        p_md = libvlc_playlist_get_media_player(p_libvlc, &ex);        if( ! libvlc_exception_raised(&ex) )        {            *length = (double)libvlc_media_player_get_length(p_md, &ex);            libvlc_media_player_release(p_md);            if( ! libvlc_exception_raised(&ex) )            {                return NOERROR;            }        }        _p_instance->setErrorInfo(IID_IVLCInput,                     libvlc_exception_get_message(&ex));        libvlc_exception_clear(&ex);        return E_FAIL;    }    return hr;};STDMETHODIMP VLCInput::get_position(double* position){    if( NULL == position )        return E_POINTER;    *position = 0.0f;    libvlc_instance_t* p_libvlc;    HRESULT hr = _p_instance->getVLC(&p_libvlc);    if( SUCCEEDED(hr) )    {        libvlc_exception_t ex;        libvlc_exception_init(&ex);        libvlc_media_player_t *p_md;        p_md = libvlc_playlist_get_media_player(p_libvlc, &ex);        if( ! libvlc_exception_raised(&ex) )        {            *position = libvlc_media_player_get_position(p_md, &ex);            libvlc_media_player_release(p_md);            if( ! libvlc_exception_raised(&ex) )            {                return NOERROR;            }        }        _p_instance->setErrorInfo(IID_IVLCInput,                     libvlc_exception_get_message(&ex));        libvlc_exception_clear(&ex);        return E_FAIL;    }    return hr;};STDMETHODIMP VLCInput::put_position(double position){    libvlc_instance_t* p_libvlc;    HRESULT hr = _p_instance->getVLC(&p_libvlc);    if( SUCCEEDED(hr) )    {        libvlc_exception_t ex;        libvlc_exception_init(&ex);        libvlc_media_player_t *p_md;        p_md = libvlc_playlist_get_media_player(p_libvlc, &ex);        if( ! libvlc_exception_raised(&ex) )        {            libvlc_media_player_set_position(p_md, position, &ex);            libvlc_media_player_release(p_md);            if( ! libvlc_exception_raised(&ex) )            {                return NOERROR;            }        }        _p_instance->setErrorInfo(IID_IVLCInput,                     libvlc_exception_get_message(&ex));        libvlc_exception_clear(&ex);        return E_FAIL;    }    return hr;};STDMETHODIMP VLCInput::get_time(double* time)

⌨️ 快捷键说明

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