X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=include%2Fvlc_meta.h;h=0d455117b7742f2608a89b4f82b67a51336e6fd8;hb=9ceef3c75eb9babf9d3163f9f5fad746b55d8352;hp=139c39f2749761a5485b87209125d70bf48026a0;hpb=034ed2f401bcb597820d78a7a1cac14368a1c7eb;p=vlc diff --git a/include/vlc_meta.h b/include/vlc_meta.h index 139c39f274..0d455117b7 100644 --- a/include/vlc_meta.h +++ b/include/vlc_meta.h @@ -2,7 +2,7 @@ * vlc_meta.h ***************************************************************************** * Copyright (C) 2004 VideoLAN - * $Id: vlc_meta.h,v 1.1 2004/01/31 05:24:55 fenrir Exp $ + * $Id$ * * Authors: Laurent Aimar * @@ -34,12 +34,36 @@ #define VLC_META_RATING N_("Rating") #define VLC_META_DATE N_("Date") #define VLC_META_SETTING N_("Setting") -#define VLC_META_URL N_("Url") +#define VLC_META_URL N_("URL") #define VLC_META_LANGUAGE N_("Language") +#define VLC_META_NOW_PLAYING N_("Now Playing") + +#define VLC_META_CDDB_ARTIST N_("CDDB Artist") +#define VLC_META_CDDB_CATEGORY N_("CDDB Category") +#define VLC_META_CDDB_DISCID N_("CDDB Disc ID") +#define VLC_META_CDDB_EXT_DATA N_("CDDB Extended Data") +#define VLC_META_CDDB_GENRE N_("CDDB Genre") +#define VLC_META_CDDB_YEAR N_("CDDB Year") +#define VLC_META_CDDB_TITLE N_("CDDB Title") + +#define VLC_META_CDTEXT_ARRANGER N_("CD-Text Arranger") +#define VLC_META_CDTEXT_COMPOSER N_("CD-Text Composer") +#define VLC_META_CDTEXT_DISCID N_("CD-Text Disc ID") +#define VLC_META_CDTEXT_GENRE N_("CD-Text Genre") +#define VLC_META_CDTEXT_MESSAGE N_("CD-Text Message") +#define VLC_META_CDTEXT_SONGWRITER N_("CD-Text Songwriter") +#define VLC_META_CDTEXT_PERFORMER N_("CD-Text Performer") +#define VLC_META_CDTEXT_TITLE N_("CD-Text Title") + +#define VLC_META_ISO_APPLICATION_ID N_("ISO-9660 Application ID") +#define VLC_META_ISO_PREPARER N_("ISO-9660 Preparer") +#define VLC_META_ISO_PUBLISHER N_("ISO-9660 Publisher") +#define VLC_META_ISO_VOLUME N_("ISO-9660 Volume") +#define VLC_META_ISO_VOLUMESET N_("ISO-9660 Volume Set") + #define VLC_META_CODEC_NAME N_("Codec Name") #define VLC_META_CODEC_DESCRIPTION N_("Codec Description") -typedef struct vlc_meta_t vlc_meta_t; struct vlc_meta_t { /* meta name/value pairs */ @@ -47,14 +71,14 @@ struct vlc_meta_t char **name; char **value; - /* track meta informations */ + /* track meta information */ int i_track; vlc_meta_t **track; }; static inline vlc_meta_t *vlc_meta_New( void ) { - vlc_meta_t *m = malloc( sizeof( vlc_meta_t ) ); + vlc_meta_t *m = (vlc_meta_t*)malloc( sizeof( vlc_meta_t ) ); m->i_meta = 0; m->name = NULL; @@ -65,6 +89,7 @@ static inline vlc_meta_t *vlc_meta_New( void ) return m; } + static inline void vlc_meta_Delete( vlc_meta_t *m ) { int i; @@ -83,15 +108,17 @@ static inline void vlc_meta_Delete( vlc_meta_t *m ) if( m->track ) free( m->track ); free( m ); } -static inline void vlc_meta_Add( vlc_meta_t *m, char *name, char *value ) + +static inline void vlc_meta_Add( vlc_meta_t *m, + const char *name, const char *value ) { - int i_meta = m->i_meta; + m->name = (char**)realloc( m->name, sizeof(char*) * ( m->i_meta + 1 ) ); + m->name[m->i_meta] = strdup( name ); - name = strdup( name ); - value = strdup( value ); + m->value = (char**)realloc( m->value, sizeof(char*) * ( m->i_meta + 1 ) ); + m->value[m->i_meta] = strdup( value ); - TAB_APPEND( m->i_meta, m->name, name ); - TAB_APPEND( i_meta, m->value,value ); + m->i_meta++; } static inline vlc_meta_t *vlc_meta_Duplicate( vlc_meta_t *src ) @@ -105,10 +132,46 @@ static inline vlc_meta_t *vlc_meta_Duplicate( vlc_meta_t *src ) for( i = 0; i < src->i_track; i++ ) { vlc_meta_t *tk = vlc_meta_Duplicate( src->track[i] ); - TAB_APPEND( dst->i_track, dst->track, tk ); + + dst->track = (vlc_meta_t**)realloc( dst->track, sizeof( vlc_meta_t* ) * (dst->i_track+1) ); + dst->track[dst->i_track++] = tk; } return dst; } -#endif +static inline void vlc_meta_Merge( vlc_meta_t *dst, vlc_meta_t *src ) +{ + int i, j; + for( i = 0; i < src->i_meta; i++ ) + { + /* Check if dst contains the entry */ + for( j = 0; j < dst->i_meta; j++ ) + { + if( !strcmp( src->name[i], dst->name[j] ) ) break; + } + if( j < dst->i_meta ) + { + if( dst->value[j] ) free( dst->value[j] ); + dst->value[j] = strdup( src->value[i] ); + } + else vlc_meta_Add( dst, src->name[i], src->value[i] ); + } +} + +static inline char *vlc_meta_GetValue( vlc_meta_t *m, const char *name ) +{ + int i; + for( i = 0; i < m->i_meta; i++ ) + { + if( !strcmp( m->name[i], name ) ) + { + char *value = NULL; + if( m->value[i] ) value = strdup( m->value[i] ); + return value; + } + } + return NULL; +} + +#endif