aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorJonathan Dieter <jdieter@lesbg.com>2012-04-23 22:15:23 +0200
committerMax Kellermann <max@duempel.org>2012-04-23 23:29:53 +0200
commit7c6d1896a46ef139a76751cf0edc6576dd7c44e5 (patch)
tree2d23d467a8e58963f59179a12c2749c038f983e1 /src
parentad83c7f704a644efcf92d49c82317b0f9aacecf6 (diff)
downloadmpd-7c6d1896a46ef139a76751cf0edc6576dd7c44e5.tar.gz
mpd-7c6d1896a46ef139a76751cf0edc6576dd7c44e5.tar.xz
mpd-7c6d1896a46ef139a76751cf0edc6576dd7c44e5.zip
tag_rva2: support separate album/track replay gain
Diffstat (limited to 'src')
-rw-r--r--src/tag_rva2.c15
1 files changed, 11 insertions, 4 deletions
diff --git a/src/tag_rva2.c b/src/tag_rva2.c
index a08e1eae5..776146fc5 100644
--- a/src/tag_rva2.c
+++ b/src/tag_rva2.c
@@ -22,6 +22,7 @@
#include "replay_gain_info.h"
#include <stdint.h>
+#include <string.h>
#include <glib.h>
#include <id3tag.h>
@@ -73,15 +74,21 @@ rva2_float_volume_adjustment(const struct rva2_data *data)
static inline bool
rva2_apply_data(struct replay_gain_info *replay_gain_info,
- const struct rva2_data *data)
+ const struct rva2_data *data, const id3_latin1_t *id)
{
if (data->type != CHANNEL_MASTER_VOLUME)
return false;
float volume_adjustment = rva2_float_volume_adjustment(data);
- replay_gain_info->tuples[REPLAY_GAIN_TRACK].gain = volume_adjustment;
- replay_gain_info->tuples[REPLAY_GAIN_ALBUM].gain = volume_adjustment;
+ if (strcmp((const char *)id, "album") == 0) {
+ replay_gain_info->tuples[REPLAY_GAIN_ALBUM].gain = volume_adjustment;
+ } else if (strcmp((const char *)id, "track") == 0) {
+ replay_gain_info->tuples[REPLAY_GAIN_TRACK].gain = volume_adjustment;
+ } else {
+ replay_gain_info->tuples[REPLAY_GAIN_ALBUM].gain = volume_adjustment;
+ replay_gain_info->tuples[REPLAY_GAIN_TRACK].gain = volume_adjustment;
+ }
return true;
}
@@ -115,7 +122,7 @@ rva2_apply_frame(struct replay_gain_info *replay_gain_info,
if (4 + peak_bytes > length)
break;
- if (rva2_apply_data(replay_gain_info, d))
+ if (rva2_apply_data(replay_gain_info, d, id))
return true;
data += 4 + peak_bytes;