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

📄 hotkeys.c

📁 video linux conference
💻 C
📖 第 1 页 / 共 2 页
字号:
            }            else            {                p_playlist = vlc_object_find( p_intf, VLC_OBJECT_PLAYLIST,                                              FIND_ANYWHERE );                if( p_playlist )                {                    ClearChannels( p_intf, p_vout );                    vout_OSDIcon( VLC_OBJECT( p_intf ), DEFAULT_CHAN,                                  OSD_PLAY_ICON );                    playlist_Play( p_playlist );                    vlc_object_release( p_playlist );                }            }        }        else if( p_input )        {            /* FIXME --fenrir             * How to get a valid value ?             * That's not that easy with some special stream             */            vlc_bool_t b_seekable = VLC_TRUE;            if( i_action == ACTIONID_PAUSE )            {                ClearChannels( p_intf, p_vout );                vout_OSDIcon( VLC_OBJECT( p_intf ), DEFAULT_CHAN,                              OSD_PAUSE_ICON );                val.i_int = PAUSE_S;                var_Set( p_input, "state", val );            }            else if( i_action == ACTIONID_JUMP_BACKWARD_10SEC && b_seekable )            {                val.i_time = -10000000;                var_Set( p_input, "time-offset", val );                DisplayPosition( p_intf, p_vout, p_input );            }            else if( i_action == ACTIONID_JUMP_FORWARD_10SEC && b_seekable )            {                val.i_time = 10000000;                var_Set( p_input, "time-offset", val );                DisplayPosition( p_intf, p_vout, p_input );            }            else if( i_action == ACTIONID_JUMP_BACKWARD_1MIN && b_seekable )            {                val.i_time = -60000000;                var_Set( p_input, "time-offset", val );                DisplayPosition( p_intf, p_vout, p_input );            }            else if( i_action == ACTIONID_JUMP_FORWARD_1MIN && b_seekable )            {                val.i_time = 60000000;                var_Set( p_input, "time-offset", val );                DisplayPosition( p_intf, p_vout, p_input );            }            else if( i_action == ACTIONID_JUMP_BACKWARD_5MIN && b_seekable )            {                val.i_time = -300000000;                var_Set( p_input, "time-offset", val );                DisplayPosition( p_intf, p_vout, p_input );            }            else if( i_action == ACTIONID_JUMP_FORWARD_5MIN && b_seekable )            {                val.i_time = 300000000;                var_Set( p_input, "time-offset", val );                DisplayPosition( p_intf, p_vout, p_input );            }            else if( i_action == ACTIONID_AUDIO_TRACK )            {                vlc_value_t val, list, list2;                int i_count, i;                var_Get( p_input, "audio-es", &val );                var_Change( p_input, "audio-es", VLC_VAR_GETCHOICES,                            &list, &list2 );                i_count = list.p_list->i_count;                if( i_count <= 1 )                {                    continue;                }                for( i = 0; i < i_count; i++ )                {                    if( val.i_int == list.p_list->p_values[i].i_int )                    {                        break;                    }                }                /* value of audio-es was not in choices list */                if( i == i_count )                {                    msg_Warn( p_input,                              "invalid current audio track, selecting 0" );                    var_Set( p_input, "audio-es",                             list.p_list->p_values[0] );                    i = 0;                }                else if( i == i_count - 1 )                {                    var_Set( p_input, "audio-es",                             list.p_list->p_values[1] );                    i = 1;                }                else                {                    var_Set( p_input, "audio-es",                             list.p_list->p_values[i+1] );                    i++;                }                vout_OSDMessage( VLC_OBJECT(p_input), DEFAULT_CHAN,                                 _("Audio track: %s"),                                 list2.p_list->p_values[i].psz_string );            }            else if( i_action == ACTIONID_SUBTITLE_TRACK )            {                vlc_value_t val, list, list2;                int i_count, i;                var_Get( p_input, "spu-es", &val );                                var_Change( p_input, "spu-es", VLC_VAR_GETCHOICES,                            &list, &list2 );                i_count = list.p_list->i_count;                if( i_count <= 1 )                {                    vout_OSDMessage( VLC_OBJECT(p_input), DEFAULT_CHAN, _("Subtitle track: %s"), _("N/A") );                    continue;                }                for( i = 0; i < i_count; i++ )                {                    if( val.i_int == list.p_list->p_values[i].i_int )                    {                        break;                    }                }                /* value of spu-es was not in choices list */                if( i == i_count )                {                    msg_Warn( p_input, "invalid current subtitle track, selecting 0" );                    var_Set( p_input, "spu-es", list.p_list->p_values[0] );                    i = 0;                }                else if( i == i_count - 1 )                {                    var_Set( p_input, "spu-es", list.p_list->p_values[0] );                    i = 0;                }                else                {                    var_Set( p_input, "spu-es", list.p_list->p_values[i+1] );                    i = i + 1;                }                vout_OSDMessage( VLC_OBJECT(p_input), DEFAULT_CHAN,                                 _("Subtitle track: %s"),                                 list2.p_list->p_values[i].psz_string );            }            else if( i_action == ACTIONID_NEXT )            {                p_playlist = vlc_object_find( p_intf, VLC_OBJECT_PLAYLIST,                                              FIND_ANYWHERE );                if( p_playlist )                {                    vout_OSDMessage( VLC_OBJECT(p_input), DEFAULT_CHAN, _("Next") );                    playlist_Next( p_playlist );                    vlc_object_release( p_playlist );                }            }            else if( i_action == ACTIONID_PREV )            {                p_playlist = vlc_object_find( p_intf, VLC_OBJECT_PLAYLIST,                                              FIND_ANYWHERE );                if( p_playlist )                {                    vout_OSDMessage( VLC_OBJECT(p_input), DEFAULT_CHAN, _("Previous") );                    playlist_Prev( p_playlist );                    vlc_object_release( p_playlist );                }            }            else if( i_action == ACTIONID_STOP )            {                p_playlist = vlc_object_find( p_intf, VLC_OBJECT_PLAYLIST,                                              FIND_ANYWHERE );                if( p_playlist )                {                    playlist_Stop( p_playlist );                    vlc_object_release( p_playlist );                }            }            else if( i_action == ACTIONID_FASTER )            {                vlc_value_t val; val.b_bool = VLC_TRUE;                var_Set( p_input, "rate-faster", val );                vout_OSDMessage( VLC_OBJECT(p_input), DEFAULT_CHAN, _("Faster") );            }            else if( i_action == ACTIONID_SLOWER )            {                vlc_value_t val; val.b_bool = VLC_TRUE;                var_Set( p_input, "rate-slower", val );                vout_OSDMessage( VLC_OBJECT(p_input), DEFAULT_CHAN, _("Slower") );            }            else if( i_action == ACTIONID_POSITION && b_seekable )            {                DisplayPosition( p_intf, p_vout, p_input );            }            else if( i_action >= ACTIONID_PLAY_BOOKMARK1 &&                     i_action <= ACTIONID_PLAY_BOOKMARK10 )            {                PlayBookmark( p_intf, i_action - ACTIONID_PLAY_BOOKMARK1 + 1 );            }            else if( i_action >= ACTIONID_SET_BOOKMARK1 &&                     i_action <= ACTIONID_SET_BOOKMARK10 )            {                SetBookmark( p_intf, i_action - ACTIONID_SET_BOOKMARK1 + 1 );            }        }    }}static int GetKey( intf_thread_t *p_intf){    vlc_mutex_lock( &p_intf->p_sys->change_lock );    if ( p_intf->p_sys->i_size == 0 )    {        vlc_mutex_unlock( &p_intf->p_sys->change_lock );        return -1;    }    else    {        int i_return = p_intf->p_sys->p_keys[ 0 ];        int i;        p_intf->p_sys->i_size--;        for ( i = 0; i < BUFFER_SIZE - 1; i++)        {            p_intf->p_sys->p_keys[ i ] = p_intf->p_sys->p_keys[ i + 1 ];        }        vlc_mutex_unlock( &p_intf->p_sys->change_lock );        return i_return;    }}/***************************************************************************** * KeyEvent: callback for keyboard events *****************************************************************************/static int KeyEvent( vlc_object_t *p_this, char const *psz_var,                     vlc_value_t oldval, vlc_value_t newval, void *p_data ){    intf_thread_t *p_intf = (intf_thread_t *)p_data;    vlc_mutex_lock( &p_intf->p_sys->change_lock );    if ( p_intf->p_sys->i_size == BUFFER_SIZE )    {        msg_Warn( p_intf, "event buffer full, dropping keypress" );        vlc_mutex_unlock( &p_intf->p_sys->change_lock );        return VLC_EGENERIC;    }    else    {        p_intf->p_sys->p_keys[ p_intf->p_sys->i_size ] = newval.i_int;        p_intf->p_sys->i_size++;    }    vlc_mutex_unlock( &p_intf->p_sys->change_lock );    return VLC_SUCCESS;}static int ActionKeyCB( vlc_object_t *p_this, char const *psz_var,                        vlc_value_t oldval, vlc_value_t newval, void *p_data ){    vlc_t *p_vlc = (vlc_t *)p_this;    struct hotkey *p_hotkeys = p_vlc->p_hotkeys;    int i;    for( i = 0; p_hotkeys[i].psz_action != NULL; i++ )    {        if( !strcmp( p_hotkeys[i].psz_action, psz_var ) )        {            p_hotkeys[i].i_key = newval.i_int;        }    }    return VLC_SUCCESS;}static void PlayBookmark( intf_thread_t *p_intf, int i_num ){    vlc_value_t val;    int i_position;    char psz_bookmark_name[11];    playlist_t *p_playlist =        vlc_object_find( p_intf, VLC_OBJECT_PLAYLIST, FIND_ANYWHERE );    sprintf( psz_bookmark_name, "bookmark%i", i_num );    var_Create( p_intf, psz_bookmark_name, VLC_VAR_STRING|VLC_VAR_DOINHERIT );    var_Get( p_intf, psz_bookmark_name, &val );    if( p_playlist )    {        char *psz_bookmark = strdup( val.psz_string );        for( i_position = 0; i_position < p_playlist->i_size; i_position++)        {            if( !strcmp( psz_bookmark,                         p_playlist->pp_items[i_position]->input.psz_uri ) )            {                playlist_Goto( p_playlist, i_position );                break;            }        }        vlc_object_release( p_playlist );    }}static void SetBookmark( intf_thread_t *p_intf, int i_num ){    vlc_value_t val;    playlist_t *p_playlist =        vlc_object_find( p_intf, VLC_OBJECT_PLAYLIST, FIND_ANYWHERE );    if( p_playlist )    {        char psz_bookmark_name[11];        sprintf( psz_bookmark_name, "bookmark%i", i_num );        var_Create( p_intf, psz_bookmark_name,                    VLC_VAR_STRING|VLC_VAR_DOINHERIT );        if( p_playlist->status.p_item )        {            val.psz_string = strdup( p_playlist->status.p_item->input.psz_uri );            var_Set( p_intf, psz_bookmark_name, val );            msg_Info( p_intf, "setting playlist bookmark %i to %s", i_num,                      val.psz_string );        }        vlc_object_release( p_playlist );    }}static void DisplayPosition( intf_thread_t *p_intf, vout_thread_t *p_vout,                             input_thread_t *p_input ){    char psz_duration[MSTRTIME_MAX_SIZE];    char psz_time[MSTRTIME_MAX_SIZE];    vlc_value_t time, pos;    mtime_t i_seconds;    if( p_vout == NULL )    {        return;    }    ClearChannels( p_intf, p_vout );    var_Get( p_input, "time", &time );    i_seconds = time.i_time / 1000000;    secstotimestr ( psz_time, i_seconds );    var_Get( p_input, "length", &time );    if( time.i_time > 0 )    {        secstotimestr( psz_duration, time.i_time / 1000000 );        vout_OSDMessage( p_input, POSITION_TEXT_CHAN, "%s / %s",                         psz_time, psz_duration );    }    else if( i_seconds > 0 )    {        vout_OSDMessage( p_input, POSITION_TEXT_CHAN, psz_time );    }    if( !p_vout->p_parent_intf || p_vout->b_fullscreen )    {        var_Get( p_input, "position", &pos );        vout_OSDSlider( VLC_OBJECT( p_input ), POSITION_WIDGET_CHAN,                        pos.f_float * 100, OSD_HOR_SLIDER );    }}static void DisplayVolume( intf_thread_t *p_intf, vout_thread_t *p_vout,                           audio_volume_t i_vol ){    if( p_vout == NULL )    {        return;    }    ClearChannels( p_intf, p_vout );    if( !p_vout->p_parent_intf || p_vout->b_fullscreen )    {        vout_OSDSlider( VLC_OBJECT( p_vout ), VOLUME_WIDGET_CHAN,            i_vol*100/AOUT_VOLUME_MAX, OSD_VERT_SLIDER );    }    else    {        vout_OSDMessage( p_vout, VOLUME_TEXT_CHAN, "Vol %d%%",                         2*i_vol*100/AOUT_VOLUME_MAX );    }}static void ClearChannels( intf_thread_t *p_intf, vout_thread_t *p_vout ){    int i;    if( p_vout )    {        spu_Control( p_vout->p_spu, SPU_CHANNEL_CLEAR, DEFAULT_CHAN );        for( i = 0; i < CHANNELS_NUMBER; i++ )        {            spu_Control( p_vout->p_spu, SPU_CHANNEL_CLEAR,                         p_intf->p_sys->p_channels[ i ] );        }    }}

⌨️ 快捷键说明

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