aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorMax Kellermann <max@duempel.org>2010-02-17 08:13:34 +0100
committerMax Kellermann <max@duempel.org>2010-02-17 08:13:34 +0100
commit48b49e230352de10bb3f66a1c85d367dade52001 (patch)
treef457ea9daf5f53f11bb62ff91bb52620dbd265bc /src
parent752dfb3d95482c562e5d24c6ea839c4815de9a6d (diff)
replay_gain: fall back to track gain if album gain is unavailable
Diffstat (limited to 'src')
-rw-r--r--src/filter/replay_gain_filter_plugin.c5
-rw-r--r--src/replay_gain_info.c8
-rw-r--r--src/replay_gain_info.h7
3 files changed, 18 insertions, 2 deletions
diff --git a/src/filter/replay_gain_filter_plugin.c b/src/filter/replay_gain_filter_plugin.c
index 396f185c..248690d1 100644
--- a/src/filter/replay_gain_filter_plugin.c
+++ b/src/filter/replay_gain_filter_plugin.c
@@ -184,9 +184,10 @@ replay_gain_filter_set_info(struct filter *_filter,
struct replay_gain_filter *filter =
(struct replay_gain_filter *)_filter;
- if (info != NULL)
+ if (info != NULL) {
filter->info = *info;
- else
+ replay_gain_info_complete(&filter->info);
+ } else
replay_gain_info_init(&filter->info);
replay_gain_filter_update(filter);
diff --git a/src/replay_gain_info.c b/src/replay_gain_info.c
index 76bd98ac..9ab5b05f 100644
--- a/src/replay_gain_info.c
+++ b/src/replay_gain_info.c
@@ -35,3 +35,11 @@ replay_gain_tuple_scale(const struct replay_gain_tuple *tuple, float preamp)
return scale;
}
+
+void
+replay_gain_info_complete(struct replay_gain_info *info)
+{
+ if (!replay_gain_tuple_defined(&info->tuples[REPLAY_GAIN_ALBUM]))
+ info->tuples[REPLAY_GAIN_ALBUM] =
+ info->tuples[REPLAY_GAIN_TRACK];
+}
diff --git a/src/replay_gain_info.h b/src/replay_gain_info.h
index c61bac38..f39974d5 100644
--- a/src/replay_gain_info.h
+++ b/src/replay_gain_info.h
@@ -63,4 +63,11 @@ replay_gain_tuple_defined(const struct replay_gain_tuple *tuple)
float
replay_gain_tuple_scale(const struct replay_gain_tuple *tuple, float preamp);
+/**
+ * Attempt to auto-complete missing data. In particular, if album
+ * information is missing, track gain is used.
+ */
+void
+replay_gain_info_complete(struct replay_gain_info *info);
+
#endif