void InitialAC3() { error_flag = buffer_size = 0; ZeroMemory(&syncinfo, sizeof(syncinfo)); ZeroMemory(&bsi, sizeof(bsi)); ZeroMemory(&audblk, sizeof(audblk)); drc_init(); imdct_init(); exponent_init(); mantissa_init(); srand(0); }
//en : 0-close when vbi //en : 1- open when vbi //en : 2-close immediately __s32 drc_enable(__u32 sel, __u32 en) { switch(en) { case 0: if(g_iep_status[sel] & DRC_USED) { g_iep_status[sel] |= DRC_NEED_CLOSED; } else { DE_INF("[iep_drc.c]DRC hasn't opened yet !\n"); } break; case 1: if(g_iep_status[sel] & DRC_REQUIRED) { //if((gdisp.screen[sel].output_type == DISP_OUTPUT_TYPE_LCD) && (gdisp.screen[sel].status & LCD_ON)) //{ if(!(g_iep_status[sel] & DRC_USED)) { drc_init(sel); g_iep_status[sel] |= DRC_USED; DE_INF("[iep_drc.c]DRC open now!\n"); } else { DE_INF("[iep_drc.c]DRC has already opened before !\n"); } //} //else //{ // DE_INF("[iep_drc.c]Will OPEN DRC when output to LCD !\n"); //} } else { DE_INF("[iep_drc.c]Run DISP_CMD_DRC_ON will open DRC !\n"); } break; case 2: if(g_iep_status[sel] & DRC_USED) { drc_close_proc(sel); } else { DE_INF("[iep_drc.c]DRC hasn't opened yet !\n"); } break; } return DIS_SUCCESS; }
static void drc_run(struct dsp_module *module, unsigned long sample_count) { struct drc_data *data = (struct drc_data *) module->data; if (!data->drc) { int i; float nyquist = data->sample_rate / 2; struct drc *drc = drc_new(data->sample_rate); data->drc = drc; drc->emphasis_disabled = (int) *data->ports[4]; for (i = 0; i < 3; i++) { int k = 5 + i * 8; float f = *data->ports[k]; float enable = *data->ports[k+1]; float threshold = *data->ports[k+2]; float knee = *data->ports[k+3]; float ratio = *data->ports[k+4]; float attack = *data->ports[k+5]; float release = *data->ports[k+6]; float boost = *data->ports[k+7]; drc_set_param(drc, i, PARAM_CROSSOVER_LOWER_FREQ, f / nyquist); drc_set_param(drc, i, PARAM_ENABLED, enable); drc_set_param(drc, i, PARAM_THRESHOLD, threshold); drc_set_param(drc, i, PARAM_KNEE, knee); drc_set_param(drc, i, PARAM_RATIO, ratio); drc_set_param(drc, i, PARAM_ATTACK, attack); drc_set_param(drc, i, PARAM_RELEASE, release); drc_set_param(drc, i, PARAM_POST_GAIN, boost); } drc_init(drc); } if (data->ports[0] != data->ports[2]) memcpy(data->ports[2], data->ports[0], sizeof(float) * sample_count); if (data->ports[1] != data->ports[3]) memcpy(data->ports[3], data->ports[1], sizeof(float) * sample_count); drc_process(data->drc, &data->ports[2], (int) sample_count); }