X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=src%2Fcontrol%2Fmedia_list_path.h;h=f3565069a0e8c0431293dfb58d5bc5e4b85680d9;hb=12ade3e3bc975d5426ba4af155b7372c31093b31;hp=238e8d014350a6d4df970f04d17e8646a9aa3ab9;hpb=4f87ec3e64d1479cf781bd3ffe243aacfc7c841a;p=vlc diff --git a/src/control/media_list_path.h b/src/control/media_list_path.h index 238e8d0143..f3565069a0 100644 --- a/src/control/media_list_path.h +++ b/src/control/media_list_path.h @@ -25,18 +25,31 @@ #ifndef _LIBVLC_MEDIA_LIST_PATH_H #define _LIBVLC_MEDIA_LIST_PATH_H 1 +typedef int * libvlc_media_list_path_t; /* (Media List Player Internal) */ + /************************************************************************** - * Definition (Media List Player Internal) + * path_dump (Media List Player Internal) **************************************************************************/ -typedef int * libvlc_media_list_path_t; +static inline void libvlc_media_list_path_dump( const libvlc_media_list_path_t path ) +{ + if(!path) + { + printf("NULL path\n"); + return; + } + int i; + for(i = 0; path[i] != -1; i++) + printf("%s%d", i > 0 ? "/" : "", path[i]); + printf("\n"); +} /************************************************************************** * path_empty (Media List Player Internal) **************************************************************************/ static inline libvlc_media_list_path_t libvlc_media_list_path_empty( void ) { - libvlc_media_list_path_t ret = malloc(sizeof(int)); + libvlc_media_list_path_t ret = xmalloc(sizeof(int)); ret[0] = -1; return ret; } @@ -46,16 +59,16 @@ static inline libvlc_media_list_path_t libvlc_media_list_path_empty( void ) **************************************************************************/ static inline libvlc_media_list_path_t libvlc_media_list_path_with_root_index( int index ) { - libvlc_media_list_path_t ret = malloc(sizeof(int)*2); + libvlc_media_list_path_t ret = xmalloc(sizeof(int)*2); ret[0] = index; ret[1] = -1; return ret; } /************************************************************************** - * path_deepness (Media List Player Internal) + * path_depth (Media List Player Internal) **************************************************************************/ -static inline int libvlc_media_list_path_deepness( libvlc_media_list_path_t path ) +static inline int libvlc_media_list_path_depth( const libvlc_media_list_path_t path ) { int i; for( i = 0; path[i] != -1; i++ ); @@ -67,35 +80,35 @@ static inline int libvlc_media_list_path_deepness( libvlc_media_list_path_t path **************************************************************************/ static inline void libvlc_media_list_path_append( libvlc_media_list_path_t * p_path, int index ) { - int old_deepness = libvlc_media_list_path_deepness( *p_path ); - *p_path = realloc( *p_path, sizeof(int)*(old_deepness+2)); - *p_path[old_deepness] = index; - *p_path[old_deepness+1] = -1; + int old_depth = libvlc_media_list_path_depth( *p_path ); + *p_path = xrealloc( *p_path, sizeof(int)*(old_depth+2)); + *p_path[old_depth] = index; + *p_path[old_depth+1] = -1; } /************************************************************************** * path_copy_by_appending (Media List Player Internal) **************************************************************************/ -static inline libvlc_media_list_path_t libvlc_media_list_path_copy_by_appending( libvlc_media_list_path_t path, int index ) +static inline libvlc_media_list_path_t libvlc_media_list_path_copy_by_appending( const libvlc_media_list_path_t path, int index ) { libvlc_media_list_path_t ret; - int old_deepness = libvlc_media_list_path_deepness( path ); - ret = malloc( sizeof(int)*(old_deepness+2) ); - memcpy( ret, path, sizeof(int)*(old_deepness+2) ); - ret[old_deepness] = index; - ret[old_deepness+1] = -1; + int old_depth = libvlc_media_list_path_depth( path ); + ret = xmalloc( sizeof(int) * (old_depth + 2) ); + memcpy( ret, path, sizeof(int) * old_depth ); + ret[old_depth] = index; + ret[old_depth+1] = -1; return ret; } /************************************************************************** * path_copy (Media List Player Internal) **************************************************************************/ -static inline libvlc_media_list_path_t libvlc_media_list_path_copy( libvlc_media_list_path_t path ) +static inline libvlc_media_list_path_t libvlc_media_list_path_copy( const libvlc_media_list_path_t path ) { libvlc_media_list_path_t ret; - int deepness = libvlc_media_list_path_deepness( path ); - ret = malloc( sizeof(int)*(deepness+1) ); - memcpy( ret, path, sizeof(int)*(deepness+1) ); + int depth = libvlc_media_list_path_depth( path ); + ret = xmalloc( sizeof(int)*(depth+1) ); + memcpy( ret, path, sizeof(int)*(depth+1) ); return ret; } @@ -103,19 +116,19 @@ static inline libvlc_media_list_path_t libvlc_media_list_path_copy( libvlc_media * get_path_rec (Media List Player Internal) **************************************************************************/ static libvlc_media_list_path_t -get_path_rec( libvlc_media_list_path_t path, libvlc_media_list_t * p_current_mlist, libvlc_media_descriptor_t * p_searched_md ) +get_path_rec( const libvlc_media_list_path_t path, libvlc_media_list_t * p_current_mlist, libvlc_media_t * p_searched_md ) { int i, count; - count = libvlc_media_list_count( p_current_mlist, NULL ); + count = libvlc_media_list_count( p_current_mlist ); for( i = 0; i < count; i++ ) { - libvlc_media_descriptor_t * p_md = libvlc_media_list_item_at_index( p_current_mlist, i, NULL ); + libvlc_media_t * p_md = libvlc_media_list_item_at_index( p_current_mlist, i ); if( p_md == p_searched_md ) return libvlc_media_list_path_copy_by_appending( path, i ); /* Found! */ - libvlc_media_list_t * p_subitems = libvlc_media_descriptor_subitems( p_md, NULL ); - libvlc_media_descriptor_release( p_md ); + libvlc_media_list_t * p_subitems = libvlc_media_subitems( p_md ); + libvlc_media_release( p_md ); if( p_subitems ) { libvlc_media_list_path_t new_path = libvlc_media_list_path_copy_by_appending( path, i ); @@ -134,7 +147,7 @@ get_path_rec( libvlc_media_list_path_t path, libvlc_media_list_t * p_current_mli /************************************************************************** * path_of_item (Media List Player Internal) **************************************************************************/ -static inline libvlc_media_list_path_t libvlc_media_list_path_of_item( libvlc_media_list_t * p_mlist, libvlc_media_descriptor_t * p_md ) +static inline libvlc_media_list_path_t libvlc_media_list_path_of_item( libvlc_media_list_t * p_mlist, libvlc_media_t * p_md ) { libvlc_media_list_path_t path = libvlc_media_list_path_empty(); libvlc_media_list_path_t ret; @@ -146,15 +159,15 @@ static inline libvlc_media_list_path_t libvlc_media_list_path_of_item( libvlc_me /************************************************************************** * item_at_path (Media List Player Internal) **************************************************************************/ -static libvlc_media_descriptor_t * -libvlc_media_list_item_at_path( libvlc_media_list_t * p_mlist, libvlc_media_list_path_t path ) +static libvlc_media_t * +libvlc_media_list_item_at_path( libvlc_media_list_t * p_mlist, const libvlc_media_list_path_t path ) { libvlc_media_list_t * p_current_mlist = p_mlist; - libvlc_media_descriptor_t * p_md = NULL; + libvlc_media_t * p_md = NULL; int i; for( i = 0; path[i] != -1; i++ ) { - p_md = libvlc_media_list_item_at_index( p_current_mlist, path[i], NULL ); + p_md = libvlc_media_list_item_at_index( p_current_mlist, path[i] ); if( p_current_mlist != p_mlist ) libvlc_media_list_release( p_current_mlist ); @@ -162,9 +175,9 @@ libvlc_media_list_item_at_path( libvlc_media_list_t * p_mlist, libvlc_media_list if( path[i+1] == -1 ) return p_md; - p_current_mlist = libvlc_media_descriptor_subitems( p_md, NULL ); - libvlc_media_descriptor_release( p_md ); - + p_current_mlist = libvlc_media_subitems( p_md ); + libvlc_media_release( p_md ); + if( !p_current_mlist ) return NULL; @@ -173,17 +186,17 @@ libvlc_media_list_item_at_path( libvlc_media_list_t * p_mlist, libvlc_media_list /* Not found, shouldn't happen if the p_path is not empty */ if( p_current_mlist != p_mlist ) libvlc_media_list_release( p_current_mlist ); - return NULL; + return NULL; } /************************************************************************** * parentlist_at_path (Media List Player Internal) **************************************************************************/ static libvlc_media_list_t * -libvlc_media_list_parentlist_at_path( libvlc_media_list_t * p_mlist, libvlc_media_list_path_t path ) +libvlc_media_list_parentlist_at_path( libvlc_media_list_t * p_mlist, const libvlc_media_list_path_t path ) { libvlc_media_list_t * p_current_mlist = p_mlist; - libvlc_media_descriptor_t * p_md = NULL; + libvlc_media_t * p_md = NULL; int i; for( i = 0; path[i] != -1; i++ ) { @@ -191,13 +204,16 @@ libvlc_media_list_parentlist_at_path( libvlc_media_list_t * p_mlist, libvlc_medi libvlc_media_list_release( p_current_mlist ); if( path[i+1] == -1 ) + { + libvlc_media_list_retain(p_current_mlist); return p_current_mlist; + } - p_md = libvlc_media_list_item_at_index( p_current_mlist, path[i], NULL ); + p_md = libvlc_media_list_item_at_index( p_current_mlist, path[i] ); - p_current_mlist = libvlc_media_descriptor_subitems( p_md, NULL ); - libvlc_media_descriptor_release( p_md ); - + p_current_mlist = libvlc_media_subitems( p_md ); + libvlc_media_release( p_md ); + if( !p_current_mlist ) return NULL; @@ -206,24 +222,24 @@ libvlc_media_list_parentlist_at_path( libvlc_media_list_t * p_mlist, libvlc_medi /* Not found, shouldn't happen if the p_path is not empty */ if( p_current_mlist != p_mlist ) libvlc_media_list_release( p_current_mlist ); - return NULL; + return NULL; } /************************************************************************** * sublist_at_path (Media List Player Internal) **************************************************************************/ static libvlc_media_list_t * -libvlc_media_list_sublist_at_path( libvlc_media_list_t * p_mlist, libvlc_media_list_path_t path ) +libvlc_media_list_sublist_at_path( libvlc_media_list_t * p_mlist, const libvlc_media_list_path_t path ) { libvlc_media_list_t * ret; - libvlc_media_descriptor_t * p_md = libvlc_media_list_item_at_path( p_mlist, path ); + libvlc_media_t * p_md = libvlc_media_list_item_at_path( p_mlist, path ); if( !p_md ) return NULL; - - ret = libvlc_media_descriptor_subitems( p_md, NULL ); - libvlc_media_descriptor_release( p_md ); - - return ret; + + ret = libvlc_media_subitems( p_md ); + libvlc_media_release( p_md ); + + return ret; } #endif