X-Git-Url: https://main.carlh.net/gitweb/?a=blobdiff_plain;f=src%2Flib%2Faudio_buffers.h;h=09faf9ee192cc7cc2ee086267102c22133b2c079;hb=8ad854af828575e44db349eed7e9198932ec3d80;hp=51488c39a45dff7e83445f2ede7d0dbce5b1a2a5;hpb=74fe68e5895654e27a7cf8097917c1e95fa89519;p=dcpomatic.git diff --git a/src/lib/audio_buffers.h b/src/lib/audio_buffers.h index 51488c39a..09faf9ee1 100644 --- a/src/lib/audio_buffers.h +++ b/src/lib/audio_buffers.h @@ -25,26 +25,34 @@ #define DCPOMATIC_AUDIO_BUFFERS_H #include +#include /** @class AudioBuffers * @brief A class to hold multi-channel audio data in float format. + * + * The use of int32_t for frame counts in this class is due to the + * round-up to the next power-of-2 code in ::ensure_size; if that + * were changed the frame count could use any integer type. */ class AudioBuffers { public: - AudioBuffers (int channels, int frames); + AudioBuffers (int channels, int32_t frames); AudioBuffers (AudioBuffers const &); AudioBuffers (boost::shared_ptr); ~AudioBuffers (); AudioBuffers & operator= (AudioBuffers const &); - void ensure_size (int); + boost::shared_ptr clone () const; + boost::shared_ptr channel (int) const; + + void ensure_size (int32_t); float** data () const { return _data; } - + float* data (int) const; int channels () const { @@ -55,29 +63,30 @@ public: return _frames; } - void set_frames (int f); + void set_frames (int32_t f); void make_silent (); void make_silent (int c); - void make_silent (int from, int frames); + void make_silent (int32_t from, int32_t frames); void apply_gain (float); - void copy_from (AudioBuffers const * from, int frames_to_copy, int read_offset, int write_offset); - void move (int from, int to, int frames); + void copy_from (AudioBuffers const * from, int32_t frames_to_copy, int32_t read_offset, int32_t write_offset); + void copy_channel_from (AudioBuffers const * from, int from_channel, int to_channel); + void move (int32_t from, int32_t to, int32_t frames); void accumulate_channel (AudioBuffers const * from, int from_channel, int to_channel, float gain = 1); - void accumulate_frames (AudioBuffers const *, int read_offset, int write_offset, int frames); + void accumulate_frames (AudioBuffers const *, int32_t read_offset, int32_t write_offset, int32_t frames); private: - void allocate (int, int); + void allocate (int channels, int32_t frames); void deallocate (); - + /** Number of channels */ int _channels; /** Number of frames (where a frame is one sample across all channels) */ - int _frames; + int32_t _frames; /** Number of frames that _data can hold */ - int _allocated_frames; + int32_t _allocated_frames; /** Audio data (so that, e.g. _data[2][6] is channel 2, sample 6) */ float** _data; };