Files
3d_audio/lib_dsp/lib_dsp/api/dsp_dct.h
Steven Dan d8b2974133 init
2025-12-11 09:43:42 +08:00

170 lines
5.2 KiB
C

// Copyright 2015-2021 XMOS LIMITED.
// This Software is subject to the terms of the XMOS Public Licence: Version 1.
#ifndef DSP_DCT_H_
#define DSP_DCT_H_
#include "stdint.h"
/* This library provides a limited set of discrete cosine transforms */
/* DCT: 48, 32, 24, 16, 12, 8, 6, 4, 3, 2 and 1 point */
/* inverse DCT: 4, 3, 2, 1 point only */
/** This function performs a 48 point DCT
*
* The first output is the DC value, subsequent values are the values for
* the basis vectors of half a cosine, a whole cosine, 1.5 cosine, 2
* consines, etc.
*
* \param input input values to the DCT
* \param output DCT values.
*/
void dsp_dct_forward48(int32_t output[48], int32_t input[48]);
/** This function performs a 32 point DCT
*
* The first output is the DC value, subsequent values are the values for
* the basis vectors of half a cosine, a whole cosine, 1.5 cosine, 2
* consines, etc.
*
* \param input input values to the DCT
* \param output DCT values.
*/
void dsp_dct_forward32(int32_t output[32], int32_t input[32]);
/** This function performs a 24 point DCT
*
* The first output is the DC value, subsequent values are the values for
* the basis vectors of half a cosine, a whole cosine, 1.5 cosine, 2
* consines, etc.
*
* \param input input values to the DCT
* \param output DCT values.
*/
void dsp_dct_forward24(int32_t output[24], int32_t input[24]);
/** This function performs a 16 point DCT
*
* The first output is the DC value, subsequent values are the values for
* the basis vectors of half a cosine, a whole cosine, 1.5 cosine, 2
* consines, etc.
*
* \param input input values to the DCT
* \param output DCT values.
*/
void dsp_dct_forward16(int32_t output[16], int32_t input[16]);
/** This function performs a 12 point DCT
*
* The first output is the DC value, subsequent values are the values for
* the basis vectors of half a cosine, a whole cosine, 1.5 cosine, 2
* consines, etc.
*
* \param input input values to the DCT
* \param output DCT values.
*/
void dsp_dct_forward12(int32_t output[12], int32_t input[12]);
/** This function performs a 8 point DCT
*
* The first output is the DC value, subsequent values are the values for
* the basis vectors of half a cosine, a whole cosine, 1.5 cosine, 2
* consines, etc.
*
* \param input input values to the DCT
* \param output DCT values.
*/
void dsp_dct_forward8(int32_t output[8], int32_t input[8]);
/** This function performs a 6 point DCT
*
* The first output is the DC value, subsequent values are the values for
* the basis vectors of half a cosine, a whole cosine, 1.5 cosine, 2
* consines, etc.
*
* \param input input values to the DCT
* \param output DCT values.
*/
void dsp_dct_forward6(int32_t output[6], int32_t input[6]);
/** This function performs a 4 point DCT
*
* The first output is the DC value, subsequent values are the values for
* the basis vectors of half a cosine, a whole cosine, 1.5 cosine, 2
* consines, etc.
*
* \param input input values to the DCT
* \param output DCT values.
*/
void dsp_dct_forward4(int32_t output[4], int32_t input[4]);
/** This function performs a 3 point DCT
*
* The first output is the DC value, subsequent values are the values for
* the basis vectors of half a cosine, a whole cosine, 1.5 cosine, 2
* consines, etc.
*
* \param input input values to the DCT
* \param output DCT values.
*/
void dsp_dct_forward3(int32_t output[3], int32_t input[3]);
/** This function performs a 2 point DCT
*
* The first output is the DC value, subsequent values are the values for
* the basis vectors of half a cosine, a whole cosine, 1.5 cosine, 2
* consines, etc.
*
* \param input input values to the DCT
* \param output DCT values.
*/
void dsp_dct_forward2(int32_t output[2], int32_t input[2]);
/** This function performs a single point DCT; it copies its input to its
* output.
*
* \param input input values to the DCT
* \param output DCT values.
*/
void dsp_dct_forward1(int32_t output[1], int32_t input[1]);
/** This function performs a 4 point inverse DCT
*
* \param input Basis vector values
* \param output output signal
*/
void dsp_dct_inverse4(int32_t output[4], int32_t input[4]);
/** This function performs a 3 point inverse DCT
*
* \param input Basis vector values
* \param output output signal
*/
void dsp_dct_inverse3(int32_t output[3], int32_t input[3]);
/** This function performs a 2 point inverse DCT
*
* \param input Basis vector values
* \param output output signal
*/
void dsp_dct_inverse2(int32_t output[2], int32_t input[2]);
/** This function performs a 1 point inverse DCT
*
* \param input Basis vector values
* \param output output signal
*/
void dsp_dct_inverse1(int32_t output[1], int32_t input[1]);
#ifdef INCLUDE_REFERENCE_DCT
#include <math.h>
void referenceDCT(int32_t output[], int32_t input[], int32_t N);
void referenceIDCT(int32_t output[], int32_t input[], int32_t N);
#endif
#endif