[SCM] libgroove/upstream: loudness: fix crash for songs with 0 frames. closes #48
andrewrk-guest at users.alioth.debian.org
andrewrk-guest at users.alioth.debian.org
Mon Mar 17 02:20:50 UTC 2014
The following commit has been merged in the upstream branch:
commit d17a2652f80d9ca67bc6eda9ebc789b3f4c0be4d
Author: Andrew Kelley <superjoe30 at gmail.com>
Date: Sun Mar 16 19:04:11 2014 -0700
loudness: fix crash for songs with 0 frames. closes #48
diff --git a/grooveloudness/loudness.c b/grooveloudness/loudness.c
index 8cd2570..de30431 100644
--- a/grooveloudness/loudness.c
+++ b/grooveloudness/loudness.c
@@ -60,12 +60,20 @@ static int emit_track_info(struct GrooveLoudnessDetectorPrivate *d) {
info->duration = d->track_duration;
ebur128_state *cur_track_state = d->all_track_states[d->cur_track_index];
- ebur128_loudness_global(cur_track_state, &info->loudness);
- ebur128_true_peak(cur_track_state, 0, &info->peak);
- double out;
- ebur128_true_peak(cur_track_state, 1, &out);
- if (out > info->peak) info->peak = out;
- if (info->peak > d->album_peak) d->album_peak = info->peak;
+ if (!cur_track_state) {
+ // we received the end before we expected it. This happens for example
+ // when a DRM-protected song is played. In this situation, set duration to 0
+ // to indicate no song data.
+ info->loudness = 0;
+ info->peak = 0;
+ } else {
+ ebur128_loudness_global(cur_track_state, &info->loudness);
+ ebur128_true_peak(cur_track_state, 0, &info->peak);
+ double out;
+ ebur128_true_peak(cur_track_state, 1, &out);
+ if (out > info->peak) info->peak = out;
+ if (info->peak > d->album_peak) d->album_peak = info->peak;
+ }
groove_queue_put(d->info_queue, info);
@@ -384,6 +392,7 @@ int groove_loudness_detector_detach(struct GrooveLoudnessDetector *detector) {
d->abort_request = 0;
d->info_head = NULL;
d->info_pos = 0;
+ d->track_duration = 0.0;
return 0;
}
--
libgroove packaging
More information about the pkg-multimedia-commits
mailing list