| /* Copyright (c) 2013 The Chromium OS Authors. All rights reserved. |
| * Use of this source code is governed by a BSD-style license that can be |
| * found in the LICENSE file. |
| */ |
| |
| #ifndef DSPUTIL_H_ |
| #define DSPUTIL_H_ |
| |
| #ifdef __cplusplus |
| extern "C" { |
| #endif |
| |
| #include <stdint.h> |
| |
| #include "cras_audio_format.h" |
| |
| /* Converts from interleaved int16_t samples to non-interleaved float samples. |
| * The int16_t samples have range [-32768, 32767], and the float samples have |
| * range [-1.0, 1.0]. |
| * Args: |
| * input - The interleaved input buffer. Every "channels" samples is a frame. |
| * output - Pointers to output buffers. There are "channels" output buffers. |
| * channels - The number of samples per frame. |
| * frames - The number of frames to convert. |
| * Returns: |
| * Negative error if format isn't supported, otherwise 0. |
| */ |
| int dsp_util_deinterleave(uint8_t *input, float *const *output, int channels, |
| snd_pcm_format_t format, int frames); |
| |
| /* Converts from non-interleaved float samples to interleaved int16_t samples. |
| * The int16_t samples have range [-32768, 32767], and the float samples have |
| * range [-1.0, 1.0]. This is the inverse of dsputil_deinterleave(). |
| * Args: |
| * input - Pointers to input buffers. There are "channels" input buffers. |
| * output - The interleaved output buffer. Every "channels" samples is a |
| * frame. |
| * channels - The number of samples per frame. |
| * frames - The number of frames to convert. |
| * Returns: |
| * Negative error if format isn't supported, otherwise 0. |
| */ |
| int dsp_util_interleave(float *const *input, uint8_t *output, int channels, |
| snd_pcm_format_t format, int frames); |
| |
| /* Disables denormal numbers in floating point calculation. Denormal numbers |
| * happens often in IIR filters, and it can be very slow. |
| */ |
| void dsp_enable_flush_denormal_to_zero(); |
| |
| #ifdef __cplusplus |
| } /* extern "C" */ |
| #endif |
| |
| #endif /* DSPUTIL_H_ */ |