summaryrefslogtreecommitdiff
path: root/src/lib/decoder.cc
diff options
context:
space:
mode:
Diffstat (limited to 'src/lib/decoder.cc')
-rw-r--r--src/lib/decoder.cc26
1 files changed, 14 insertions, 12 deletions
diff --git a/src/lib/decoder.cc b/src/lib/decoder.cc
index 9332511bc..2f02147e3 100644
--- a/src/lib/decoder.cc
+++ b/src/lib/decoder.cc
@@ -165,20 +165,22 @@ Decoder::process_end ()
in to get it to the right length.
*/
- int const audio_short_by_frames =
- (decoding_frames() * dcp_audio_sample_rate (_fs->audio_sample_rate) / _fs->frames_per_second)
+ int64_t const audio_short_by_frames =
+ ((int64_t) decoding_frames() * dcp_audio_sample_rate (_fs->audio_sample_rate) / _fs->frames_per_second)
- _audio_frames_processed;
- int bytes = audio_short_by_frames * _fs->audio_channels * _fs->bytes_per_sample();
-
- int const silence_size = 64 * 1024;
- uint8_t silence[silence_size];
- memset (silence, 0, silence_size);
-
- while (bytes) {
- int const t = min (bytes, silence_size);
- Audio (silence, t);
- bytes -= t;
+ if (audio_short_by_frames >= 0) {
+ int bytes = audio_short_by_frames * _fs->audio_channels * _fs->bytes_per_sample();
+
+ int const silence_size = 64 * 1024;
+ uint8_t silence[silence_size];
+ memset (silence, 0, silence_size);
+
+ while (bytes) {
+ int const t = min (bytes, silence_size);
+ Audio (silence, t);
+ bytes -= t;
+ }
}
}