doubao_chat/include_lib/driver/cpu/wl82/asm/src.h

96 lines
2.8 KiB
C
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#ifndef _SRC_H_
#define _SRC_H_
#include "typedef.h"
#include "generic/circular_buf.h"
/// \cond DO_NOT_DOCUMENT
/**
* @brief src配置参数结构体
*/
typedef struct {
u8 nchannel; /*!< 一次转换的通道个数,取舍范围(1 ~ 8),最大支持8个通道 */
u8 reserver[3]; /*!< 未使用 */
u16 in_rate; /*!< 输入采样率 */
u16 out_rate; /*!< 输出采样率 */
u16 in_chinc; /*!< 输入方向,多通道转换时,每通道数据的地址增量 */
u16 in_spinc; /*!< 输入方向,同一通道后一数据相对前一数据的地址增量 */
u16 out_chinc; /*!< 输出方向,多通道转换时,每通道数据的地址增量 */
u16 out_spinc; /*!< 输出方向,同一通道后一数据相对前一数据的地址增量 */
s16 *in_addr; /*!< 输入数据地址指针 */
u32 in_len; /*!< 输入数据长度 */
s16 *out_addr; /*!< 输出数据地址指针 */
u32 out_len; /*!< 输入数据长度 */
void (*output_cbk)(void *priv, u8 *, u16, u8); /*!< 一次转换完成后,输出中断会调用此函数用于接收输出数据,数据量大小由outbuf_len决定 */
void *priv; /*!< 指针 */
} src_param_t;
/**
* @brief src滤波器参数结构体
*/
typedef struct {
u16 fltb_buf[24 * 2]; /*!< 滤波器buf */
u32 phase; /*!< 相位 */
u8 fltb_offset; /*!< 滤波器偏移量 */
u8 used; /*!< 标记使用中 */
} src_fltb_t;
void src_disable(void);
void src_enable(src_param_t *arg);
u32 src_run(u8 *buf, u16 len);
void src_kick_start(u8 start_flag);
/// \endcond
/**
* @brief src变采样函数
* @param src_param_t:src配置参数结构体
* @param src_fltb_t:src滤波器参数结构体
* @return
*/
void src_resample(src_param_t *src, src_fltb_t *flt);
/**
* @brief src变采样函数使用cbuf存取数据
* @param cbuffer_t *in:输入数据cbuf
* @param cbuffer_t *out:输出数据cbuf
* @param insr:输入数据采样率
* @param insr:outsr
* @param ch:src转换用到的通道数
* @param src_fltb_t:src滤波器参数结构体
*/
void src_resample_cbuf(cbuffer_t *in, cbuffer_t *out, int insr, int outsr, u8 ch, src_fltb_t *flt);
/// \cond DO_NOT_DOCUMENT
#if 0
struct audio_resample_context {
u32 CON;
s16 fltb_addr[24 * 2];
};
struct audio_resample_data {
void *buffer;
int count;
int offset;
u8 ch_num;
u16 sample_rate;
};
/*初始化一个变采样context*/
struct audio_resample_context *audio_resample_open(void);
/*音频数据变采样*/
int audio_resample(struct audio_resample_context *rtx,
struct audio_resample_data *src,
struct audio_resample_data *dst);
/*释放变采样context*/
void audio_resample_close(struct audio_resample_context *rtx);
#endif
/// \endcond
#endif