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

📄 vlm.c

📁 video linux conference
💻 C
📖 第 1 页 / 共 5 页
字号:
        {            vlm_schedule_t *p_schedule;            p_schedule = vlm_ScheduleNew( p_vlm, ppsz_command[1] );            if( !p_schedule )            {                p_message = vlm_MessageNew( "new", "could not create schedule" );                goto error;            }        }        /* Media */        else        {            vlm_media_t *p_media;            p_media = vlm_MediaNew( p_vlm, ppsz_command[1], i_type );            if( !p_media )            {                p_message = vlm_MessageNew( "new", "could not create media" );                goto error;            }        }        if( i_command <= 3 )        {            p_message = vlm_MessageNew( "new", NULL );            goto success;        }        /* Properties will be dealt with later on */    }    else if( !strcmp(ppsz_command[0], "setup") )    {        if( i_command < 2 ) goto syntax_error;        /* Properties will be dealt with later on */    }    else if( !strcmp(ppsz_command[0], "del") )    {        vlm_media_t *p_media;        vlm_schedule_t *p_schedule;        if( i_command < 2 ) goto syntax_error;        p_media = vlm_MediaSearch( p_vlm, ppsz_command[1] );        p_schedule = vlm_ScheduleSearch( p_vlm, ppsz_command[1] );        if( p_schedule != NULL )        {            vlm_ScheduleDelete( p_vlm, p_schedule, NULL );        }        else if( p_media != NULL )        {            vlm_MediaDelete( p_vlm, p_media, NULL );        }        else if( !strcmp(ppsz_command[1], "media") )        {            while( p_vlm->i_media ) vlm_MediaDelete( p_vlm, p_vlm->media[0],                                                     NULL );        }        else if( !strcmp(ppsz_command[1], "schedule") )        {            while( p_vlm->i_schedule )                vlm_ScheduleDelete( p_vlm, p_vlm->schedule[0], NULL );        }        else if( !strcmp(ppsz_command[1], "all") )        {            while( p_vlm->i_media ) vlm_MediaDelete( p_vlm, p_vlm->media[0],                                                     NULL );            while( p_vlm->i_schedule )                vlm_ScheduleDelete( p_vlm, p_vlm->schedule[0], NULL );        }        else        {            p_message = vlm_MessageNew( "del", "%s: media unknown",                                      ppsz_command[1] );            goto error;        }        p_message = vlm_MessageNew( "del", NULL );        goto success;    }    else if( !strcmp(ppsz_command[0], "show") )    {        vlm_media_t *p_media;        vlm_schedule_t *p_schedule;        if( i_command == 1 )        {            p_message = vlm_Show( p_vlm, NULL, NULL, NULL );            goto success;        }        else if( i_command > 2 ) goto syntax_error;        p_media = vlm_MediaSearch( p_vlm, ppsz_command[1] );        p_schedule = vlm_ScheduleSearch( p_vlm, ppsz_command[1] );        if( p_schedule != NULL )        {            p_message = vlm_Show( p_vlm, NULL, p_schedule, NULL );        }        else if( p_media != NULL )        {            p_message = vlm_Show( p_vlm, p_media, NULL, NULL );        }        else        {            p_message = vlm_Show( p_vlm, NULL, NULL, ppsz_command[1] );        }        goto success;    }    else if( !strcmp(ppsz_command[0], "help") )    {        if( i_command != 1 ) goto syntax_error;        p_message = vlm_Help( p_vlm, NULL );        goto success;    }    else if( !strcmp(ppsz_command[0], "control") )    {        vlm_media_t *p_media;        if( i_command < 3 ) goto syntax_error;        if( !(p_media = vlm_MediaSearch( p_vlm, ppsz_command[1] ) ) )        {            p_message = vlm_MessageNew( "control", "%s: media unknown",                                      ppsz_command[1] );            goto error;        }        else        {            char *psz_command, *psz_arg = 0, *psz_instance = 0;            int i_index = 2;            if( strcmp( ppsz_command[2], "play" ) &&                strcmp( ppsz_command[2], "stop" ) &&                strcmp( ppsz_command[2], "pause" ) &&                strcmp( ppsz_command[2], "seek" ) )            {                i_index++;                psz_instance = ppsz_command[2];                if( i_command < 4 ) goto syntax_error;            }            psz_command = ppsz_command[i_index];            if( i_command >= i_index + 2 ) psz_arg = ppsz_command[i_index + 1];            vlm_MediaControl( p_vlm, p_media, psz_instance, psz_command,                             psz_arg );            p_message = vlm_MessageNew( "control", NULL );            goto success;        }    }    else if( !strcmp(ppsz_command[0], "save") )    {        if( i_command != 2 ) goto syntax_error;        if( vlm_Save( p_vlm, ppsz_command[1] ) )        {            p_message = vlm_MessageNew( "save", "Unable to save to file" );            goto error;        }        else        {            p_message = vlm_MessageNew( "save", NULL );            goto success;        }    }    else if( !strcmp(ppsz_command[0], "load") )    {        if( i_command != 2 ) goto syntax_error;        switch( vlm_Load( p_vlm, ppsz_command[1] ) )        {            case 0:                p_message = vlm_MessageNew( "load", NULL );                goto success;            case 2:                p_message = vlm_MessageNew( "load", "read file error" );                goto error;            case 3:                p_message =                    vlm_MessageNew( "load", "error while loading file" );                goto error;            default:                p_message =                    vlm_MessageNew( "load", "Unable to load from file" );                goto error;        }    }    else    {        p_message = vlm_MessageNew( ppsz_command[0], "Unknown command" );        goto error;    }    /* Common code between "new" and "setup" */    if( !strcmp(ppsz_command[0], "new") ||        !strcmp(ppsz_command[0], "setup") )    {        int i_command_start = strcmp(ppsz_command[0], "new") ? 2 : 3;        vlm_media_t *p_media;        vlm_schedule_t *p_schedule;        if( i_command < i_command_start ) goto syntax_error;        p_media = vlm_MediaSearch( p_vlm, ppsz_command[1] );        p_schedule = vlm_ScheduleSearch( p_vlm, ppsz_command[1] );        if( !p_media && !p_schedule )        {            p_message = vlm_MessageNew( ppsz_command[0], "%s unknown",                                        ppsz_command[1] );            goto error;        }        if( p_schedule != NULL )        {            for( i = i_command_start ; i < i_command ; i++ )            {                if( !strcmp( ppsz_command[i], "enabled" ) ||                    !strcmp( ppsz_command[i], "disabled" ) )                {                    vlm_ScheduleSetup( p_schedule, ppsz_command[i], NULL );                }                /* Beware: everything behind append is considered as                 * command line */                else if( !strcmp( ppsz_command[i], "append" ) )                {                    if( ++i >= i_command ) break;                    for( j = i + 1; j < i_command; j++ )                    {                        ppsz_command[i] =                            realloc( ppsz_command[i], strlen(ppsz_command[i]) +                                     strlen(ppsz_command[j]) + 1 + 1 );                        strcat( ppsz_command[i], " " );                        strcat( ppsz_command[i], ppsz_command[j] );                    }                    vlm_ScheduleSetup( p_schedule, ppsz_command[i - 1],                                       ppsz_command[i] );                    break;                }                else                {                    if( i + 1 >= i_command && !strcmp(ppsz_command[0], "new") )                    {                        vlm_ScheduleDelete( p_vlm, p_schedule, NULL );                        p_message =                            vlm_MessageNew( ppsz_command[0],                                            "Wrong properties syntax" );                        goto error;                    }                    else if( i + 1 >= i_command )                    {                        p_message =                            vlm_MessageNew( ppsz_command[0],                                            "Wrong properties syntax" );                        goto error;                    }                    vlm_ScheduleSetup( p_schedule, ppsz_command[i],                                       ppsz_command[i+1] );                    i++;                }            }        }        else if( p_media != NULL )        {            for( i = i_command_start ; i < i_command ; i++ )            {                if( !strcmp( ppsz_command[i], "enabled" ) ||                    !strcmp( ppsz_command[i], "disabled" ) )                {                    vlm_MediaSetup( p_vlm, p_media, ppsz_command[i], NULL );                }                else if( i + 1 >= i_command &&                         !strcmp( ppsz_command[i], "mux") )                {                    if( p_media->i_type != VOD_TYPE )                    {                        p_message = vlm_MessageNew( ppsz_command[0],                                  "mux only available for broadcast" );                    }                    else                    {                        vlm_MediaSetup( p_vlm, p_media, ppsz_command[i],                                        ppsz_command[i+1] );                        i++;                    }                }                else if( !strcmp( ppsz_command[i], "loop" ) ||                         !strcmp( ppsz_command[i], "unloop" ) )                {                    if( p_media->i_type != BROADCAST_TYPE )                    {                        p_message = vlm_MessageNew( ppsz_command[0],                                  "loop only available for broadcast" );                    }                    else                    {                        vlm_MediaSetup( p_vlm, p_media, ppsz_command[i], NULL );                    }                }                else                {                    if( i + 1 >= i_command &&                        !strcmp(ppsz_command[0], "new") )                    {                        vlm_MediaDelete( p_vlm, p_media, NULL );                        p_message =                            vlm_MessageNew( ppsz_command[0],                                            "Wrong properties syntax" );                        goto error;                    }                    else if( i + 1 >= i_command )                    {                        p_message =                            vlm_MessageNew( ppsz_command[0],                                            "Wrong properties syntax" );                        goto error;                    }                    vlm_MediaSetup( p_vlm, p_media, ppsz_command[i],                                    ppsz_command[i+1] );                    i++;                }            }        }        p_message = vlm_MessageNew( ppsz_command[0], NULL );        goto success;    }success:    for( i = 0 ; i < i_command ; i++ ) FREE( ppsz_command[i] );    FREE( ppsz_command );    *pp_message = p_message;    return VLC_SUCCESS;syntax_error:    p_message = vlm_MessageNew( ppsz_command[0], "Wrong command syntax" );error:    for( i = 0 ; i < i_command ; i++ ) FREE( ppsz_command[i] );    FREE( ppsz_command );    *pp_message = p_message;    return VLC_EGENERIC;}static vlm_media_t *vlm_MediaSearch( vlm_t *vlm, char *psz_name ){    int i;    for( i = 0; i < vlm->i_media; i++ )    {        if( strcmp( psz_name, vlm->media[i]->psz_name ) == 0 )        {            return vlm->media[i];        }    }    return NULL;}/***************************************************************************** * Media handling *****************************************************************************/static vlm_media_instance_t *vlm_MediaInstanceSearch( vlm_t *vlm, vlm_media_t *media, char *psz_name ){    int i;    for( i = 0; i < media->i_instance; i++ )    {        if( ( !psz_name && !media->instance[i]->psz_name ) ||            ( psz_name && media->instance[i]->psz_name &&              !strcmp( psz_name, media->instance[i]->psz_name ) ) )        {            return media->instance[i];        }    }    return NULL;}vlm_media_t *vlm_MediaNew( vlm_t *vlm, char *psz_name, int i_type ){    vlm_media_t *media = malloc( sizeof( vlm_media_t ) );    if( !media )    {        msg_Err( vlm, "out of memory" );        return NULL;    }    /* Check if we need to load the VOD server */    if( i_type == VOD_TYPE && !vlm->i_vod )    {        vlm->vod = vlc_object_create( vlm, VLC_OBJECT_VOD );        vlc_object_attach( vlm->vod, vlm );        vlm->vod->p_module = module_Need( vlm->vod, "vod server", 0, 0 );        if( !vlm->vod->p_module )        {            msg_Err( vlm, "cannot find vod server" );            vlc_object_detach( vlm->vod );            vlc_object_destroy( vlm->vod );            vlm->vod = 0;            free( media );            return NULL;        }        vlm->vod->p_data = vlm;        vlm->vod->pf_media_control = vlm_MediaVodControl;    }    if( i_type == VOD_TYPE ) vlm->i_vod++;    media->psz_name = strdup( psz_name );    media->b_enabled = VLC_FALSE;

⌨️ 快捷键说明

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