MTK音频参数加载

MTK音频参数加载

初入新公司,老大安排熟悉开发流程,安排学习了解下MTK平台音频参数的动态加载,以便之后能将音频参数作为子模块独立出来,未来能实现独立更新镜像.
Part1:音频参数的加载流程
AudioALSAVolumeController,主要用于Audio系统的音量控制,音量补偿,音频参数也在此得到应用

开机启动过程中,AudioALSAVolumeController::AudioALSAVolumeController()构造函数 

调用initCheck()

然后调用initVolumeController初始化

**AudioALSAVolumeController::initVolumeController()** 

GetVolumeVer1ParamFromNV(&mVolumeParam);
GetNBSpeechParamFromNVRam(&mSphParamNB);
GetWBSpeechParamFromNVRam(&mSphParamWB);

以上三个函数获取音频参数的结构体,是MTK 客制化音频参数的设置接口AudioCustParam.cpp得到参数后,并完成audio参数的设置
AudioCustParam.cpp会调用CFG_Audio_Default.h头文件中引入的音频参数h文件

MTK音频参数加载_第1张图片

简单看下AudioCustParam.cpp单个get音频参数的获取情况,

// functions
int GetVolumeVer1ParamFromNV(AUDIO_VER1_CUSTOM_VOLUME_STRUCT *pPara)
{
ALOGD("GetVolumeVer1ParamFromNV ");
int result = 0;
if (!checkNvramReady())//检查MTK nvram动态分区是否ready,属性值service.nvram_init来控制,如果是非ready的状态,则返回加载默认参数
{
ALOGW("checkNvramReady fail");
return getDefaultVer1VolumeParam(pPara);
}

#if defined(USE_DEFAULT_CUST_TABLE)//定义了USE_DEFAULT_CUST_TABLE,也会返回加载默认参数
// a default value , should disable when NVRAM ready
result = getDefaultVer1VolumeParam(pPara);
// get from NV ram and replace the default value
#else
...

//通常正常情况下调用MTK封装库nvram.so获取实际audio参数,会打开/data/nvram/APCFG/APRDCL/下的音频二进制文件,完成读取

audio_nvram_fd = NVM_GetFileDesc(file_lid, &rec_size, &rec_num, ISREAD);
result = read(audio_nvram_fd.iFileDesc, pPara , rec_size * rec_num);
NVM_CloseFileDesc(audio_nvram_fd);
...


return result;

}

NVram读取audio参数log,eg:

D/NVRAM ( 213): deal with cfgcustfile =/data/nvram/APCFG/APRDCL/Audio_Buffer_DC_Calibration_Param,65
D/NVRAM ( 224): Open /data/nvram/APCFG/APRDCL/Audio_Buffer_DC_Calibration_Param,LID:65
D/NVRAM ( 224): Open /data/nvram/APCFG/APRDCL/Audio_Buffer_DC_Calibration_Param,LID:65

引入编译后最终会被包含到so------>/system/lib/libcustom_nvram.so,需要单编译vendor\mediatek\proprietary\external\nvram\libcustom_nvram模块,获取最新的libcustom_nvram.so.

init.6580.rc导入了init.nvdata.rc,因此,开机过程中会在nvdata分区创建音频的二进制文件,并且syblink到/data分区下,文件名和下图数组保持一致
MTK音频参数加载_第2张图片
按照上面的流程,更新参数的做法是,直接替换/data/nvram/APCFG/APRDCL目录下的所有Audio参数,重启机器即可让音频新设置生效。

每次开机之后,nvram会打开/data/nvram/APCFG/APRDCL/下的audio文件,完成audio参数的重新加载,需要注意的是注意相应的目录对应的权限

prj\device\mediatek\mt6580\init.nvdata.rc

on init
#Create nvdata mount point
mkdir /nvdata 0771 system system

on post-fs-data
#create basic filesystem structure
#mkdir /data/nvram 2770 root system
#We chown/chmod /nvdata again so because mount is run as root + defaults
chown root system /nvdata
chmod 2770 /nvdata
symlink /nvdata /data/nvram

#Set SELinux security contexts on upgrade or policy update.
restorecon_recursive /nvdata

这边我先只用app添加button初步实现了参数更新的拷贝,后续如果有实现全流程的自动化更新再更新分享,另外直接把app设置为了systemuid,
直接调用了shell cp命令去实现参数的替换.

先记录分享到这里,如有不对之处,欢迎指正.

你可能感兴趣的:(MTK)