.. _编码接口: 编码接口 ===================================== | AW30N目前支持的编码格式包含:UMP3、A、OPUS、标准MP2、ADPCM_IMA、sbc、msbc、speex 和 JLA_LW格式。所有编码格式被统一管理。 | 编码前需要配置编码采样率以及码率等相关配置,各编码格式支持的采样率以及码率如下: 编码划分为: - 文件编码(encoder_file.c) - 音频传输编码(encoder_stream.c) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 编码功能控制函数 ******************************* 编码功能控制函数::: enc_obj \*encoder_io(u32(*fun)(void *, void *, void *), void *input_func, void *output_func, void *pfile) void stop_encode(void \*pfile, u32 dlen); 各个格式的编码接口函数: :: u32 mp3_encode_api(void \*p_file, void *input_func, void *output_func); u32 ump3_encode_api(void *p_file, void *input_func, void *output_func); u32 a_encode_api(void *p_file, void *input_func, void *output_func); u32 opus_encode_api(void *p_file, void *input_func, void *output_func); u32 ima_encode_api(void \*p_file, void \*input_func, void \*output_func); u32 sbc_encode_api(void \*p_file, void \*input_func, void \*output_func); u32 speex_encode_api(void \*p_file, void \*input_func, void \*output_func); u32 jla_lw_decode_api(void *strm, void **p_dec, void *p_dp_buf); ^^^^^^^^^^^^^^^^^^^^ 编码使用一般流程 ################################ 在开始编码前需要调用函数u32 audio_adc_init_api(u32 sr, AUDIO_ADC_MODE mode, u32 ch)配置AUDIO_ADC采样率; 在编码之前要确保已经打开存放编码文件的设备,并创建新的文件进行编码,指定需要编码的格式,即可以按照预先设定的采样率以及码率进行编码流程: 调用encoder_io实现对编码器的控制,此函数的传参可以控制: :: a.初始化指定编码格式; b.将编码数据,写入新创建的文件中; 经过上面的一步已经完成了对编码的启动,此时可以调用stop_encoder实现停止编码的功能; ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .. _文件编码功能控制接口函数: 文件编码功能控制接口函数 ################################# 函数void encoder_file(u32(\*fun)(void \*, void \*, void \*), void \*pfile) *********************************************************************************** 此函数实现初始化编码器并启动编码,其中参数: :: 1、(*fun)(void *, void *, void *):编码器初始化回调,传入指定解码器格式并进行初始化; 2、void *pfile,需要写入编码数据的文件句柄; 函数void stop_encode_file(enc_obj \*p_enc_obj, u32 dlen) ***************************************************************** 此函数实现停止编码器,其中参数: :: 1、enc_obj *p_enc_obj:当前使用的编码句柄; 2、dlen:对于nor_fs文件系统编码,该参数指定编码文件末尾舍弃的字节数; .. _音频传输编码功能控制接口函数: 音频传输编码功能控制接口函数 ################################# 函数enc_obj \*audio2rf_encoder_io(u32(\*enc_fun)(void \*, void \*, void \*), void \*p_queue_ops, void \*ops) ****************************************************************************************************************************** .. note:: 该函数实现初始化编码器,用于音频传输应用; - 初始化编码器后,再将编码链路挂载到AUDIO_ADC中断; - 调用该函数前需确保AUDIO_ADC已工作 1. enc_fun:编码器选择,可传入ump2或者opus等编码器初始化接口; * ump3_encode_api:ump2编码器初始化api; * opus_encode_api:opus编码器初始化api; * sbc_encode_api:sbc/msbc/usbc编码器初始化api; * speex_encode_api:speex编码器初始化api; * ima_encode_api:ima编码器初始化api; * jla_lw_encode_api:jla_lw编码器初始化api; 2. p_queue_ops:编码输出使用的队列对应句柄指针; 3. void \*ops:蓝牙发送接口集合指针,如果ops为非空,将会注册的发送队列中断; 4. 返回值:编码句柄 函数u32 audio2rf_encoder_start(enc_obj \*obj) **************************************************************** .. note:: 该函数实现启动音频编码发送; 1. 返回值:启动成功 0; 函数u32 rf_enc_output(void \*priv, u8 \*data, u16 len) ******************************************************** .. note:: 该函数实现编码器输出数据并进行无线传输,由编码器回调; - 无线传输模块出错导致无法正常发送时停止编码,发送繁忙时等待下次编码输出 - 该函数在启动编码器时传入编码器output参数; 1. priv:私有结构体,此处为编码句柄; 2. data:输出数据buff; 3. len:输出数据长度; 4. 返回值:本次消耗的编码数据字节长度; 函数void audio2rf_encoder_stop(queue_obj \*p_queue, ENC_STOP_WAIT wait) ********************************************************************************************** .. note:: 该函数实现停止编码和数据发送,并发送停止包给远端; 1. p_queue:编码输出使用的发送队列指针; 2. wait:是否等待编码数据消耗完成; 3. 返回值:无