X-Git-Url: https://git.carlh.net/gitweb/?a=blobdiff_plain;f=src%2Flib%2Faudio_buffers.cc;h=5f2d5539d0293706634f43c7320b9c7dceb2a6a6;hb=8336cba4e6a8c594680696d2337ddc800d84c267;hp=63204dd6a8684fd50897e68dff0b6b8d15ea30c5;hpb=d291ce8580aabc2e4340c9887ea1733325bb1b80;p=dcpomatic.git diff --git a/src/lib/audio_buffers.cc b/src/lib/audio_buffers.cc index 63204dd6a..5f2d5539d 100644 --- a/src/lib/audio_buffers.cc +++ b/src/lib/audio_buffers.cc @@ -1,5 +1,5 @@ /* - Copyright (C) 2012-2017 Carl Hetherington + Copyright (C) 2012-2020 Carl Hetherington This file is part of DCP-o-matic. @@ -18,6 +18,7 @@ */ +#include "util.h" #include "audio_buffers.h" #include "dcpomatic_assert.h" #include @@ -26,7 +27,7 @@ #include using std::bad_alloc; -using boost::shared_ptr; +using std::shared_ptr; /** Construct an AudioBuffers. Audio data is undefined after this constructor. * @param channels Number of channels. @@ -46,12 +47,18 @@ AudioBuffers::AudioBuffers (AudioBuffers const & other) copy_from (&other, other._frames, 0, 0); } -AudioBuffers::AudioBuffers (boost::shared_ptr other) +AudioBuffers::AudioBuffers (std::shared_ptr other) { allocate (other->_channels, other->_frames); copy_from (other.get(), other->_frames, 0, 0); } +AudioBuffers::AudioBuffers (std::shared_ptr other, int32_t frames_to_copy, int32_t read_offset) +{ + allocate (other->_channels, frames_to_copy); + copy_from (other.get(), frames_to_copy, read_offset, 0); +} + AudioBuffers & AudioBuffers::operator= (AudioBuffers const & other) { @@ -185,9 +192,8 @@ AudioBuffers::copy_from (AudioBuffers const * from, int32_t frames_to_copy, int3 return; } - DCPOMATIC_ASSERT (from->channels() == channels()); - DCPOMATIC_ASSERT (from); + DCPOMATIC_ASSERT (from->channels() == channels()); DCPOMATIC_ASSERT (read_offset >= 0 && (read_offset + frames_to_copy) <= from->_allocated_frames); DCPOMATIC_ASSERT (write_offset >= 0 && (write_offset + frames_to_copy) <= _allocated_frames); @@ -303,7 +309,7 @@ AudioBuffers::accumulate_frames (AudioBuffers const * from, int32_t frames, int3 void AudioBuffers::apply_gain (float dB) { - float const linear = pow (10, dB / 20); + float const linear = db_to_linear (dB); for (int i = 0; i < _channels; ++i) { for (int j = 0; j < _frames; ++j) {