diff options
| author | Carl Hetherington <cth@carlh.net> | 2012-09-24 13:12:34 +0100 |
|---|---|---|
| committer | Carl Hetherington <cth@carlh.net> | 2012-09-24 13:12:34 +0100 |
| commit | b8b9800d1022fe0912b180e8b3b41fd4b616478a (patch) | |
| tree | 699fd2b2a457b8d716fbabad4ac7f44e6b32b595 | |
| parent | 13d997b1e39ce12415b47f8ccb7f0e51b01ab8ea (diff) | |
Fix problems with overflow on long films.
| -rw-r--r-- | .be/aff5ca2c-44ee-4ed6-800b-4abe9c3e794c/bugs/666e8ba3-f1a3-4245-9d00-9a3a5e048ed9/values | 17 | ||||
| -rw-r--r-- | ChangeLog | 4 | ||||
| -rw-r--r-- | src/lib/decoder.cc | 26 | ||||
| -rw-r--r-- | src/lib/decoder.h | 2 |
4 files changed, 36 insertions, 13 deletions
diff --git a/.be/aff5ca2c-44ee-4ed6-800b-4abe9c3e794c/bugs/666e8ba3-f1a3-4245-9d00-9a3a5e048ed9/values b/.be/aff5ca2c-44ee-4ed6-800b-4abe9c3e794c/bugs/666e8ba3-f1a3-4245-9d00-9a3a5e048ed9/values new file mode 100644 index 000000000..8861f1d19 --- /dev/null +++ b/.be/aff5ca2c-44ee-4ed6-800b-4abe9c3e794c/bugs/666e8ba3-f1a3-4245-9d00-9a3a5e048ed9/values @@ -0,0 +1,17 @@ +creator: Carl Hetherington <cth@carlh.net> + + +reporter: Carl Hetherington <cth@carlh.net> + + +severity: minor + + +status: open + + +summary: Re-setting content file runs thumb scan twice? + + +time: Mon, 24 Sep 2012 09:42:18 +0000 + @@ -1,5 +1,9 @@ 2012-09-24 Carl Hetherington <cth@carlh.net> + * Fix problems with overflow on long films. + +2012-09-24 Carl Hetherington <cth@carlh.net> + * Version 0.52 released. 2012-09-23 Carl Hetherington <cth@carlh.net> 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 |
