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

📄 npolibvlc.cpp

📁 VLC Player Source Code
💻 CPP
📖 第 1 页 / 共 5 页
字号:
                        libvlc_set_log_verbosity(p_libvlc, (unsigned)verbosity, &ex);                        if( libvlc_exception_raised(&ex) )                        {                            NPN_SetException(this, libvlc_exception_get_message(&ex));                            libvlc_exception_clear(&ex);                            return INVOKERESULT_GENERIC_ERROR;                        }                    }                    else if( p_log )                    {                        /* close log  when verbosity is set to -1 */                        p_plugin->setLog(NULL);                        libvlc_log_close(p_log, &ex);                        if( libvlc_exception_raised(&ex) )                        {                            NPN_SetException(this, libvlc_exception_get_message(&ex));                            libvlc_exception_clear(&ex);                            return INVOKERESULT_GENERIC_ERROR;                        }                    }                    return INVOKERESULT_NO_ERROR;                }                return INVOKERESULT_INVALID_VALUE;            default:                ;        }    }    return INVOKERESULT_GENERIC_ERROR;}const NPUTF8 * const LibvlcLogNPObject::methodNames[] ={    /* no methods */};const int LibvlcLogNPObject::methodCount = sizeof(LibvlcLogNPObject::methodNames)/sizeof(NPUTF8 *);/*** implementation of libvlc playlist items object*/const NPUTF8 * const LibvlcPlaylistItemsNPObject::propertyNames[] = {    "count",};const int LibvlcPlaylistItemsNPObject::propertyCount = sizeof(LibvlcPlaylistItemsNPObject::propertyNames)/sizeof(NPUTF8 *);enum LibvlcPlaylistItemsNPObjectPropertyIds{    ID_playlistitems_count,};RuntimeNPObject::InvokeResult LibvlcPlaylistItemsNPObject::getProperty(int index, NPVariant &result){    /* is plugin still running */    if( _instance->pdata )    {        VlcPlugin* p_plugin = reinterpret_cast<VlcPlugin*>(_instance->pdata);        libvlc_exception_t ex;        libvlc_exception_init(&ex);        switch( index )        {            case ID_playlistitems_count:            {                int val = libvlc_playlist_items_count(p_plugin->getVLC(), &ex);                if( libvlc_exception_raised(&ex) )                {                    NPN_SetException(this, libvlc_exception_get_message(&ex));                    libvlc_exception_clear(&ex);                    return INVOKERESULT_GENERIC_ERROR;                }                INT32_TO_NPVARIANT(val, result);                return INVOKERESULT_NO_ERROR;            }            default:                ;        }    }    return INVOKERESULT_GENERIC_ERROR;}const NPUTF8 * const LibvlcPlaylistItemsNPObject::methodNames[] ={    "clear",    "remove",};const int LibvlcPlaylistItemsNPObject::methodCount = sizeof(LibvlcPlaylistItemsNPObject::methodNames)/sizeof(NPUTF8 *);enum LibvlcPlaylistItemsNPObjectMethodIds{    ID_playlistitems_clear,    ID_playlistitems_remove,};RuntimeNPObject::InvokeResult LibvlcPlaylistItemsNPObject::invoke(int index, const NPVariant *args, uint32_t argCount, NPVariant &result){    /* is plugin still running */    if( _instance->pdata )    {        VlcPlugin* p_plugin = reinterpret_cast<VlcPlugin*>(_instance->pdata);        libvlc_exception_t ex;        libvlc_exception_init(&ex);        switch( index )        {            case ID_playlistitems_clear:                if( argCount == 0 )                {                    libvlc_playlist_clear(p_plugin->getVLC(), &ex);                    if( libvlc_exception_raised(&ex) )                    {                        NPN_SetException(this, libvlc_exception_get_message(&ex));                        libvlc_exception_clear(&ex);                        return INVOKERESULT_GENERIC_ERROR;                    }                    else                    {                        VOID_TO_NPVARIANT(result);                        return INVOKERESULT_NO_ERROR;                    }                }                return INVOKERESULT_NO_SUCH_METHOD;            case ID_playlistitems_remove:                if( (argCount == 1) && isNumberValue(args[0]) )                {                    libvlc_playlist_delete_item(p_plugin->getVLC(), numberValue(args[0]), &ex);                    if( libvlc_exception_raised(&ex) )                    {                        NPN_SetException(this, libvlc_exception_get_message(&ex));                        libvlc_exception_clear(&ex);                        return INVOKERESULT_GENERIC_ERROR;                    }                    else                    {                        VOID_TO_NPVARIANT(result);                        return INVOKERESULT_NO_ERROR;                    }                }                return INVOKERESULT_NO_SUCH_METHOD;            default:                ;        }    }    return INVOKERESULT_GENERIC_ERROR;}/*** implementation of libvlc playlist object*/LibvlcPlaylistNPObject::~LibvlcPlaylistNPObject(){    if( isValid() )    {        if( playlistItemsObj ) NPN_ReleaseObject(playlistItemsObj);    }};const NPUTF8 * const LibvlcPlaylistNPObject::propertyNames[] = {    "itemCount", /* deprecated */    "isPlaying",    "items",};const int LibvlcPlaylistNPObject::propertyCount = sizeof(LibvlcPlaylistNPObject::propertyNames)/sizeof(NPUTF8 *);enum LibvlcPlaylistNPObjectPropertyIds{    ID_playlist_itemcount,    ID_playlist_isplaying,    ID_playlist_items,};RuntimeNPObject::InvokeResult LibvlcPlaylistNPObject::getProperty(int index, NPVariant &result){    /* is plugin still running */    if( _instance->pdata )    {        VlcPlugin* p_plugin = reinterpret_cast<VlcPlugin*>(_instance->pdata);        libvlc_exception_t ex;        libvlc_exception_init(&ex);        switch( index )        {            case ID_playlist_itemcount: /* deprecated */            {                int val = libvlc_playlist_items_count(p_plugin->getVLC(), &ex);                if( libvlc_exception_raised(&ex) )                {                    NPN_SetException(this, libvlc_exception_get_message(&ex));                    libvlc_exception_clear(&ex);                    return INVOKERESULT_GENERIC_ERROR;                }                INT32_TO_NPVARIANT(val, result);                return INVOKERESULT_NO_ERROR;            }            case ID_playlist_isplaying:            {                int val = libvlc_playlist_isplaying(p_plugin->getVLC(), &ex);                if( libvlc_exception_raised(&ex) )                {                    NPN_SetException(this, libvlc_exception_get_message(&ex));                    libvlc_exception_clear(&ex);                    return INVOKERESULT_GENERIC_ERROR;                }                BOOLEAN_TO_NPVARIANT(val, result);                return INVOKERESULT_NO_ERROR;            }            case ID_playlist_items:            {                // create child object in lazyman fashion to avoid ownership problem with firefox                if( ! playlistItemsObj )                    playlistItemsObj = NPN_CreateObject(_instance, RuntimeNPClass<LibvlcPlaylistItemsNPObject>::getClass());                OBJECT_TO_NPVARIANT(NPN_RetainObject(playlistItemsObj), result);                return INVOKERESULT_NO_ERROR;            }            default:                ;        }    }    return INVOKERESULT_GENERIC_ERROR;}const NPUTF8 * const LibvlcPlaylistNPObject::methodNames[] ={    "add",    "play",    "playItem",    "togglePause",    "stop",    "next",    "prev",    "clear", /* deprecated */    "removeItem", /* deprecated */};const int LibvlcPlaylistNPObject::methodCount = sizeof(LibvlcPlaylistNPObject::methodNames)/sizeof(NPUTF8 *);enum LibvlcPlaylistNPObjectMethodIds{    ID_playlist_add,    ID_playlist_play,    ID_playlist_playItem,    ID_playlist_togglepause,    ID_playlist_stop,    ID_playlist_next,    ID_playlist_prev,    ID_playlist_clear,    ID_playlist_removeitem};RuntimeNPObject::InvokeResult LibvlcPlaylistNPObject::invoke(int index, const NPVariant *args, uint32_t argCount, NPVariant &result){    /* is plugin still running */    if( _instance->pdata )    {        VlcPlugin* p_plugin = reinterpret_cast<VlcPlugin*>(_instance->pdata);        libvlc_exception_t ex;        libvlc_exception_init(&ex);        switch( index )        {            case ID_playlist_add:            {                if( (argCount < 1) || (argCount > 3) )                    return INVOKERESULT_NO_SUCH_METHOD;                char *url = NULL;                // grab URL                if( NPVARIANT_IS_STRING(args[0]) )                {                    char *s = stringValue(NPVARIANT_TO_STRING(args[0]));                    if( s )                    {                        url = p_plugin->getAbsoluteURL(s);                        if( url )                            delete s;                        else                            // problem with combining url, use argument                            url = s;                    }                    else                        return INVOKERESULT_OUT_OF_MEMORY;                }                else                    return INVOKERESULT_NO_SUCH_METHOD;                char *name = NULL;                // grab name if available                if( argCount > 1 )                {                    if( NPVARIANT_IS_NULL(args[1]) )                    {                        // do nothing                    }                    else if( NPVARIANT_IS_STRING(args[1]) )                    {                        name = stringValue(NPVARIANT_TO_STRING(args[1]));                    }                    else                    {                        delete url;                        return INVOKERESULT_INVALID_VALUE;                    }                }                int i_options = 0;                char** ppsz_options = NULL;                // grab options if available                if( argCount > 2 )                {                    if( NPVARIANT_IS_NULL(args[2]) )                    {                        // do nothing                    }                    else if( NPVARIANT_IS_STRING(args[2]) )                    {                        parseOptions(NPVARIANT_TO_STRING(args[2]), &i_options, &ppsz_options);                    }                    else if( NPVARIANT_IS_OBJECT(args[2]) )                    {                        parseOptions(NPVARIANT_TO_OBJECT(args[2]), &i_options, &ppsz_options);                    }                    else                    {                        delete url;                        delete name;                        return INVOKERESULT_INVALID_VALUE;                    }                }                int item = libvlc_playlist_add_extended(p_plugin->getVLC(),                                                        url,                                                        name,                                                        i_options,                                                        const_cast<const char **>(ppsz_options),                                                        &ex);                delete url;                delete name;                for( int i=0; i< i_options; ++i )                {                    delete ppsz_options[i];                }                delete ppsz_options;                if( libvlc_exception_raised(&ex) )                {                    NPN_SetException(this, libvlc_exception_get_message(&ex));                    libvlc_exception_clear(&ex);                    return INVOKERESULT_GENERIC_ERROR;                }                else                {                    INT32_TO_NPVARIANT(item, result);                    return INVOKERESULT_NO_ERROR;                }            }            case ID_playlist_play:                if( argCount == 0 )                {                    libvlc_playlist_play(p_plugin->getVLC(), -1, 0, NULL, &ex);                    if( libvlc_exception_raised(&ex) )                    {                        NPN_SetException(this, libvlc_exception_get_message(&ex));                        libvlc_exception_clear(&ex);                        return INVOKERESULT_GENERIC_ERROR;                    }                    else                    {                        VOID_TO_NPVARIANT(result);                        return INVOKERESULT_NO_ERROR;                    }

⌨️ 快捷键说明

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