| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616 | /* * dsp_hal_defs.h * *  Created on: 2019年5月23日 *      Author: wuyufan */#ifndef _DSP_HAL_DEFS_H_#define _DSP_HAL_DEFS_H_#include <stdint.h>#include <drivers/dsp.h>#ifdef __cplusplusextern "C" {#endif#define RINGBUF_TYPE uint32_t/***************************************************************** * DSP compilation time options. You can change these here by * * uncommenting the lines, or on the compiler command line.      * *****************************************************************//* Enable DSP music effect*///#define DSP_SUPPORT_MUSIC_EFFECT/* Enable DSP voice effect */#define DSP_SUPPORT_VOICE_EFFECT/* Enable DSP ASRC  effect *///#define DSP_SUPPORT_ASR_EFFECT/* Enable DSP decoder support resample*///#define DSP_SUPPORT_DECODER_RESAMPLE//Enable DSP print#define DSP_SUPPORT_DEBUG_PRINT/* config DSP mix multi buffer num */#define DSP_SUPPORT_MULTI_BUFFER_NUM    (2)/* config DSP AEC refs buf num */#define DSP_SUPPORT_AEC_REFBUF_NUM  (1)#define DSP_AEC_REF_DELAY (1)#ifdef DSP_SUPPORT_MUSIC_EFFECT/* Enable DSP support player */#define DSP_SUPPORT_PLAYER/* Enable DSP support decoder */#define DSP_SUPPORT_DECODER/* Enable DSP decoder support DAE effect */#define DSP_SUPPORT_DECODER_DAE/* Enable DSP support sbc decoder *///#define DSP_SUPPORT_SBC_DECODER/* Enable DSP support aac decoder */#define DSP_SUPPORT_AAC_DECODER/* Enable DSP support output subwoofer */#define DSP_SUPPORT_OUTPUT_SUBWOOFER#endif#ifdef DSP_SUPPORT_VOICE_EFFECT/* Enable DSP support player */#define DSP_SUPPORT_PLAYER/* Enable DSP support recorder */#define DSP_SUPPORT_RECODER/* Enable DSP support decoder*/#define DSP_SUPPORT_DECODER/* Enable DSP support encoder */#define DSP_SUPPORT_ENCODER/* Enable DSP support AGC*/#define DSP_SUPPORT_AGC/* Enable DSP support PEQ*/#define DSP_SUPPORT_PEQ/* Enable DSP support decoder AGC */#define DSP_SUPPORT_DECODER_AGC/* Enable DSP support decoder PEQ */#define DSP_SUPPORT_DECODER_PEQ/* Enable DSP support encoder AGC */#define DSP_SUPPORT_ENCODER_AGC/* Enable DSP support encoder PEQ */#define DSP_SUPPORT_ENCODER_PEQ/* Enable DSP support msbc decoder */#define DSP_SUPPORT_MSBC_DECODER/* Enable DSP support msbc encoder */#define DSP_SUPPORT_MSBC_ENCODER/* Enable DSP support cvsd decoder *///#define DSP_SUPPORT_CVSD_DECODER/* Enable DSP support cvsd encoder *///#define DSP_SUPPORT_CVSD_ENCODER/* Enable DSP encoder support AEC */#define DSP_SUPPORT_ENCODER_AEC/* Enable DSP AEC SYNC with encoder *///#define DSP_SUPPORT_PLAYER_AEC_SYNC/* Enable DSP hardware AEC SYNC */#define DSP_SUPPORT_HARDWARE_AEC_SYNC/* Enable DSP encoder support CNG */#define DSP_SUPPORT_ENCODER_CNG#endif#if !defined(DSP_SUPPORT_MUSIC_EFFECT) && !defined(DSP_SUPPORT_VOICE_EFFECT)/* Enable DSP support recorder */#define DSP_SUPPORT_RECODER/* Enable DSP support encoder */#define DSP_SUPPORT_ENCODER/* Enable DSP support aac decoder */#define DSP_SUPPORT_OPUS_ENCODER#endif#ifdef DSP_SUPPORT_DEBUG_PRINT#define DSP_PUTS(a)		dsp_puts(a)#define DSP_PRINTHEX(a) dsp_printhex(a)#else#define DSP_PUTS(a)#define DSP_PRINTHEX(a)#endif/* session ids */enum {	DSP_SESSION_DEFAULT = 0,	DSP_SESSION_MEDIA,	DSP_NUM_SESSIONS,};/* session function ids */enum {	/* basic functions */	DSP_FUNCTION_DECODER = 0,	DSP_FUNCTION_ENCODER,	/* complex functions */	DSP_FUNCTION_PLAYER,	DSP_FUNCTION_RECORDER,	DSP_FUNCTION_PREPROCESS,	DSP_FUNCTION_POSTPROCESS,	DSP_NUM_FUNCTIONS,};#define DSP_FUNC_BIT(func) BIT(func)#define DSP_FUNC_ALL BIT_MASK(DSP_NUM_FUNCTIONS)#if defined(DSP_SUPPORT_CVSD_DECODER) || defined(DSP_SUPPORT_CVSD_ENCODER)#define PCM_FRAMESZ (128)#else#define PCM_FRAMESZ (256)#endif/* session command ids */enum {	/* session global commands */	DSP_CMD_USER_DEFINED = 32,	DSP_MIN_SESSION_CMD = DSP_CMD_USER_DEFINED,	/* initialize static params before first run */	DSP_CMD_SESSION_INIT = DSP_MIN_SESSION_CMD,	/* begin session running (with dynamic params) */	DSP_CMD_SESSION_BEGIN,	/* end session running */	DSP_CMD_SESSION_END,	/* user-defined session command started from */	DSP_CMD_SESSION_USER_DEFINED,	DSP_MAX_SESSION_CMD = DSP_MIN_SESSION_CMD + 0xFF,	/* session function commands, function id is required */	DSP_MIN_FUNCTION_CMD = DSP_MAX_SESSION_CMD + 0x1,	/* configure function 288 */	DSP_CMD_FUNCTION_CONFIG = DSP_MIN_FUNCTION_CMD,	/* enable function */	DSP_CMD_FUNCTION_ENABLE,	/* disable function */	DSP_CMD_FUNCTION_DISABLE,	/* debug function */	DSP_CMD_FUNCTION_DEBUG,	/* pause function, like function_disable, but need not finalize function */	DSP_CMD_FUNCTION_PAUSE,	/* debug function, like function_enable, but need not initialize function */	DSP_CMD_FUNCTION_RESUME,	/* user-defined function command started from */	DSP_CMD_FUNCTION_USER_DEFINED,	DSP_MAX_FUNCTION_CMD = DSP_MIN_FUNCTION_CMD + 0xFF,};/* session function configuration ids for complex functions */enum {    /* configure the default parameter set, for basic functions */	DSP_CONFIG_DEFAULT = 0,	/* configure the decoder parameter set, struct decoder_dspfunc_params */	DSP_CONFIG_DECODER,	/* configure the encoder parameter set, struct encoder_dspfunc_params */	DSP_CONFIG_ENCODER,	/* configure the encoder parameter set, struct dae_dspfunc_params */	DSP_CONFIG_DAE,	/* configure the aec reference parameter set, struct aec_dspfunc_ref_params */	DSP_CONFIG_AEC_REF,	/* configure the aec parameter set, struct aec_dspfunc_params */	DSP_CONFIG_AEC,	/* configure the playback mix parameter set, struct mix_dspfunc_params */	DSP_CONFIG_MIX,	/* configure the playback output parameter set, struct output_dspfunc_params */	DSP_CONFIG_OUTPUT,	/* configure the decoder extra parameter set, struct decoder_dspfunc_ext_params */	DSP_CONFIG_DECODER_EXT,	DSP_CONFIG_ENERGY,	DSP_CONFIG_MSIC,	DSP_CONFIG_DAE_DRM,};/* session error state */enum {	/* 1 ~ 31 dev error state >32 session error*/	DSP_BAD_STREAM = 32,};/* codec format definition */enum {	DSP_CODEC_FORMAT_MP3  =  1, /* MP3_TYPE */	DSP_CODEC_FORMAT_WMA  =  2, /* WMA_TYPE */	DSP_CODEC_FORMAT_WAV  =  3, /* WAV_TYPE */	DSP_CODEC_FORMAT_FLAC =  4, /* FLA_TYPE */	DSP_CODEC_FORMAT_APE  =  5, /* APE_TYPE */	DSP_CODEC_FORMAT_AAC  =  6, /* AAC_TYPE */	DSP_CODEC_FORMAT_OGG  =  7, /* OGGC_TYPE */	DSP_CODEC_FORMAT_ACT  =  8, /* ACT_TYPE */	DSP_CODEC_FORMAT_AMR  =  9, /* AMR_TYPE */	DSP_CODEC_FORMAT_SBC  = 10, /* SBC_TYPE */	DSP_CODEC_FORMAT_MSBC = 11, /* MSBC_TYPE */	DSP_CODEC_FORMAT_OPUS = 12, /* OPUS_TYPE */	DSP_CODEC_FORMAT_CVSD = 15, /* CVSD_TYPE */	DSP_CODEC_FORMAT_SPEECH = 16, /* CVSD_TYPE */	DSP_CODEC_FORMAT_PCM = 17, /* LDAC_TYPE */	DSP_CODEC_FORMAT_LDAC = 18, /* LDAC_TYPE */	DSP_CODEC_FORMAT_NAV = 19, /* NAV_TYPE */	DSP_CODEC_FORMAT_NAV_SEP = 20, /* NAV_SEP_TYPE */	DSP_CODEC_FORMAT_AAC_M4A = 21, /* m4A_SEP_TYPE */};enum {	RESAMPLE_SAMPLERATE_16 = 16000,	RESAMPLE_SAMPLERATE_44_1 = 44100,	RESAMPLE_SAMPLERATE_48 = 48000,};enum {	RESAMPLE_FRAMESZ_44_1 = 441,	RESAMPLE_FRAMESZ_48 = 480,	RESAMPLE_FRAMESZ_16 = 160,};enum {    REF_STREAM_NULL = 0,    REF_STREAM_MONO,    REF_STREAM_LEFT,    REF_STREAM_RIGHT,};enum {    MIX_MODE_NULL,    MIX_MODE_LEFT_RIGHT,   //左右输出    MIX_MODE_LEFT,         //左输出    MIX_MODE_RIGHT,        //右输出    MIX_MODE_L_R_SWITCH,   //左右交换    MIX_MODE_L_R_MERGE,    //左右混合};enum {	AEC_NOT_INIT = 0,    AEC_CONFIGED,	AEC_START,};struct media_dspssn_params {	int16_t aec_en;} __packed;struct media_dspssn_info {	struct media_dspssn_params params;} __packed;/* test function parameters */struct test_dspfunc_params {	RINGBUF_TYPE inbuf;	RINGBUF_TYPE refbuf;	RINGBUF_TYPE outbuf;} __packed;/* test function runtime */struct test_dspfunc_runtime {	uint32_t sample_count;} __packed;/* test function runtime */struct test_dspfunc_debug {	RINGBUF_TYPE inbuf;	RINGBUF_TYPE refbuf;	RINGBUF_TYPE outbuf;} __packed;/* test function information */struct test_dspfunc_info {	struct test_dspfunc_params params;	struct test_dspfunc_runtime runtime;} __packed;/* decoder resample function parameters */struct decoder_resample_params{	uint32_t input_sr;	uint32_t output_sr;	uint32_t input_sample_pairs;	uint32_t output_sample_pairs;} __packed;/* decoder function parameters *//* inbuf-->outbuf-->(resbuf)*/struct decoder_dspfunc_params {	uint16_t slot;	/* decoder slot */	uint16_t format;	uint16_t channels;	uint16_t sample_bits;	uint32_t sample_rate;	RINGBUF_TYPE inbuf;	RINGBUF_TYPE resbuf;	RINGBUF_TYPE outbuf;	struct decoder_resample_params resample_param;} __packed;/* decoder function extended parameters */struct decoder_dspfunc_ext_params {	/* format specific parameter buffer */	uint32_t format_pbuf;	uint32_t format_pbufsz;	/* store events passed by decoder */	RINGBUF_TYPE evtbuf;} __packed;/* mix channel parameters */struct mix_channel_params{    //uint16_t master_channel:1;    uint16_t channels:2;    uint16_t vol:6;    // 0 ~ 31    uint16_t is_mute:1;    uint16_t mix_mode:3;  //MIX_MODE_NULL ...    uint16_t sample_bits:1;  //0:16bit, 1:32bit    uint16_t running:1;    uint16_t master_channel:1;    uint16_t reserved:1;    uint16_t input_sr:8;    uint16_t output_sr:8;    RINGBUF_TYPE chan_buf;    RINGBUF_TYPE res_buf;} __packed;/* mix function parameters */struct mix_dspfunc_params{	uint32_t channel_num;	struct mix_channel_params channel_params[DSP_SUPPORT_MULTI_BUFFER_NUM];} __packed;/* output function parameters */struct output_dspfunc_params{	RINGBUF_TYPE outbuf;	RINGBUF_TYPE outbuf_subwoofer;    RINGBUF_TYPE hdrbuf;    uint32_t sample_bits:1;  //0:16bit, 1:32bit    uint32_t reserved:31;} __packed;/* energy function parameters */struct energy_dspfunc_params{	RINGBUF_TYPE energy_buf;} __packed;/* decoder function runtime */struct decoder_dspfunc_runtime {	uint32_t frame_size;	uint32_t channels;	uint32_t sample_count;	uint32_t datalost_count;	uint32_t raw_count;} __packed;/* decoder function debug options */struct decoder_dspfunc_debug {	RINGBUF_TYPE stream;	RINGBUF_TYPE pcmbuf;	RINGBUF_TYPE plcbuf;} __packed;/* decoder function information */struct decoder_dspfunc_info {	struct decoder_dspfunc_params params;	struct decoder_dspfunc_runtime runtime;	struct decoder_dspfunc_debug debug;	struct decoder_dspfunc_ext_params ext_params;} __packed;/* encoder function parameters */struct encoder_dspfunc_params {	uint16_t slot;	/* encoder slot */	uint16_t format;	uint16_t sub_format;	uint16_t sample_bits;	uint16_t sample_rate_orig;	uint16_t sample_rate;	uint32_t bit_rate;	/* bps, bits per second */	uint16_t complexity;	uint16_t channels;	uint32_t frame_size;	RINGBUF_TYPE inbuf;	RINGBUF_TYPE outbuf;} __packed;/* encoder function runtime */struct encoder_dspfunc_runtime {	uint32_t frame_size;	uint32_t channels;	uint32_t compression_ratio;	uint32_t sample_count;} __packed;/* encoder function debug options */struct encoder_dspfunc_debug {	RINGBUF_TYPE pcmbuf;	RINGBUF_TYPE stream;} __packed;/* encoder function information */struct encoder_dspfunc_info {	struct encoder_dspfunc_params params;	struct encoder_dspfunc_runtime runtime;	struct encoder_dspfunc_debug debug;} __packed;/* preprocess function information */struct preprocess_dspfunc_info {	struct encoder_dspfunc_params params;	struct encoder_dspfunc_runtime runtime;	struct encoder_dspfunc_debug debug;} __packed;/* dae function parameters */struct dae_dspfunc_params {	uint32_t pbuf;		/* parameter buffer address */	uint32_t pbufsz;	/* parameter buffer size */} __packed;struct aec_dspfunc_channel_params{	/* aec reference stream type */	int16_t stream_type;	/* ref stream source buffers */    RINGBUF_TYPE srcbuf;	/* ref stream buffers */    RINGBUF_TYPE refbuf;} __packed;/* aec refs channel parameters */struct aec_dspfunc_ref_params{    /* delayed frames */	int16_t delay;    /* ref buffer num */	int16_t channel_num;    /* ref buffer num */    struct aec_dspfunc_channel_params channel[DSP_SUPPORT_AEC_REFBUF_NUM];} __packed;/* aec function parameters */struct aec_dspfunc_params {	/* aec enable or not and aec reterance type */	int16_t enable; //0:disable 1:soft 2:hardware    /* ref buffer num */	int16_t channel_num;	/* aec block size*/	int16_t block_size;	/* dropped count of mic samples to sync with aec reference */	int16_t dropped_samples;    /* mic data buffer */	RINGBUF_TYPE inbuf;    /* ref stream buffers */    RINGBUF_TYPE refbuf[DSP_SUPPORT_AEC_REFBUF_NUM];    /* aec out buffer */    RINGBUF_TYPE outbuf;} __packed;/* misc function parameters */struct misc_dspfunc_parsms {	int16_t auto_mute;	int16_t auto_mute_threshold;	int16_t reserved[2];}__packed;/* postprocessor function parameters */struct streamout_dspfunc_params {	struct dae_dspfunc_params dae;	struct aec_dspfunc_ref_params aec_ref;	struct output_dspfunc_params output;	struct mix_dspfunc_params mix;	struct energy_dspfunc_params energy;	struct misc_dspfunc_parsms misc;} __packed;/* postprocessor function runtime */struct streamout_dspfunc_runtime {} __packed;/* postprocessor function debug options */struct streamout_dspfunc_debug {} __packed;/* encoder function information */struct streamout_dspfunc_info {	struct streamout_dspfunc_params params;	struct streamout_dspfunc_runtime runtime;	struct streamout_dspfunc_debug debug;} __packed;/* player function debug options */struct player_dspfunc_debug {	RINGBUF_TYPE decode_stream;	RINGBUF_TYPE decode_data;	RINGBUF_TYPE plc_data;} __packed;/* player function information */struct player_dspfunc_info {	struct dae_dspfunc_params dae;	struct aec_dspfunc_ref_params aec_ref;	struct output_dspfunc_params output;	const struct decoder_dspfunc_info *decoder_info;	struct mix_dspfunc_params mix;	struct player_dspfunc_debug debug;	struct energy_dspfunc_params energy;	const struct streamout_dspfunc_info *streamout_info;} __packed;/* recorder function debug options */struct recorder_dspfunc_debug {	RINGBUF_TYPE mic1_data;	RINGBUF_TYPE mic2_data;	RINGBUF_TYPE ref_data;	RINGBUF_TYPE aec1_data;	RINGBUF_TYPE aec2_data;	RINGBUF_TYPE encode_data;	RINGBUF_TYPE encode_stream;} __packed;/* recorder function information */struct recorder_dspfunc_info {	struct dae_dspfunc_params dae;	struct aec_dspfunc_params aec;	const struct preprocess_dspfunc_info * preprocess_info;	const struct encoder_dspfunc_info * encoder_info;	struct recorder_dspfunc_debug debug;} __packed;#ifdef __cplusplus}#endif#endif /* _DSP_HAL_DEFS_H_ */
 |