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

📄 rc.c

📁 uclinux 下的vlc播放器源代码
💻 C
📖 第 1 页 / 共 5 页
字号:
    }    vlc_mutex_destroy( &p_intf->p_sys->status_lock );    free( p_intf->p_sys );}/***************************************************************************** * RegisterCallbacks: Register callbacks to dynamic variables *****************************************************************************/static void RegisterCallbacks( intf_thread_t *p_intf ){    /* Register commands that will be cleaned up upon object destruction */    var_Create( p_intf, "quit", VLC_VAR_VOID | VLC_VAR_ISCOMMAND );    var_AddCallback( p_intf, "quit", Quit, NULL );    var_Create( p_intf, "intf", VLC_VAR_STRING | VLC_VAR_ISCOMMAND );    var_AddCallback( p_intf, "intf", Intf, NULL );    var_Create( p_intf, "add", VLC_VAR_STRING | VLC_VAR_ISCOMMAND );    var_AddCallback( p_intf, "add", Playlist, NULL );    var_Create( p_intf, "enqueue", VLC_VAR_STRING | VLC_VAR_ISCOMMAND );    var_AddCallback( p_intf, "enqueue", Playlist, NULL );    var_Create( p_intf, "playlist", VLC_VAR_VOID | VLC_VAR_ISCOMMAND );    var_AddCallback( p_intf, "playlist", Playlist, NULL );    var_Create( p_intf, "play", VLC_VAR_VOID | VLC_VAR_ISCOMMAND );    var_AddCallback( p_intf, "play", Playlist, NULL );    var_Create( p_intf, "stop", VLC_VAR_VOID | VLC_VAR_ISCOMMAND );    var_AddCallback( p_intf, "stop", Playlist, NULL );    var_Create( p_intf, "clear", VLC_VAR_VOID | VLC_VAR_ISCOMMAND );    var_AddCallback( p_intf, "clear", Playlist, NULL );    var_Create( p_intf, "prev", VLC_VAR_VOID | VLC_VAR_ISCOMMAND );    var_AddCallback( p_intf, "prev", Playlist, NULL );    var_Create( p_intf, "next", VLC_VAR_VOID | VLC_VAR_ISCOMMAND );    var_AddCallback( p_intf, "next", Playlist, NULL );    var_Create( p_intf, "goto", VLC_VAR_INTEGER | VLC_VAR_ISCOMMAND );    var_AddCallback( p_intf, "goto", Playlist, NULL );    var_Create( p_intf, "status", VLC_VAR_INTEGER | VLC_VAR_ISCOMMAND );    var_AddCallback( p_intf, "status", Playlist, NULL );    /* marquee on the fly items */    var_Create( p_intf, "marq-marquee", VLC_VAR_VOID | VLC_VAR_ISCOMMAND );    var_AddCallback( p_intf, "marq-marquee", Other, NULL );    var_Create( p_intf, "marq-x", VLC_VAR_INTEGER | VLC_VAR_ISCOMMAND );    var_AddCallback( p_intf, "marq-x", Other, NULL );    var_Create( p_intf, "marq-y", VLC_VAR_INTEGER | VLC_VAR_ISCOMMAND );    var_AddCallback( p_intf, "marq-y", Other, NULL );    var_Create( p_intf, "marq-position", VLC_VAR_INTEGER | VLC_VAR_ISCOMMAND );    var_AddCallback( p_intf, "marq-position", Other, NULL );    var_Create( p_intf, "marq-color", VLC_VAR_INTEGER | VLC_VAR_ISCOMMAND );    var_AddCallback( p_intf, "marq-color", Other, NULL );    var_Create( p_intf, "marq-opacity", VLC_VAR_INTEGER | VLC_VAR_ISCOMMAND );    var_AddCallback( p_intf, "marq-opacity", Other, NULL );    var_Create( p_intf, "marq-timeout", VLC_VAR_INTEGER | VLC_VAR_ISCOMMAND );    var_AddCallback( p_intf, "marq-timeout", Other, NULL );    var_Create( p_intf, "marq-size", VLC_VAR_INTEGER | VLC_VAR_ISCOMMAND );    var_AddCallback( p_intf, "marq-size", Other, NULL );    var_Create( p_intf, "mosaic-alpha", VLC_VAR_INTEGER | VLC_VAR_ISCOMMAND );    var_AddCallback( p_intf, "mosaic-alpha", Other, NULL );    var_Create( p_intf, "mosaic-height", VLC_VAR_INTEGER | VLC_VAR_ISCOMMAND );    var_AddCallback( p_intf, "mosaic-height", Other, NULL );    var_Create( p_intf, "mosaic-width", VLC_VAR_INTEGER | VLC_VAR_ISCOMMAND );    var_AddCallback( p_intf, "mosaic-width", Other, NULL );    var_Create( p_intf, "mosaic-xoffset", VLC_VAR_INTEGER | VLC_VAR_ISCOMMAND );    var_AddCallback( p_intf, "mosaic-xoffset", Other, NULL );    var_Create( p_intf, "mosaic-yoffset", VLC_VAR_INTEGER | VLC_VAR_ISCOMMAND );    var_AddCallback( p_intf, "mosaic-yoffset", Other, NULL );    var_Create( p_intf, "mosaic-align", VLC_VAR_INTEGER | VLC_VAR_ISCOMMAND );    var_AddCallback( p_intf, "mosaic-align", Other, NULL );    var_Create( p_intf, "mosaic-vborder", VLC_VAR_INTEGER | VLC_VAR_ISCOMMAND );    var_AddCallback( p_intf, "mosaic-vborder", Other, NULL );    var_Create( p_intf, "mosaic-hborder", VLC_VAR_INTEGER | VLC_VAR_ISCOMMAND );    var_AddCallback( p_intf, "mosaic-hborder", Other, NULL );    var_Create( p_intf, "mosaic-position",                     VLC_VAR_INTEGER | VLC_VAR_ISCOMMAND );    var_AddCallback( p_intf, "mosaic-position", Other, NULL );    var_Create( p_intf, "mosaic-rows", VLC_VAR_INTEGER | VLC_VAR_ISCOMMAND );    var_AddCallback( p_intf, "mosaic-rows", Other, NULL );    var_Create( p_intf, "mosaic-cols", VLC_VAR_INTEGER | VLC_VAR_ISCOMMAND );    var_AddCallback( p_intf, "mosaic-cols", Other, NULL );    var_Create( p_intf, "mosaic-keep-aspect-ratio",                     VLC_VAR_INTEGER | VLC_VAR_ISCOMMAND );    var_AddCallback( p_intf, "mosaic-keep-aspect-ratio", Other, NULL );    /* time on the fly items */    var_Create( p_intf, "time-format", VLC_VAR_VOID | VLC_VAR_ISCOMMAND );    var_AddCallback( p_intf, "time-format", Other, NULL );    var_Create( p_intf, "time-x", VLC_VAR_INTEGER | VLC_VAR_ISCOMMAND );    var_AddCallback( p_intf, "time-x", Other, NULL );    var_Create( p_intf, "time-y", VLC_VAR_INTEGER | VLC_VAR_ISCOMMAND );    var_AddCallback( p_intf, "time-y", Other, NULL );    var_Create( p_intf, "time-position", VLC_VAR_INTEGER | VLC_VAR_ISCOMMAND );    var_AddCallback( p_intf, "time-position", Other, NULL );    var_Create( p_intf, "time-color", VLC_VAR_INTEGER | VLC_VAR_ISCOMMAND );    var_AddCallback( p_intf, "time-color", Other, NULL );    var_Create( p_intf, "time-opacity", VLC_VAR_INTEGER | VLC_VAR_ISCOMMAND );    var_AddCallback( p_intf, "time-opacity", Other, NULL );    var_Create( p_intf, "time-size", VLC_VAR_INTEGER | VLC_VAR_ISCOMMAND );    var_AddCallback( p_intf, "time-size", Other, NULL );    /* logo on the fly items */    var_Create( p_intf, "logo-file", VLC_VAR_VOID | VLC_VAR_ISCOMMAND );    var_AddCallback( p_intf, "logo-file", Other, NULL );    var_Create( p_intf, "logo-x", VLC_VAR_INTEGER | VLC_VAR_ISCOMMAND );    var_AddCallback( p_intf, "logo-x", Other, NULL );    var_Create( p_intf, "logo-y", VLC_VAR_INTEGER | VLC_VAR_ISCOMMAND );    var_AddCallback( p_intf, "logo-y", Other, NULL );    var_Create( p_intf, "logo-position", VLC_VAR_INTEGER | VLC_VAR_ISCOMMAND );    var_AddCallback( p_intf, "logo-position", Other, NULL );    var_Create( p_intf, "logo-transparency", VLC_VAR_INTEGER | VLC_VAR_ISCOMMAND );    var_AddCallback( p_intf, "logo-transparency", Other, NULL );    /* OSD menu commands */    var_Create( p_intf, "menu", VLC_VAR_STRING | VLC_VAR_ISCOMMAND );    var_AddCallback( p_intf, "menu", Menu, NULL );    /* DVD commands */    var_Create( p_intf, "pause", VLC_VAR_VOID | VLC_VAR_ISCOMMAND );    var_AddCallback( p_intf, "pause", Input, NULL );    var_Create( p_intf, "seek", VLC_VAR_INTEGER | VLC_VAR_ISCOMMAND );    var_AddCallback( p_intf, "seek", Input, NULL );    var_Create( p_intf, "title", VLC_VAR_STRING | VLC_VAR_ISCOMMAND );    var_AddCallback( p_intf, "title", Input, NULL );    var_Create( p_intf, "title_n", VLC_VAR_VOID | VLC_VAR_ISCOMMAND );    var_AddCallback( p_intf, "title_n", Input, NULL );    var_Create( p_intf, "title_p", VLC_VAR_VOID | VLC_VAR_ISCOMMAND );    var_AddCallback( p_intf, "title_p", Input, NULL );    var_Create( p_intf, "chapter", VLC_VAR_STRING | VLC_VAR_ISCOMMAND );    var_AddCallback( p_intf, "chapter", Input, NULL );    var_Create( p_intf, "chapter_n", VLC_VAR_VOID | VLC_VAR_ISCOMMAND );    var_AddCallback( p_intf, "chapter_n", Input, NULL );    var_Create( p_intf, "chapter_p", VLC_VAR_VOID | VLC_VAR_ISCOMMAND );    var_AddCallback( p_intf, "chapter_p", Input, NULL );    var_Create( p_intf, "fastforward", VLC_VAR_VOID | VLC_VAR_ISCOMMAND );    var_AddCallback( p_intf, "fastforward", Input, NULL );    var_Create( p_intf, "rewind", VLC_VAR_VOID | VLC_VAR_ISCOMMAND );    var_AddCallback( p_intf, "rewind", Input, NULL );    var_Create( p_intf, "faster", VLC_VAR_VOID | VLC_VAR_ISCOMMAND );    var_AddCallback( p_intf, "faster", Input, NULL );    var_Create( p_intf, "slower", VLC_VAR_VOID | VLC_VAR_ISCOMMAND );    var_AddCallback( p_intf, "slower", Input, NULL );    var_Create( p_intf, "normal", VLC_VAR_VOID | VLC_VAR_ISCOMMAND );    var_AddCallback( p_intf, "normal", Input, NULL );    var_Create( p_intf, "atrack", VLC_VAR_STRING | VLC_VAR_ISCOMMAND );    var_AddCallback( p_intf, "atrack", Input, NULL );    var_Create( p_intf, "vtrack", VLC_VAR_STRING | VLC_VAR_ISCOMMAND );    var_AddCallback( p_intf, "vtrack", Input, NULL );    var_Create( p_intf, "strack", VLC_VAR_STRING | VLC_VAR_ISCOMMAND );    var_AddCallback( p_intf, "strack", Input, NULL );    /* video commands */    var_Create( p_intf, "vratio", VLC_VAR_STRING | VLC_VAR_ISCOMMAND );    var_AddCallback( p_intf, "vratio", VideoConfig, NULL );    var_Create( p_intf, "vcrop", VLC_VAR_STRING | VLC_VAR_ISCOMMAND );    var_AddCallback( p_intf, "vcrop", VideoConfig, NULL );    var_Create( p_intf, "vzoom", VLC_VAR_STRING | VLC_VAR_ISCOMMAND );    var_AddCallback( p_intf, "vzoom", VideoConfig, NULL );    /* audio commands */    var_Create( p_intf, "volume", VLC_VAR_STRING | VLC_VAR_ISCOMMAND );    var_AddCallback( p_intf, "volume", Volume, NULL );    var_Create( p_intf, "volup", VLC_VAR_STRING | VLC_VAR_ISCOMMAND );    var_AddCallback( p_intf, "volup", VolumeMove, NULL );    var_Create( p_intf, "voldown", VLC_VAR_STRING | VLC_VAR_ISCOMMAND );    var_AddCallback( p_intf, "voldown", VolumeMove, NULL );    var_Create( p_intf, "adev", VLC_VAR_STRING | VLC_VAR_ISCOMMAND );    var_AddCallback( p_intf, "adev", AudioConfig, NULL );    var_Create( p_intf, "achan", VLC_VAR_STRING | VLC_VAR_ISCOMMAND );    var_AddCallback( p_intf, "achan", AudioConfig, NULL );}/***************************************************************************** * Run: rc thread ***************************************************************************** * This part of the interface is in a separate thread so that we can call * exec() from within it without annoying the rest of the program. *****************************************************************************/static void Run( intf_thread_t *p_intf ){    input_thread_t * p_input;    playlist_t *     p_playlist;    char       p_buffer[ MAX_LINE_LENGTH + 1 ];    vlc_bool_t b_showpos = config_GetInt( p_intf, "rc-show-pos" );    vlc_bool_t b_longhelp = VLC_FALSE;    int        i_size = 0;    int        i_oldpos = 0;    int        i_newpos;    p_buffer[0] = 0;    p_input = NULL;    p_playlist = NULL;    /* Register commands that will be cleaned up upon object destruction */    RegisterCallbacks( p_intf );    /* status callbacks */    /* Listen to audio volume updates */    var_AddCallback( p_intf->p_vlc, "volume-change", VolumeChanged, p_intf );#ifdef WIN32    /* Get the file descriptor of the console input */    p_intf->p_sys->hConsoleIn = GetStdHandle(STD_INPUT_HANDLE);    if( p_intf->p_sys->hConsoleIn == INVALID_HANDLE_VALUE )    {        msg_Err( p_intf, "couldn't find user input handle" );        p_intf->b_die = VLC_TRUE;    }#endif    while( !p_intf->b_die )    {        char *psz_cmd, *psz_arg;        vlc_bool_t b_complete;        if( p_intf->p_sys->pi_socket_listen != NULL &&            p_intf->p_sys->i_socket == -1 )        {            p_intf->p_sys->i_socket =                net_Accept( p_intf, p_intf->p_sys->pi_socket_listen, 0 );        }        b_complete = ReadCommand( p_intf, p_buffer, &i_size );        /* Manage the input part */        if( p_input == NULL )        {            if( p_playlist )            {                p_input = vlc_object_find( p_playlist, VLC_OBJECT_INPUT,                                                       FIND_CHILD );            }            else            {                p_input = vlc_object_find( p_intf, VLC_OBJECT_INPUT,                                                   FIND_ANYWHERE );                if( p_input )                {                    p_playlist = vlc_object_find( p_input, VLC_OBJECT_PLAYLIST,                                                           FIND_PARENT );                }            }            /* New input has been registered */            if( p_input )            {                if( !p_input->b_dead || !p_input->b_die )                {                    msg_rc( STATUS_CHANGE "( new input: %s )", p_input->input.p_item->psz_uri );                    msg_rc( STATUS_CHANGE "( audio volume: %d )", config_GetInt( p_intf, "volume" ));                }                var_AddCallback( p_input, "state", StateChanged, p_intf );                var_AddCallback( p_input, "rate-faster", RateChanged, p_intf );                var_AddCallback( p_input, "rate-slower", RateChanged, p_intf );                var_AddCallback( p_input, "rate", RateChanged, p_intf );                var_AddCallback( p_input, "time-offset", TimeOffsetChanged, p_intf );            }        }        else if( p_input->b_dead )        {            var_DelCallback( p_input, "state", StateChanged, p_intf );            var_DelCallback( p_input, "rate-faster", RateChanged, p_intf );            var_DelCallback( p_input, "rate-slower", RateChanged, p_intf );            var_DelCallback( p_input, "rate", RateChanged, p_intf );            var_DelCallback( p_input, "time-offset", TimeOffsetChanged, p_intf );            vlc_object_release( p_input );            p_input = NULL;            if( p_playlist )            {                vlc_mutex_lock( &p_playlist->object_lock );                p_intf->p_sys->i_last_state = (int) PLAYLIST_STOPPED;                msg_rc( STATUS_CHANGE "( stop state: 0 )" );                vlc_mutex_unlock( &p_playlist->object_lock );            }        }        if( (p_input != NULL) && !p_input->b_dead && !p_input->b_die &&            (p_playlist != NULL) )        {            vlc_mutex_lock( &p_playlist->object_lock );            if( (p_intf->p_sys->i_last_state != p_playlist->status.i_status) &&                (p_playlist->status.i_status == PLAYLIST_STOPPED) )            {                p_intf->p_sys->i_last_state = PLAYLIST_STOPPED;                msg_rc( STATUS_CHANGE "( stop state: 0 )" );            }            else if( (p_intf->p_sys->i_last_state != p_playlist->status.i_status) &&                (p_playlist->status.i_status == PLAYLIST_RUNNING) )            {                p_intf->p_sys->i_last_state = p_playlist->status.i_status;                msg_rc( STATUS_CHANGE "( play state: 1 )" );            }            else if( (p_intf->p_sys->i_last_state != p_playlist->status.i_status) &&                (p_playlist->status.i_status == PLAYLIST_PAUSED) )            {                p_intf->p_sys->i_last_state = p_playlist->status.i_status;                msg_rc( STATUS_CHANGE "( pause state: 2 )" );            }            vlc_mutex_unlock( &p_playlist->object_lock );        }        if( p_input && b_showpos )        {            i_newpos = 100 * var_GetFloat( p_input, "position" );            if( i_oldpos != i_newpos )            {                i_oldpos = i_newpos;                msg_rc( "pos: %d%%", i_newpos );            }        }        /* Is there something to do? */        if( !b_complete ) continue;        /* Skip heading spaces */        psz_cmd = p_buffer;        while( *psz_cmd == ' ' )        {            psz_cmd++;        }        /* Split psz_cmd at the first space and make sure that         * psz_arg is valid */        psz_arg = strchr( psz_cmd, ' ' );        if( psz_arg )        {            *psz_arg++ = 0;            while( *psz_arg == ' ' )            {                psz_arg++;            }        }        else        {            psz_arg = "";        }        /* If the user typed a registered local command, try it */        if( var_Type( p_intf, psz_cmd ) & VLC_VAR_ISCOMMAND )        {            vlc_value_t val;            int i_ret;            val.psz_string = psz_arg;            i_ret = var_Set( p_intf, psz_cmd, val );            msg_rc( "%s: returned %i (%s)",                    psz_cmd, i_ret, vlc_error( i_ret ) );        }        /* Or maybe it's a global command */        else if( var_Type( p_intf->p_libvlc, psz_cmd ) & VLC_VAR_ISCOMMAND )        {            vlc_value_t val;            int i_ret;            val.psz_string = psz_arg;            /* FIXME: it's a global command, but we should pass the             * local object as an argument, not p_intf->p_libvlc. */            i_ret = var_Set( p_intf->p_libvlc, psz_cmd, val );            if( i_ret != 0 )

⌨️ 快捷键说明

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