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

📄 vlccontrol.cpp

📁 VLC Player Source Code
💻 CPP
📖 第 1 页 / 共 3 页
字号:
/***************************************************************************** * vlccontrol.cpp: ActiveX control for VLC ***************************************************************************** * Copyright (C) 2005 the VideoLAN team * * Authors: Damien Fouilleul <Damien.Fouilleul@laposte.net> *          Jean-Paul Saman <jpsaman@videolan.org> * * 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 "vlccontrol.h"#include "utils.h"using namespace std;VLCControl::~VLCControl(){    if( _p_typeinfo )        _p_typeinfo->Release();};HRESULT VLCControl::getTypeInfo(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_IVLCControl, &_p_typeinfo);            if( FAILED(hr) )            {                _p_typeinfo = NULL;            }            p_typelib->Release();        }    }    return hr;};STDMETHODIMP VLCControl::GetTypeInfoCount(UINT* pctInfo){    if( NULL == pctInfo )        return E_INVALIDARG;    if( SUCCEEDED(getTypeInfo()) )        *pctInfo = 1;    else        *pctInfo = 0;    return NOERROR;};STDMETHODIMP VLCControl::GetTypeInfo(UINT iTInfo, LCID lcid, LPTYPEINFO* ppTInfo){    if( NULL == ppTInfo )        return E_INVALIDARG;    if( SUCCEEDED(getTypeInfo()) )    {        _p_typeinfo->AddRef();        *ppTInfo = _p_typeinfo;        return NOERROR;    }    *ppTInfo = NULL;    return E_NOTIMPL;};STDMETHODIMP VLCControl::GetIDsOfNames(REFIID riid, LPOLESTR* rgszNames,        UINT cNames, LCID lcid, DISPID* rgDispID){    if( SUCCEEDED(getTypeInfo()) )    {        return DispGetIDsOfNames(_p_typeinfo, rgszNames, cNames, rgDispID);    }    return E_NOTIMPL;};STDMETHODIMP VLCControl::Invoke(DISPID dispIdMember, REFIID riid,        LCID lcid, WORD wFlags, DISPPARAMS* pDispParams,        VARIANT* pVarResult, EXCEPINFO* pExcepInfo, UINT* puArgErr){    if( SUCCEEDED(getTypeInfo()) )    {        return DispInvoke(this, _p_typeinfo, dispIdMember, wFlags, pDispParams,                pVarResult, pExcepInfo, puArgErr);    }    return E_NOTIMPL;};STDMETHODIMP VLCControl::get_Visible(VARIANT_BOOL *isVisible){    if( NULL == isVisible )        return E_POINTER;    *isVisible = _p_instance->getVisible() ? VARIANT_TRUE : VARIANT_FALSE;    return NOERROR;};STDMETHODIMP VLCControl::put_Visible(VARIANT_BOOL isVisible){    _p_instance->setVisible(isVisible != VARIANT_FALSE);    return NOERROR;};STDMETHODIMP VLCControl::play(void){    libvlc_instance_t* p_libvlc;    HRESULT result = _p_instance->getVLC(&p_libvlc);    if( SUCCEEDED(result) )    {        libvlc_exception_t ex;        libvlc_exception_init(&ex);        libvlc_playlist_play(p_libvlc, -1, 0, NULL, &ex);        if( libvlc_exception_raised(&ex) )        {            _p_instance->setErrorInfo(IID_IVLCControl,                libvlc_exception_get_message(&ex));            libvlc_exception_clear(&ex);            return E_FAIL;        }        _p_instance->fireOnPlayEvent();        return NOERROR;    }    return result;};STDMETHODIMP VLCControl::pause(void){    libvlc_instance_t* p_libvlc;    HRESULT result = _p_instance->getVLC(&p_libvlc);    if( SUCCEEDED(result) )    {        libvlc_exception_t ex;        libvlc_exception_init(&ex);        libvlc_playlist_pause(p_libvlc, &ex);        if( libvlc_exception_raised(&ex) )        {            _p_instance->setErrorInfo(IID_IVLCControl,                libvlc_exception_get_message(&ex));            libvlc_exception_clear(&ex);            return E_FAIL;        }        _p_instance->fireOnPauseEvent();        return NOERROR;    }    return result;};STDMETHODIMP VLCControl::stop(void){    libvlc_instance_t* p_libvlc;    HRESULT result = _p_instance->getVLC(&p_libvlc);    if( SUCCEEDED(result) )    {        libvlc_exception_t ex;        libvlc_exception_init(&ex);        libvlc_playlist_stop(p_libvlc, &ex);        if( libvlc_exception_raised(&ex) )        {            _p_instance->setErrorInfo(IID_IVLCControl,                libvlc_exception_get_message(&ex));            libvlc_exception_clear(&ex);            return E_FAIL;        }        return NOERROR;    }    _p_instance->fireOnStopEvent();    return result;};STDMETHODIMP VLCControl::get_Playing(VARIANT_BOOL *isPlaying){    if( NULL == isPlaying )        return E_POINTER;    HRESULT result = NOERROR;    if( _p_instance->isRunning() )    {        libvlc_instance_t *p_libvlc;        result = _p_instance->getVLC(&p_libvlc);        if( SUCCEEDED(result) )        {            if( libvlc_playlist_isplaying(p_libvlc, NULL) )                *isPlaying = VARIANT_TRUE;            else                *isPlaying = VARIANT_FALSE;            return NOERROR;        }    }    *isPlaying = VARIANT_FALSE;    return result;};STDMETHODIMP VLCControl::get_Position(float *position){    if( NULL == position )        return E_POINTER;    *position = 0.0f;    libvlc_instance_t* p_libvlc;    HRESULT result = E_UNEXPECTED;    result = _p_instance->getVLC(&p_libvlc);    if( SUCCEEDED(result) )    {        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_IVLCControl,                     libvlc_exception_get_message(&ex));        libvlc_exception_clear(&ex);        return E_FAIL;    }    return result;};STDMETHODIMP VLCControl::put_Position(float position){    HRESULT result = E_UNEXPECTED;    libvlc_instance_t* p_libvlc;    result = _p_instance->getVLC(&p_libvlc);    if( SUCCEEDED(result) )    {        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_IVLCControl,                     libvlc_exception_get_message(&ex));        libvlc_exception_clear(&ex);        return E_FAIL;    }    return result;};STDMETHODIMP VLCControl::get_Time(int *seconds){    if( NULL == seconds )        return E_POINTER;    *seconds = 0;    libvlc_instance_t* p_libvlc;    HRESULT result = _p_instance->getVLC(&p_libvlc);    if( SUCCEEDED(result) )    {        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) )        {            *seconds = libvlc_media_player_get_time(p_md, &ex);            libvlc_media_player_release(p_md);            if( ! libvlc_exception_raised(&ex) )            {                return NOERROR;            }        }        _p_instance->setErrorInfo(IID_IVLCControl,                     libvlc_exception_get_message(&ex));        libvlc_exception_clear(&ex);        return E_FAIL;    }    return result;};STDMETHODIMP VLCControl::put_Time(int seconds){    /* setTime function of the plugin sets the time. */    _p_instance->setTime(seconds);    return NOERROR;};STDMETHODIMP VLCControl::shuttle(int seconds){    libvlc_instance_t* p_libvlc;    HRESULT result = _p_instance->getVLC(&p_libvlc);    if( SUCCEEDED(result) )    {        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) )        {            if( seconds < 0 ) seconds = 0;            libvlc_media_player_set_time(p_md, (int64_t)seconds, &ex);            libvlc_media_player_release(p_md);            if( ! libvlc_exception_raised(&ex) )            {                return NOERROR;            }        }        _p_instance->setErrorInfo(IID_IVLCControl,                     libvlc_exception_get_message(&ex));        libvlc_exception_clear(&ex);        return E_FAIL;    }    return result;};STDMETHODIMP VLCControl::fullscreen(void){    HRESULT result = E_UNEXPECTED;    if( _p_instance->isRunning() )    {        libvlc_instance_t *p_libvlc;        result = _p_instance->getVLC(&p_libvlc);        if( SUCCEEDED(result) )        {            if( libvlc_playlist_isplaying(p_libvlc, NULL) )            {                libvlc_media_player_t *p_md =                    libvlc_playlist_get_media_player(p_libvlc, NULL);                if( p_md )

⌨️ 快捷键说明

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