/* * Copyright (c) XMEDIA. All rights reserved. */ #include #include #include #include #include "config_load_parameter.h" #include "xmedia_audio_vqe_enhance_v1.h" #include "xmedia_audio_vqe_enhance_v2.h" #include "xmedia_audio_vqe_enhance_v3.h" #include "xmedia_audio_vqe_bcd.h" #include "xmedia_audio_vqe_detect.h" #define LEVEL_COEFFICIENT 1 struct config { xmedia_char *key; xmedia_char *value; }; struct section { xmedia_char *name; xmedia_s32 num_configs; struct config **configs; }; struct ini { xmedia_s32 num_sections; struct section **sections; }; typedef enum { START, NEW_SECTION, IN_SECTION, END_OF_FILE } States; struct read_ini { xmedia_char *filename; FILE *fin; xmedia_char *tmp; xmedia_s32 tmp_cap; xmedia_s32 current_line; xmedia_s32 state; }; struct read_ini; /* Trims whitespace from the passed in string between begin_ind and * end_ind xmedia_characters in the string. It returns the begin index and * the end index of the first and last valid (non-whitespace) * xmedia_characters in the string. */ static xmedia_void ini_trim(xmedia_char *str, xmedia_s32 *begin_ind, xmedia_s32 *end_ind) { xmedia_s32 b = *begin_ind; xmedia_s32 e = *end_ind; xmedia_s32 i; /* find first index of non-whitespace xmedia_character */ for (i=b; i=b; i--) { xmedia_char c = str[i]; if (c != ' ' && c != '\t' && c != '\n' && c != '\r' && c != '}') { break; } } *end_ind = i; } static xmedia_s32 ini_read_line(struct read_ini *read_ini) { xmedia_s32 i = 0; xmedia_s32 b = 0; xmedia_s32 new = 0; for (;;) { xmedia_char c; /* resize buffer if necessary */ if (i >= read_ini->tmp_cap) { read_ini->tmp_cap *= 2; read_ini->tmp = realloc(read_ini->tmp, sizeof(*read_ini->tmp) * read_ini->tmp_cap); } /* read next byte from file */ b = getc(read_ini->fin); /* if end of file then end */ if (b == EOF) { read_ini->state = END_OF_FILE; break; } /* test for end of line */ c = b; if (c == '\r' || c == '\n') { read_ini->current_line++; break; } /* place xmedia_char in buffer */ read_ini->tmp[i++] = c; new = 1; } /* place end-of-string marker */ if (new) { read_ini->tmp[i] = '\0'; } return new; } static struct section *ini_parse_section(struct read_ini *read_ini) { xmedia_s32 new = 0; struct section *section = malloc(sizeof(*section)); section->num_configs = 0; section->configs = NULL; for (;;) { switch (read_ini->state) { case START: case IN_SECTION: new = ini_read_line(read_ini); break; case NEW_SECTION: new = 1; break; case END_OF_FILE: return section; default: printf("invalid state %d in parse_section\n", read_ini->state); break; } if (new) { xmedia_s32 i; xmedia_s32 x; xmedia_s32 y; xmedia_s32 b = 0; xmedia_s32 e = strlen(read_ini->tmp); struct config *cfg; ini_trim(read_ini->tmp, &b, &e); /* check for comments */ if (read_ini->tmp[b] == '#' || read_ini->tmp[b] == ';') { continue; } /* check for new section */ if (read_ini->tmp[b] == '[') { if (read_ini->state == IN_SECTION) { read_ini->state = NEW_SECTION; break; } else { /* fill section name */ read_ini->tmp[e] = '\0'; section->name = strdup(&read_ini->tmp[b+1]); read_ini->state = IN_SECTION; continue; } } cfg = malloc(sizeof(*cfg)); /* read key */ for (i = b; i <= e; i++) { xmedia_char c = read_ini->tmp[i]; if (c == ':' || c == '=') { break; } } x = b; y = i; ini_trim(read_ini->tmp, &x, &y); read_ini->tmp[y+1] = '\0'; cfg->key = strdup(&read_ini->tmp[x]); /* read value */ x = i+1; y = e+1; ini_trim(read_ini->tmp, &x, &y); read_ini->tmp[y+1] = '\0'; cfg->value = strdup(&read_ini->tmp[x]); /* add the config to the section */ if (section->configs) { section->num_configs++; section->configs = realloc(section->configs, sizeof(*section->configs) * section->num_configs); } else { section->configs = malloc(sizeof(*section->configs)); section->num_configs = 1; } section->configs[section->num_configs-1] = cfg; } } return section; } /* parse ini */ static struct ini* ini_parse(struct read_ini *read_ini) { struct ini *ini = malloc(sizeof(*ini)); xmedia_char finished = 0; ini->num_sections = 0; ini->sections = NULL; while (!finished) { switch (read_ini->state) { case START: case NEW_SECTION: { /* read a section */ struct section * section = ini_parse_section(read_ini); if (!section) { break; } /* add it to the sections structure */ if (ini->sections) { ini->num_sections++; ini->sections = realloc(ini->sections, sizeof(*ini->sections) * ini->num_sections); } else { ini->sections = malloc(sizeof(*ini->sections)); ini->num_sections = 1; } ini->sections[ini->num_sections-1] = section; break; } case END_OF_FILE: finished = 1; break; default: printf("error parsing file at line %d\n", read_ini->current_line); finished = 1; break; } } return ini; } /* read ini file */ struct ini* create_ini(xmedia_char *filename) { struct ini *ini = XMEDIA_NULL; struct read_ini read_ini; read_ini.fin = fopen(filename, "r"); if (read_ini.fin == NULL) { printf("open ini file %s failed\n", filename); return NULL; } read_ini.filename = filename; read_ini.current_line = 0; read_ini.state = START; read_ini.tmp_cap = 4; read_ini.tmp = malloc(sizeof(*read_ini.tmp) * 4); if (read_ini.tmp == XMEDIA_NULL) { goto EXIT; } ini = ini_parse(&read_ini); EXIT: fclose(read_ini.fin); if (read_ini.tmp != XMEDIA_NULL) { free(read_ini.tmp); } return ini; } xmedia_void destroy_ini(struct ini* ini) { xmedia_s32 s; xmedia_s32 c; for (s=0; snum_sections; s++) { for (c=0; csections[s]->num_configs; c++) { free(ini->sections[s]->configs[c]->key); free(ini->sections[s]->configs[c]->value); free(ini->sections[s]->configs[c]); } free(ini->sections[s]->name); free(ini->sections[s]->configs); free(ini->sections[s]); } free(ini->sections); free(ini); } /* This does a linear search through the keys in the parsed ini file * so should happen in O(n) time. This could be made better through * using hashtables but I don't think this will generally be the * bottleneck (how large can ini files get?) */ xmedia_char* ini_get_value(struct ini* ini, xmedia_char *section, xmedia_char *key) { xmedia_s32 s, c; for (s=0; snum_sections; s++) { if (strcmp(section, ini->sections[s]->name) == 0) { for (c=0; csections[s]->num_configs; c++) { if (strcmp(key, ini->sections[s]->configs[c]->key) == 0) { return ini->sections[s]->configs[c]->value; } } } } return XMEDIA_NULL; } xmedia_s32 ini_get_int_value(struct ini* ini, xmedia_char* section, xmedia_char* key) { const xmedia_char* str; str = ini_get_value(ini, section, key); if (str == XMEDIA_NULL) { return 0; } return strtol(str, XMEDIA_NULL, 0); } /* pretty prxmedia_s32 the structure */ xmedia_void ini_pretty_print(struct ini* ini) { xmedia_s32 s; xmedia_s32 c; //printf("num sections: %d\n", ini->num_sections); for (s=0; snum_sections; s++) { //printf("section: \"%s\" ", ini->sections[s]->name); //printf("(num configs: %d)\n", ini->sections[s]->num_configs); for (c=0; csections[s]->num_configs; c++) { //printf(" key: \"%s\", value: \"%s\"\n", // ini->sections[s]->configs[c]->key, // ini->sections[s]->configs[c]->value); } } } xmedia_void get_base_parameter(struct ini* ini, user_base_config *base_config) { // 获取基本参数 base_config->work_samplerate = ini_get_int_value(ini, "basic", "sampleRate"); base_config->in_chn_cnt = ini_get_int_value(ini, "basic", "inchnnum"); base_config->out_chn_cnt = ini_get_int_value(ini, "basic", "outchnnum"); base_config->sample_per_frame = ini_get_int_value(ini, "basic", "frameSample"); base_config->frame_nums = ini_get_int_value(ini, "basic", "frameNums"); base_config->vqe_version = ini_get_int_value(ini, "basic", "vqe_version"); base_config->codec_input_vol = ini_get_int_value(ini, "volume", "codec_input_vol"); base_config->ai_vqe_vol = ini_get_int_value(ini, "volume", "vqe_ai_vol"); base_config->ao_vqe_vol = ini_get_int_value(ini, "volume", "vqe_ao_vol"); printf("get_base_parameter:\n"); printf(" sampleRate: %d\n", base_config->work_samplerate); printf(" in_chn_cnt: %d\n", base_config->in_chn_cnt); printf(" out_chn_cnt: %d\n", base_config->out_chn_cnt); printf(" sample_per_frame: %d\n", base_config->sample_per_frame); printf(" frame_nums: %d\n", base_config->frame_nums); printf(" vqe_version: %d\n", base_config->vqe_version); printf(" codec_input_vol: %d\n", base_config->codec_input_vol); printf(" ao_vqe_vol: %d\n", base_config->ao_vqe_vol); printf(" ai_vqe_vol: %d\n", base_config->ai_vqe_vol); } xmedia_void get_aivqe_v1_parameter(struct ini* ini, ai_vqe_attr_v1* vqe_config) { memset(vqe_config, 0, sizeof(ai_vqe_attr_v1)); // 获取模块开启状态 xmedia_u32 enableOpenMask = 0; if (ini_get_int_value(ini, "HPF", "enable")) { enableOpenMask |= VQE_V1_MASK_HPF; vqe_config->hpf_attr.mode = ini_get_int_value(ini, "HPF", "mode"); if (vqe_config->hpf_attr.mode == VQE_V1_USR_MODE_USER) { //手动模式 vqe_config->hpf_attr.freq = ini_get_int_value(ini, "HPF", "freq"); } printf("get ai hpf parameter:\n"); printf(" mode: %d\n", vqe_config->hpf_attr.mode); printf(" freq: %d\n", vqe_config->hpf_attr.freq); } if (ini_get_int_value(ini, "AEC", "enable")) { enableOpenMask |= VQE_V1_MASK_AEC; vqe_config->aec_attr.mode = ini_get_int_value(ini, "AEC", "mode"); if (vqe_config->aec_attr.mode == VQE_V1_USR_MODE_USER) { //手动模式 vqe_config->aec_attr.cng_enable = ini_get_int_value(ini, "AEC", "cng_enable"); vqe_config->aec_attr.freq_boundary = ini_get_int_value(ini, "AEC", "freq_boundary"); vqe_config->aec_attr.high_suppress_level = LEVEL_COEFFICIENT * ini_get_int_value(ini, "AEC", "high_suppress_level"); vqe_config->aec_attr.low_suppress_level = LEVEL_COEFFICIENT * ini_get_int_value(ini, "AEC", "low_suppress_level"); vqe_config->aec_attr.low_enhance_voice_protect_level = LEVEL_COEFFICIENT * ini_get_int_value(ini, "AEC", "low_enhance_voice_protect_level"); vqe_config->aec_attr.high_enhance_voice_protect_level = LEVEL_COEFFICIENT * ini_get_int_value(ini, "AEC", "high_enhance_voice_protect_level"); } else if (vqe_config->aec_attr.mode == VQE_V1_USR_MODE_ADVANCED) { //高级模式 //update later } printf("get ai aec parameter:\n"); printf(" mode: %d\n", vqe_config->aec_attr.mode); printf(" cng_enable: %d\n", vqe_config->aec_attr.cng_enable); printf(" freq_boundary: %d\n", vqe_config->aec_attr.freq_boundary); printf(" high_suppress_level: 0x%x\n", vqe_config->aec_attr.high_suppress_level); printf(" low_suppress_level: 0x%x\n", vqe_config->aec_attr.low_suppress_level); printf(" low_enhance_voice_protect_level: 0x%x\n", vqe_config->aec_attr.low_enhance_voice_protect_level); printf(" high_enhance_voice_protect_level: 0x%x\n", vqe_config->aec_attr.high_enhance_voice_protect_level); } if (ini_get_int_value(ini, "ANR", "enable")) { enableOpenMask |= VQE_V1_MASK_ANR; vqe_config->anr_attr.mode = ini_get_int_value(ini, "ANR", "mode"); if (vqe_config->anr_attr.mode == VQE_V1_USR_MODE_USER) { //手动模式 vqe_config->anr_attr.usr_scene = LEVEL_COEFFICIENT * ini_get_int_value(ini, "ANR", "usr_scene"); vqe_config->anr_attr.nr_mode = LEVEL_COEFFICIENT * ini_get_int_value(ini, "ANR", "nr_mode"); vqe_config->anr_attr.max_suppress_gain = LEVEL_COEFFICIENT * ini_get_int_value(ini, "ANR", "max_suppress_gain"); vqe_config->anr_attr.suppress_level = LEVEL_COEFFICIENT * ini_get_int_value(ini, "ANR", "suppress_level"); vqe_config->anr_attr.nonstationary_suppress_level = LEVEL_COEFFICIENT * ini_get_int_value(ini, "ANR", "nonstationary_suppress_level"); } printf("get ai anr parameter:\n"); printf(" mode: %d\n", vqe_config->anr_attr.mode); printf(" usr_scene: 0x%x\n", vqe_config->anr_attr.usr_scene); printf(" nr_mode: %d\n", vqe_config->anr_attr.nr_mode); printf(" max_suppress_gain: 0x%x\n", vqe_config->anr_attr.max_suppress_gain); printf(" suppress_level: %d\n", vqe_config->anr_attr.suppress_level); printf(" nonstationary_suppress_level: 0x%x\n", vqe_config->anr_attr.nonstationary_suppress_level); } if (ini_get_int_value(ini, "AGC", "enable")) { enableOpenMask |= VQE_V1_MASK_AGC; vqe_config->agc_attr.mode = ini_get_int_value(ini, "AGC", "mode"); if (vqe_config->agc_attr.mode == VQE_V1_USR_MODE_USER) { //手动模式 vqe_config->agc_attr.target_level = ini_get_int_value(ini, "AGC", "target_level"); vqe_config->agc_attr.max_boost_gain = ini_get_int_value(ini, "AGC", "max_boost_gain"); vqe_config->agc_attr.noise_floor = ini_get_int_value(ini, "AGC", "noise_floor"); vqe_config->agc_attr.ratio = ini_get_int_value(ini, "AGC", "ratio"); vqe_config->agc_attr.attack_time = ini_get_int_value(ini, "AGC", "attack_time"); vqe_config->agc_attr.release_time = ini_get_int_value(ini, "AGC", "release_time"); } printf("get ai agc parameter:\n"); printf(" mode: %d\n", vqe_config->agc_attr.mode); printf(" target_level: %d\n", vqe_config->agc_attr.target_level); printf(" max_boost_gain: %d\n", vqe_config->agc_attr.max_boost_gain); printf(" noise_floor: %d\n", vqe_config->agc_attr.noise_floor); printf(" ratio: %d\n", vqe_config->agc_attr.ratio); printf(" attack_time: %d\n", vqe_config->agc_attr.attack_time); printf(" release_time: %d\n", vqe_config->agc_attr.release_time); } if (ini_get_int_value(ini, "VAD", "enable")) { enableOpenMask |= VQE_V1_MASK_VAD; vqe_config->vad_attr.mode = ini_get_int_value(ini, "VAD", "mode"); if (vqe_config->vad_attr.mode == VQE_V1_USR_MODE_USER) { //手动模式 vqe_config->vad_attr.sensitivity_level = ini_get_int_value(ini, "VAD", "sensitivity_level"); } printf("get ai vad parameter:\n"); printf(" mode: %d\n", vqe_config->vad_attr.mode); printf(" sensitivity_level: %d\n", vqe_config->vad_attr.sensitivity_level); } if (ini_get_int_value(ini, "DEREVERB", "enable")) { enableOpenMask |= VQE_V1_MASK_DEREVERB; vqe_config->dereverb_attr.mode = ini_get_int_value(ini, "DEREVERB", "mode"); if (vqe_config->dereverb_attr.mode == VQE_V1_USR_MODE_USER) { //手动模式 vqe_config->dereverb_attr.delay_offset = ini_get_int_value(ini, "DEREVERB", "delay_offset"); vqe_config->dereverb_attr.delay_count = ini_get_int_value(ini, "DEREVERB", "delay_count"); } printf("get ai dereverb parameter:\n"); printf(" mode: %d\n", vqe_config->dereverb_attr.mode); printf(" delay_offset: %d\n", vqe_config->dereverb_attr.delay_offset); printf(" delay_count: %d\n", vqe_config->dereverb_attr.delay_count); } if (ini_get_int_value(ini, "WNS", "enable")) { enableOpenMask |= VQE_V1_MASK_WNS; vqe_config->wns_attr.mode = ini_get_int_value(ini, "WNS", "mode"); if (vqe_config->wns_attr.mode == VQE_V1_USR_MODE_USER) { //手动模式 vqe_config->wns_attr.suppress_level = ini_get_int_value(ini, "WNS", "suppress_level"); } printf("get ai wns parameter:\n"); printf(" mode: %d\n", vqe_config->wns_attr.mode); printf(" suppress_level: %d\n", vqe_config->wns_attr.suppress_level); } if (ini_get_int_value(ini, "EQ", "enable")) { enableOpenMask |= VQE_V1_MASK_EQ; vqe_config->eq_attr.gain[0] = ini_get_int_value(ini, "EQ", "gain_0"); vqe_config->eq_attr.gain[1] = ini_get_int_value(ini, "EQ", "gain_1"); vqe_config->eq_attr.gain[2] = ini_get_int_value(ini, "EQ", "gain_2"); vqe_config->eq_attr.gain[3] = ini_get_int_value(ini, "EQ", "gain_3"); vqe_config->eq_attr.gain[4] = ini_get_int_value(ini, "EQ", "gain_4"); vqe_config->eq_attr.gain[5] = ini_get_int_value(ini, "EQ", "gain_5"); vqe_config->eq_attr.gain[6] = ini_get_int_value(ini, "EQ", "gain_6"); vqe_config->eq_attr.gain[7] = ini_get_int_value(ini, "EQ", "gain_7"); vqe_config->eq_attr.gain[8] = ini_get_int_value(ini, "EQ", "gain_8"); vqe_config->eq_attr.gain[9] = ini_get_int_value(ini, "EQ", "gain_9"); vqe_config->eq_attr.gain[10] = ini_get_int_value(ini, "EQ", "gain_10"); vqe_config->eq_attr.gain[11] = ini_get_int_value(ini, "EQ", "gain_11"); vqe_config->eq_attr.gain[12] = ini_get_int_value(ini, "EQ", "gain_12"); vqe_config->eq_attr.gain[13] = ini_get_int_value(ini, "EQ", "gain_13"); vqe_config->eq_attr.gain[14] = ini_get_int_value(ini, "EQ", "gain_14"); vqe_config->eq_attr.gain[15] = ini_get_int_value(ini, "EQ", "gain_15"); vqe_config->eq_attr.gain[16] = ini_get_int_value(ini, "EQ", "gain_16"); vqe_config->eq_attr.gain[17] = ini_get_int_value(ini, "EQ", "gain_17"); vqe_config->eq_attr.gain[18] = ini_get_int_value(ini, "EQ", "gain_18"); vqe_config->eq_attr.gain[19] = ini_get_int_value(ini, "EQ", "gain_19"); vqe_config->eq_attr.gain[20] = ini_get_int_value(ini, "EQ", "gain_20"); vqe_config->eq_attr.gain[21] = ini_get_int_value(ini, "EQ", "gain_21"); vqe_config->eq_attr.gain[22] = ini_get_int_value(ini, "EQ", "gain_22"); vqe_config->eq_attr.gain[23] = ini_get_int_value(ini, "EQ", "gain_23"); vqe_config->eq_attr.gain[24] = ini_get_int_value(ini, "EQ", "gain_24"); vqe_config->eq_attr.gain[25] = ini_get_int_value(ini, "EQ", "gain_25"); vqe_config->eq_attr.gain[26] = ini_get_int_value(ini, "EQ", "gain_26"); vqe_config->eq_attr.gain[27] = ini_get_int_value(ini, "EQ", "gain_27"); vqe_config->eq_attr.gain[28] = ini_get_int_value(ini, "EQ", "gain_28"); vqe_config->eq_attr.gain[29] = ini_get_int_value(ini, "EQ", "gain_29"); printf("get ai eq parameter: enable\n"); xmedia_s32 i; printf(" gain[0-14]: "); for (i = 0; i < 15; i++) { printf(" %d", vqe_config->eq_attr.gain[i]); } printf("\n gain[15-29]: "); for (i = 0; i < 15; i++) { printf(" %d", vqe_config->eq_attr.gain[15 + i]); } printf("\n"); } vqe_config->mask = enableOpenMask; } xmedia_void get_aivqe_v2_parameter(struct ini* ini, ai_vqe_attr_v2* vqe_config) { memset(vqe_config, 0, sizeof(ai_vqe_attr_v2)); // 获取模块开启状态 xmedia_u32 enableOpenMask = 0; if (ini_get_int_value(ini, "HPF", "enable")) { enableOpenMask |= VQE_V2_MASK_HPF; vqe_config->hpf_attr.mode = ini_get_int_value(ini, "HPF", "mode"); if (vqe_config->hpf_attr.mode == VQE_V2_USR_MODE_USER) { //手动模式 vqe_config->hpf_attr.freq = ini_get_int_value(ini, "HPF", "freq"); } printf("get ai hpf parameter:\n"); printf(" mode: %d\n", vqe_config->hpf_attr.mode); printf(" freq: %d\n", vqe_config->hpf_attr.freq); } if (ini_get_int_value(ini, "AEC", "enable")) { enableOpenMask |= VQE_V2_MASK_AEC; vqe_config->aec_attr.mode = ini_get_int_value(ini, "AEC", "mode"); if (vqe_config->aec_attr.mode == VQE_V2_USR_MODE_USER) { //手动模式 vqe_config->aec_attr.cng_enable = ini_get_int_value(ini, "AEC", "cng_enable"); vqe_config->aec_attr.freq_boundary = ini_get_int_value(ini, "AEC", "freq_boundary"); vqe_config->aec_attr.high_suppress_level = LEVEL_COEFFICIENT * ini_get_int_value(ini, "AEC", "high_suppress_level"); vqe_config->aec_attr.low_suppress_level = LEVEL_COEFFICIENT * ini_get_int_value(ini, "AEC", "low_suppress_level"); vqe_config->aec_attr.low_enhance_voice_protect_level = LEVEL_COEFFICIENT * ini_get_int_value(ini, "AEC", "low_enhance_voice_protect_level"); vqe_config->aec_attr.high_enhance_voice_protect_level = LEVEL_COEFFICIENT * ini_get_int_value(ini, "AEC", "high_enhance_voice_protect_level"); } printf("get ai aec parameter:\n"); printf(" mode: %d\n", vqe_config->aec_attr.mode); printf(" cng_enable: %d\n", vqe_config->aec_attr.cng_enable); printf(" freq_boundary: %d\n", vqe_config->aec_attr.freq_boundary); printf(" high_suppress_level: 0x%x\n", vqe_config->aec_attr.high_suppress_level); printf(" low_suppress_level: 0x%x\n", vqe_config->aec_attr.low_suppress_level); printf(" high_enhance_voice_protect_level: 0x%x\n", vqe_config->aec_attr.high_enhance_voice_protect_level); printf(" low_enhance_voice_protect_level: 0x%x\n", vqe_config->aec_attr.low_enhance_voice_protect_level); } if (ini_get_int_value(ini, "ANR", "enable")) { enableOpenMask |= VQE_V2_MASK_ANR; vqe_config->anr_attr.mode = ini_get_int_value(ini, "ANR", "mode"); if (vqe_config->anr_attr.mode == VQE_V2_USR_MODE_USER) { //手动模式 vqe_config->anr_attr.usr_scene = LEVEL_COEFFICIENT * ini_get_int_value(ini, "ANR", "usr_scene"); vqe_config->anr_attr.nr_mode = LEVEL_COEFFICIENT * ini_get_int_value(ini, "ANR", "nr_mode"); vqe_config->anr_attr.max_suppress_gain = LEVEL_COEFFICIENT * ini_get_int_value(ini, "ANR", "max_suppress_gain"); vqe_config->anr_attr.suppress_level = LEVEL_COEFFICIENT * ini_get_int_value(ini, "ANR", "suppress_level"); vqe_config->anr_attr.nonstationary_suppress_level = LEVEL_COEFFICIENT * ini_get_int_value(ini, "ANR", "nonstationary_suppress_level"); } printf("get ai anr parameter:\n"); printf(" mode: %d\n", vqe_config->anr_attr.mode); printf(" usr_scene: 0x%x\n", vqe_config->anr_attr.usr_scene); printf(" nr_mode: %d\n", vqe_config->anr_attr.nr_mode); printf(" max_suppress_gain: 0x%x\n", vqe_config->anr_attr.max_suppress_gain); printf(" suppress_level: %d\n", vqe_config->anr_attr.suppress_level); printf(" nonstationary_suppress_level: 0x%x\n", vqe_config->anr_attr.nonstationary_suppress_level); } if (ini_get_int_value(ini, "AGC", "enable")) { enableOpenMask |= VQE_V2_MASK_AGC; vqe_config->agc_attr.mode = ini_get_int_value(ini, "AGC", "mode"); if (vqe_config->agc_attr.mode == VQE_V2_USR_MODE_USER) { //手动模式 vqe_config->agc_attr.target_level = ini_get_int_value(ini, "AGC", "target_level"); vqe_config->agc_attr.max_boost_gain = ini_get_int_value(ini, "AGC", "max_boost_gain"); vqe_config->agc_attr.noise_floor = ini_get_int_value(ini, "AGC", "noise_floor"); vqe_config->agc_attr.ratio = ini_get_int_value(ini, "AGC", "ratio"); vqe_config->agc_attr.attack_time = ini_get_int_value(ini, "AGC", "attack_time"); vqe_config->agc_attr.release_time = ini_get_int_value(ini, "AGC", "release_time"); } printf("get ai agc parameter:\n"); printf(" mode: %d\n", vqe_config->agc_attr.mode); printf(" target_level: %d\n", vqe_config->agc_attr.target_level); printf(" max_boost_gain: %d\n", vqe_config->agc_attr.max_boost_gain); printf(" noise_floor: %d\n", vqe_config->agc_attr.noise_floor); printf(" ratio: %d\n", vqe_config->agc_attr.ratio); printf(" attack_time: %d\n", vqe_config->agc_attr.attack_time); printf(" release_time: %d\n", vqe_config->agc_attr.release_time); } if (ini_get_int_value(ini, "BF", "enable")) { enableOpenMask |= VQE_V2_MASK_BF; printf(" BF enable\n"); } if (ini_get_int_value(ini, "VAD", "enable")) { enableOpenMask |= VQE_V2_MASK_VAD; vqe_config->vad_attr.mode = ini_get_int_value(ini, "VAD", "mode"); if (vqe_config->vad_attr.mode == VQE_V2_USR_MODE_USER) { //手动模式 vqe_config->vad_attr.sensitivity_level = ini_get_int_value(ini, "VAD", "sensitivity_level"); } printf("get ai vad parameter:\n"); printf(" mode: %d\n", vqe_config->vad_attr.mode); printf(" sensitivity_level: %d\n", vqe_config->vad_attr.sensitivity_level); } if (ini_get_int_value(ini, "DEREVERB", "enable")) { enableOpenMask |= VQE_V2_MASK_DEREVERB; vqe_config->dereverb_attr.mode = ini_get_int_value(ini, "DEREVERB", "mode"); if (vqe_config->dereverb_attr.mode == VQE_V2_USR_MODE_USER) { //手动模式 vqe_config->dereverb_attr.delay_offset = ini_get_int_value(ini, "DEREVERB", "delay_offset"); vqe_config->dereverb_attr.delay_count = ini_get_int_value(ini, "DEREVERB", "delay_count"); } printf("get ai dereverb parameter:\n"); printf(" mode: %d\n", vqe_config->dereverb_attr.mode); printf(" delay_offset: %d\n", vqe_config->dereverb_attr.delay_offset); printf(" delay_count: %d\n", vqe_config->dereverb_attr.delay_count); } if (ini_get_int_value(ini, "WNS", "enable")) { enableOpenMask |= VQE_V2_MASK_WNS; vqe_config->wns_attr.mode = ini_get_int_value(ini, "WNS", "mode"); if (vqe_config->wns_attr.mode == VQE_V2_USR_MODE_USER) { //手动模式 vqe_config->wns_attr.suppress_level = ini_get_int_value(ini, "WNS", "suppress_level"); } printf("get ai wns parameter:\n"); printf(" mode: %d\n", vqe_config->wns_attr.mode); printf(" suppress_level: %d\n", vqe_config->wns_attr.suppress_level); } if (ini_get_int_value(ini, "EQ", "enable")) { enableOpenMask |= VQE_V2_MASK_EQ; vqe_config->eq_attr.gain[0] = ini_get_int_value(ini, "EQ", "gain_0"); vqe_config->eq_attr.gain[1] = ini_get_int_value(ini, "EQ", "gain_1"); vqe_config->eq_attr.gain[2] = ini_get_int_value(ini, "EQ", "gain_2"); vqe_config->eq_attr.gain[3] = ini_get_int_value(ini, "EQ", "gain_3"); vqe_config->eq_attr.gain[4] = ini_get_int_value(ini, "EQ", "gain_4"); vqe_config->eq_attr.gain[5] = ini_get_int_value(ini, "EQ", "gain_5"); vqe_config->eq_attr.gain[6] = ini_get_int_value(ini, "EQ", "gain_6"); vqe_config->eq_attr.gain[7] = ini_get_int_value(ini, "EQ", "gain_7"); vqe_config->eq_attr.gain[8] = ini_get_int_value(ini, "EQ", "gain_8"); vqe_config->eq_attr.gain[9] = ini_get_int_value(ini, "EQ", "gain_9"); vqe_config->eq_attr.gain[10] = ini_get_int_value(ini, "EQ", "gain_10"); vqe_config->eq_attr.gain[11] = ini_get_int_value(ini, "EQ", "gain_11"); vqe_config->eq_attr.gain[12] = ini_get_int_value(ini, "EQ", "gain_12"); vqe_config->eq_attr.gain[13] = ini_get_int_value(ini, "EQ", "gain_13"); vqe_config->eq_attr.gain[14] = ini_get_int_value(ini, "EQ", "gain_14"); vqe_config->eq_attr.gain[15] = ini_get_int_value(ini, "EQ", "gain_15"); vqe_config->eq_attr.gain[16] = ini_get_int_value(ini, "EQ", "gain_16"); vqe_config->eq_attr.gain[17] = ini_get_int_value(ini, "EQ", "gain_17"); vqe_config->eq_attr.gain[18] = ini_get_int_value(ini, "EQ", "gain_18"); vqe_config->eq_attr.gain[19] = ini_get_int_value(ini, "EQ", "gain_19"); vqe_config->eq_attr.gain[20] = ini_get_int_value(ini, "EQ", "gain_20"); vqe_config->eq_attr.gain[21] = ini_get_int_value(ini, "EQ", "gain_21"); vqe_config->eq_attr.gain[22] = ini_get_int_value(ini, "EQ", "gain_22"); vqe_config->eq_attr.gain[23] = ini_get_int_value(ini, "EQ", "gain_23"); vqe_config->eq_attr.gain[24] = ini_get_int_value(ini, "EQ", "gain_24"); vqe_config->eq_attr.gain[25] = ini_get_int_value(ini, "EQ", "gain_25"); vqe_config->eq_attr.gain[26] = ini_get_int_value(ini, "EQ", "gain_26"); vqe_config->eq_attr.gain[27] = ini_get_int_value(ini, "EQ", "gain_27"); vqe_config->eq_attr.gain[28] = ini_get_int_value(ini, "EQ", "gain_28"); vqe_config->eq_attr.gain[29] = ini_get_int_value(ini, "EQ", "gain_29"); printf("get ai eq parameter: enable\n"); xmedia_s32 i; printf(" gain[0-14]: "); for (i = 0; i < 15; i++) { printf(" %d", vqe_config->eq_attr.gain[i]); } printf("\n gain[15-29]: "); for (i = 0; i < 15; i++) { printf(" %d", vqe_config->eq_attr.gain[15 + i]); } printf("\n"); } vqe_config->mask = enableOpenMask; } xmedia_void get_aivqe_v3_parameter(struct ini* ini, ai_vqe_attr_v3* vqe_config) { memset(vqe_config, 0, sizeof(ai_vqe_attr_v3)); // 获取模块开启状态 xmedia_u32 enableOpenMask = 0; if (ini_get_int_value(ini, "HPF", "enable")) { enableOpenMask |= VQE_V3_MASK_HPF; vqe_config->hpf_attr.mode = ini_get_int_value(ini, "HPF", "mode"); if (vqe_config->hpf_attr.mode == VQE_V3_USR_MODE_USER) { //手动模式 vqe_config->hpf_attr.freq = ini_get_int_value(ini, "HPF", "freq"); } printf("get ai hpf parameter:\n"); printf(" mode: %d\n", vqe_config->hpf_attr.mode); printf(" freq: %d\n", vqe_config->hpf_attr.freq); } if (ini_get_int_value(ini, "ANR", "enable")) { enableOpenMask |= VQE_V3_MASK_ANR; vqe_config->anr_attr.mode = ini_get_int_value(ini, "ANR", "mode"); if (vqe_config->anr_attr.mode == VQE_V3_USR_MODE_USER) { //手动模式 vqe_config->anr_attr.level = LEVEL_COEFFICIENT * ini_get_int_value(ini, "ANR", "level"); } printf("get ai anr parameter:\n"); printf(" mode: %d\n", vqe_config->anr_attr.mode); printf(" level: %d\n", vqe_config->anr_attr.level); } if (ini_get_int_value(ini, "AGC", "enable")) { enableOpenMask |= VQE_V3_MASK_AGC; vqe_config->agc_attr.mode = ini_get_int_value(ini, "AGC", "mode"); if (vqe_config->agc_attr.mode == VQE_V3_USR_MODE_USER) { //手动模式 vqe_config->agc_attr.target_level = ini_get_int_value(ini, "AGC", "target_level"); vqe_config->agc_attr.max_boost_gain = ini_get_int_value(ini, "AGC", "max_boost_gain"); vqe_config->agc_attr.noise_floor = ini_get_int_value(ini, "AGC", "noise_floor"); vqe_config->agc_attr.ratio = ini_get_int_value(ini, "AGC", "ratio"); vqe_config->agc_attr.attack_time = ini_get_int_value(ini, "AGC", "attack_time"); vqe_config->agc_attr.release_time = ini_get_int_value(ini, "AGC", "release_time"); } printf("get ai agc parameter:\n"); printf(" mode: %d\n", vqe_config->agc_attr.mode); printf(" target_level: %d\n", vqe_config->agc_attr.target_level); printf(" max_boost_gain: %d\n", vqe_config->agc_attr.max_boost_gain); printf(" noise_floor: %d\n", vqe_config->agc_attr.noise_floor); printf(" ratio: %d\n", vqe_config->agc_attr.ratio); printf(" attack_time: %d\n", vqe_config->agc_attr.attack_time); printf(" release_time: %d\n", vqe_config->agc_attr.release_time); } if (ini_get_int_value(ini, "EQ", "enable")) { enableOpenMask |= VQE_V3_MASK_EQ; vqe_config->eq_attr.gain[0] = ini_get_int_value(ini, "EQ", "gain_0"); vqe_config->eq_attr.gain[1] = ini_get_int_value(ini, "EQ", "gain_1"); vqe_config->eq_attr.gain[2] = ini_get_int_value(ini, "EQ", "gain_2"); vqe_config->eq_attr.gain[3] = ini_get_int_value(ini, "EQ", "gain_3"); vqe_config->eq_attr.gain[4] = ini_get_int_value(ini, "EQ", "gain_4"); vqe_config->eq_attr.gain[5] = ini_get_int_value(ini, "EQ", "gain_5"); vqe_config->eq_attr.gain[6] = ini_get_int_value(ini, "EQ", "gain_6"); vqe_config->eq_attr.gain[7] = ini_get_int_value(ini, "EQ", "gain_7"); vqe_config->eq_attr.gain[8] = ini_get_int_value(ini, "EQ", "gain_8"); vqe_config->eq_attr.gain[9] = ini_get_int_value(ini, "EQ", "gain_9"); vqe_config->eq_attr.gain[10] = ini_get_int_value(ini, "EQ", "gain_10"); vqe_config->eq_attr.gain[11] = ini_get_int_value(ini, "EQ", "gain_11"); vqe_config->eq_attr.gain[12] = ini_get_int_value(ini, "EQ", "gain_12"); vqe_config->eq_attr.gain[13] = ini_get_int_value(ini, "EQ", "gain_13"); vqe_config->eq_attr.gain[14] = ini_get_int_value(ini, "EQ", "gain_14"); vqe_config->eq_attr.gain[15] = ini_get_int_value(ini, "EQ", "gain_15"); vqe_config->eq_attr.gain[16] = ini_get_int_value(ini, "EQ", "gain_16"); vqe_config->eq_attr.gain[17] = ini_get_int_value(ini, "EQ", "gain_17"); vqe_config->eq_attr.gain[18] = ini_get_int_value(ini, "EQ", "gain_18"); vqe_config->eq_attr.gain[19] = ini_get_int_value(ini, "EQ", "gain_19"); vqe_config->eq_attr.gain[20] = ini_get_int_value(ini, "EQ", "gain_20"); vqe_config->eq_attr.gain[21] = ini_get_int_value(ini, "EQ", "gain_21"); vqe_config->eq_attr.gain[22] = ini_get_int_value(ini, "EQ", "gain_22"); vqe_config->eq_attr.gain[23] = ini_get_int_value(ini, "EQ", "gain_23"); vqe_config->eq_attr.gain[24] = ini_get_int_value(ini, "EQ", "gain_24"); vqe_config->eq_attr.gain[25] = ini_get_int_value(ini, "EQ", "gain_25"); vqe_config->eq_attr.gain[26] = ini_get_int_value(ini, "EQ", "gain_26"); vqe_config->eq_attr.gain[27] = ini_get_int_value(ini, "EQ", "gain_27"); vqe_config->eq_attr.gain[28] = ini_get_int_value(ini, "EQ", "gain_28"); vqe_config->eq_attr.gain[29] = ini_get_int_value(ini, "EQ", "gain_29"); printf("get ai eq parameter: enable\n"); xmedia_s32 i; printf(" gain[0-14]: "); for (i = 0; i < 15; i++) { printf(" %d", vqe_config->eq_attr.gain[i]); } printf("\n gain[15-29]: "); for (i = 0; i < 15; i++) { printf(" %d", vqe_config->eq_attr.gain[15 + i]); } printf("\n"); } vqe_config->mask = enableOpenMask; } xmedia_void get_aovqe_v1_parameter(struct ini* ini, ao_vqe_attr_v1* vqe_config) { memset(vqe_config, 0, sizeof(ao_vqe_attr_v1)); // 获取模块开启状态 xmedia_u32 enableOpenMask = 0; if (ini_get_int_value(ini, "HPF", "enable")) { enableOpenMask |= VQE_V1_MASK_HPF; vqe_config->hpf_attr.mode = ini_get_int_value(ini, "HPF", "mode"); if (vqe_config->hpf_attr.mode == VQE_V1_USR_MODE_USER) { //手动模式 vqe_config->hpf_attr.freq = ini_get_int_value(ini, "HPF", "freq"); } printf("get ao hpf parameter:\n"); printf(" mode: %d\n", vqe_config->hpf_attr.mode); printf(" freq: %d\n", vqe_config->hpf_attr.freq); } if (ini_get_int_value(ini, "ANR", "enable")) { enableOpenMask |= VQE_V1_MASK_ANR; vqe_config->anr_attr.mode = ini_get_int_value(ini, "ANR", "mode"); if (vqe_config->anr_attr.mode == VQE_V1_USR_MODE_USER) { //手动模式 vqe_config->anr_attr.usr_scene = LEVEL_COEFFICIENT * ini_get_int_value(ini, "ANR", "usr_scene"); vqe_config->anr_attr.nr_mode = LEVEL_COEFFICIENT * ini_get_int_value(ini, "ANR", "nr_mode"); vqe_config->anr_attr.max_suppress_gain = LEVEL_COEFFICIENT * ini_get_int_value(ini, "ANR", "max_suppress_gain"); vqe_config->anr_attr.suppress_level = LEVEL_COEFFICIENT * ini_get_int_value(ini, "ANR", "suppress_level"); vqe_config->anr_attr.nonstationary_suppress_level = LEVEL_COEFFICIENT * ini_get_int_value(ini, "ANR", "nonstationary_suppress_level"); } printf("get ao anr parameter:\n"); printf(" mode: %d\n", vqe_config->anr_attr.mode); printf(" usr_scene: 0x%x\n", vqe_config->anr_attr.usr_scene); printf(" nr_mode: %d\n", vqe_config->anr_attr.nr_mode); printf(" max_suppress_gain: 0x%x\n", vqe_config->anr_attr.max_suppress_gain); printf(" suppress_level: %d\n", vqe_config->anr_attr.suppress_level); printf(" nonstationary_suppress_level: 0x%x\n", vqe_config->anr_attr.nonstationary_suppress_level); } if (ini_get_int_value(ini, "AGC", "enable")) { enableOpenMask |= VQE_V1_MASK_AGC; vqe_config->agc_attr.mode = ini_get_int_value(ini, "AGC", "mode"); if (vqe_config->agc_attr.mode == VQE_V1_USR_MODE_USER) { //手动模式 vqe_config->agc_attr.target_level = ini_get_int_value(ini, "AGC", "target_level"); vqe_config->agc_attr.max_boost_gain = ini_get_int_value(ini, "AGC", "max_boost_gain"); vqe_config->agc_attr.noise_floor = ini_get_int_value(ini, "AGC", "noise_floor"); vqe_config->agc_attr.ratio = ini_get_int_value(ini, "AGC", "ratio"); vqe_config->agc_attr.attack_time = ini_get_int_value(ini, "AGC", "attack_time"); vqe_config->agc_attr.release_time = ini_get_int_value(ini, "AGC", "release_time"); } printf("get ao agc parameter:\n"); printf(" mode: %d\n", vqe_config->agc_attr.mode); printf(" target_level: %d\n", vqe_config->agc_attr.target_level); printf(" max_boost_gain: %d\n", vqe_config->agc_attr.max_boost_gain); printf(" noise_floor: %d\n", vqe_config->agc_attr.noise_floor); printf(" ratio: %d\n", vqe_config->agc_attr.ratio); printf(" attack_time: %d\n", vqe_config->agc_attr.attack_time); printf(" release_time: %d\n", vqe_config->agc_attr.release_time); } if (ini_get_int_value(ini, "EQ", "enable")) { enableOpenMask |= VQE_V1_MASK_EQ; vqe_config->eq_attr.gain[0] = ini_get_int_value(ini, "EQ", "gain_0"); vqe_config->eq_attr.gain[1] = ini_get_int_value(ini, "EQ", "gain_1"); vqe_config->eq_attr.gain[2] = ini_get_int_value(ini, "EQ", "gain_2"); vqe_config->eq_attr.gain[3] = ini_get_int_value(ini, "EQ", "gain_3"); vqe_config->eq_attr.gain[4] = ini_get_int_value(ini, "EQ", "gain_4"); vqe_config->eq_attr.gain[5] = ini_get_int_value(ini, "EQ", "gain_5"); vqe_config->eq_attr.gain[6] = ini_get_int_value(ini, "EQ", "gain_6"); vqe_config->eq_attr.gain[7] = ini_get_int_value(ini, "EQ", "gain_7"); vqe_config->eq_attr.gain[8] = ini_get_int_value(ini, "EQ", "gain_8"); vqe_config->eq_attr.gain[9] = ini_get_int_value(ini, "EQ", "gain_9"); vqe_config->eq_attr.gain[10] = ini_get_int_value(ini, "EQ", "gain_10"); vqe_config->eq_attr.gain[11] = ini_get_int_value(ini, "EQ", "gain_11"); vqe_config->eq_attr.gain[12] = ini_get_int_value(ini, "EQ", "gain_12"); vqe_config->eq_attr.gain[13] = ini_get_int_value(ini, "EQ", "gain_13"); vqe_config->eq_attr.gain[14] = ini_get_int_value(ini, "EQ", "gain_14"); vqe_config->eq_attr.gain[15] = ini_get_int_value(ini, "EQ", "gain_15"); vqe_config->eq_attr.gain[16] = ini_get_int_value(ini, "EQ", "gain_16"); vqe_config->eq_attr.gain[17] = ini_get_int_value(ini, "EQ", "gain_17"); vqe_config->eq_attr.gain[18] = ini_get_int_value(ini, "EQ", "gain_18"); vqe_config->eq_attr.gain[19] = ini_get_int_value(ini, "EQ", "gain_19"); vqe_config->eq_attr.gain[20] = ini_get_int_value(ini, "EQ", "gain_20"); vqe_config->eq_attr.gain[21] = ini_get_int_value(ini, "EQ", "gain_21"); vqe_config->eq_attr.gain[22] = ini_get_int_value(ini, "EQ", "gain_22"); vqe_config->eq_attr.gain[23] = ini_get_int_value(ini, "EQ", "gain_23"); vqe_config->eq_attr.gain[24] = ini_get_int_value(ini, "EQ", "gain_24"); vqe_config->eq_attr.gain[25] = ini_get_int_value(ini, "EQ", "gain_25"); vqe_config->eq_attr.gain[26] = ini_get_int_value(ini, "EQ", "gain_26"); vqe_config->eq_attr.gain[27] = ini_get_int_value(ini, "EQ", "gain_27"); vqe_config->eq_attr.gain[28] = ini_get_int_value(ini, "EQ", "gain_28"); vqe_config->eq_attr.gain[29] = ini_get_int_value(ini, "EQ", "gain_29"); printf("get ao eq parameter: enable\n"); xmedia_s32 i; printf(" gain[0-14]: "); for (i = 0; i < 15; i++) { printf(" %d", vqe_config->eq_attr.gain[i]); } printf("\n gain[15-29]: "); for (i = 0; i < 15; i++) { printf(" %d", vqe_config->eq_attr.gain[15 + i]); } printf("\n"); } vqe_config->mask = enableOpenMask; } xmedia_void get_aovqe_v2_parameter(struct ini* ini, ao_vqe_attr_v2* vqe_config) { memset(vqe_config, 0, sizeof(ao_vqe_attr_v2)); // 获取模块开启状态 xmedia_u32 enableOpenMask = 0; if (ini_get_int_value(ini, "HPF", "enable")) { enableOpenMask |= VQE_V2_MASK_HPF; vqe_config->hpf_attr.mode = ini_get_int_value(ini, "HPF", "mode"); if (vqe_config->hpf_attr.mode == VQE_V2_USR_MODE_USER) { //手动模式 vqe_config->hpf_attr.freq = ini_get_int_value(ini, "HPF", "freq"); } printf("get ao hpf parameter:\n"); printf(" mode: %d\n", vqe_config->hpf_attr.mode); printf(" freq: %d\n", vqe_config->hpf_attr.freq); } if (ini_get_int_value(ini, "ANR", "enable")) { enableOpenMask |= VQE_V2_MASK_ANR; vqe_config->anr_attr.mode = ini_get_int_value(ini, "ANR", "mode"); if (vqe_config->anr_attr.mode == VQE_V2_USR_MODE_USER) { //手动模式 vqe_config->anr_attr.usr_scene = LEVEL_COEFFICIENT * ini_get_int_value(ini, "ANR", "usr_scene"); vqe_config->anr_attr.nr_mode = LEVEL_COEFFICIENT * ini_get_int_value(ini, "ANR", "nr_mode"); vqe_config->anr_attr.max_suppress_gain = LEVEL_COEFFICIENT * ini_get_int_value(ini, "ANR", "max_suppress_gain"); vqe_config->anr_attr.suppress_level = LEVEL_COEFFICIENT * ini_get_int_value(ini, "ANR", "suppress_level"); vqe_config->anr_attr.nonstationary_suppress_level = LEVEL_COEFFICIENT * ini_get_int_value(ini, "ANR", "nonstationary_suppress_level"); } printf("get ao anr parameter:\n"); printf(" mode: %d\n", vqe_config->anr_attr.mode); printf(" usr_scene: 0x%x\n", vqe_config->anr_attr.usr_scene); printf(" nr_mode: %d\n", vqe_config->anr_attr.nr_mode); printf(" max_suppress_gain: 0x%x\n", vqe_config->anr_attr.max_suppress_gain); printf(" suppress_level: %d\n", vqe_config->anr_attr.suppress_level); printf(" nonstationary_suppress_level: 0x%x\n", vqe_config->anr_attr.nonstationary_suppress_level); } if (ini_get_int_value(ini, "AGC", "enable")) { enableOpenMask |= VQE_V2_MASK_AGC; vqe_config->agc_attr.mode = ini_get_int_value(ini, "AGC", "mode"); if (vqe_config->agc_attr.mode == VQE_V2_USR_MODE_USER) { //手动模式 vqe_config->agc_attr.target_level = ini_get_int_value(ini, "AGC", "target_level"); vqe_config->agc_attr.max_boost_gain = ini_get_int_value(ini, "AGC", "max_boost_gain"); vqe_config->agc_attr.noise_floor = ini_get_int_value(ini, "AGC", "noise_floor"); vqe_config->agc_attr.ratio = ini_get_int_value(ini, "AGC", "ratio"); vqe_config->agc_attr.attack_time = ini_get_int_value(ini, "AGC", "attack_time"); vqe_config->agc_attr.release_time = ini_get_int_value(ini, "AGC", "release_time"); } printf("get ao agc parameter:\n"); printf(" mode: %d\n", vqe_config->agc_attr.mode); printf(" target_level: %d\n", vqe_config->agc_attr.target_level); printf(" max_boost_gain: %d\n", vqe_config->agc_attr.max_boost_gain); printf(" noise_floor: %d\n", vqe_config->agc_attr.noise_floor); printf(" ratio: %d\n", vqe_config->agc_attr.ratio); printf(" attack_time: %d\n", vqe_config->agc_attr.attack_time); printf(" release_time: %d\n", vqe_config->agc_attr.release_time); } if (ini_get_int_value(ini, "EQ", "enable")) { enableOpenMask |= VQE_V2_MASK_EQ; vqe_config->eq_attr.gain[0] = ini_get_int_value(ini, "EQ", "gain_0"); vqe_config->eq_attr.gain[1] = ini_get_int_value(ini, "EQ", "gain_1"); vqe_config->eq_attr.gain[2] = ini_get_int_value(ini, "EQ", "gain_2"); vqe_config->eq_attr.gain[3] = ini_get_int_value(ini, "EQ", "gain_3"); vqe_config->eq_attr.gain[4] = ini_get_int_value(ini, "EQ", "gain_4"); vqe_config->eq_attr.gain[5] = ini_get_int_value(ini, "EQ", "gain_5"); vqe_config->eq_attr.gain[6] = ini_get_int_value(ini, "EQ", "gain_6"); vqe_config->eq_attr.gain[7] = ini_get_int_value(ini, "EQ", "gain_7"); vqe_config->eq_attr.gain[8] = ini_get_int_value(ini, "EQ", "gain_8"); vqe_config->eq_attr.gain[9] = ini_get_int_value(ini, "EQ", "gain_9"); vqe_config->eq_attr.gain[10] = ini_get_int_value(ini, "EQ", "gain_10"); vqe_config->eq_attr.gain[11] = ini_get_int_value(ini, "EQ", "gain_11"); vqe_config->eq_attr.gain[12] = ini_get_int_value(ini, "EQ", "gain_12"); vqe_config->eq_attr.gain[13] = ini_get_int_value(ini, "EQ", "gain_13"); vqe_config->eq_attr.gain[14] = ini_get_int_value(ini, "EQ", "gain_14"); vqe_config->eq_attr.gain[15] = ini_get_int_value(ini, "EQ", "gain_15"); vqe_config->eq_attr.gain[16] = ini_get_int_value(ini, "EQ", "gain_16"); vqe_config->eq_attr.gain[17] = ini_get_int_value(ini, "EQ", "gain_17"); vqe_config->eq_attr.gain[18] = ini_get_int_value(ini, "EQ", "gain_18"); vqe_config->eq_attr.gain[19] = ini_get_int_value(ini, "EQ", "gain_19"); vqe_config->eq_attr.gain[20] = ini_get_int_value(ini, "EQ", "gain_20"); vqe_config->eq_attr.gain[21] = ini_get_int_value(ini, "EQ", "gain_21"); vqe_config->eq_attr.gain[22] = ini_get_int_value(ini, "EQ", "gain_22"); vqe_config->eq_attr.gain[23] = ini_get_int_value(ini, "EQ", "gain_23"); vqe_config->eq_attr.gain[24] = ini_get_int_value(ini, "EQ", "gain_24"); vqe_config->eq_attr.gain[25] = ini_get_int_value(ini, "EQ", "gain_25"); vqe_config->eq_attr.gain[26] = ini_get_int_value(ini, "EQ", "gain_26"); vqe_config->eq_attr.gain[27] = ini_get_int_value(ini, "EQ", "gain_27"); vqe_config->eq_attr.gain[28] = ini_get_int_value(ini, "EQ", "gain_28"); vqe_config->eq_attr.gain[29] = ini_get_int_value(ini, "EQ", "gain_29"); printf("get ao eq parameter: enable\n"); xmedia_s32 i; printf(" gain[0-14]: "); for (i = 0; i < 15; i++) { printf(" %d", vqe_config->eq_attr.gain[i]); } printf("\n gain[15-29]: "); for (i = 0; i < 15; i++) { printf(" %d", vqe_config->eq_attr.gain[15 + i]); } printf("\n"); } vqe_config->mask = enableOpenMask; } xmedia_void get_aivqe_detect_parameter(struct ini* ini, ai_vqe_attr_detect* vqe_config) { memset(vqe_config, 0, sizeof(ai_vqe_attr_detect)); // 获取模块开启状态 xmedia_u32 enableOpenMask = 0; if (ini_get_int_value(ini, "HPF", "enable")) { enableOpenMask |= VQE_DETECT_MASK_HPF; vqe_config->hpf_attr.mode = ini_get_int_value(ini, "HPF", "mode"); if (vqe_config->hpf_attr.mode == VQE_DET_USR_MODE_USER) { //手动模式 vqe_config->hpf_attr.freq = ini_get_int_value(ini, "HPF", "freq"); } printf("get ai hpf parameter:\n"); printf(" mode: %d\n", vqe_config->hpf_attr.mode); printf(" freq: %d\n", vqe_config->hpf_attr.freq); } if (ini_get_int_value(ini, "SSL", "enable")) { enableOpenMask |= VQE_DETECT_MASK_SSL; vqe_config->ssl_attr.mic_distance = LEVEL_COEFFICIENT * ini_get_int_value(ini, "SSL", "mic_distance"); vqe_config->ssl_attr.sensitivity_level = LEVEL_COEFFICIENT * ini_get_int_value(ini, "SSL", "sensitivity_level"); vqe_config->ssl_attr.shape = LEVEL_COEFFICIENT * ini_get_int_value(ini, "SSL", "shape"); printf("get ai ssl parameter:\n"); printf(" mic_distance: %d\n", vqe_config->ssl_attr.mic_distance); printf(" sensitivity_level: %d\n", vqe_config->ssl_attr.sensitivity_level); printf(" shape: %d\n", vqe_config->ssl_attr.shape); } if (ini_get_int_value(ini, "BCD", "enable")) { enableOpenMask |= VQE_DETECT_MASK_BCD; vqe_config->bcd_attr.usr_mode = ini_get_int_value(ini, "BCD", "usr_mode"); if (vqe_config->bcd_attr.usr_mode == XMEDIA_TRUE) { //手动模式 vqe_config->bcd_attr.bypass = ini_get_int_value(ini, "BCD", "bypass"); vqe_config->bcd_attr.alarm_threshold = ini_get_int_value(ini, "BCD", "alarm_threshold"); vqe_config->bcd_attr.time_limit = ini_get_int_value(ini, "BCD", "time_limit"); vqe_config->bcd_attr.time_limit_threshold_count = ini_get_int_value(ini, "BCD", "time_limit_threshold_count"); vqe_config->bcd_attr.interval_time = ini_get_int_value(ini, "BCD", "interval_time"); } printf("get ai bcd parameter:\n"); printf(" usr_mode: %d\n", vqe_config->bcd_attr.usr_mode); printf(" bypass: %d\n", vqe_config->bcd_attr.bypass); printf(" alarm_threshold: %d\n", vqe_config->bcd_attr.alarm_threshold); printf(" time_limit: %d\n", vqe_config->bcd_attr.time_limit); printf(" time_limit_threshold_count: %d\n", vqe_config->bcd_attr.time_limit_threshold_count); printf(" interval_time: %d\n", vqe_config->bcd_attr.interval_time); } if (ini_get_int_value(ini, "GBD", "enable")) { enableOpenMask |= VQE_DETECT_MASK_GBD; vqe_config->gbd_attr.usr_mode = ini_get_int_value(ini, "GBD", "usr_mode"); if (vqe_config->gbd_attr.usr_mode == XMEDIA_TRUE) { //手动模式 vqe_config->gbd_attr.bypass = ini_get_int_value(ini, "GBD", "bypass"); vqe_config->gbd_attr.alarm_threshold = ini_get_int_value(ini, "GBD", "alarm_threshold"); vqe_config->gbd_attr.time_limit = ini_get_int_value(ini, "GBD", "time_limit"); vqe_config->gbd_attr.time_limit_threshold_count = ini_get_int_value(ini, "GBD", "time_limit_threshold_count"); vqe_config->gbd_attr.interval_time = ini_get_int_value(ini, "GBD", "interval_time"); } printf("get ai gbd parameter:\n"); printf(" usr_mode: %d\n", vqe_config->gbd_attr.usr_mode); printf(" bypass: %d\n", vqe_config->gbd_attr.bypass); printf(" alarm_threshold: %d\n", vqe_config->gbd_attr.alarm_threshold); printf(" time_limit: %d\n", vqe_config->gbd_attr.time_limit); printf(" time_limit_threshold_count: %d\n", vqe_config->gbd_attr.time_limit_threshold_count); printf(" interval_time: %d\n", vqe_config->gbd_attr.interval_time); } if (ini_get_int_value(ini, "VED", "enable")) { enableOpenMask |= VQE_DETECT_MASK_VED; vqe_config->ved_attr.mode = ini_get_int_value(ini, "VED", "usr_mode"); if (vqe_config->ved_attr.mode == VQE_DET_USR_MODE_USER) { //手动模式 vqe_config->ved_attr.volume_threshold = ini_get_int_value(ini, "VED", "volume_threshold"); vqe_config->ved_attr.mutation_flag = ini_get_int_value(ini, "VED", "mutation_flag"); vqe_config->ved_attr.fast_change_threshold = ini_get_int_value(ini, "VED", "fast_change_threshold"); vqe_config->ved_attr.slow_change_threshold = ini_get_int_value(ini, "VED", "slow_change_threshold"); } printf("get ai ved parameter:\n"); printf(" mode: %d\n", vqe_config->ved_attr.mode); printf(" volume_threshold: %d\n", vqe_config->ved_attr.volume_threshold); printf(" mutation_flag: %d\n", vqe_config->ved_attr.mutation_flag); printf(" fast_change_threshold: %d\n", vqe_config->ved_attr.fast_change_threshold); printf(" slow_change_threshold: %d\n", vqe_config->ved_attr.slow_change_threshold); } vqe_config->mask = enableOpenMask; } xmedia_s32 load_base_parameter(xmedia_char* ini_name, user_base_config * base_config) { struct ini* ini_data; ini_data = create_ini(ini_name); if (ini_data == XMEDIA_NULL) { printf("load_aivqe_parameter create_ini failed\n"); return XMEDIA_FAILURE; } get_base_parameter(ini_data, base_config); destroy_ini(ini_data); return XMEDIA_SUCCESS; } xmedia_s32 load_aivqe_parameter(xmedia_char* ini_name, ai_vqe_attr* vqe_config) { struct ini* ini_data; ini_data = create_ini(ini_name); if (ini_data == XMEDIA_NULL) { printf("load_aivqe_parameter create_ini failed\n"); return XMEDIA_FAILURE; } if (vqe_config->version == AI_VQE_ENHANCE_ATTR_VERSION_1) { //only support vqe v1 get_aivqe_v1_parameter(ini_data, (ai_vqe_attr_v1 *)(vqe_config->attr)); } else if (vqe_config->version == AI_VQE_ENHANCE_ATTR_VERSION_2){ get_aivqe_v2_parameter(ini_data, (ai_vqe_attr_v2 *)(vqe_config->attr)); } else if (vqe_config->version == AI_VQE_ENHANCE_ATTR_VERSION_3){ get_aivqe_v3_parameter(ini_data, (ai_vqe_attr_v3 *)(vqe_config->attr)); } else if (vqe_config->version == AI_VQE_DETECT_ATTR_VERSION_1) { get_aivqe_detect_parameter(ini_data, (ai_vqe_attr_detect *)(vqe_config->attr)); } else { printf("load_aivqe_parameter not support vqe version(%d)\n", vqe_config->version); return XMEDIA_FAILURE; } destroy_ini(ini_data); return XMEDIA_SUCCESS; } xmedia_s32 load_aovqe_parameter(xmedia_char* ini_name, ao_vqe_attr* vqe_config) { struct ini* ini_data; ini_data = create_ini(ini_name); if (ini_data == XMEDIA_NULL) { printf("load_aivqe_parameter create_ini failed\n"); return XMEDIA_FAILURE; } if (vqe_config->version == AO_VQE_ENHANCE_ATTR_VERSION_1) { //only support vqe v1 get_aovqe_v1_parameter(ini_data, (ao_vqe_attr_v1 *)(vqe_config->attr)); } else if (vqe_config->version == AO_VQE_ENHANCE_ATTR_VERSION_2) { get_aovqe_v2_parameter(ini_data, (ao_vqe_attr_v2 *)(vqe_config->attr)); } else { printf("load_aovqe_parameter not support vqe version(%d)\n", vqe_config->version); return XMEDIA_FAILURE; } destroy_ini(ini_data); return XMEDIA_SUCCESS; }