summaryrefslogtreecommitdiff
path: root/src/sound_asset_writer.cc
diff options
context:
space:
mode:
Diffstat (limited to 'src/sound_asset_writer.cc')
-rw-r--r--src/sound_asset_writer.cc65
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();
+}
+