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

📄 vlm.c

📁 uclinux 下的vlc播放器源代码
💻 C
📖 第 1 页 / 共 5 页
字号:
                            vlm_MessageNew( "mux", media->psz_mux ) );        msg_child = vlm_MessageAdd( msg_media,                                    vlm_MessageNew( "inputs", NULL ) );        for( i = 0; i < media->i_input; i++ )        {            vlm_MessageAdd( msg_child,                            vlm_MessageNew( media->input[i], NULL ) );        }        vlm_MessageAdd( msg_media,                        vlm_MessageNew( "output", media->psz_output ?                                        media->psz_output : "" ) );        msg_child = vlm_MessageAdd( msg_media, vlm_MessageNew( "options", 0 ));        for( i = 0; i < media->i_option; i++ )        {            vlm_MessageAdd( msg_child, vlm_MessageNew( media->option[i], 0 ) );        }        msg_child = vlm_MessageAdd( msg_media,                                    vlm_MessageNew( "instances", NULL ) );        for( i = 0; i < media->i_instance; i++ )        {            vlm_media_instance_t *p_instance = media->instance[i];            vlc_value_t val;            vlm_message_t *msg_instance;            char *psz_tmp;            if( !p_instance->p_input ) val.i_int = END_S;            else var_Get( p_instance->p_input, "state", &val );            msg_instance = vlm_MessageNew( "instance" , NULL );            vlm_MessageAdd( msg_instance, vlm_MessageNew( "name" , p_instance->psz_name ? p_instance->psz_name : "default" ) );            vlm_MessageAdd( msg_instance, vlm_MessageNew( "state",                                val.i_int == PLAYING_S ? "playing" :                                val.i_int == PAUSE_S ? "paused" :                                "stopped" ) );#define APPEND_INPUT_INFO( a, format, type ) \            asprintf( &psz_tmp, format, \                      var_Get ## type( p_instance->p_input, a ) ); \            vlm_MessageAdd( msg_instance, vlm_MessageNew( a, psz_tmp ) ); \            free( psz_tmp );            APPEND_INPUT_INFO( "position", "%f", Float );            APPEND_INPUT_INFO( "time", I64Fi, Time );            APPEND_INPUT_INFO( "length", I64Fi, Time );            APPEND_INPUT_INFO( "rate", "%d", Integer );            APPEND_INPUT_INFO( "title", "%d", Integer );            APPEND_INPUT_INFO( "chapter", "%d", Integer );            APPEND_INPUT_INFO( "seekable", "%d", Bool );#undef APPEND_INPUT_INFO            asprintf( &psz_tmp, "%d", p_instance->i_index + 1 );            vlm_MessageAdd( msg_instance, vlm_MessageNew( "playlistindex", psz_tmp ) );            free( psz_tmp );            vlm_MessageAdd( msg_child, msg_instance );        }        return msg;    }    else if( schedule != NULL )    {        int i;        vlm_message_t *msg;        vlm_message_t *msg_schedule;        vlm_message_t *msg_child;        char buffer[100];        msg = vlm_MessageNew( "show", NULL );        msg_schedule =            vlm_MessageAdd( msg, vlm_MessageNew( schedule->psz_name, 0 ) );        vlm_MessageAdd( msg_schedule, vlm_MessageNew("type", "schedule") );        vlm_MessageAdd( msg_schedule,                        vlm_MessageNew( "enabled", schedule->b_enabled ?                                        "yes" : "no" ) );#if !defined( UNDER_CE )        if( schedule->i_date != 0 )        {            struct tm date;            time_t i_time = (time_t)( schedule->i_date / 1000000 );            char *psz_date;#ifdef HAVE_LOCALTIME_R            localtime_r( &i_time, &date);#else            struct tm *p_date = localtime( &i_time );            date = *p_date;#endif            asprintf( &psz_date, "%d/%d/%d-%d:%d:%d",                      date.tm_year + 1900, date.tm_mon + 1, date.tm_mday,                      date.tm_hour, date.tm_min, date.tm_sec );            vlm_MessageAdd( msg_schedule,                            vlm_MessageNew( "date", psz_date ) );            free( psz_date );        }        else        {            vlm_MessageAdd( msg_schedule, vlm_MessageNew("date", "now") );        }        if( schedule->i_period != 0 )        {            time_t i_time = (time_t) ( schedule->i_period / 1000000 );            struct tm date;            date.tm_sec = (int)( i_time % 60 );            i_time = i_time / 60;            date.tm_min = (int)( i_time % 60 );            i_time = i_time / 60;            date.tm_hour = (int)( i_time % 24 );            i_time = i_time / 24;            date.tm_mday = (int)( i_time % 30 );            i_time = i_time / 30;            /* okay, okay, months are not always 30 days long */            date.tm_mon = (int)( i_time % 12 );            i_time = i_time / 12;            date.tm_year = (int)i_time;            sprintf( buffer, "%d/%d/%d-%d:%d:%d", date.tm_year, date.tm_mon,                     date.tm_mday, date.tm_hour, date.tm_min, date.tm_sec);            vlm_MessageAdd( msg_schedule, vlm_MessageNew("period", buffer) );        }        else        {            vlm_MessageAdd( msg_schedule, vlm_MessageNew("period", "0") );        }#endif /* UNDER_CE */        sprintf( buffer, "%d", schedule->i_repeat );        vlm_MessageAdd( msg_schedule, vlm_MessageNew( "repeat", buffer ) );        msg_child =            vlm_MessageAdd( msg_schedule, vlm_MessageNew("commands", 0) );        for( i = 0; i < schedule->i_command; i++ )        {           vlm_MessageAdd( msg_child,                           vlm_MessageNew( schedule->command[i], NULL ) );        }        return msg;    }    else if( psz_filter && !strcmp( psz_filter, "media" ) )    {        int i, j;        vlm_message_t *msg;        vlm_message_t *msg_child;        int i_vod = 0, i_broadcast = 0;        char *psz_count;        for( i = 0; i < vlm->i_media; i++ )        {            if( vlm->media[i]->i_type == VOD_TYPE )                i_vod ++;            else                i_broadcast ++;        }        asprintf( &psz_count, "( %d broadcast - %d vod )", i_broadcast, i_vod);        msg = vlm_MessageNew( "show", NULL );        msg_child = vlm_MessageAdd( msg, vlm_MessageNew( "media", psz_count ) );        free( psz_count );        for( i = 0; i < vlm->i_media; i++ )        {            vlm_media_t *m = vlm->media[i];            vlm_message_t *msg_media, *msg_instance;            msg_media = vlm_MessageAdd( msg_child,                                        vlm_MessageNew( m->psz_name, 0 ) );            vlm_MessageAdd( msg_media,                            vlm_MessageNew( "type", m->i_type == VOD_TYPE ?                                            "vod" : "broadcast" ) );            vlm_MessageAdd( msg_media,                            vlm_MessageNew( "enabled", m->b_enabled ?                                            "yes" : "no" ) );            if( m->i_type == VOD_TYPE && m->psz_mux )                vlm_MessageAdd( msg_media,                                vlm_MessageNew( "mux", m->psz_mux ) );            msg_instance = vlm_MessageAdd( msg_media,                                           vlm_MessageNew( "instances", 0 ) );            for( j = 0; j < m->i_instance; j++ )            {                vlm_media_instance_t *p_instance = m->instance[j];                vlc_value_t val;                if( !p_instance->p_input ) val.i_int = END_S;                else var_Get( p_instance->p_input, "state", &val );                vlm_MessageAdd( msg_instance,                    vlm_MessageNew( p_instance->psz_name ?                                    p_instance->psz_name : "default",                                    val.i_int == PLAYING_S ? "playing" :                                    val.i_int == PAUSE_S ? "paused" :                                    "stopped" ) );            }        }        return msg;    }    else if( psz_filter && !strcmp( psz_filter, "schedule" ) )    {        int i;        vlm_message_t *msg;        vlm_message_t *msg_child;        msg = vlm_MessageNew( "show", NULL );        msg_child = vlm_MessageAdd( msg, vlm_MessageNew( "schedule", NULL ) );        for( i = 0; i < vlm->i_schedule; i++ )        {            vlm_schedule_t *s = vlm->schedule[i];            vlm_message_t *msg_schedule;            mtime_t i_time, i_next_date;            msg_schedule = vlm_MessageAdd( msg_child,                                           vlm_MessageNew( s->psz_name, 0 ) );            vlm_MessageAdd( msg_schedule,                            vlm_MessageNew( "enabled", s->b_enabled ?                                            "yes" : "no" ) );            /* calculate next date */            i_time = vlm_Date();            i_next_date = s->i_date;            if( s->i_period != 0 )            {                int j = 0;                while( s->i_date + j * s->i_period <= i_time &&                       s->i_repeat > j )                {                    j++;                }                i_next_date = s->i_date + j * s->i_period;            }            if( i_next_date > i_time )            {                time_t i_date = (time_t) (i_next_date / 1000000) ;#if !defined( UNDER_CE )#ifdef HAVE_CTIME_R                char psz_date[500];                ctime_r( &i_date, psz_date );#else                char *psz_date = ctime( &i_date );#endif                vlm_MessageAdd( msg_schedule,                                vlm_MessageNew( "next launch", psz_date ) );#endif            }        }        return msg;    }    else if( ( psz_filter == NULL ) && ( media == NULL ) && ( schedule == NULL ) )    {        vlm_message_t *show1 = vlm_Show( vlm, NULL, NULL, "media" );        vlm_message_t *show2 = vlm_Show( vlm, NULL, NULL, "schedule" );        vlm_MessageAdd( show1, show2->child[0] );        /* We must destroy the parent node "show" of show2         * and not the children */        free( show2->psz_name );        free( show2 );        return show1;    }    else    {        return vlm_MessageNew( "show", NULL );    }}static vlm_message_t *vlm_Help( vlm_t *vlm, char *psz_filter ){    vlm_message_t *message, *message_child;#define MessageAdd( a ) \        vlm_MessageAdd( message, vlm_MessageNew( a, NULL ) );#define MessageAddChild( a ) \        vlm_MessageAdd( message_child, vlm_MessageNew( a, NULL ) );    if( psz_filter == NULL )    {        message = vlm_MessageNew( "help", NULL );        message_child = MessageAdd( "Commands Syntax:" );        MessageAddChild( "new (name) vod|broadcast|schedule [properties]" );        MessageAddChild( "setup (name) (properties)" );        MessageAddChild( "show [(name)|media|schedule]" );        MessageAddChild( "del (name)|all|media|schedule" );        MessageAddChild( "control (name) [instance_name] (command)" );        MessageAddChild( "save (config_file)" );        MessageAddChild( "export" );        MessageAddChild( "load (config_file)" );        message_child = MessageAdd( "Media Proprieties Syntax:" );        MessageAddChild( "input (input_name)" );        MessageAddChild( "inputdel (input_name)|all" );        MessageAddChild( "inputdeln input_number" );        MessageAddChild( "output (output_name)" );        MessageAddChild( "option (option_name)[=value]" );        MessageAddChild( "enabled|disabled" );        MessageAddChild( "loop|unloop (broadcast only)" );        MessageAddChild( "mux (mux_name)" );        message_child = MessageAdd( "Schedule Proprieties Syntax:" );        MessageAddChild( "enabled|disabled" );        MessageAddChild( "append (command_until_rest_of_the_line)" );        MessageAddChild( "date (year)/(month)/(day)-(hour):(minutes):"                         "(seconds)|now" );        MessageAddChild( "period (years_aka_12_months)/(months_aka_30_days)/"                         "(days)-(hours):(minutes):(seconds)" );        MessageAddChild( "repeat (number_of_repetitions)" );        message_child = MessageAdd( "Control Commands Syntax:" );        MessageAddChild( "play" );        MessageAddChild( "pause" );        MessageAddChild( "stop" );        MessageAddChild( "seek [+-](percentage) | [+-](seconds)s | [+-](milliseconds)ms" );        return message;    }    return vlm_MessageNew( "help", NULL );}/***************************************************************************** * Config handling functions *****************************************************************************/static int Load( vlm_t *vlm, char *file ){    char *pf = file;    int  i_line = 1;    while( *pf != '\0' )    {        vlm_message_t *message = NULL;        int i_end = 0;        while( pf[i_end] != '\n' && pf[i_end] != '\0' && pf[i_end] != '\r' )        {            i_end++;        }        if( pf[i_end] == '\r' || pf[i_end] == '\n' )        {            pf[i_end] = '\0';            i_end++;            if( pf[i_end] == '\n' ) i_end++;        }        if( *pf && ExecuteCommand( vlm, pf, &message ) )        {            if( message )            {                if( message->psz_value )                    msg_Err( vlm, "Load error on line %d: %s: %s",                             i_line, message->psz_name, message->psz_value );                vlm_MessageDelete( message );            }            return 1;        }        if( message ) vlm_MessageDelete( message );        pf += i_end;        i_line++;    }    return 0;}static char *Save( vlm_t *vlm ){    char *save = NULL;    char psz_header[] = "\n"                        "# VLC media player VLM command batch\n"                        "# http://www.videolan.org/vlc/\n\n" ;    char *p;    int i,j;    int i_length = strlen( psz_header );    for( i = 0; i < vlm->i_media; i++ )    {        vlm_media_t *media = vlm->media[i];        if( media->i_type == VOD_TYPE )        {            i_length += strlen( "new  vod " ) + strlen(media->psz_name);        }        else        {            i_length += strlen( "new  broadcast " ) + strlen(media->psz_name);        }        if( media->b_enabled == VLC_TRUE )        {            i_length += strlen( "enabled" 

⌨️ 快捷键说明

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