diff options
| author | Carl Hetherington <cth@carlh.net> | 2016-06-24 12:24:24 +0100 |
|---|---|---|
| committer | Carl Hetherington <cth@carlh.net> | 2016-06-24 12:24:24 +0100 |
| commit | fe3bb9119aceb6f9e83a1a152f37b451c06dbfba (patch) | |
| tree | d51afb247d292ea2da68a8bd5e67ecb9bf3982d2 | |
| parent | 715410f7b36075b39d712479476e83a28042ed7e (diff) | |
| parent | e6bbf120d575c392dd73f036821bba9a8fd4011c (diff) | |
Merge branch '1.0' of git.carlh.net:git/libdcp into 1.0
| -rw-r--r-- | src/sound_asset_writer.cc | 14 |
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())); |
