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

📄 rc.c

📁 video linux conference
💻 C
📖 第 1 页 / 共 4 页
字号:
        /* 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 );            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, "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 );#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 open STD_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->i_socket_listen != - 1 &&            p_intf->p_sys->i_socket == -1 )        {            p_intf->p_sys->i_socket =                net_Accept( p_intf, p_intf->p_sys->i_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 );                }            }        }        else if( p_input->b_dead )        {            vlc_object_release( p_input );            p_input = NULL;        }        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%%\n", 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)\n",                    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 )            {                msg_rc( "%s: returned %i (%s)\n",                         psz_cmd, i_ret, vlc_error( i_ret ) );            }        }        else if( !strcmp( psz_cmd, "logout" ) )        {            /* Close connection */            if( p_intf->p_sys->i_socket != -1 )            {                net_Close( p_intf->p_sys->i_socket );            }            p_intf->p_sys->i_socket = -1;        }        else if( !strcmp( psz_cmd, "info" ) )        {            if( p_input )            {                int i, j;                vlc_mutex_lock( &p_input->input.p_item->lock );                for ( i = 0; i < p_input->input.p_item->i_categories; i++ )                {                    info_category_t *p_category =                        p_input->input.p_item->pp_categories[i];                    msg_rc( "+----[ %s ]\n", p_category->psz_name );                    msg_rc( "| \n" );                    for ( j = 0; j < p_category->i_infos; j++ )                    {                        info_t *p_info = p_category->pp_infos[j];                        msg_rc( "| %s: %s\n", p_info->psz_name,                                p_info->psz_value );                    }                    msg_rc( "| \n" );                }                msg_rc( "+----[ end of stream info ]\n" );                vlc_mutex_unlock( &p_input->input.p_item->lock );            }            else            {                msg_rc( "no input\n" );            }        }        else if( !strcmp( psz_cmd, "is_playing" ) )        {            if( ! p_input )            {                msg_rc( "0\n" );            }            else            {                msg_rc( "1\n" );            }        }        else if( !strcmp( psz_cmd, "get_time" ) )        {            if( ! p_input )            {                msg_rc("0\n");            }            else            {                vlc_value_t time;                var_Get( p_input, "time", &time );                msg_rc( "%i\n", time.i_time / 1000000);            }        }        else if( !strcmp( psz_cmd, "get_length" ) )        {            if( ! p_input )            {                msg_rc("0\n");            }            else            {                vlc_value_t time;                var_Get( p_input, "length", &time );                msg_rc( "%i\n", time.i_time / 1000000);            }        }        else if( !strcmp( psz_cmd, "get_title" ) )        {            if( ! p_input )            {                msg_rc("\n");            }            else            {                msg_rc( "%s\n", p_input->input.p_item->psz_name );            }        }        else if( !strcmp( psz_cmd, "longhelp" ) || !strncmp( psz_cmd, "h", 1 )                 || !strncmp( psz_cmd, "H", 1 ) || !strncmp( psz_cmd, "?", 1 ) )        {            if( !strcmp( psz_cmd, "longhelp" ) || !strncmp( psz_cmd, "H", 1 ) )                 b_longhelp = VLC_TRUE;            else b_longhelp = VLC_FALSE;                        msg_rc(_("+----[ Remote control commands ]\n"));            msg_rc(  "| \n");            msg_rc(_("| add XYZ  . . . . . . . . . . add XYZ to playlist\n"));            msg_rc(_("| playlist . . .  show items currently in playlist\n"));            msg_rc(_("| play . . . . . . . . . . . . . . . . play stream\n"));            msg_rc(_("| stop . . . . . . . . . . . . . . . . stop stream\n"));            msg_rc(_("| next . . . . . . . . . . . .  next playlist item\n"));            msg_rc(_("| prev . . . . . . . . . .  previous playlist item\n"));            msg_rc(_("| goto . . . . . . . . . . . .  goto item at index\n"));            msg_rc(_("| title [X]  . . . . set/get title in current item\n"));            msg_rc(_("| title_n  . . . . . .  next title in current item\n"));            msg_rc(_("| title_p  . . . .  previous title in current item\n"));            msg_rc(_("| chapter [X]  . . set/get chapter in current item\n"));            msg_rc(_("| chapter_n  . . . .  next chapter in current item\n"));            msg_rc(_("| chapter_p  . .  previous chapter in current item\n"));            msg_rc(  "| \n");            msg_rc(_("| seek X . seek in seconds, for instance `seek 12'\n"));            msg_rc(_("| pause  . . . . . . . . . . . . . .  toggle pause\n"));            msg_rc(_("| fastforward  . . . . . .  .  set to maximum rate\n"));            msg_rc(_("| rewind  . . . . . . . . . .  set to minimum rate\n"));            msg_rc(_("| f  . . . . . . . . . . . . . . toggle fullscreen\n"));            msg_rc(_("| info . . .  information about the current stream\n"));            msg_rc(  "| \n");            msg_rc(_("| volume [X] . . . . . . . .  set/get audio volume\n"));            msg_rc(_("| volup [X]  . . . . .  raise audio volume X steps\n"));            msg_rc(_("| voldown [X]  . . . .  lower audio volume X steps\n"));            msg_rc(_("| adev [X] . . . . . . . . .  set/get audio device\n"));            msg_rc(_("| achan [X]. . . . . . . .  set/get audio channels\n"));            msg_rc(  "| \n");                        if (b_longhelp)            {                msg_rc(_("| marq-marquee STRING  . . overlay STRING in video\n"));                msg_rc(_("| marq-x X . . . . . . . . . . . .offset from left\n"));                msg_rc(_("| marq-y Y . . . . . . . . . . . . offset from top\n"));                msg_rc(_("| marq-position #. . .  .relative position control\n"));                msg_rc(_("| marq-color # . . . . . . . . . . font color, RGB\n"));                msg_rc(_("| marq-opacity # . . . . . . . . . . . . . opacity\n"));                msg_rc(_("| marq-timeout T. . . . . . . . . . timeout, in ms\n"));                msg_rc(_("| marq-size # . . . . . . . . font size, in pixels\n"));                msg_rc(  "| \n");                msg_rc(_("| time-format STRING . . . overlay STRING in video\n"));                msg_rc(_("| time-x X . . . . . . . . . . . .offset from left\n"));                msg_rc(_("| time-y Y . . . . . . . . . . . . offset from top\n"));                msg_rc(_("| time-position #. . . . . . . . relative position\n"));                msg_rc(_("| time-color # . . . . . . . . . . font color, RGB\n"));                msg_rc(_("| time-opacity # . . . . . . . . . . . . . opacity\n"));                msg_rc(_("| time-size # . . . . . . . . font size, in pixels\n"));                msg_rc(  "| \n");                msg_rc(_("| logo-file STRING . . . the overlay file path/name\n"));                msg_rc(_("| logo-x X . . . . . . . . . . . .offset from left\n"));                msg_rc(_("| logo-y Y . . . . . . . . . . . . offset from top\n"));                msg_rc(_("| logo-position #. . . . . . . . relative position\n"));                msg_rc(_("| logo-transparency #. . . . . . . . .transparency\n"));                msg_rc(  "| \n");                msg_rc(_("| mosaic-alpha # . . . . . . . . . . . . . . alpha\n"));                msg_rc(_("| mosaic-height #. . . . . . . . . . . . . .height\n"));                msg_rc(_("| mosaic-width # . . . . . . . . . . . . . . width\n"));                msg_rc(_("| mosaic-xoffset # . . . .top left corner position\n"));                msg_rc(_("| mosaic-yoffset # . . . .top left corner position\n"));                msg_rc(_("| mosaic-align 0..2,4..6,8..10. . .mosaic alignment\n"));                msg_rc(_("| mosaic-vborder # . . . . . . . . vertical border\n"));                msg_rc(_("| mosaic-hborder # . . . . . . . horizontal border\n"));                msg_rc(_("| mosaic-position {0=auto,1=fixed} . . . .position\n"));                msg_rc(_("| mosaic-rows #. . . . . . . . . . .number of rows\n"));                msg_rc(_("| mosaic-cols #. . . . . . . . . . .number of cols\n"));                msg_rc(_("| mosaic-keep-aspect-ratio {0,1} . . .aspect ratio\n"));                msg_rc(  "| \n");            }                msg_rc(_("| help . . . . . . . . . . . . . this help message\n"));            msg_rc(_("| longhelp . . . . . . . . . a longer help message\n"));            msg_rc(_("| logout . . . . .  exit (if in socket connection)\n"));            msg_rc(_("| quit . . . . . . . . . . . . . . . . .  quit vlc\n"));            msg_rc(  "| \n");            msg_rc(_("+----[ end of help ]\n"));        }        else switch( psz_cmd[0] )        {        case 'f':        case 'F':            if( p_input )            {                vout_thread_t *p_vout;                p_vout = vlc_object_find( p_input,                                          VLC_OBJECT_VOUT, FIND_CHILD );                if( p_vout )                {                    p_vout->i_changes |= VOUT_FULLSCREEN_CHANGE;                    vlc_object_release( p_vout );                }            }            break;        case 's':        case 'S':            ;            break;        case '\0':            /* Ignore empty lines */            break;        default:            msg_rc(_("unknown command `%s', type `help' for help\n"), psz_cmd);            break;        }        /* Command processed */        i_size = 0; p_buffer[0] = 0;    }    if( p_input )    {        vlc_object_release( p_input );        p_input = NULL;    }    if( p_playlist )    {        vlc_object_release( p_playlist );        p_playlist = NULL;    }}static int Input( vlc_object_t *p_this, char const *psz_cmd,                  vlc_value_t oldval, vlc_value_t newval, void *p_data ){    intf_thread_t *p_intf = (intf_thread_t*)p_this;    input_thread_t *p_input;    vlc_value_t     val;    p_input = vlc_object_find( p_this, VLC_OBJECT_INPUT, FIND_ANYWHERE );    if( !p_input ) return VLC_ENOOBJ;    /* Parse commands that only require an input */    if( !strcmp( psz_cmd, "pause" ) )    {        val.i_int = PAUSE_S;        var_Set( p_input, "state", val );        vlc_object_release( p_input );        return VLC_SUCCESS;    }    else if( !strcmp( psz_cmd, "seek" ) )    {        if( strlen( newval.psz_string ) > 0 &&            newval.psz_string[strlen( newval.psz_string ) - 1] == '%' )        {            val.f_float = (float)atoi( newval.psz_string ) / 100.0;            var_Set( p_input, "position", val );        }        else        {            val.i_time = ((int64_t)atoi( newval.psz_string )) * 1000000;            var_Set( p_input, "time", val );        }        vlc_object_release( p_input );        return VLC_SUCCESS;    }    else if ( !strcmp( psz_cmd, "fastforward" ) )    {        val.i_int = INPUT_RATE_MAX;

⌨️ 快捷键说明

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