Home | History | Annotate | Download | only in dsp
      1 /* Copyright (c) 2013 The Chromium OS Authors. All rights reserved.
      2  * Use of this source code is governed by a BSD-style license that can be
      3  * found in the LICENSE file.
      4  */
      5 
      6 #ifndef DSPUTIL_H_
      7 #define DSPUTIL_H_
      8 
      9 #ifdef __cplusplus
     10 extern "C" {
     11 #endif
     12 
     13 #include <stdint.h>
     14 
     15 #include "cras_audio_format.h"
     16 
     17 /* Converts from interleaved int16_t samples to non-interleaved float samples.
     18  * The int16_t samples have range [-32768, 32767], and the float samples have
     19  * range [-1.0, 1.0].
     20  * Args:
     21  *    input - The interleaved input buffer. Every "channels" samples is a frame.
     22  *    output - Pointers to output buffers. There are "channels" output buffers.
     23  *    channels - The number of samples per frame.
     24  *    frames - The number of frames to convert.
     25  * Returns:
     26  *    Negative error if format isn't supported, otherwise 0.
     27  */
     28 int dsp_util_deinterleave(uint8_t *input, float *const *output, int channels,
     29 			  snd_pcm_format_t format, int frames);
     30 
     31 /* Converts from non-interleaved float samples to interleaved int16_t samples.
     32  * The int16_t samples have range [-32768, 32767], and the float samples have
     33  * range [-1.0, 1.0]. This is the inverse of dsputil_deinterleave().
     34  * Args:
     35  *    input - Pointers to input buffers. There are "channels" input buffers.
     36  *    output - The interleaved output buffer. Every "channels" samples is a
     37  *        frame.
     38  *    channels - The number of samples per frame.
     39  *    frames - The number of frames to convert.
     40  * Returns:
     41  *    Negative error if format isn't supported, otherwise 0.
     42  */
     43 int dsp_util_interleave(float *const *input, uint8_t *output, int channels,
     44 			snd_pcm_format_t format, int frames);
     45 
     46 /* Disables denormal numbers in floating point calculation. Denormal numbers
     47  * happens often in IIR filters, and it can be very slow.
     48  */
     49 void dsp_enable_flush_denormal_to_zero();
     50 
     51 #ifdef __cplusplus
     52 } /* extern "C" */
     53 #endif
     54 
     55 #endif /* DSPUTIL_H_ */
     56