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

📄 vlm.c

📁 video linux conference
💻 C
📖 第 1 页 / 共 5 页
字号:
    for( i = 0; i < vlm->i_schedule; i++ )    {        if( strcmp( psz_name, vlm->schedule[i]->psz_name ) == 0 )        {            return vlm->schedule[i];        }    }    return NULL;}/* Ok, setup schedule command will be able to support only one (argument value) at a time  */int vlm_ScheduleSetup( vlm_schedule_t *schedule, char *psz_cmd,                       char *psz_value ){    if( !strcmp( psz_cmd, "enabled" ) )    {        schedule->b_enabled = VLC_TRUE;    }    else if( !strcmp( psz_cmd, "disabled" ) )    {        schedule->b_enabled = VLC_FALSE;    }#if !defined( UNDER_CE )    else if( !strcmp( psz_cmd, "date" ) )    {        struct tm time;        char *p;        time_t date;        time.tm_sec = 0;         /* seconds */        time.tm_min = 0;         /* minutes */        time.tm_hour = 0;        /* hours */        time.tm_mday = 0;        /* day of the month */        time.tm_mon = 0;         /* month */        time.tm_year = 0;        /* year */        time.tm_wday = 0;        /* day of the week */        time.tm_yday = 0;        /* day in the year */        time.tm_isdst = -1;       /* daylight saving time */        /* date should be year/month/day-hour:minutes:seconds */        p = strchr( psz_value, '-' );        if( !strcmp( psz_value, "now" ) )        {            schedule->i_date = 0;        }        else if( p == NULL && sscanf( psz_value, "%d:%d:%d", &time.tm_hour, &time.tm_min, &time.tm_sec ) != 3 ) /* it must be a hour:minutes:seconds */        {            return 1;        }        else        {            int i,j,k;            switch( sscanf( p + 1, "%d:%d:%d", &i, &j, &k ) )            {                case 1:                    time.tm_sec = i;                    break;                case 2:                    time.tm_min = i;                    time.tm_sec = j;                    break;                case 3:                    time.tm_hour = i;                    time.tm_min = j;                    time.tm_sec = k;                    break;                default:                    return 1;            }            *p = '\0';            switch( sscanf( psz_value, "%d/%d/%d", &i, &j, &k ) )            {                case 1:                    time.tm_mday = i;                    break;                case 2:                    time.tm_mon = i - 1;                    time.tm_mday = j;                    break;                case 3:                    time.tm_year = i - 1900;                    time.tm_mon = j - 1;                    time.tm_mday = k;                    break;                default:                    return 1;            }            date = mktime( &time );            schedule->i_date = ((mtime_t) date) * 1000000;        }    }    else if( !strcmp( psz_cmd, "period" ) )    {        struct tm time;        char *p;        char *psz_time = NULL, *psz_date = NULL;        time_t date;        int i,j,k;        /* First, if date or period are modified, repeat should be equal to -1 */        schedule->i_repeat = -1;        time.tm_sec = 0;         /* seconds */        time.tm_min = 0;         /* minutes */        time.tm_hour = 0;        /* hours */        time.tm_mday = 0;        /* day of the month */        time.tm_mon = 0;         /* month */        time.tm_year = 0;        /* year */        time.tm_wday = 0;        /* day of the week */        time.tm_yday = 0;        /* day in the year */        time.tm_isdst = -1;       /* daylight saving time */        /* date should be year/month/day-hour:minutes:seconds */        p = strchr( psz_value, '-' );        if( p )        {            psz_date = psz_value;            psz_time = p + 1;            *p = '\0';        }        else        {            psz_time = psz_value;        }        switch( sscanf( psz_time, "%d:%d:%d", &i, &j, &k ) )        {            case 1:                time.tm_sec = i;                break;            case 2:                time.tm_min = i;                time.tm_sec = j;                break;            case 3:                time.tm_hour = i;                time.tm_min = j;                time.tm_sec = k;                break;            default:                return 1;        }        if( psz_date )        {            switch( sscanf( psz_date, "%d/%d/%d", &i, &j, &k ) )            {                case 1:                    time.tm_mday = i;                    break;                case 2:                    time.tm_mon = i;                    time.tm_mday = j;                    break;                case 3:                    time.tm_year = i;                    time.tm_mon = j;                    time.tm_mday = k;                    break;                default:                    return 1;            }        }        /* ok, that's stupid... who is going to schedule streams every 42 years ? */        date = (((( time.tm_year * 12 + time.tm_mon ) * 30 + time.tm_mday ) * 24 + time.tm_hour ) * 60 + time.tm_min ) * 60 + time.tm_sec ;        schedule->i_period = ((mtime_t) date) * 1000000;    }#endif /* UNDER_CE */    else if( !strcmp( psz_cmd, "repeat" ) )    {        int i;        if( sscanf( psz_value, "%d", &i ) == 1 )        {            schedule->i_repeat = i;        }        else        {            return 1;        }    }    else if( !strcmp( psz_cmd, "append" ) )    {        char *command = strdup( psz_value );        TAB_APPEND( schedule->i_command, schedule->command, command );    }    else    {        return 1;    }    return 0;}/***************************************************************************** * Message handling functions *****************************************************************************/static vlm_message_t *vlm_MessageNew( char *psz_name,                                      const char *psz_format, ... ){    vlm_message_t *p_message;    va_list args;    if( !psz_name ) return 0;    p_message = malloc( sizeof(vlm_message_t) );    if( !p_message)    {        return NULL;    }    p_message->psz_value = 0;    if( psz_format )    {        va_start( args, psz_format );        if( vasprintf( &p_message->psz_value, psz_format, args ) < 0 )        {            va_end( args );            free( p_message );            return 0;        }        va_end( args );    }    p_message->psz_name = strdup( psz_name );    p_message->i_child = 0;    p_message->child = NULL;    return p_message;}void vlm_MessageDelete( vlm_message_t *p_message ){    if( p_message->psz_name ) free( p_message->psz_name );    if( p_message->psz_value ) free( p_message->psz_value );    while( p_message->i_child-- )        vlm_MessageDelete( p_message->child[p_message->i_child] );    if( p_message->child ) free( p_message->child );    free( p_message );}/* Add a child */static vlm_message_t *vlm_MessageAdd( vlm_message_t *p_message,                                      vlm_message_t *p_child ){    if( p_message == NULL ) return NULL;    if( p_child )    {        TAB_APPEND( p_message->i_child, p_message->child, p_child );    }    return p_child;}/***************************************************************************** * Misc utility functions *****************************************************************************/static vlm_message_t *vlm_Show( vlm_t *vlm, vlm_media_t *media,                                vlm_schedule_t *schedule, char *psz_filter ){    if( media != NULL )    {        int i;        vlm_message_t *msg;        vlm_message_t *msg_media;        vlm_message_t *msg_child;        msg = vlm_MessageNew( "show", NULL );        msg_media = vlm_MessageAdd( msg, vlm_MessageNew( media->psz_name, 0 ));        vlm_MessageAdd( msg_media,                        vlm_MessageNew( "type", media->i_type == VOD_TYPE ?                                        "vod" : "broadcast" ) );        vlm_MessageAdd( msg_media,                        vlm_MessageNew( "enabled", media->b_enabled ?                                        "yes" : "no" ) );        vlm_MessageAdd( msg_media,                        vlm_MessageNew( "loop", media->b_loop ?                                        "yes" : "no" ) );        if( media->i_type == VOD_TYPE && media->psz_mux )            vlm_MessageAdd( msg_media,                            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;            if( !p_instance->p_input ) val.i_int = END_S;            else var_Get( p_instance->p_input, "state", &val );            vlm_MessageAdd( msg_child,                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( 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;

⌨️ 快捷键说明

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