8 const float *
left,
size_t left_elements,
size_t left_stride,
9 const float *
right,
size_t right_elements,
size_t right_stride,
10 float *output,
size_t output_elements,
size_t output_stride,
11 size_t left_channels,
size_t right_channels,
size_t output_channels,
13 size_t left_span, right_span, output_span, channels;
14 if (!left_channels || !right_channels || !frames)
16 if (left_channels > SIZE_MAX - right_channels)
18 channels = left_channels + right_channels;
24 if (left_elements < left_span || right_elements < right_span ||
25 output_elements < output_span)
33 for (
size_t row = 0; row < left_channels; ++row)
36 for (
size_t row = 0; row < right_channels; ++row)
39 for (
size_t row = 0; row < left_channels; ++row)
40 memcpy(output + row * output_stride,
left + row * left_stride,
41 frames *
sizeof(
float));
42 for (
size_t row = 0; row < right_channels; ++row)
43 memcpy(output + (left_channels + row) * output_stride,
44 right + row * right_stride, frames *
sizeof(
float));
int audio_concat_channels_checked_f32(const float *left, size_t left_elements, size_t left_stride, const float *right, size_t right_elements, size_t right_stride, float *output, size_t output_elements, size_t output_stride, size_t left_channels, size_t right_channels, size_t output_channels, size_t frames)