← Back to C-Kernel-Engine Docs Doxygen Source Documentation
 
Loading...
Searching...
No Matches
audio_concat_channels_checked.c File Reference
#include "ckernel_audio_concat_checked.h"
#include "checked_float_buffer.h"
#include <stdint.h>
#include <string.h>

Go to the source code of this file.

Functions

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)
 

Function Documentation

◆ audio_concat_channels_checked_f32()

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 
)

Definition at line 7 of file audio_concat_channels_checked.c.

12 {
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}
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

References CK_AUDIO_CONCAT_CAPACITY, CK_AUDIO_CONCAT_INVALID, CK_AUDIO_CONCAT_NONFINITE, CK_AUDIO_CONCAT_OK, CK_AUDIO_CONCAT_OVERFLOW, ck_checked_finite(), ck_checked_overlap(), ck_checked_region(), ck_checked_span(), left, and right.