summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCarl Hetherington <cth@carlh.net>2016-06-24 12:24:24 +0100
committerCarl Hetherington <cth@carlh.net>2016-06-24 12:24:24 +0100
commitfe3bb9119aceb6f9e83a1a152f37b451c06dbfba (patch)
treed51afb247d292ea2da68a8bd5e67ecb9bf3982d2
parent715410f7b36075b39d712479476e83a28042ed7e (diff)
parente6bbf120d575c392dd73f036821bba9a8fd4011c (diff)
Merge branch '1.0' of git.carlh.net:git/libdcp into 1.0
-rw-r--r--src/sound_asset_writer.cc14
1 files changed, 11 insertions, 3 deletions
diff --git a/src/sound_asset_writer.cc b/src/sound_asset_writer.cc
index 35c3dab0..fccdda28 100644
--- a/src/sound_asset_writer.cc
+++ b/src/sound_asset_writer.cc
@@ -91,19 +91,27 @@ SoundAssetWriter::write (float const * const * data, int frames)
_started = true;
}
+ int const ch = _sound_asset->channels ();
+
for (int i = 0; i < frames; ++i) {
byte_t* out = _state->frame_buffer.Data() + _frame_buffer_offset;
/* Write one sample per channel */
- for (int j = 0; j < _sound_asset->channels(); ++j) {
+ for (int j = 0; j < ch; ++j) {
/* Convert sample to 24-bit int, clipping if necessary. */
- int32_t const s = min (clip, max (-clip, data[j][i])) * (1 << 23);
+ float x = data[j][i];
+ if (x > clip) {
+ x = clip;
+ } else if (x < -clip) {
+ x = -clip;
+ }
+ int32_t const s = x * (1 << 23);
*out++ = (s & 0xff);
*out++ = (s & 0xff00) >> 8;
*out++ = (s & 0xff0000) >> 16;
}
- _frame_buffer_offset += 3 * _sound_asset->channels();
+ _frame_buffer_offset += 3 * ch;
DCP_ASSERT (_frame_buffer_offset <= int (_state->frame_buffer.Capacity()));