Linux+Rt双系统,RT使用 AO 输出PCM音频数据问题

Viewed 67

问题描述


k_aio_dev_attr ao_dev_attr; //AO 属性
memset(&ao_dev_attr, 0, sizeof(ao_dev_attr));
ao_dev_attr.audio_type = KD_AUDIO_OUTPUT_TYPE_I2S;
ao_dev_attr.kd_audio_attr.i2s_attr.sample_rate = 24000;//24000
ao_dev_attr.kd_audio_attr.i2s_attr.bit_width = KD_AUDIO_BIT_WIDTH_16;//16
ao_dev_attr.kd_audio_attr.i2s_attr.chn_cnt = 2; 
ao_dev_attr.kd_audio_attr.i2s_attr.i2s_mode = K_STANDARD_MODE;//2s工作模式:支持飞利浦模式,左对齐模式,右对齐模式。
ao_dev_attr.kd_audio_attr.i2s_attr.snd_mode = KD_AUDIO_SOUND_MODE_MONO;// KD_AUDIO_SOUND_MODE_MONO : KD_AUDIO_SOUND_MODE_STEREO;//音频声道模式。支持单声道和双声道。
ao_dev_attr.kd_audio_attr.i2s_attr.frame_num = 25;
ao_dev_attr.kd_audio_attr.i2s_attr.point_num_per_frame = 24000/25;//每帧的采样点个数
ao_dev_attr.kd_audio_attr.i2s_attr.i2s_type = K_AIO_I2STYPE_INNERCODEC;
kd_mpi_ao_set_pub_attr(0, &ao_dev_attr);//设置AO设备属性
kd_mpi_ao_enable(0);        //启动AO
kd_mpi_ao_enable_chn(0, 0); //启动AO CH0

下面是VB配置
/0/ { VICAP_ALIGN_UP((1920 * 1080 * 3 / 2), VICAP_ALIGN_1K), 4, VB_REMAP_MODE_NOCACHE, "" },//VI0-DEV0-CHN0
/1/ { VICAP_ALIGN_UP((1280 * 800 * 3), VICAP_ALIGN_1K) , 6, VB_REMAP_MODE_NOCACHE, "" },//VI0-DEV0-CHN1
/2/ { VICAP_ALIGN_UP((1920 * 1080 * 2 + 1024 ), VICAP_ALIGN_1K), 6, VB_REMAP_MODE_NOCACHE, "" },//VI0-DEV0
/3/ { VICAP_ALIGN_UP(24000 * 16 / 25, VICAP_ALIGN_4K) , 20, VB_REMAP_MODE_NOCACHE, "" },//从50->20开始抖动,但没有使用
/4/ { VICAP_ALIGN_UP(24000 * 12 / 25, VICAP_ALIGN_4K), 20, VB_REMAP_MODE_NOCACHE, "" },
/5/ { VICAP_ALIGN_UP(24000 * 8 / 25, VICAP_ALIGN_4K), 50, VB_REMAP_MODE_NOCACHE, "" },
{ VICAP_ALIGN_UP(24000 * 4 / 25, VICAP_ALIGN_4K), 50, VB_REMAP_MODE_NOCACHE, "" },

一共配置了0-6个公共pool
将pool3 的blk_count = 20 时,输出声音 有噗噗噗 杂音
将pool3 的blk_count = 50 时,输出声音正常
但观察VB调试信息,pool3 只使用了2块 剩余MinFree (48 / 18 )
20时截图如下
image.png
50时截图如下
image.png

wav文件相同, kd_mpi_ao_send_frame 时的frame 大小,配置一样,请帮忙分析原因。谢谢

1 Answers

image.png 这个是pool3配置20时的截图,上面的图重复了

你好,现有描述看不出问题,请给出最简复现 Demo。另外双系统暂时不再维护,最好切换到rtos上。