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

📄 playlistinfo.m

📁 VLC Player Source Code
💻 M
📖 第 1 页 / 共 2 页
字号:
    [rootItem refresh];    [o_outline_view reloadData];    /* update the stats once to display p_item change faster */    [self updateStatistics: nil];}- (void)setMeta: (char *)psz_meta forLabel: (id)theItem{    if( psz_meta != NULL && *psz_meta)        [theItem setStringValue: [NSString stringWithUTF8String:psz_meta]];    else        [theItem setStringValue: @""];}- (void)updateStatistics:(NSTimer*)theTimer{    if( !p_item || !p_item->p_stats )    {        [self initMediaPanelStats];        return;    }    vlc_mutex_lock( &p_item->p_stats->lock );    /* input */    [o_read_bytes_txt setStringValue: [NSString stringWithFormat:        @"%8.0f kB", (float)(p_item->p_stats->i_read_bytes)/1000]];    [o_input_bitrate_txt setStringValue: [NSString stringWithFormat:        @"%6.0f kb/s", (float)(p_item->p_stats->f_input_bitrate)*8000]];    [o_demux_bytes_txt setStringValue: [NSString stringWithFormat:        @"%8.0f kB", (float)(p_item->p_stats->i_demux_read_bytes)/1000]];    [o_demux_bitrate_txt setStringValue: [NSString stringWithFormat:        @"%6.0f kb/s", (float)(p_item->p_stats->f_demux_bitrate)*8000]];    /* Video */    [o_video_decoded_txt setIntValue: p_item->p_stats->i_decoded_video];    [o_displayed_txt setIntValue: p_item->p_stats->i_displayed_pictures];    [o_lost_frames_txt setIntValue: p_item->p_stats->i_lost_pictures];    float f_fps = 0;    /* FIXME: input_Control( p_item, INPUT_GET_VIDEO_FPS, &f_fps ); */    [o_fps_txt setFloatValue: f_fps];    /* Sout */    [o_sent_packets_txt setIntValue: p_item->p_stats->i_sent_packets];    [o_sent_bytes_txt setStringValue: [NSString stringWithFormat: @"%8.0f kB",        (float)(p_item->p_stats->i_sent_bytes)/1000]];    [o_sent_bitrate_txt setStringValue: [NSString stringWithFormat:        @"%6.0f kb/s", (float)(p_item->p_stats->f_send_bitrate*8)*1000]];    /* Audio */    [o_audio_decoded_txt setIntValue: p_item->p_stats->i_decoded_audio];    [o_played_abuffers_txt setIntValue: p_item->p_stats->i_played_abuffers];    [o_lost_abuffers_txt setIntValue: p_item->p_stats->i_lost_abuffers];    vlc_mutex_unlock( &p_item->p_stats->lock );}- (IBAction)metaFieldChanged:(id)sender{    [o_saveMetaData_btn setEnabled: YES];}- (IBAction)saveMetaData:(id)sender{    playlist_t * p_playlist = pl_Yield( VLCIntf );    vlc_value_t val;    if( !p_item ) goto error;    meta_export_t p_export;    p_export.p_item = p_item;    /* we can write meta data only in a file */    vlc_mutex_lock( &p_item->lock );    int i_type = p_item->i_type;    vlc_mutex_unlock( &p_item->lock );    if( i_type != ITEM_TYPE_FILE )        goto error;    char *psz_uri_orig = input_item_GetURI( p_item );    char *psz_uri = psz_uri_orig;    if( !strncmp( psz_uri, "file://", 7 ) )        psz_uri += 7; /* strlen("file://") = 7 */    p_export.psz_file = strndup( psz_uri, PATH_MAX );    free( psz_uri_orig );    #define utf8( o_blub ) \        [[o_blub stringValue] UTF8String]    input_item_SetName( p_item, utf8( o_title_txt ) );    input_item_SetTitle( p_item, utf8( o_title_txt ) );    input_item_SetArtist( p_item, utf8( o_author_txt ) );    input_item_SetAlbum( p_item, utf8( o_collection_txt ) );    input_item_SetGenre( p_item, utf8( o_genre_txt ) );    input_item_SetTrackNum( p_item, utf8( o_seqNum_txt ) );    input_item_SetDate( p_item, utf8( o_date_txt ) );    input_item_SetCopyright( p_item, utf8( o_copyright_txt ) );    input_item_SetPublisher( p_item, utf8( o_publisher_txt ) );    input_item_SetDescription( p_item, utf8( o_description_txt ) );    input_item_SetLanguage( p_item, utf8( o_language_txt ) );    PL_LOCK;    p_playlist->p_private = &p_export;    module_t *p_mod = module_Need( p_playlist, "meta writer", NULL, 0 );    if( p_mod )        module_Unneed( p_playlist, p_mod );    PL_UNLOCK;    val.b_bool = true;    var_Set( p_playlist, "intf-change", val );    [self updatePanelWithItem: p_item];    pl_Release( VLCIntf );    [o_saveMetaData_btn setEnabled: NO];    return;error:    pl_Release( VLCIntf );    NSRunAlertPanel(_NS("Error while saving meta"),        _NS("VLC was unable to save the meta data."),        _NS("OK"), nil, nil);}- (input_item_t *)item{    if( p_item ) vlc_gc_incref( p_item );    return p_item;}@end@implementation VLCInfo (NSMenuValidation)- (BOOL)validateMenuItem:(NSMenuItem *)o_mi{    BOOL bEnabled = TRUE;    if( [[o_mi title] isEqualToString: _NS("Information")] )    {        return ![[[VLCMain sharedInstance] getPlaylist] isSelectionEmpty];    }    return TRUE;}@end@implementation VLCInfo (NSTableDataSource)- (int)outlineView:(NSOutlineView *)outlineView numberOfChildrenOfItem:(id)item{    return (item == nil) ? [rootItem numberOfChildren] : [item numberOfChildren];}- (BOOL)outlineView:(NSOutlineView *)outlineView isItemExpandable:(id)item {    return ([item numberOfChildren] > 0);}- (id)outlineView:(NSOutlineView *)outlineView child:(int)index ofItem:(id)item{    return (item == nil) ? [rootItem childAtIndex:index] : (id)[item childAtIndex:index];}- (id)outlineView:(NSOutlineView *)outlineView objectValueForTableColumn:(NSTableColumn *)tableColumn byItem:(id)item{    if ([[tableColumn identifier] isEqualToString:@"0"])    {        return (item == nil) ? @"" : (id)[item name];    }    else    {        return (item == nil) ? @"" : (id)[item value];    }}@end@implementation VLCInfoTreeItem#define IsALeafNode ((id)-1)- (id)initWithName: (NSString *)o_item_name value: (NSString *)o_item_value ID: (int)i_id       parent:(VLCInfoTreeItem *)o_parent_item{    self = [super init];    if( self != nil )    {        o_name = [o_item_name copy];        o_value = [o_item_value copy];        i_object_id = i_id;        o_parent = o_parent_item;        p_item = [[[VLCMain sharedInstance] getInfo] item];        o_children = nil;    }    return( self );}- (id)init{    return [self initWithName:@"main" value:@"" ID:-1 parent:nil];}- (void)dealloc{    if( o_children != IsALeafNode ) [o_children release];    [o_name release];    [o_value release];    if( p_item ) vlc_gc_decref( p_item );    [super dealloc];}/* Creates and returns the array of children * Loads children incrementally */- (NSArray *)children{    if( !p_item ) return nil;    if (o_children == NULL)    {        int i;        if( i_object_id == -1 )        {            vlc_mutex_lock( &p_item->lock );            o_children = [[NSMutableArray alloc] initWithCapacity: p_item->i_categories];            for (i = 0 ; i < p_item->i_categories ; i++)            {                NSString * name = [NSString stringWithUTF8String: p_item->pp_categories[i]->psz_name];                VLCInfoTreeItem * item = [[VLCInfoTreeItem alloc] initWithName:name value:@"" ID:i parent:self];                [item autorelease];                [o_children addObject:item];            }            vlc_mutex_unlock( &p_item->lock );        }        else if( o_parent->i_object_id == -1 )        {            vlc_mutex_lock( &p_item->lock );            info_category_t * cat = p_item->pp_categories[i_object_id];            o_children = [[NSMutableArray alloc] initWithCapacity: cat->i_infos];            for (i = 0 ; i < cat->i_infos ; i++)            {                NSString * name = [NSString stringWithUTF8String: cat->pp_infos[i]->psz_name];                NSString * value = [NSString stringWithUTF8String: cat->pp_infos[i]->psz_value ? : ""];                VLCInfoTreeItem * item = [[VLCInfoTreeItem alloc] initWithName:name value:value ID:i parent:self];                [item autorelease];                [o_children addObject:item];            }            vlc_mutex_unlock( &p_item->lock );        }        else        {            o_children = IsALeafNode;        }    }    return o_children;}- (NSString *)name{    return [[o_name retain] autorelease];}- (NSString *)value{    return [[o_value retain] autorelease];}- (void)refresh{    if( p_item ) vlc_gc_decref( p_item );    p_item = [[[VLCMain sharedInstance] getInfo] item];    if( o_children != NULL )    {        [o_children release];        o_children = NULL;    }}- (VLCInfoTreeItem *)childAtIndex:(int)i_index {    return [[self children] objectAtIndex:i_index];}- (int)numberOfChildren {    id i_tmp = [self children];    return ( i_tmp == IsALeafNode ) ? (-1) : (int)[i_tmp count];}@end

⌨️ 快捷键说明

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