mirror of
https://code.videolan.org/videolan/vlc
synced 2024-10-03 01:31:53 +02:00
* include/vlc_input.h, src/playlist/item.c: added vlc_input_item_Init()/Clean() facility.
This commit is contained in:
parent
4d7e35825e
commit
454ccc414a
@ -35,6 +35,7 @@ extern "C" {
|
||||
* Required internal headers
|
||||
*****************************************************************************/
|
||||
#include "vlc_interface.h"
|
||||
#include "vlc_es.h"
|
||||
#include "vlc_input.h"
|
||||
#include "intf_eject.h"
|
||||
#include "vlc_playlist.h"
|
||||
|
@ -62,6 +62,65 @@ struct input_item_t
|
||||
vlc_mutex_t lock; /**< Item cannot be changed without this lock */
|
||||
};
|
||||
|
||||
static inline void vlc_input_item_Init( vlc_object_t *p_o, input_item_t *p_i )
|
||||
{
|
||||
memset( p_i, 0, sizeof(input_item_t) );
|
||||
p_i->psz_name = 0;
|
||||
p_i->psz_uri = 0;
|
||||
p_i->ppsz_options = 0;
|
||||
p_i->pp_categories = 0;
|
||||
p_i->es = 0;
|
||||
vlc_mutex_init( p_o, &p_i->lock );
|
||||
}
|
||||
|
||||
static inline void vlc_input_item_Clean( input_item_t *p_i )
|
||||
{
|
||||
if( p_i->psz_name ) free( p_i->psz_name );
|
||||
if( p_i->psz_uri ) free( p_i->psz_uri );
|
||||
p_i->psz_name = 0;
|
||||
p_i->psz_uri = 0;
|
||||
|
||||
while( p_i->i_options )
|
||||
{
|
||||
p_i->i_options--;
|
||||
if( p_i->ppsz_options[p_i->i_options] )
|
||||
free( p_i->ppsz_options[p_i->i_options] );
|
||||
if( !p_i->i_options ) free( p_i->ppsz_options );
|
||||
}
|
||||
|
||||
while( p_i->i_es )
|
||||
{
|
||||
p_i->i_es--;
|
||||
es_format_Clean( p_i->es[p_i->i_es] );
|
||||
if( !p_i->i_es ) free( p_i->es );
|
||||
}
|
||||
|
||||
while( p_i->i_categories )
|
||||
{
|
||||
info_category_t *p_category =
|
||||
p_i->pp_categories[--(p_i->i_categories)];
|
||||
|
||||
while( p_category->i_infos )
|
||||
{
|
||||
p_category->i_infos--;
|
||||
|
||||
if( p_category->pp_infos[p_category->i_infos]->psz_name )
|
||||
free( p_category->pp_infos[p_category->i_infos]->psz_name);
|
||||
if( p_category->pp_infos[p_category->i_infos]->psz_value )
|
||||
free( p_category->pp_infos[p_category->i_infos]->psz_value );
|
||||
free( p_category->pp_infos[p_category->i_infos] );
|
||||
|
||||
if( !p_category->i_infos ) free( p_category->pp_infos );
|
||||
}
|
||||
|
||||
if( p_category->psz_name ) free( p_category->psz_name );
|
||||
free( p_category );
|
||||
|
||||
if( !p_i->i_categories ) free( p_i->pp_categories );
|
||||
}
|
||||
|
||||
vlc_mutex_destroy( &p_i->lock );
|
||||
}
|
||||
|
||||
/*****************************************************************************
|
||||
* Seek point: (generalisation of chapters)
|
||||
@ -129,6 +188,7 @@ static inline input_title_t *vlc_input_title_New( )
|
||||
|
||||
return t;
|
||||
}
|
||||
|
||||
static inline void vlc_input_title_Delete( input_title_t *t )
|
||||
{
|
||||
int i;
|
||||
@ -169,7 +229,6 @@ static inline input_title_t *vlc_input_title_Duplicate( input_title_t *t )
|
||||
return dup;
|
||||
}
|
||||
|
||||
|
||||
/*****************************************************************************
|
||||
* input defines/constants.
|
||||
*****************************************************************************/
|
||||
@ -357,10 +416,8 @@ enum input_query_e
|
||||
VLC_EXPORT( int, input_vaControl,( input_thread_t *, int i_query, va_list ) );
|
||||
VLC_EXPORT( int, input_Control, ( input_thread_t *, int i_query, ... ) );
|
||||
|
||||
|
||||
VLC_EXPORT( decoder_t *, input_DecoderNew, ( input_thread_t *, es_format_t *, vlc_bool_t b_force_decoder ) );
|
||||
VLC_EXPORT( void, input_DecoderDelete, ( decoder_t * ) );
|
||||
VLC_EXPORT( void, input_DecoderDecode,( decoder_t *, block_t * ) );
|
||||
|
||||
#endif
|
||||
|
||||
|
@ -47,8 +47,9 @@ playlist_item_t * __playlist_ItemNew( vlc_object_t *p_obj,
|
||||
if( p_item == NULL ) return NULL;
|
||||
if( psz_uri == NULL) return NULL;
|
||||
|
||||
memset( p_item, 0, sizeof( playlist_item_t ) );
|
||||
vlc_input_item_Init( p_obj, p_item );
|
||||
|
||||
p_item->input.i_duration = -1;
|
||||
p_item->input.psz_uri = strdup( psz_uri );
|
||||
|
||||
if( psz_name != NULL ) p_item->input.psz_name = strdup( psz_name );
|
||||
@ -58,12 +59,6 @@ playlist_item_t * __playlist_ItemNew( vlc_object_t *p_obj,
|
||||
p_item->i_group = PLAYLIST_TYPE_MANUAL;
|
||||
p_item->i_nb_played = 0;
|
||||
|
||||
p_item->input.i_duration = -1;
|
||||
p_item->input.ppsz_options = NULL;
|
||||
p_item->input.i_options = 0;
|
||||
|
||||
vlc_mutex_init( p_obj, &p_item->input.lock );
|
||||
|
||||
playlist_ItemCreateCategory( p_item, _("General") );
|
||||
return p_item;
|
||||
}
|
||||
@ -76,50 +71,7 @@ playlist_item_t * __playlist_ItemNew( vlc_object_t *p_obj,
|
||||
*/
|
||||
void playlist_ItemDelete( playlist_item_t *p_item )
|
||||
{
|
||||
vlc_mutex_lock( &p_item->input.lock );
|
||||
|
||||
if( p_item->input.psz_name ) free( p_item->input.psz_name );
|
||||
if( p_item->input.psz_uri ) free( p_item->input.psz_uri );
|
||||
|
||||
/* Free the info categories */
|
||||
if( p_item->input.i_categories > 0 )
|
||||
{
|
||||
int i, j;
|
||||
|
||||
for( i = 0; i < p_item->input.i_categories; i++ )
|
||||
{
|
||||
info_category_t *p_category = p_item->input.pp_categories[i];
|
||||
|
||||
for( j = 0; j < p_category->i_infos; j++)
|
||||
{
|
||||
if( p_category->pp_infos[j]->psz_name )
|
||||
{
|
||||
free( p_category->pp_infos[j]->psz_name);
|
||||
}
|
||||
if( p_category->pp_infos[j]->psz_value )
|
||||
{
|
||||
free( p_category->pp_infos[j]->psz_value );
|
||||
}
|
||||
free( p_category->pp_infos[j] );
|
||||
}
|
||||
|
||||
if( p_category->i_infos ) free( p_category->pp_infos );
|
||||
if( p_category->psz_name ) free( p_category->psz_name );
|
||||
free( p_category );
|
||||
}
|
||||
|
||||
free( p_item->input.pp_categories );
|
||||
}
|
||||
|
||||
for( ; p_item->input.i_options > 0; p_item->input.i_options-- )
|
||||
{
|
||||
free( p_item->input.ppsz_options[p_item->input.i_options - 1] );
|
||||
if( p_item->input.i_options == 1 ) free( p_item->input.ppsz_options );
|
||||
}
|
||||
|
||||
vlc_mutex_unlock( &p_item->input.lock );
|
||||
vlc_mutex_destroy( &p_item->input.lock );
|
||||
|
||||
vlc_input_item_Clean( p_item );
|
||||
free( p_item );
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user