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

📄 input_manager.cpp

📁 VLC Player Source Code
💻 CPP
📖 第 1 页 / 共 2 页
字号:
    emit statusChanged( state.i_int );}void InputManager::sectionPrev(){    if( hasInput() )    {        int i_type = var_Type( p_input, "next-chapter" );        vlc_value_t val; val.b_bool = true;        var_Set( p_input, (i_type & VLC_VAR_TYPE) != 0 ?                            "prev-chapter":"prev-title", val );    }}void InputManager::sectionNext(){    if( hasInput() )    {        int i_type = var_Type( p_input, "next-chapter" );        vlc_value_t val; val.b_bool = true;        var_Set( p_input, (i_type & VLC_VAR_TYPE) != 0 ?                            "next-chapter":"next-title", val );    }}void InputManager::sectionMenu(){    if( hasInput() )    {        vlc_value_t val, text;        vlc_value_t root;        if( var_Change( p_input, "title  0", VLC_VAR_GETLIST, &val, &text ) < 0 )            return;        /* XXX is it "Root" or "Title" we want here ?" (set 0 by default) */        root.i_int = 0;        for( int i = 0; i < val.p_list->i_count; i++ )        {            if( !strcmp( text.p_list->p_values[i].psz_string, "Title" ) )                root.i_int = i;        }        var_Change( p_input, "title  0", VLC_VAR_FREELIST, &val, &text );        var_Set( p_input, "title  0", root );    }}void InputManager::telexGotoPage( int page ){    if( hasInput() )    {        const int i_teletext_es = var_GetInteger( p_input, "teletext-es" );        const int i_spu_es = var_GetInteger( p_input, "spu-es" );        if( i_teletext_es >= 0 && i_teletext_es == i_spu_es )        {            vlc_object_t *p_vbi;            p_vbi = (vlc_object_t *) vlc_object_find_name( p_input,                        "zvbi", FIND_ANYWHERE );            if( p_vbi )            {                var_SetInteger( p_vbi, "vbi-page", page );                vlc_object_release( p_vbi );            }        }    }    emit setNewTelexPage( page );}void InputManager::telexToggle( bool b_enabled ){    if( hasInput() )    {        const int i_teletext_es = var_GetInteger( p_input, "teletext-es" );        const int i_spu_es = var_GetInteger( p_input, "spu-es" );        b_enabled = (i_teletext_es >= 0);        emit teletextEnabled( b_enabled );        if( b_enabled && (i_teletext_es == i_spu_es) )        {            vlc_object_t *p_vbi;            int i_page = 100;            p_vbi = (vlc_object_t *) vlc_object_find_name( p_input,                        "zvbi", FIND_ANYWHERE );            if( p_vbi )            {                i_page = var_GetInteger( p_vbi, "vbi-page" );                vlc_object_release( p_vbi );                i_page = b_enabled ? i_page : 0;                telexGotoPage( i_page );            }        }    }    else emit teletextEnabled( b_enabled );}void InputManager::telexToggleButtons(){    if( hasInput() )    {        const int i_teletext_es = var_GetInteger( p_input, "teletext-es" );        if( i_teletext_es >= 0 )        {            const int i_spu_es = var_GetInteger( p_input, "spu-es" );            if( i_teletext_es == i_spu_es )                var_SetInteger( p_input, "spu-es", -1 );            else                var_SetInteger( p_input, "spu-es", i_teletext_es );            emit toggleTelexButtons();        }    }}void InputManager::telexSetTransparency(){    if( hasInput() )    {        vlc_object_t *p_vbi;        p_vbi = (vlc_object_t *) vlc_object_find_name( p_input,                    "zvbi", FIND_ANYWHERE );        if( p_vbi )        {            var_SetBool( p_vbi, "vbi-opaque", b_transparentTelextext );            b_transparentTelextext = !b_transparentTelextext;            vlc_object_release( p_vbi );        }    }    emit toggleTelexTransparency();}void InputManager::slower(){    if( hasInput() )        var_SetVoid( p_input, "rate-slower" );}void InputManager::faster(){    if( hasInput() )        var_SetVoid( p_input, "rate-faster" );}void InputManager::normalRate(){    if( hasInput() )        var_SetInteger( p_input, "rate", INPUT_RATE_DEFAULT );}void InputManager::setRate( int new_rate ){    if( hasInput() )        var_SetInteger( p_input, "rate", new_rate );}/********************************************************************** * MainInputManager implementation. Wrap an input manager and * take care of updating the main playlist input. * Used in the main playlist Dialog **********************************************************************/MainInputManager * MainInputManager::instance = NULL;MainInputManager::MainInputManager( intf_thread_t *_p_intf )                 : QObject(NULL), p_intf( _p_intf ){    p_input = NULL;    im = new InputManager( this, p_intf );//    var_AddCallback( THEPL, "item-change", PLItemChanged, this );    var_AddCallback( THEPL, "item-change", ItemChanged, im );    var_AddCallback( THEPL, "playlist-current", PLItemChanged, this );    var_AddCallback( THEPL, "activity", PLItemChanged, this );    var_AddCallback( p_intf->p_libvlc, "volume-change", VolumeChanged, this );    /* Warn our embedded IM about input changes */    CONNECT( this, inputChanged( input_thread_t * ),             im, setInput( input_thread_t * ) );    /* emit check if playlist has allready started playing */    vlc_value_t val;    var_Change( THEPL, "playlist-current", VLC_VAR_CHOICESCOUNT, &val, NULL );    IMEvent *event = new IMEvent( ItemChanged_Type, val.i_int);    QApplication::postEvent( this, static_cast<QEvent*>(event) );}MainInputManager::~MainInputManager(){    if( p_input )    {       var_DelCallback( p_input, "state", PLItemChanged, this );       vlc_object_release( p_input );       emit inputChanged( NULL );    }    var_DelCallback( p_intf->p_libvlc, "volume-change", VolumeChanged, this );    var_DelCallback( THEPL, "activity", PLItemChanged, this );    var_DelCallback( THEPL, "item-change", ItemChanged, im );//    var_DelCallback( THEPL, "item-change", PLItemChanged, this );    var_DelCallback( THEPL, "playlist-current", PLItemChanged, this );}void MainInputManager::customEvent( QEvent *event ){    int type = event->type();    if ( type != ItemChanged_Type && type != VolumeChanged_Type )        return;    // msg_Dbg( p_intf, "New MainIM Event of type: %i", type );    if( type == VolumeChanged_Type )    {        emit volumeChanged();        return;    }    /* Should be PLItemChanged Event */    if( VLC_OBJECT_INTF == p_intf->i_object_type ) /* FIXME: don't use object type */    {        vlc_mutex_lock( &p_intf->change_lock );        if( p_input && ( p_input->b_dead || !vlc_object_alive (p_input) ) )        {            var_DelCallback( p_input, "state", PLItemChanged, this );            vlc_object_release( p_input );            emit inputChanged( NULL );            p_input = NULL;            vlc_mutex_unlock( &p_intf->change_lock );            return;        }        if( !p_input )        {            QPL_LOCK;            p_input = THEPL->p_input;            if( p_input && !( !vlc_object_alive (p_input) || p_input->b_dead) )            {                vlc_object_yield( p_input );                var_AddCallback( p_input, "state", PLItemChanged, this );                emit inputChanged( p_input );            }            else                p_input = NULL;            QPL_UNLOCK;        }        vlc_mutex_unlock( &p_intf->change_lock );    }    else    {        /* we are working as a dialogs provider */        playlist_t *p_playlist = pl_Yield( p_intf );        p_input = playlist_CurrentInput( p_playlist );        if( p_input )        {            emit inputChanged( p_input );            vlc_object_release( p_input );        }        pl_Release( p_intf );    }}/* Playlist Control functions */void MainInputManager::stop(){   playlist_Stop( THEPL );}void MainInputManager::next(){   playlist_Next( THEPL );}void MainInputManager::prev(){   playlist_Prev( THEPL );}void MainInputManager::togglePlayPause(){    if( p_input == NULL )    {        playlist_Play( THEPL );        return;    }    getIM()->togglePlayPause();}bool MainInputManager::teletextState(){    im = getIM();    if( im->hasInput() )    {        const int i_teletext_es = var_GetInteger( getInput(), "teletext-es" );        const int i_spu_es = var_GetInteger( getInput(), "spu-es" );        return i_teletext_es >= 0 && i_teletext_es == i_spu_es;    }    return false;}/* Static callbacks *//* IM */static int InterfaceChanged( vlc_object_t *p_this, const char *psz_var,                           vlc_value_t oldval, vlc_value_t newval, void *param ){    /* FIXME remove that static variable */    static int counter = 0;    InputManager *im = (InputManager*)param;    counter = ++counter % 4;    if(!counter)        return VLC_SUCCESS;    IMEvent *event = new IMEvent( PositionUpdate_Type, 0 );    QApplication::postEvent( im, static_cast<QEvent*>(event) );    return VLC_SUCCESS;}static int InterfaceVoutChanged( vlc_object_t *p_this, const char *psz_var,                                 vlc_value_t oldval, vlc_value_t newval, void *param ){    InputManager *im = (InputManager*)param;    IMEvent *event = new IMEvent( InterfaceVoutUpdate_Type, 0 );    QApplication::postEvent( im, static_cast<QEvent*>(event) );    return VLC_SUCCESS;}static int ItemStateChanged( vlc_object_t *p_this, const char *psz_var,                           vlc_value_t oldval, vlc_value_t newval, void *param ){    InputManager *im = (InputManager*)param;    IMEvent *event = new IMEvent( ItemStateChanged_Type, 0 );    QApplication::postEvent( im, static_cast<QEvent*>(event) );    return VLC_SUCCESS;}static int ItemRateChanged( vlc_object_t *p_this, const char *psz_var,                           vlc_value_t oldval, vlc_value_t newval, void *param ){    InputManager *im = (InputManager*)param;    IMEvent *event = new IMEvent( ItemRateChanged_Type, 0 );    QApplication::postEvent( im, static_cast<QEvent*>(event) );    return VLC_SUCCESS;}static int ItemTitleChanged( vlc_object_t *p_this, const char *psz_var,                           vlc_value_t oldval, vlc_value_t newval, void *param ){    InputManager *im = (InputManager*)param;    IMEvent *event = new IMEvent( ItemTitleChanged_Type, 0 );    QApplication::postEvent( im, static_cast<QEvent*>(event) );    return VLC_SUCCESS;}static int ItemChanged( vlc_object_t *p_this, const char *psz_var,                        vlc_value_t oldval, vlc_value_t newval, void *param ){    InputManager *im = (InputManager*)param;    IMEvent *event = new IMEvent( ItemChanged_Type, newval.i_int );    QApplication::postEvent( im, static_cast<QEvent*>(event) );    return VLC_SUCCESS;}static int ChangeSPU( vlc_object_t *p_this, const char *var, vlc_value_t o,                        vlc_value_t n, void *param ){    InputManager *im = (InputManager*)param;    IMEvent *event = new IMEvent( ItemSpuChanged_Type, 0 );    QApplication::postEvent( im, static_cast<QEvent*>(event) );    return VLC_SUCCESS;}static int ChangeTeletext( vlc_object_t *p_this, const char *var, vlc_value_t o,                           vlc_value_t n, void *param ){    InputManager *im = (InputManager*)param;    IMEvent *event = new IMEvent( ItemTeletextChanged_Type, 0 );    QApplication::postEvent( im, static_cast<QEvent*>(event) );    return VLC_SUCCESS;}/* MIM */static int PLItemChanged( vlc_object_t *p_this, const char *psz_var,                        vlc_value_t oldval, vlc_value_t newval, void *param ){    MainInputManager *mim = (MainInputManager*)param;    IMEvent *event = new IMEvent( ItemChanged_Type, newval.i_int );    QApplication::postEvent( mim, static_cast<QEvent*>(event) );    return VLC_SUCCESS;}static int VolumeChanged( vlc_object_t *p_this, const char *psz_var,                        vlc_value_t oldval, vlc_value_t newval, void *param ){    MainInputManager *mim = (MainInputManager*)param;    IMEvent *event = new IMEvent( VolumeChanged_Type, newval.i_int );    QApplication::postEvent( mim, static_cast<QEvent*>(event) );    return VLC_SUCCESS;}

⌨️ 快捷键说明

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