X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;ds=sidebyside;f=include%2Fvlc_input.h;h=6870d521956686ff1a63a317ed08fe89063dd082;hb=8dbb3f39280e6c97cfee687b266e64d63d96e420;hp=8088a3ecef9b0a606eaf9830850cf13c95aac455;hpb=4dbce8899a66f90b3ce9e76f58d9badd0bfb61c3;p=vlc diff --git a/include/vlc_input.h b/include/vlc_input.h index 8088a3ecef..6870d52195 100644 --- a/include/vlc_input.h +++ b/include/vlc_input.h @@ -32,6 +32,7 @@ #include #include +#include struct vlc_meta_t; @@ -189,11 +190,52 @@ VLC_EXPORT(int, input_ItemAddInfo, ( input_item_t *p_i, const char *psz_cat, con #define input_ItemNew( a,b,c ) input_ItemNewExt( a, b, c, 0, NULL, -1 ) #define input_ItemNewExt(a,b,c,d,e,f) __input_ItemNewExt( VLC_OBJECT(a),b,c,d,e,f) -VLC_EXPORT( input_item_t *, __input_ItemNewExt, (vlc_object_t *, const char *, const char*, int, const char *const *, int) ); -VLC_EXPORT( input_item_t *, input_ItemNewWithType, ( vlc_object_t *, const char *, const char *e, int, const char *const *, int, int ) ); +VLC_EXPORT( input_item_t *, __input_ItemNewExt, (vlc_object_t *, const char *, const char*, int, const char *const *, mtime_t i_duration ) ); +VLC_EXPORT( input_item_t *, input_ItemNewWithType, ( vlc_object_t *, const char *, const char *e, int, const char *const *, mtime_t i_duration, int ) ); VLC_EXPORT( input_item_t *, input_ItemGetById, (playlist_t *, int ) ); +/***************************************************************************** + * Meta data helpers + *****************************************************************************/ +static inline void vlc_audio_replay_gain_MergeFromMeta( audio_replay_gain_t *p_dst, + const vlc_meta_t *p_meta ) +{ + int i; + if( !p_meta ) + return; + + for( i = 0; i < p_meta->i_extra; i++ ) + { + const char *psz_name = p_meta->ppsz_extra_name[i]; + const char *psz_value = p_meta->ppsz_extra_value[i]; + + if( !strcasecmp( psz_name, "REPLAYGAIN_TRACK_GAIN" ) || + !strcasecmp( psz_name, "RG_RADIO" ) ) + { + p_dst->pb_gain[AUDIO_REPLAY_GAIN_TRACK] = VLC_TRUE; + p_dst->pf_gain[AUDIO_REPLAY_GAIN_TRACK] = atof( psz_value ); + } + else if( !strcasecmp( psz_name, "REPLAYGAIN_TRACK_PEAK" ) || + !strcasecmp( psz_name, "RG_PEAK" ) ) + { + p_dst->pb_peak[AUDIO_REPLAY_GAIN_TRACK] = VLC_TRUE; + p_dst->pf_peak[AUDIO_REPLAY_GAIN_TRACK] = atof( psz_value ); + } + else if( !strcasecmp( psz_name, "REPLAYGAIN_ALBUM_GAIN" ) || + !strcasecmp( psz_name, "RG_AUDIOPHILE" ) ) + { + p_dst->pb_gain[AUDIO_REPLAY_GAIN_ALBUM] = VLC_TRUE; + p_dst->pf_gain[AUDIO_REPLAY_GAIN_ALBUM] = atof( psz_value ); + } + else if( !strcasecmp( psz_name, "REPLAYGAIN_ALBUM_PEAK" ) ) + { + p_dst->pb_peak[AUDIO_REPLAY_GAIN_ALBUM] = VLC_TRUE; + p_dst->pf_peak[AUDIO_REPLAY_GAIN_ALBUM] = atof( psz_value ); + } + } +} + /***************************************************************************** * Seek point: (generalisation of chapters) *****************************************************************************/ @@ -302,7 +344,57 @@ static inline input_title_t *vlc_input_title_Duplicate( input_title_t *t ) return dup; } +/***************************************************************************** + * Attachments + *****************************************************************************/ +struct input_attachment_t +{ + char *psz_name; + char *psz_mime; + char *psz_description; + int i_data; + void *p_data; +}; +static inline input_attachment_t *vlc_input_attachment_New( const char *psz_name, + const char *psz_mime, + const char *psz_description, + const void *p_data, + int i_data ) +{ + input_attachment_t *a = + (input_attachment_t*)malloc( sizeof(input_attachment_t) ); + if( !a ) + return NULL; + a->psz_name = strdup( psz_name ? psz_name : "" ); + a->psz_mime = strdup( psz_mime ? psz_mime : "" ); + a->psz_description = strdup( psz_description ? psz_description : "" ); + a->i_data = i_data; + a->p_data = NULL; + if( i_data > 0 ) + { + a->p_data = malloc( i_data ); + if( a->p_data && p_data ) + memcpy( a->p_data, p_data, i_data ); + } + return a; +} +static inline input_attachment_t *vlc_input_attachment_Duplicate( const input_attachment_t *a ) +{ + return vlc_input_attachment_New( a->psz_name, a->psz_mime, a->psz_description, + a->p_data, a->i_data ); +} +static inline void vlc_input_attachment_Delete( input_attachment_t *a ) +{ + if( !a ) + return; + free( a->psz_name ); + free( a->psz_mime ); + free( a->psz_description ); + if( a->p_data ) + free( a->p_data ); + free( a ); +} /***************************************************************************** * input defines/constants. *****************************************************************************/ @@ -427,6 +519,10 @@ enum input_query_e INPUT_DEL_BOOKMARK, /* arg1= seekpoint_t * res=can fail */ INPUT_SET_BOOKMARK, /* arg1= int res=can fail */ + /* Attachments */ + INPUT_GET_ATTACHMENTS, /* arg1=input_attachment_t***, arg2=int* res=can fail */ + INPUT_GET_ATTACHMENT, /* arg1=input_attachment_t**, arg2=char* res=can fail */ + /* On the fly input slave */ INPUT_ADD_SLAVE /* arg1= char * */ };