* id3tag.c: id3 tag parser/skipper based on libid3tag
*****************************************************************************
* Copyright (C) 2001 VideoLAN
- * $Id: id3tag.c,v 1.15 2003/11/02 22:15:14 gbazin Exp $
+ * $Id: id3tag.c,v 1.16 2003/11/25 00:56:34 fenrir Exp $
*
* Authors: Sigmund Augdal <sigmunau@idi.ntnu.no>
*
*****************************************************************************/
static void ParseID3Tag( input_thread_t *p_input, uint8_t *p_data, int i_size )
{
- playlist_t * p_playlist;
- struct id3_tag * p_id3_tag;
- struct id3_frame * p_frame;
- input_info_category_t * p_category;
- int i_strings;
- char * psz_temp;
- int i;
+ playlist_t *p_playlist;
+ struct id3_tag *p_id3_tag;
+ struct id3_frame *p_frame;
+ input_info_category_t *p_category;
+ char *psz_temp;
vlc_value_t val;
+ int i;
var_Get( p_input, "demuxed-id3", &val );
-
if( val.b_bool )
{
msg_Dbg( p_input, "The ID3 tag was already parsed" );
return;
}
+ p_playlist = vlc_object_find( p_input, VLC_OBJECT_PLAYLIST, FIND_PARENT );
+
val.b_bool = VLC_FALSE;
p_id3_tag = id3_tag_parse( p_data, i_size );
p_category = input_InfoCategory( p_input, "ID3" );
while ( ( p_frame = id3_tag_findframe( p_id3_tag , "T", i ) ) )
{
- i_strings = id3_field_getnstrings( &p_frame->fields[1] );
+ playlist_item_t *p_item = p_playlist ? p_playlist->pp_items[p_playlist->i_index] : NULL;
+ int i_strings = id3_field_getnstrings( &p_frame->fields[1] );
+
while ( i_strings > 0 )
{
psz_temp = id3_ucs4_utf8duplicate( id3_field_getstrings( &p_frame->fields[1], --i_strings ) );
}
else if ( !strcmp(p_frame->id, ID3_FRAME_TITLE ) )
{
- p_playlist = vlc_object_find( p_input, VLC_OBJECT_PLAYLIST,
- FIND_PARENT );
- if( p_playlist )
+ if( p_item )
{
- p_playlist->pp_items[p_playlist->i_index]->psz_name =
- strdup( psz_temp );
+ if( p_item->psz_name )
+ {
+ free( p_item->psz_name );
+ }
+ p_item->psz_name = strdup( psz_temp );;
+
val.b_bool = VLC_TRUE;
- vlc_object_release( p_playlist );
}
input_AddInfo( p_category, (char *)p_frame->description,
psz_temp );
}
else if ( !strcmp(p_frame->id, ID3_FRAME_ARTIST ) )
{
- p_playlist = vlc_object_find( p_input, VLC_OBJECT_PLAYLIST,
- FIND_PARENT );
- if( p_playlist )
+ if( p_item )
{
- p_playlist->pp_items[p_playlist->i_index]->psz_author =
- strdup( psz_temp );
+ if( p_item->psz_author )
+ {
+ free( p_item->psz_author );
+ }
+ p_item->psz_author = strdup( psz_temp );
+
val.b_bool = VLC_TRUE;
- vlc_object_release( p_playlist );
}
input_AddInfo( p_category, (char *)p_frame->description,
psz_temp );
id3_tag_delete( p_id3_tag );
if(val.b_bool == VLC_TRUE )
{
- p_playlist = vlc_object_find( p_input,
- VLC_OBJECT_PLAYLIST, FIND_PARENT );
if( p_playlist )
{
val.b_bool = VLC_TRUE;
var_Set( p_playlist, "intf-change", val );
- vlc_object_release( p_playlist );
}
}
val.b_bool = VLC_TRUE;
var_Change( p_input, "demuxed-id3", VLC_VAR_SETVALUE, &val, NULL );
+
+ if( p_playlist )
+ {
+ vlc_object_release( p_playlist );
+ }
}
/*****************************************************************************
* input_programs.c: es_descriptor_t, pgrm_descriptor_t management
*****************************************************************************
* Copyright (C) 1999-2002 VideoLAN
- * $Id: input_programs.c,v 1.123 2003/11/24 03:27:28 rocky Exp $
+ * $Id: input_programs.c,v 1.124 2003/11/25 00:56:35 fenrir Exp $
*
* Authors: Christophe Massiot <massiot@via.ecp.fr>
*
}
if( text2.psz_string ) free( text2.psz_string );
+ free( val.psz_string );
}
if( p_input->stream.i_area_nb == 2 )
sprintf( val.psz_string, "title %i", p_area->i_id );
var_Change( p_input, "navigation", VLC_VAR_DELCHOICE, &val, NULL );
var_Destroy( p_input, val.psz_string );
+
+ free( val.psz_string );
}
/* Remove this area from the stream's list of areas */
* libvlc.c: main libvlc source
*****************************************************************************
* Copyright (C) 1998-2002 VideoLAN
- * $Id: libvlc.c,v 1.102 2003/11/23 18:31:55 alexis Exp $
+ * $Id: libvlc.c,v 1.103 2003/11/25 00:56:34 fenrir Exp $
*
* Authors: Vincent Seguin <seguin@via.ecp.fr>
* Samuel Hocevar <sam@zoy.org>
var_Create( p_vlc, "key-pressed", VLC_VAR_INTEGER );
p_vlc->p_hotkeys = malloc( sizeof(p_hotkeys) );
/* Do a copy (we don't need to modify the strings) */
- p_vlc->p_hotkeys = p_hotkeys;
+ memcpy( p_vlc->p_hotkeys, p_hotkeys, sizeof(p_hotkeys) );
/*
* Initialize playlist and get commandline files
p_vlc->psz_configfile = NULL;
}
+ if( p_vlc->p_hotkeys )
+ {
+ free( p_vlc->p_hotkeys );
+ p_vlc->p_hotkeys = NULL;
+ }
+
/*
* XXX: Free module bank !
*/
* playlist.c : Playlist groups management functions
*****************************************************************************
* Copyright (C) 1999-2001 VideoLAN
- * $Id: group.c,v 1.2 2003/11/12 08:10:21 zorglub Exp $
+ * $Id: group.c,v 1.3 2003/11/25 00:56:35 fenrir Exp $
*
* Authors: Clément Stenac <zorglub@videolan.org>
*
playlist_group_t * playlist_CreateGroup(playlist_t * p_playlist, char *psz_name)
{
playlist_group_t *p_group;
-
int i;
- for( i=0 ; i< p_playlist->i_groups; i++ )
+
+ for( i = 0 ; i < p_playlist->i_groups; i++ )
{
- if( !strcasecmp(p_playlist->pp_groups[i]->psz_name , psz_name ) )
+ if( !strcasecmp( p_playlist->pp_groups[i]->psz_name , psz_name ) )
{
msg_Info( p_playlist, "This group already exists !");
return NULL;
}
/* Allocate the group structure */
- p_group = (playlist_group_t *)malloc( sizeof(playlist_group_t) );
- if( !p_group )
+ if( ( p_group = malloc( sizeof(playlist_group_t) ) ) == NULL )
{
msg_Err( p_playlist, "out of memory" );
return NULL;
for( i=0 ; i<= p_playlist->i_groups; i++ )
{
- if( p_playlist->pp_groups[i]->i_id == i_id )
+ playlist_group_t *p_group = p_playlist->pp_groups[i];
+
+ if( p_group->i_id == i_id )
{
- if( p_playlist->pp_groups[i]->psz_name )
+
+ if( p_group->psz_name )
{
- free( p_playlist->pp_groups[i]->psz_name );
+ free( p_group->psz_name );
}
REMOVE_ELEM( p_playlist->pp_groups,
p_playlist->i_groups,
- i);
+ i );
+ free( p_group );
+
+ return VLC_SUCCESS;
}
}
- return 0;
+ return VLC_SUCCESS;
}
/**
* item.c : Playlist item functions
*****************************************************************************
* Copyright (C) 1999-2001 VideoLAN
- * $Id: item.c,v 1.3 2003/11/23 16:24:20 garf Exp $
+ * $Id: item.c,v 1.4 2003/11/25 00:56:35 fenrir Exp $
*
* Authors: Samuel Hocevar <sam@zoy.org>
*
p_item->psz_name = strdup( psz_name );
p_item->psz_uri = strdup( psz_uri );
- p_item->psz_author = strdup( "" );
+ p_item->psz_author = strdup( "Arg" );
p_item->i_duration = i_duration;
p_item->i_type = 0;
p_item->i_status = 0;
p_item->ppsz_options = NULL;
p_item->i_options = i_options;
- if( i_options )
+ if( i_options > 0 )
{
int i;
- p_item->ppsz_options = (char **)malloc( i_options * sizeof(char *) );
+ p_item->ppsz_options = malloc( i_options * sizeof(char *) );
for( i = 0; i < i_options; i++ )
+ {
p_item->ppsz_options[i] = strdup( ppsz_options[i] );
+ }
}
{
free( p_playlist->pp_items[i_pos]->psz_uri );
}
+ if( p_playlist->pp_items[i_pos]->psz_author )
+ {
+ free( p_playlist->pp_items[i_pos]->psz_author );
+ }
/* XXX: what if the item is still in use? */
free( p_playlist->pp_items[i_pos] );
p_playlist->pp_items[i_pos] = p_item;
int playlist_Delete( playlist_t * p_playlist, int i_pos )
{
vlc_value_t val;
- vlc_mutex_lock( &p_playlist->object_lock );
/* if i_pos is the current played item, playlist should stop playing it */
if( ( p_playlist->i_status == PLAYLIST_RUNNING) && (p_playlist->i_index == i_pos) )
playlist_Command( p_playlist, PLAYLIST_STOP, 0 );
}
+ vlc_mutex_lock( &p_playlist->object_lock );
if( i_pos >= 0 && i_pos < p_playlist->i_size )
{
+ playlist_item_t *p_item = p_playlist->pp_items[i_pos];
+
msg_Dbg( p_playlist, "deleting playlist item « %s »",
- p_playlist->pp_items[i_pos]->psz_name );
+ p_item->psz_name );
- if( p_playlist->pp_items[i_pos]->psz_name )
+ if( p_item->psz_name )
{
- free( p_playlist->pp_items[i_pos]->psz_name );
+ free( p_item->psz_name );
}
- if( p_playlist->pp_items[i_pos]->psz_uri )
+ if( p_item->psz_uri )
{
- free( p_playlist->pp_items[i_pos]->psz_uri );
+ free( p_item->psz_uri );
}
- if( p_playlist->pp_items[i_pos]->psz_author )
+ if( p_item->psz_author )
{
- free( p_playlist->pp_items[i_pos]->psz_author );
+ free( p_item->psz_author );
}
- if( p_playlist->pp_items[i_pos]->i_options )
+ if( p_item->i_options > 0 )
{
int i;
- for( i = 0; i < p_playlist->pp_items[i_pos]->i_options; i++ )
- free( p_playlist->pp_items[i_pos]->ppsz_options[i] );
+ for( i = 0; i < p_item->i_options; i++ )
+ {
+ free( p_item->ppsz_options[i] );
+ }
- free( p_playlist->pp_items[i_pos]->ppsz_options );
+ free( p_item->ppsz_options );
}
/* XXX: what if the item is still in use? */
- free( p_playlist->pp_items[i_pos] );
+ free( p_item );
if( i_pos <= p_playlist->i_index )
{
* playlist.c : Playlist management functions
*****************************************************************************
* Copyright (C) 1999-2001 VideoLAN
- * $Id: playlist.c,v 1.64 2003/11/14 03:51:39 hartman Exp $
+ * $Id: playlist.c,v 1.65 2003/11/25 00:56:35 fenrir Exp $
*
* Authors: Samuel Hocevar <sam@zoy.org>
*
p_playlist->pp_groups = NULL;
p_playlist->i_max_id = 0;
- playlist_CreateGroup( p_playlist, strdup("Normal") );
+ playlist_CreateGroup( p_playlist, "Normal" );
if( vlc_thread_create( p_playlist, "playlist", RunThread,
VLC_THREAD_PRIORITY_LOW, VLC_TRUE ) )
var_Destroy( p_playlist, "intf-change" );
+ while( p_playlist->i_groups > 0 )
+ {
+ playlist_DeleteGroup( p_playlist, p_playlist->pp_groups[0]->i_id );
+ }
+
+ while( p_playlist->i_size > 0 )
+ {
+ playlist_Delete( p_playlist, 0 );
+ }
+
vlc_object_destroy( p_playlist );
}