diff options
| author | Carl Hetherington <cth@carlh.net> | 2016-06-22 02:04:03 +0100 |
|---|---|---|
| committer | Carl Hetherington <cth@carlh.net> | 2016-06-22 02:04:03 +0100 |
| commit | e6bbf120d575c392dd73f036821bba9a8fd4011c (patch) | |
| tree | 299d159b9c0b45bdaa80f729fff9225b2b22c666 /src | |
| parent | a5bf0e4edbdbf7a0818666313b1d3909986342f1 (diff) | |
Small callgrind-informed optimisation.
Diffstat (limited to 'src')
| -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())); |
