原文连接:https://blog.csdn.net/weijory/article/details/62422869
下边的内容基于android9.0
struct audio_route {
struct mixer *mixer;
unsigned int num_mixer_ctls;
struct mixer_state *mixer_state; // 这里面保存着整个声卡中每个控件的初始值,以及在int path_apply(struct audio_route *ar, //struct mixer_path *path)方法(此方法在\system\media\audio_route\audio_route.c中)被调用 //的时候,会更新mixer_state中的值。
unsigned int mixer_path_size;
unsigned int num_mixer_paths;
struct mixer_path *mixer_path;// 这里面保存mixer_paths.xml的所有设备通路值
};
static int path_apply(struct audio_route *ar, struct mixer_path *path)
{
unsigned int i;
unsigned int ctl_index;
struct mixer_ctl *ctl;
enum mixer_ctl_type type;
ALOGD("Apply path: %s", path->name != NULL ? path->name : "none");
for (i = 0; i < path->length; i++) {
ctl_index = path->setting[i].ctl_index;
ctl = index_to_ctl(ar, ctl_index);
type = mixer_ctl_get_type(ctl);
if (!is_supported_ctl_type(type))
continue;
size_t value_sz = sizeof_ctl_type(type);
memcpy(ar->mixer_state[ctl_index].new_value.ptr, path->setting[i].value.ptr,
path->setting[i].num_values * value_sz);//更新声卡中mixer_state中的值。
}
return 0;
}