diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/lib/decoder.cc | 26 | ||||
| -rw-r--r-- | src/lib/decoder.h | 2 |
2 files changed, 15 insertions, 13 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; + } } } diff --git a/src/lib/decoder.h b/src/lib/decoder.h index 792f7dde2..14b25c7b0 100644 --- a/src/lib/decoder.h +++ b/src/lib/decoder.h @@ -145,7 +145,7 @@ private: /* Number of audio frames that we have pushed to the encoder (at the DCP sample rate). */ - int _audio_frames_processed; + int64_t _audio_frames_processed; }; #endif |
