X-Git-Url: https://git.carlh.net/gitweb/?a=blobdiff_plain;ds=sidebyside;f=src%2Fsound_asset_writer.cc;h=b0d7bc7d98e9492f97ce3393ec4df9db77b03074;hb=50aa05ae12b2668361f9ec5e52ec6a3313767efa;hp=35c3dab0d4b6222bb17ca89d91bc00bc1f68a0df;hpb=d927e9b913606f4fc982885c7582ecaf0e3c5a1a;p=libdcp.git diff --git a/src/sound_asset_writer.cc b/src/sound_asset_writer.cc index 35c3dab0..b0d7bc7d 100644 --- a/src/sound_asset_writer.cc +++ b/src/sound_asset_writer.cc @@ -36,7 +36,7 @@ #include "exceptions.h" #include "dcp_assert.h" #include "compose.hpp" -#include "AS_DCP.h" +#include using std::min; using std::max; @@ -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()));