diff options
Diffstat (limited to 'src/sound_asset_writer.cc')
| -rw-r--r-- | src/sound_asset_writer.cc | 65 |
1 files changed, 21 insertions, 44 deletions
diff --git a/src/sound_asset_writer.cc b/src/sound_asset_writer.cc index f789eb3b..0300407c 100644 --- a/src/sound_asset_writer.cc +++ b/src/sound_asset_writer.cc @@ -202,54 +202,17 @@ LIBDCP_ENABLE_WARNINGS void SoundAssetWriter::write(float const * const * data, int data_channels, int frames) { - DCP_ASSERT (!_finalized); - DCP_ASSERT (frames > 0); - - auto const asset_channels = _asset->channels(); - DCP_ASSERT (data_channels <= asset_channels); - - static float const clip = 1.0f - (1.0f / pow (2, 23)); - - if (!_started) { - start (); - } - - for (int i = 0; i < frames; ++i) { - - byte_t* out = _state->frame_buffer.Data() + _frame_buffer_offset; - - /* Write one sample per asset channel */ - for (int j = 0; j < asset_channels; ++j) { - int32_t s = 0; - if (j == 13 && _sync) { - s = _fsk.get(); - } else if (j < data_channels) { - /* Convert sample to 24-bit int, clipping if necessary. */ - float x = data[j][i]; - if (x > clip) { - x = clip; - } else if (x < -clip) { - x = -clip; - } - s = x * (1 << 23); - } - *out++ = (s & 0xff); - *out++ = (s & 0xff00) >> 8; - *out++ = (s & 0xff0000) >> 16; - } - _frame_buffer_offset += 3 * asset_channels; + do_write(data, data_channels, frames); +} - DCP_ASSERT (_frame_buffer_offset <= int(_state->frame_buffer.Capacity())); - /* Finish the MXF frame if required */ - if (_frame_buffer_offset == int (_state->frame_buffer.Capacity())) { - write_current_frame (); - _frame_buffer_offset = 0; - memset (_state->frame_buffer.Data(), 0, _state->frame_buffer.Capacity()); - } - } +void +SoundAssetWriter::write(int32_t const * const * data, int data_channels, int frames) +{ + do_write(data, data_channels, frames); } + void SoundAssetWriter::write_current_frame () { @@ -367,3 +330,17 @@ SoundAssetWriter::create_sync_packets () return bs.get(); } + +byte_t* +SoundAssetWriter::frame_buffer_data() const +{ + return _state->frame_buffer.Data(); +} + + +int +SoundAssetWriter::frame_buffer_capacity() const +{ + return _state->frame_buffer.Capacity(); +} + |
