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

📄 item.c

📁 VLC Player Source Code
💻 C
📖 第 1 页 / 共 2 页
字号:
    return p_i->p_meta ? p_i->p_meta->i_status & ITEM_PREPARSED : false ;}bool input_item_IsArtFetched( input_item_t *p_i ){    return p_i->p_meta ? p_i->p_meta->i_status & ITEM_ART_FETCHED : false ;}const vlc_meta_t * input_item_GetMetaObject( input_item_t *p_i ){    if( !p_i->p_meta )        p_i->p_meta = vlc_meta_New();    return p_i->p_meta;}void input_item_MetaMerge( input_item_t *p_i, const vlc_meta_t * p_new_meta ){    if( !p_i->p_meta )        p_i->p_meta = vlc_meta_New();    vlc_meta_Merge( p_i->p_meta, p_new_meta );}/** * Get a info item from a given category in a given input item. * * \param p_i The input item to get info from * \param psz_cat String representing the category for the info * \param psz_name String representing the name of the desired info * \return A pointer to the string with the given info if found, or an *         empty string otherwise. The caller should free the returned *         pointer. */char *input_item_GetInfo( input_item_t *p_i,                              const char *psz_cat,                              const char *psz_name ){    int i,j;    vlc_mutex_lock( &p_i->lock );    for( i = 0 ; i< p_i->i_categories  ; i++ )    {        info_category_t *p_cat = p_i->pp_categories[i];        if( !psz_cat || strcmp( p_cat->psz_name, psz_cat ) )            continue;        for( j = 0; j < p_cat->i_infos ; j++ )        {            if( !strcmp( p_cat->pp_infos[j]->psz_name, psz_name ) )            {                char *psz_ret = strdup( p_cat->pp_infos[j]->psz_value );                vlc_mutex_unlock( &p_i->lock );                return psz_ret;            }        }    }    vlc_mutex_unlock( &p_i->lock );    return strdup( "" );}static void input_item_Destroy ( gc_object_t *p_this ){    vlc_object_t *p_obj = (vlc_object_t *)p_this->p_destructor_arg;    libvlc_priv_t *priv = libvlc_priv (p_obj->p_libvlc);    input_item_t *p_input = (input_item_t *) p_this;    int i;    input_item_Clean( p_input );    vlc_object_lock( p_obj->p_libvlc );    ARRAY_BSEARCH( priv->input_items,->i_id, int, p_input->i_id, i);    if( i != -1 )        ARRAY_REMOVE( priv->input_items, i);    vlc_object_unlock( p_obj->p_libvlc );    free( p_input );}int input_item_AddOpt( input_item_t *p_input, const char *psz_option,                      unsigned flags ){    int err = VLC_SUCCESS;    if( psz_option == NULL )        return VLC_EGENERIC;    vlc_mutex_lock( &p_input->lock );    if (flags & VLC_INPUT_OPTION_UNIQUE)    {        for (int i = 0 ; i < p_input->i_options; i++)            if( !strcmp( p_input->ppsz_options[i], psz_option ) )                goto out;    }    uint8_t *flagv = realloc (p_input->optflagv, p_input->optflagc + 1);    if (flagv == NULL)    {        err = VLC_ENOMEM;        goto out;    }    p_input->optflagv = flagv;    flagv[p_input->optflagc++] = flags;    INSERT_ELEM( p_input->ppsz_options, p_input->i_options,                 p_input->i_options, strdup( psz_option ) );out:    vlc_mutex_unlock( &p_input->lock );    return err;}int input_item_AddInfo( input_item_t *p_i,                            const char *psz_cat,                            const char *psz_name,                            const char *psz_format, ... ){    va_list args;    int i;    info_t *p_info = NULL;    info_category_t *p_cat = NULL ;    vlc_mutex_lock( &p_i->lock );    for( i = 0 ; i < p_i->i_categories ; i ++ )    {        if( !strcmp( p_i->pp_categories[i]->psz_name, psz_cat ) )        {            p_cat = p_i->pp_categories[i];            break;        }    }    if( !p_cat )    {        if( !(p_cat = (info_category_t *)malloc( sizeof(info_category_t) )) )        {            vlc_mutex_unlock( &p_i->lock );            return VLC_ENOMEM;        }        p_cat->psz_name = strdup( psz_cat );        p_cat->i_infos = 0;        p_cat->pp_infos = 0;        INSERT_ELEM( p_i->pp_categories, p_i->i_categories, p_i->i_categories,                     p_cat );    }    for( i = 0; i< p_cat->i_infos; i++ )    {        if( !strcmp( p_cat->pp_infos[i]->psz_name, psz_name ) )        {            p_info = p_cat->pp_infos[i];            break;        }    }    if( !p_info )    {        if( ( p_info = (info_t *)malloc( sizeof( info_t ) ) ) == NULL )        {            vlc_mutex_unlock( &p_i->lock );            return VLC_ENOMEM;        }        INSERT_ELEM( p_cat->pp_infos, p_cat->i_infos, p_cat->i_infos, p_info );        p_info->psz_name = strdup( psz_name );    }    else    {        free( p_info->psz_value );    }    va_start( args, psz_format );    if( vasprintf( &p_info->psz_value, psz_format, args) == -1 )        p_info->psz_value = NULL;    va_end( args );    vlc_mutex_unlock( &p_i->lock );    return p_info->psz_value ? VLC_SUCCESS : VLC_ENOMEM;}input_item_t *__input_item_GetById( vlc_object_t *p_obj, int i_id ){    libvlc_priv_t *priv = libvlc_priv (p_obj->p_libvlc);    input_item_t * p_ret = NULL;    int i;    vlc_object_lock( p_obj->p_libvlc );    ARRAY_BSEARCH( priv->input_items, ->i_id, int, i_id, i);    if( i != -1 )        p_ret = ARRAY_VAL( priv->input_items, i);    vlc_object_unlock( p_obj->p_libvlc );    return p_ret;}input_item_t *__input_item_NewExt( vlc_object_t *p_obj, const char *psz_uri,                                  const char *psz_name,                                  int i_options,                                  const char *const *ppsz_options,                                  mtime_t i_duration ){    return input_item_NewWithType( p_obj, psz_uri, psz_name,                                  i_options, ppsz_options,                                  i_duration, ITEM_TYPE_UNKNOWN );}input_item_t *input_item_NewWithType( vlc_object_t *p_obj, const char *psz_uri,                                const char *psz_name,                                int i_options,                                const char *const *ppsz_options,                                mtime_t i_duration,                                int i_type ){    libvlc_priv_t *priv = libvlc_priv (p_obj->p_libvlc);    DECMALLOC_NULL( p_input, input_item_t );    input_item_Init( p_obj, p_input );    vlc_gc_init( p_input, input_item_Destroy, (void *)p_obj->p_libvlc );    vlc_object_lock( p_obj->p_libvlc );    p_input->i_id = ++priv->i_last_input_id;    ARRAY_APPEND( priv->input_items, p_input );    vlc_object_unlock( p_obj->p_libvlc );    p_input->b_fixed_name = false;    if( psz_uri )        p_input->psz_uri = strdup( psz_uri );    else        p_input->psz_uri = NULL;    p_input->i_type = i_type;    p_input->b_prefers_tree = false;    if( p_input->i_type == ITEM_TYPE_UNKNOWN )        GuessType( p_input );    if( psz_name != NULL )        p_input->psz_name = strdup( psz_name );    else if( p_input->i_type == ITEM_TYPE_FILE && p_input->psz_uri )    {        const char *psz_filename = strrchr( p_input->psz_uri, DIR_SEP_CHAR );        if( psz_filename && *psz_filename == DIR_SEP_CHAR )            psz_filename++;        p_input->psz_name = strdup( psz_filename && *psz_filename                                    ? psz_filename : p_input->psz_uri );    }    else        p_input->psz_name = p_input->psz_uri ? strdup( p_input->psz_uri ) : NULL;    p_input->i_duration = i_duration;    for( int i = 0; i < i_options; i++ )        input_item_AddOption( p_input, ppsz_options[i] );    return p_input;}/* Guess the type of the item using the beginning of the mrl */static void GuessType( input_item_t *p_item){    int i;    static struct { const char *psz_search; int i_type; }  types_array[] =    {        { "http", ITEM_TYPE_NET },        { "dvd", ITEM_TYPE_DISC },        { "cdda", ITEM_TYPE_CDDA },        { "mms", ITEM_TYPE_NET },        { "rtsp", ITEM_TYPE_NET },        { "udp", ITEM_TYPE_NET },        { "rtp", ITEM_TYPE_NET },        { "vcd", ITEM_TYPE_DISC },        { "v4l", ITEM_TYPE_CARD },        { "dshow", ITEM_TYPE_CARD },        { "pvr", ITEM_TYPE_CARD },        { "dvb", ITEM_TYPE_CARD },        { "qpsk", ITEM_TYPE_CARD },        { "sdp", ITEM_TYPE_NET },        { NULL, 0 }    };    if( !p_item->psz_uri )    {        p_item->i_type = ITEM_TYPE_FILE;        return;    }    for( i = 0; types_array[i].psz_search != NULL; i++ )    {        if( !strncmp( p_item->psz_uri, types_array[i].psz_search,                      strlen( types_array[i].psz_search ) ) )        {            p_item->i_type = types_array[i].i_type;            return;        }    }    p_item->i_type = ITEM_TYPE_FILE;}

⌨️ 快捷键说明

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