summaryrefslogtreecommitdiffstats
path: root/src/3rdparty/resonance-audio/resonance_audio/utils/planar_interleaved_conversion.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/3rdparty/resonance-audio/resonance_audio/utils/planar_interleaved_conversion.h')
-rw-r--r--src/3rdparty/resonance-audio/resonance_audio/utils/planar_interleaved_conversion.h421
1 files changed, 421 insertions, 0 deletions
diff --git a/src/3rdparty/resonance-audio/resonance_audio/utils/planar_interleaved_conversion.h b/src/3rdparty/resonance-audio/resonance_audio/utils/planar_interleaved_conversion.h
new file mode 100644
index 000000000..ed30be30e
--- /dev/null
+++ b/src/3rdparty/resonance-audio/resonance_audio/utils/planar_interleaved_conversion.h
@@ -0,0 +1,421 @@
+/*
+Copyright 2018 Google Inc. All Rights Reserved.
+
+Licensed under the Apache License, Version 2.0 (the "License");
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS-IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+*/
+
+#ifndef RESONANCE_AUDIO_UTILS_PLANAR_INTERLEAVED_CONVERSION_H_
+#define RESONANCE_AUDIO_UTILS_PLANAR_INTERLEAVED_CONVERSION_H_
+
+#include <vector>
+
+#include "base/integral_types.h"
+#include "base/audio_buffer.h"
+#include "base/logging.h"
+
+namespace vraudio {
+
+// Copies interleaved audio data from a raw float pointer into separate channel
+// buffers specified by a vector of raw float pointers.
+//
+// @param interleaved_buffer Raw float pointer to interleaved audio data.
+// @param num_input_frames Size of |interleaved_buffer| in frames.
+// @param num_input_channels Number of channels in interleaved audio data.
+// @param planar_buffer_ptr Raw float pointers to each planar channel buffer.
+// @param num_output_frames Number of frames per channel in output buffer.
+void PlanarFromInterleaved(const float* interleaved_buffer,
+ size_t num_input_frames, size_t num_input_channels,
+ const std::vector<float*>& planar_buffer_ptr,
+ size_t num_output_frames);
+
+// Copies interleaved audio data from a raw int16 pointer into separate channel
+// buffers specified by a vector of raw float pointers.
+//
+// @param interleaved_buffer Raw int16 pointer to interleaved audio data.
+// @param num_input_frames Size of |interleaved_buffer| in frames.
+// @param num_input_channels Number of channels in interleaved audio data.
+// @param planar_buffer_ptr Raw float pointers to each planar channel buffer.
+// @param num_output_frames Number of frames per channel in output buffer.
+void PlanarFromInterleaved(const int16* interleaved_buffer,
+ size_t num_input_frames, size_t num_input_channels,
+ const std::vector<float*>& planar_buffer_ptr,
+ size_t num_output_frames);
+
+// Copies interleaved audio data from a raw float pointer into a planar
+// |AudioBuffer|. Note that the number of output channels and frames is defined
+// by the target |AudioBuffer| instance.
+//
+// @param interleaved_buffer Raw float pointer to interleaved audio data.
+// @param num_input_frames Size of interleaved_buffer in frames.
+// @param num_input_channels Number of channels in interleaved audio data.
+// @param output Target output buffer.
+void FillAudioBuffer(const float* interleaved_buffer, size_t num_input_frames,
+ size_t num_input_channels, AudioBuffer* output);
+
+// Copies interleaved audio data from a raw int16 pointer into a planar
+// |AudioBuffer|. Note that the number of output channels and frames is defined
+// by the target |AudioBuffer| instance.
+//
+// @param interleaved_buffer Raw int16 pointer to interleaved audio data.
+// @param num_input_frames Size of interleaved_buffer in frames.
+// @param num_input_channels Number of channels in interleaved audio data.
+// @param output Target output buffer.
+void FillAudioBuffer(const int16* interleaved_buffer, size_t num_input_frames,
+ size_t num_input_channels, AudioBuffer* output);
+
+// Copies interleaved audio data from a float vector into a planar
+// |AudioBuffer|. Note that the number of output channels and frames is defined
+// by the target |AudioBuffer| instance.
+//
+// @param interleaved_buffer Interleaved audio data.
+// @param num_input_channels Number of channels in interleaved audio data.
+// @param output Target output buffer.
+void FillAudioBuffer(const std::vector<float>& interleaved_buffer,
+ size_t num_input_channels, AudioBuffer* output);
+
+// Copies interleaved audio data from a int16 vector into a planar
+// |AudioBuffer|. Note that the number of output channels and frames is defined
+// by the target |AudioBuffer| instance.
+//
+// @param interleaved_buffer Interleaved audio data.
+// @param num_input_channels Number of channels in interleaved audio data.
+// @param output Target output buffer.
+void FillAudioBuffer(const std::vector<int16>& interleaved_buffer,
+ size_t num_input_channels, AudioBuffer* output);
+
+// Copies raw planar float audio data into a planar |AudioBuffer|. Note that the
+// number of output channels and frames is defined by the target |AudioBuffer|
+// instance.
+//
+// @param planar_ptrs Pointer to an array of pointers to raw float channel data.
+// @param num_input_frames Size of planar input in frames.
+// @param num_input_channels Number of channels in planar input buffer.
+// @param output Target output buffer.
+void FillAudioBuffer(const float* const* planar_ptrs, size_t num_input_frames,
+ size_t num_input_channels, AudioBuffer* output);
+
+// Copies raw planar int16 audio data into a planar |AudioBuffer|. Note that the
+// number of output channels and frames is defined by the target |AudioBuffer|
+// instance.
+//
+// @param planar_ptrs Pointer to an array of pointers to raw int16 channel data.
+// @param num_input_frames Size of planar input in frames.
+// @param num_input_channels Number of channels in planar input buffer.
+// @param output Target output buffer.
+void FillAudioBuffer(const int16* const* planar_ptrs, size_t num_input_frames,
+ size_t num_input_channels, AudioBuffer* output);
+
+// Copies interleaved audio data from a raw float pointer into a planar
+// |AudioBuffer| with a specified output frame offset. Note that the
+// number of output channels is defined by the target |AudioBuffer| instance.
+//
+// @param interleaved_buffer Raw float pointer to interleaved audio data.
+// @param num_input_frames Size of |interleaved_buffer| in frames.
+// @param num_input_channels Number of channels in interleaved audio data.
+// @param input_frame_offset First source frame position in input.
+// @param output_frame_offset First frame destination in output.
+// @param num_frames_to_copy Number of frames per copy.
+// @param output Target output buffer.
+void FillAudioBufferWithOffset(const float* interleaved_buffer,
+ size_t num_input_frames,
+ size_t num_input_channels,
+ size_t input_frame_offset,
+ size_t output_frame_offset,
+ size_t num_frames_to_copy, AudioBuffer* output);
+
+// Copies interleaved audio data from a raw int16 pointer into a planar
+// |AudioBuffer| with a specified output frame offset. Note that the
+// number of output channels is defined by the target |AudioBuffer| instance.
+//
+// @param interleaved_buffer Raw int16 pointer to interleaved audio data.
+// @param num_input_frames Size of |interleaved_buffer| in frames.
+// @param num_input_channels Number of channels in interleaved audio data.
+// @param input_frame_offset First source frame position in input.
+// @param output_frame_offset First frame destination in output.
+// @param num_frames_to_copy Number of frames per copy.
+// @param output Target output buffer.
+void FillAudioBufferWithOffset(const int16* interleaved_buffer,
+ size_t num_input_frames,
+ size_t num_input_channels,
+ size_t input_frame_offset,
+ size_t output_frame_offset,
+ size_t num_frames_to_copy, AudioBuffer* output);
+
+// Copies raw planar float audio data into a planar |AudioBuffer| with a
+// specified output frame offset. Note that the number of output channels is
+// defined by the target |AudioBuffer| instance.
+//
+// @param planar_ptrs Pointer to an array of pointers to raw float channel data.
+// @param num_input_frames Size of |interleaved_buffer| in frames.
+// @param num_input_channels Number of channels in interleaved audio data.
+// @param input_frame_offset First source frame position in input.
+// @param output_frame_offset First frame destination in output.
+// @param num_frames_to_copy Number of frames per copy.
+// @param output Target output buffer.
+void FillAudioBufferWithOffset(const float* const* planar_ptrs,
+ size_t num_input_frames,
+ size_t num_input_channels,
+ size_t input_frame_offset,
+ size_t output_frame_offset,
+ size_t num_frames_to_copy, AudioBuffer* output);
+
+// Copies raw planar int16 audio data into a planar |AudioBuffer| with a
+// specified output frame offset. Note that the number of output channels is
+// defined by the target |AudioBuffer| instance.
+//
+// @param planar_ptrs Pointer to an array of pointers to raw int16 channel data.
+// @param num_input_frames Size of |interleaved_buffer| in frames.
+// @param num_input_channels Number of channels in interleaved audio data.
+// @param input_frame_offset First source frame position in input.
+// @param output_frame_offset First frame destination in output.
+// @param num_frames_to_copy Number of frames per copy.
+// @param output Target output buffer.
+void FillAudioBufferWithOffset(const int16* const* planar_ptrs,
+ size_t num_input_frames,
+ size_t num_input_channels,
+ size_t input_frame_offset,
+ size_t output_frame_offset,
+ size_t num_frames_to_copy, AudioBuffer* output);
+
+// Copies interleaved audio data from a raw int16 pointer into a planar
+// |AudioBuffer|. The |channel_map| argument allows to reorder the channel
+// mapping between the interleaved input and output buffer. The i'th channel in
+// the output buffer corresponds to the |channel_map[i]|'th input channel. Note
+// that the number of output channels and frames is derived from the target
+// |AudioBuffer| instance.
+//
+// @param interleaved_buffer Raw int16 pointer to interleaved audio data.
+// @param num_input_frames Size of interleaved_buffer in frames.
+// @param num_input_channels Number of input channels.
+// @param channel_map Mapping that maps output channels to input channels
+// @param output Target output buffer.
+void FillAudioBufferWithChannelRemapping(const int16* interleaved_buffer,
+ size_t num_input_frames,
+ size_t num_input_channels,
+ const std::vector<size_t>& channel_map,
+ AudioBuffer* output);
+
+// Copies interleaved audio data from a raw float pointer into a planar
+// |AudioBuffer|. The |channel_map| argument allows to reorder the channel
+// mapping between the interleaved input and output buffer. The i'th channel in
+// the output buffer corresponds to the |channel_map[i]| input channel. Note
+// that the number of output channels and frames is derived from the target
+// |AudioBuffer| instance.
+//
+// @param interleaved_buffer Raw float pointer to interleaved audio data.
+// @param num_input_frames Size of interleaved_buffer in frames.
+// @param num_input_channels Number of input channels.
+// @param channel_map Mapping that maps output channels to input channels
+// @param output Target output buffer.
+void FillAudioBufferWithChannelRemapping(const float* interleaved_buffer,
+ size_t num_input_frames,
+ size_t num_input_channels,
+ const std::vector<size_t>& channel_map,
+ AudioBuffer* output);
+
+// Copies raw planar float audio data into a planar |AudioBuffer|. The
+// |channel_map| argument allows to reorder the channel mapping between the
+// planar input and output buffer. The i'th channel in the output buffer
+// corresponds to the |channel_map[i]| input channel. Note that the number of
+// output channels and frames is derived from the target |AudioBuffer| instance.
+//
+// @param planar_ptrs Pointer to an array of pointers to raw float channel data.
+// @param num_input_frames Size of interleaved_buffer in frames.
+// @param num_input_channels Number of input channels.
+// @param channel_map Mapping that maps output channels to input channels
+// @param output Target output buffer.
+void FillAudioBufferWithChannelRemapping(const float* const* planar_ptr,
+ size_t num_input_frames,
+ size_t num_input_channels,
+ const std::vector<size_t>& channel_map,
+ AudioBuffer* output);
+
+// Copies raw planar int16 audio data into a planar |AudioBuffer|. The
+// |channel_map| argument allows to reorder the channel mapping between the
+// planar input and output buffer. The i'th channel in the output buffer
+// corresponds to the |channel_map[i]| input channel. Note that the number of
+// output channels and frames is derived from the target |AudioBuffer| instance.
+//
+// @param planar_ptrs Pointer to an array of pointers to raw int16 channel data.
+// @param num_input_frames Size of interleaved_buffer in frames.
+// @param num_input_channels Number of input channels.
+// @param channel_map Mapping that maps output channels to input channels
+// @param output Target output buffer.
+void FillAudioBufferWithChannelRemapping(const int16* const* planar_ptr,
+ size_t num_input_frames,
+ size_t num_input_channels,
+ const std::vector<size_t>& channel_map,
+ AudioBuffer* output);
+
+// Copies planar audio data from an |AudioBuffer| to an external interleaved
+// float vector. Note this method resizes the target vector to match number of
+// input samples.
+//
+// @param input Input audio buffer.
+// @param output interleaved output vector.
+void FillExternalBuffer(const AudioBuffer& input, std::vector<float>* output);
+
+// Copies and converts planar audio data from an |AudioBuffer| to an external
+// interleaved int16 vector. Note this method resizes the target vector to match
+// number of input samples.
+//
+// @param input Input audio buffer.
+// @param output interleaved output vector.
+void FillExternalBuffer(const AudioBuffer& input, std::vector<int16>* output);
+
+// Copies planar audio data from an |AudioBuffer| to an external planar raw
+// float buffer. Note that the input and output buffer must match in terms of
+// number of channels and frames.
+//
+// @param input Input audio buffer.
+// @param planar_output_ptrs Planar output vector.
+// @param num_output_frames Number of frames in output buffer.
+// @param num_output_channels Number of channels in output buffer.
+void FillExternalBuffer(const AudioBuffer& input,
+ float* const* planar_output_ptrs,
+ size_t num_output_frames, size_t num_output_channels);
+
+// Copies and converts audio data from an |AudioBuffer| to an external planar
+// int16 buffer. Note that the input and output buffer must match in terms of
+// number of channels and frames.
+//
+// @param input Input audio buffer.
+// @param planar_output_ptrs Planar output vector.
+// @param num_output_frames Number of frames in output buffer.
+// @param num_output_channels Number of channels in output buffer.
+void FillExternalBuffer(const AudioBuffer& input,
+ int16* const* planar_output_ptrs,
+ size_t num_output_frames, size_t num_output_channels);
+
+// Copies and converts planar audio data from an |AudioBuffer| to an external
+// interleaved raw int16 buffer. Note that the input and output buffer must
+// match in terms of number of channels and frames.
+//
+// @param input Input audio buffer.
+// @param interleaved_output_buffer Interleaved output vector.
+// @param num_output_frames Number of frames in output buffer.
+// @param num_output_channels Number of channels in output buffer.
+void FillExternalBuffer(const AudioBuffer& input,
+ int16* interleaved_output_buffer,
+ size_t num_output_frames, size_t num_output_channels);
+
+// Copies planar audio data from an |AudioBuffer| to an external interleaved
+// raw float buffer. Note that the input and output buffer must match in terms
+// of number of channels and frames.
+//
+// @param input Input audio buffer.
+// @param interleaved_output_buffer Interleaved output vector.
+// @param num_output_frames Number of frames in output buffer.
+// @param num_output_channels Number of channels in output buffer.
+void FillExternalBuffer(const AudioBuffer& input,
+ float* interleaved_output_buffer,
+ size_t num_output_frames, size_t num_output_channels);
+
+// Copies and converts audio data from an |AudioBuffer| to an external
+// planar raw int16 buffer with the ability to specify an offset into the
+// input and output buffer.
+//
+// @param input Input audio buffer.
+// @param input_offset_frames Offset into input buffer in frames.
+// @param planar_output_ptrs Planar output vector.
+// @param num_output_frames Number of frames in output buffer.
+// @param num_output_channels Number of channels in output buffer.
+// @param output_offset_frames Offset into the output buffer in frames.
+// @param num_frames_convert_and_copy Number of frames to be processed.
+void FillExternalBufferWithOffset(const AudioBuffer& input,
+ size_t input_offset_frames,
+ int16* const* planar_output_ptrs,
+ size_t num_output_frames,
+ size_t num_output_channels,
+ size_t output_offset_frames,
+ size_t num_frames_convert_and_copy);
+
+// Copies audio data from an |AudioBuffer| to an external planar raw float
+// buffer with the ability to specify an offset into the input and output
+// buffer.
+//
+// @param input Input audio buffer.
+// @param input_offset_frames Offset into input buffer in frames.
+// @param planar_output_ptrs Planar output vector.
+// @param num_output_frames Number of frames in output buffer.
+// @param num_output_channels Number of channels in output buffer.
+// @param output_offset_frames Offset into the output buffer in frames.
+// @param num_frames_convert_and_copy Number of frames to be processed.
+void FillExternalBufferWithOffset(const AudioBuffer& input,
+ size_t input_offset_frames,
+ float* const* planar_output_ptrs,
+ size_t num_output_frames,
+ size_t num_output_channels,
+ size_t output_offset_frames,
+ size_t num_frames_convert_and_copy);
+
+// Copies and converts audio data from an |AudioBuffer| to an external
+// interleaved raw int16 buffer with the ability to specify an offset into the
+// input and output buffer.
+//
+// @param input Input audio buffer.
+// @param input_offset_frames Offset into input buffer in frames.
+// @param interleaved_output_buffer Interleaved output vector.
+// @param num_output_frames Number of frames in output buffer.
+// @param num_output_channels Number of channels in output buffer.
+// @param output_offset_frames Offset into the output buffer in frames.
+// @param num_frames_convert_and_copy Number of frames to be processed.
+void FillExternalBufferWithOffset(const AudioBuffer& input,
+ size_t input_offset_frames,
+ int16* interleaved_output_buffer,
+ size_t num_output_frames,
+ size_t num_output_channels,
+ size_t output_offset_frames,
+ size_t num_frames_convert_and_copy);
+
+// Copies and audio data from an |AudioBuffer| to an external interleaved raw
+// float buffer with the ability to specify an offset into the input and output
+// buffer.
+//
+// @param input Input audio buffer.
+// @param input_offset_frames Offset into input buffer in frames.
+// @param interleaved_output_buffer Interleaved output vector.
+// @param num_output_frames Number of frames in output buffer.
+// @param num_output_channels Number of channels in output buffer.
+// @param output_offset_frames Offset into the output buffer in frames.
+// @param num_frames_convert_and_copy Number of frames to be processed.
+void FillExternalBufferWithOffset(const AudioBuffer& input,
+ size_t input_offset_frames,
+ float* interleaved_output_buffer,
+ size_t num_output_frames,
+ size_t num_output_channels,
+ size_t output_offset_frames,
+ size_t num_frames_convert_and_copy);
+
+// Generates a vector of mutable float pointers to the beginning of each channel
+// buffer in an |AudioBuffer|. The size of the |channel_ptr_vector| output
+// vector must match the number of channels in |audio_buffer|.
+//
+// @param audio_buffer Audio buffer.
+// @param channel_ptr_vector Output std::vector<float*> vector.
+void GetRawChannelDataPointersFromAudioBuffer(
+ AudioBuffer* audio_buffer, std::vector<float*>* channel_ptr_vector);
+
+// Generates a vector of immutable float pointers to the beginning of each
+// channel buffer in an |AudioBuffer|. The size of the |channel_ptr_vector|
+// output vector must match the number of channels in |audio_buffer|.
+//
+// @param audio_buffer Audio buffer.
+// @param channel_ptr_vector Output std::vector<const float*> vector.
+void GetRawChannelDataPointersFromAudioBuffer(
+ const AudioBuffer& audio_buffer,
+ std::vector<const float*>* channel_ptr_vector);
+
+} // namespace vraudio
+
+#endif // RESONANCE_AUDIO_UTILS_PLANAR_INTERLEAVED_CONVERSION_H_