static int path_add_setting(struct audio_route *ar, struct mixer_path *path, struct mixer_setting *setting) { int path_index; if (find_ctl_index_in_path(path, setting->ctl_index) != -1) { struct mixer_ctl *ctl = index_to_ctl(ar, setting->ctl_index); ALOGE("Control '%s' already exists in path '%s'", mixer_ctl_get_name(ctl), path->name); return -1; } path_index = alloc_path_setting(path); if (path_index < 0) return -1; path->setting[path_index].ctl_index = setting->ctl_index; path->setting[path_index].num_values = setting->num_values; path->setting[path_index].value = malloc(setting->num_values * sizeof(int)); /* copy all values */ memcpy(path->setting[path_index].value, setting->value, setting->num_values * sizeof(int)); return 0; }
static int path_add_setting(struct mixer_path *path, struct mixer_setting *setting) { unsigned int i; int path_index; if (find_ctl_in_path(path, setting->ctl) != -1) { ALOGE("Control '%s' already exists in path '%s'", mixer_ctl_get_name(setting->ctl), path->name); return -1; } path_index = alloc_path_setting(path); if (path_index < 0) return -1; path->setting[path_index].ctl = setting->ctl; path->setting[path_index].num_values = setting->num_values; path->setting[path_index].value = malloc(setting->num_values * sizeof(int)); path->setting[path_index].linked = setting->linked; if (setting->linked) { path->setting[path_index].value[0] = setting->value[0]; } else { for (i = 0; i < setting->num_values; i++) path->setting[path_index].value[i] = setting->value[i]; } return 0; }
static int path_add_value(struct mixer_path *path, struct mixer_value *mixer_value) { unsigned int i; int path_index; unsigned int num_values; /* Check that mixer value index is within range */ num_values = mixer_ctl_get_num_values(mixer_value->ctl); if (mixer_value->index >= (int)num_values) { ALOGE("mixer index %d is out of range for '%s'", mixer_value->index, mixer_ctl_get_name(mixer_value->ctl)); return -1; } path_index = find_ctl_in_path(path, mixer_value->ctl); if (path_index < 0) { /* New path */ path_index = alloc_path_setting(path); if (path_index < 0) return -1; /* initialise the new path setting */ path->setting[path_index].ctl = mixer_value->ctl; path->setting[path_index].num_values = num_values; path->setting[path_index].value = malloc(num_values * sizeof(int)); path->setting[path_index].linked = true; path->setting[path_index].value[0] = mixer_value->value; } if (mixer_value->index == -1) { /* Linked, so only set the first value */ path->setting[path_index].linked = true; path->setting[path_index].value[0] = mixer_value->value; } else { if (path->setting[path_index].linked && (num_values > 1)) { /* Unlinking the values, so duplicate them across */ for (i = 1; i < num_values; i++) { path->setting[path_index].value[i] = path->setting[path_index].value[0]; } path->setting[path_index].linked = false; } path->setting[path_index].value[mixer_value->index] = mixer_value->value; } return 0; }
static int path_add_value(struct audio_route *ar, struct mixer_path *path, struct mixer_value *mixer_value) { int path_index; path_index = alloc_path_setting(path); /* initialise the new path setting */ path->setting[path_index].name = strdup(mixer_value->name); if (mixer_value->id) { path->setting[path_index].id = strdup(mixer_value->id); } else { path->setting[path_index].id = NULL; } path->setting[path_index].value = strdup(mixer_value->value); return 0; }
static int path_add_setting(struct audio_route *ar, struct mixer_path *path, struct mixer_setting *setting) { int path_index; path_index = alloc_path_setting(path); if (path_index < 0) return -1; if (setting->name) path->setting[path_index].name = strdup(setting->name); if (setting->id) path->setting[path_index].id = strdup(setting->id); if (setting->value) path->setting[path_index].value = strdup(setting->value); return 0; }
static int path_add_value(struct audio_route *ar, struct mixer_path *path, struct mixer_value *mixer_value) { unsigned int i; int path_index; unsigned int num_values; struct mixer_ctl *ctl; /* Check that mixer value index is within range */ ctl = index_to_ctl(ar, mixer_value->ctl_index); num_values = mixer_ctl_get_num_values(ctl); if (mixer_value->index >= (int)num_values) { ALOGE("mixer index %d is out of range for '%s'", mixer_value->index, mixer_ctl_get_name(ctl)); return -1; } path_index = find_ctl_index_in_path(path, mixer_value->ctl_index); if (path_index < 0) { /* New path */ path_index = alloc_path_setting(path); if (path_index < 0) return -1; /* initialise the new path setting */ path->setting[path_index].ctl_index = mixer_value->ctl_index; path->setting[path_index].num_values = num_values; path->setting[path_index].value = malloc(num_values * sizeof(int)); path->setting[path_index].value[0] = mixer_value->value; } if (mixer_value->index == -1) { /* set all values the same */ for (i = 0; i < num_values; i++) path->setting[path_index].value[i] = mixer_value->value; } else { /* set only one value */ path->setting[path_index].value[mixer_value->index] = mixer_value->value; } return 0; }