replay_gain: fall back to track gain if album gain is unavailable

This commit is contained in:
Max Kellermann
2010-02-17 08:13:34 +01:00
parent 752dfb3d95
commit 48b49e2303
4 changed files with 19 additions and 2 deletions

View File

@@ -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);

View File

@@ -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];
}

View File

@@ -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