← Back to C-Kernel-Engine Docs Doxygen Source Documentation
 
Loading...
Searching...
No Matches
audio_concat_channels_checked.c
Go to the documentation of this file.
3
4#include <stdint.h>
5#include <string.h>
6
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,
12 size_t frames) {
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;
19 if (output_channels != channels) return CK_AUDIO_CONCAT_INVALID;
20 if (!ck_checked_span(left_channels, frames, left_stride, &left_span) ||
21 !ck_checked_span(right_channels, frames, right_stride, &right_span) ||
22 !ck_checked_span(channels, frames, output_stride, &output_span))
24 if (left_elements < left_span || right_elements < right_span ||
25 output_elements < output_span)
27 if (!ck_checked_region(left, left_span) ||
28 !ck_checked_region(right, right_span) ||
29 !ck_checked_region(output, output_span) ||
30 ck_checked_overlap(output, output_span, left, left_span) ||
31 ck_checked_overlap(output, output_span, right, right_span))
33 for (size_t row = 0; row < left_channels; ++row)
34 if (!ck_checked_finite(left + row * left_stride, frames))
36 for (size_t row = 0; row < right_channels; ++row)
37 if (!ck_checked_finite(right + row * right_stride, frames))
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));
45 return CK_AUDIO_CONCAT_OK;
46}
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)
static int ck_checked_finite(const float *ptr, size_t n)
static int ck_checked_span(size_t rows, size_t width, size_t stride, size_t *span)
static int ck_checked_region(const float *ptr, size_t n)
static int ck_checked_overlap(const float *a, size_t na, const float *b, size_t nb)
const char * left
Definition true_bpe.h:138
const char const char * right
Definition true_bpe.h:139