vlc | branch: master | Anatoliy Anischovich <[email protected]> | Sat Mar 9 21:29:19 2013 +0200| [23a3b08de9177fe2c0b2d2865afe674c3841325d] | committer: Jean-Baptiste Kempf
audio input core: fix wrong parsing of replaygain tags (fix #8174) Before dictionaries there was a loop, so if-else way was ok, but not now. Also, locale-dependent atof(). Remove unnecessary replaygain stuff from flac demuxer. Signed-off-by: Jean-Baptiste Kempf <[email protected]> > http://git.videolan.org/gitweb.cgi/vlc.git/?a=commit;h=23a3b08de9177fe2c0b2d2865afe674c3841325d --- include/vlc_input.h | 36 ------------------------------------ modules/codec/vorbis.c | 9 +++++---- modules/demux/flac.c | 4 ---- src/input/input_internal.h | 4 ++++ src/input/meta.c | 37 +++++++++++++++++++++++++++++++++++++ 5 files changed, 46 insertions(+), 44 deletions(-) diff --git a/include/vlc_input.h b/include/vlc_input.h index cbd6aab..7c20004 100644 --- a/include/vlc_input.h +++ b/include/vlc_input.h @@ -40,42 +40,6 @@ #include <string.h> /***************************************************************************** - * Meta data helpers - *****************************************************************************/ -static inline void vlc_audio_replay_gain_MergeFromMeta( audio_replay_gain_t *p_dst, - const vlc_meta_t *p_meta ) -{ - const char * psz_value; - - if( !p_meta ) - return; - - if( (psz_value = vlc_meta_GetExtra(p_meta, "REPLAYGAIN_TRACK_GAIN")) || - (psz_value = vlc_meta_GetExtra(p_meta, "RG_RADIO")) ) - { - p_dst->pb_gain[AUDIO_REPLAY_GAIN_TRACK] = true; - p_dst->pf_gain[AUDIO_REPLAY_GAIN_TRACK] = atof( psz_value ); - } - else if( (psz_value = vlc_meta_GetExtra(p_meta, "REPLAYGAIN_TRACK_PEAK" )) || - (psz_value = vlc_meta_GetExtra(p_meta, "RG_PEAK" )) ) - { - p_dst->pb_peak[AUDIO_REPLAY_GAIN_TRACK] = true; - p_dst->pf_peak[AUDIO_REPLAY_GAIN_TRACK] = atof( psz_value ); - } - else if( (psz_value = vlc_meta_GetExtra(p_meta, "REPLAYGAIN_ALBUM_GAIN" )) || - (psz_value = vlc_meta_GetExtra(p_meta, "RG_AUDIOPHILE" )) ) - { - p_dst->pb_gain[AUDIO_REPLAY_GAIN_ALBUM] = true; - p_dst->pf_gain[AUDIO_REPLAY_GAIN_ALBUM] = atof( psz_value ); - } - else if( (psz_value = vlc_meta_GetExtra(p_meta, "REPLAYGAIN_ALBUM_PEAK" )) ) - { - p_dst->pb_peak[AUDIO_REPLAY_GAIN_ALBUM] = true; - p_dst->pf_peak[AUDIO_REPLAY_GAIN_ALBUM] = atof( psz_value ); - } -} - -/***************************************************************************** * Seek point: (generalisation of chapters) *****************************************************************************/ struct seekpoint_t diff --git a/modules/codec/vorbis.c b/modules/codec/vorbis.c index 7cc2ec9..9f3bd47 100644 --- a/modules/codec/vorbis.c +++ b/modules/codec/vorbis.c @@ -34,6 +34,7 @@ #include <vlc_common.h> #include <vlc_plugin.h> #include <vlc_codec.h> +#include <vlc_charset.h> #include <vlc_aout.h> #include <vlc_input.h> #include <vlc_sout.h> @@ -583,7 +584,7 @@ static void ParseVorbisComments( decoder_t *p_dec ) audio_replay_gain_t *r = &p_dec->fmt_out.audio_replay_gain; r->pb_gain[AUDIO_REPLAY_GAIN_TRACK] = true; - r->pf_gain[AUDIO_REPLAY_GAIN_TRACK] = atof( psz_value ); + r->pf_gain[AUDIO_REPLAY_GAIN_TRACK] = us_atof( psz_value ); } else if( !strcasecmp( psz_name, "REPLAYGAIN_TRACK_PEAK" ) || !strcasecmp( psz_name, "RG_PEAK" ) ) @@ -591,7 +592,7 @@ static void ParseVorbisComments( decoder_t *p_dec ) audio_replay_gain_t *r = &p_dec->fmt_out.audio_replay_gain; r->pb_peak[AUDIO_REPLAY_GAIN_TRACK] = true; - r->pf_peak[AUDIO_REPLAY_GAIN_TRACK] = atof( psz_value ); + r->pf_peak[AUDIO_REPLAY_GAIN_TRACK] = us_atof( psz_value ); } else if( !strcasecmp( psz_name, "REPLAYGAIN_ALBUM_GAIN" ) || !strcasecmp( psz_name, "RG_AUDIOPHILE" ) ) @@ -599,14 +600,14 @@ static void ParseVorbisComments( decoder_t *p_dec ) audio_replay_gain_t *r = &p_dec->fmt_out.audio_replay_gain; r->pb_gain[AUDIO_REPLAY_GAIN_ALBUM] = true; - r->pf_gain[AUDIO_REPLAY_GAIN_ALBUM] = atof( psz_value ); + r->pf_gain[AUDIO_REPLAY_GAIN_ALBUM] = us_atof( psz_value ); } else if( !strcasecmp( psz_name, "REPLAYGAIN_ALBUM_PEAK" ) ) { audio_replay_gain_t *r = &p_dec->fmt_out.audio_replay_gain; r->pb_peak[AUDIO_REPLAY_GAIN_ALBUM] = true; - r->pf_peak[AUDIO_REPLAY_GAIN_ALBUM] = atof( psz_value ); + r->pf_peak[AUDIO_REPLAY_GAIN_ALBUM] = us_atof( psz_value ); } else if( !strcasecmp( psz_name, "METADATA_BLOCK_PICTURE" ) ) { /* Do nothing, for now */ } diff --git a/modules/demux/flac.c b/modules/demux/flac.c index a0607f1..c18b5a9 100644 --- a/modules/demux/flac.c +++ b/modules/demux/flac.c @@ -72,7 +72,6 @@ struct demux_sys_t decoder_t *p_packetizer; vlc_meta_t *p_meta; - audio_replay_gain_t replay_gain; int64_t i_time_offset; int64_t i_pts; @@ -128,7 +127,6 @@ static int Open( vlc_object_t * p_this ) p_demux->p_sys = p_sys; p_sys->b_start = true; p_sys->p_meta = NULL; - memset( &p_sys->replay_gain, 0, sizeof(p_sys->replay_gain) ); p_sys->i_length = 0; p_sys->i_time_offset = 0; p_sys->i_pts = 0; @@ -169,7 +167,6 @@ static int Open( vlc_object_t * p_this ) p_sys->attachments[p_sys->i_cover_idx]->psz_name ); vlc_meta_Set( p_sys->p_meta, vlc_meta_ArtworkURL, psz_url ); } - vlc_audio_replay_gain_MergeFromMeta( &p_sys->replay_gain, p_sys->p_meta ); return VLC_SUCCESS; } @@ -224,7 +221,6 @@ static int Demux( demux_t *p_demux ) if( p_sys->p_es == NULL ) { p_sys->p_packetizer->fmt_out.b_packetized = true; - p_sys->p_packetizer->fmt_out.audio_replay_gain = p_sys->replay_gain; p_sys->p_es = es_out_Add( p_demux->out, &p_sys->p_packetizer->fmt_out); } diff --git a/src/input/input_internal.h b/src/input/input_internal.h index b3ad9e7..220f614 100644 --- a/src/input/input_internal.h +++ b/src/input/input_internal.h @@ -253,4 +253,8 @@ int subtitles_Filter( const char *); void input_SplitMRL( const char **, const char **, const char **, const char **, char * ); +/* meta.c */ +void vlc_audio_replay_gain_MergeFromMeta( audio_replay_gain_t *p_dst, + const vlc_meta_t *p_meta ); + #endif diff --git a/src/input/meta.c b/src/input/meta.c index c5efa9c..aeda5d4 100644 --- a/src/input/meta.c +++ b/src/input/meta.c @@ -33,6 +33,7 @@ #include <vlc_url.h> #include <vlc_arrays.h> #include <vlc_modules.h> +#include <vlc_charset.h> #include "input_internal.h" #include "../playlist/art.h" @@ -291,3 +292,39 @@ error: vlc_object_release( p_export ); return VLC_EGENERIC; } + +void vlc_audio_replay_gain_MergeFromMeta( audio_replay_gain_t *p_dst, + const vlc_meta_t *p_meta ) +{ + const char * psz_value; + + if( !p_meta ) + return; + + if( (psz_value = vlc_meta_GetExtra(p_meta, "REPLAYGAIN_TRACK_GAIN")) || + (psz_value = vlc_meta_GetExtra(p_meta, "RG_RADIO")) ) + { + p_dst->pb_gain[AUDIO_REPLAY_GAIN_TRACK] = true; + p_dst->pf_gain[AUDIO_REPLAY_GAIN_TRACK] = us_atof( psz_value ); + } + + if( (psz_value = vlc_meta_GetExtra(p_meta, "REPLAYGAIN_TRACK_PEAK" )) || + (psz_value = vlc_meta_GetExtra(p_meta, "RG_PEAK" )) ) + { + p_dst->pb_peak[AUDIO_REPLAY_GAIN_TRACK] = true; + p_dst->pf_peak[AUDIO_REPLAY_GAIN_TRACK] = us_atof( psz_value ); + } + + if( (psz_value = vlc_meta_GetExtra(p_meta, "REPLAYGAIN_ALBUM_GAIN" )) || + (psz_value = vlc_meta_GetExtra(p_meta, "RG_AUDIOPHILE" )) ) + { + p_dst->pb_gain[AUDIO_REPLAY_GAIN_ALBUM] = true; + p_dst->pf_gain[AUDIO_REPLAY_GAIN_ALBUM] = us_atof( psz_value ); + } + + if( (psz_value = vlc_meta_GetExtra(p_meta, "REPLAYGAIN_ALBUM_PEAK" )) ) + { + p_dst->pb_peak[AUDIO_REPLAY_GAIN_ALBUM] = true; + p_dst->pf_peak[AUDIO_REPLAY_GAIN_ALBUM] = us_atof( psz_value ); + } +} _______________________________________________ vlc-commits mailing list [email protected] http://mailman.videolan.org/listinfo/vlc-commits
