概述
Hi3518A/Hi3518C/Hi3518E/Hi3516C 提供一个内置的 Audio Codec,并在芯片内部对接到 SIO0 接口,即 SIO0 接口只能通过内置的 Audio Codec 完成声音的播放及录制。因为 Audio Codec 不能发送同步时钟,所以 SIO0 接口只能配置为 I 2 S 时序的主模式,用户仍需要正确配置 SIO0 和 Audio Codec 对接时序才可接收或发送音频数据。
海思Hi3518_MPP_V1.0.A.0版本之前的SDK不支持音量动态控制,直到当前版本的发布,才可以正常使用ioctl函数的相关接口动态调节
动态调节API
ACODEC_SET_OUTPUT_VOL
ACODEC_GET_INPUT_VOL
定义处:
#define ACODEC_SET_OUTPUT_VOL \
_IOWR(IOC_TYPE_ACODEC, IOC_NR_SET_OUTPUT_VOL, unsigned int)
#define ACODEC_GET_INPUT_VOL \
_IOWR(IOC_TYPE_ACODEC, IOC_NR_GET_INPUT_VOL, unsigned int)
调节范围:0x0xffffff87~0xffffffff
程序示例
int openAcodec()
{
int fdAcodec = open(ACODEC_FILE,O_RDWR);
if (fdAcodec < 0)
{
printf("[%s::%d] can't open acodec : %s", __func__, __LINE__,ACODEC_FILE);
return -1;
}
return fdAcodec ;
}
int getOutputVol(int fdAcodec,int *pVol)
{
int vol ;
if (ioctl(fdAcodec, ACODEC_GET_OUTPUT_VOL, &vol))
{
printf("[%s::%d] ACODEC_GET_OUTPUT_VOL fail \n",__func__,__LINE__);
return -1;
}
printf("[%s::%d] ACODEC_GET_OUTPUT_VOL : %x \n",__func__,__LINE__,vol);
*pVol = vol ;
return 0 ;
}
int setOutputVol(int fdAcodec,int vol)
{
if(ioctl(fdAcodec, ACODEC_SET_OUTPUT_VOL, &vol))
{
printf("[%s::%d] ACODEC_SET_OUTPUT_VOL fail : %x \n",__func__,__LINE__,vol);
return -1;
}
return 0 ;
}
int closeAcodec(int fdAcodec)
{
return close(fdAcodec);
}
备注
该接口的调用要在HI_MPI_AO_Enable的调用之后,即AO使能启动之后,再调用。