1165 lines
55 KiB
C
1165 lines
55 KiB
C
/*
|
|
* Copyright (c) XMEDIA. All rights reserved.
|
|
*/
|
|
#include <stdlib.h>
|
|
#include <stdio.h>
|
|
#include <string.h>
|
|
#include <unistd.h>
|
|
#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<e; i++) {
|
|
xmedia_char c = str[i];
|
|
|
|
if (c != ' ' && c != '\t' && c != '\n' && c != '\r' && c != '{') {
|
|
break;
|
|
}
|
|
}
|
|
*begin_ind = i;
|
|
/* find last index of non-whitespace xmedia_character */
|
|
for (i=e-1; 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; s<ini->num_sections; s++) {
|
|
for (c=0; c<ini->sections[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; s<ini->num_sections; s++) {
|
|
if (strcmp(section, ini->sections[s]->name) == 0) {
|
|
for (c=0; c<ini->sections[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; s<ini->num_sections; s++) {
|
|
//printf("section: \"%s\" ", ini->sections[s]->name);
|
|
//printf("(num configs: %d)\n", ini->sections[s]->num_configs);
|
|
for (c=0; c<ini->sections[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;
|
|
}
|