📄 gaecadf.c
字号:
/*-------------------------------------------------------------------------*
* *
* THIS IS AN UNPUBLISHED WORK CONTAINING CONFIDENTIAL AND PROPRIETARY *
* INFORMATION. IF PUBLICATION OCCURS, THE FOLLOWING NOTICE APPLIES: *
* "COPYRIGHT 2002 MIKET DSP SOLUTIONS, ALL RIGHTS RESERVED" *
* *
*-------------------------------------------------------------------------*/
#if !defined(_dsp)
#include <memory.h>
#else
#include <string.h>
#endif
#include "gaeci.h"
/*--------------------- local defs ----------------------------------------*/
#define _CONV_ACC_MAX (2000*1)
#define _CONV_ACC3 (600*1)
#define _CONV_ACC2 (1*GAEC_ADF_SZ/GAEC_BLKS)
/*--------------------- public vars ---------------------------------------*/
#if !defined(_dsp)
U16 _auCopyAdf[GAEC_BANDS+1];
#endif
/*--------------------- local vars ----------------------------------------*/
/*--------------------- local functions -----------------------------------*/
/*-------------------------------------------------------------------------*/
/*-------------------------------------------------------------------------*/
void _update_energy2
/*-------------------------------------------------------------------------*/
(
GAEC_tDb *pDb,
GAEC_tSc *pSc
)
{
S16 blk;
for (blk = 0; blk < GAEC_BLKS; blk++)
{
gaec_get_energy2(pDb, blk);
}
}
/*-------------------------------------------------------------------------*/
void _adapt2
/*-------------------------------------------------------------------------*/
(
GAEC_tDb *pDb,
GAEC_tSc *pSc,
S16 blk
)
{
gaec_get_energy2 (pDb, blk);
memclr(pSc->u.aA2, sizeof(GAEC_tScA2));
gaec_adapt_dc2p (pDb, pSc, blk, 0);
gaec_adapt_dc2d (pDb, pSc, blk, 0);
memclr(pSc->u.aA2, sizeof(GAEC_tScA2));
gaec_adapt_dc2p (pDb, pSc, blk, GAEC_BANDS);
gaec_adapt_dc2d (pDb, pSc, blk, GAEC_BANDS);
memclr(pSc->u.aA2, sizeof(pSc->u.aA2));
gaec_adapt_ac2p (pDb, pSc, blk);
gaec_adapt_ac2d (pDb, pSc, blk);
}
/*-------------------------------------------------------------------------*/
void _update_energy3
/*-------------------------------------------------------------------------*/
(
GAEC_tDb *pDb,
GAEC_tSc *pSc
)
{
S16 blk;
for (blk = 0; blk < GAEC_BLKS; blk++)
{
gaec_get_energy3(pDb, blk);
}
}
/*-------------------------------------------------------------------------*/
void _adapt3
/*-------------------------------------------------------------------------*/
(
GAEC_tDb *pDb,
GAEC_tSc *pSc,
S16 blk
)
{
gaec_get_energy3 (pDb, blk);
gaec_get_energy3 (pDb, blk+1);
memclr(pSc->u.aA3, sizeof(GAEC_tScA3));
gaec_adapt_dc3p (pDb, pSc, blk, 0);
gaec_adapt_dc3d (pDb, pSc, blk, 0);
memclr(pSc->u.aA3, sizeof(GAEC_tScA3));
gaec_adapt_dc3p (pDb, pSc, blk, GAEC_BANDS);
gaec_adapt_dc3d (pDb, pSc, blk, GAEC_BANDS);
memclr(pSc->u.aA3, sizeof(pSc->u.aA3));
gaec_adapt_ac3p (pDb, pSc, blk);
gaec_adapt_ac3d (pDb, pSc, blk);
}
/*-------------------------------------------------------------------------*/
void _update_energy4
/*-------------------------------------------------------------------------*/
(
GAEC_tDb *pDb,
GAEC_tSc *pSc
)
{
gaec_get_energy4(pDb);
}
/*-------------------------------------------------------------------------*/
void _adapt4
/*-------------------------------------------------------------------------*/
(
GAEC_tDb *pDb,
GAEC_tSc *pSc
)
{
gaec_get_energy4 (pDb);
memclr(pSc->u.aA4, sizeof(GAEC_tScA4));
gaec_adapt_dc4p (pDb, pSc, 0);
gaec_adapt_dc4d (pDb, pSc, 0);
memclr(pSc->u.aA4, sizeof(GAEC_tScA4));
gaec_adapt_dc4p (pDb, pSc, GAEC_BANDS);
gaec_adapt_dc4d (pDb, pSc, GAEC_BANDS);
memclr(pSc->u.aA4, sizeof(pSc->u.aA4));
gaec_adapt_ac4p (pDb, pSc);
gaec_adapt_ac4d (pDb, pSc);
}
/*-------------------------------------------------------------------------*/
void _cancel
/*-------------------------------------------------------------------------*/
(
GAEC_tDb *pDb,
GAEC_tSc *pSc,
S16 blk
)
{
gaec_cancel_dc(pDb, pSc, pDb->psAdf, &pSc->aasErr[0][0], blk, 0);
gaec_cancel_dc(pDb, pSc, pDb->psAdf, &pSc->aasErr[0][0], blk, GAEC_BANDS);
gaec_cancel_ac(pDb, pSc, pDb->psAdf, &pSc->aasErr[0][0], blk);
}
/*-------------------------------------------------------------------------*/
void _cancel_m
/*-------------------------------------------------------------------------*/
(
GAEC_tDb *pDb,
GAEC_tSc *pSc,
S16 blk
)
{
gaec_cancel_dc(pDb, pSc, pDb->psAdfM, &pSc->aasErrM[0][0], blk, 0);
gaec_cancel_dc(pDb, pSc, pDb->psAdfM, &pSc->aasErrM[0][0], blk, GAEC_BANDS);
gaec_cancel_ac(pDb, pSc, pDb->psAdfM, &pSc->aasErrM[0][0], blk);
}
/*--------------------- public functions ---------------------------------*/
/*-------------------------------------------------------------------------*/
void gaec_adf_cancel
/*-------------------------------------------------------------------------*/
(
GAEC_tDb *pDb,
GAEC_tSc *pSc
)
{
S16 blk;
for (blk = 0; blk < GAEC_BLKS; blk++)
{
_cancel(pDb, pSc, blk);
_cancel_m(pDb, pSc, blk);
}
}
/*-------------------------------------------------------------------------*/
void gaec_adf_adapt
/*-------------------------------------------------------------------------*/
(
GAEC_tDb *pDb,
GAEC_tSc *pSc
)
{
S16 blk;
pSc->uAdapt =
(!(pDb->uControl & IGAEC_CMD_ADAPT_OFF)) &&
// (pDb->sErlCrit < GAEC_CRIT_MAX/2) &&
(!pDb->uIsTone);
#if 0
{
extern long _Frame;
if (_Frame > 200*5) pSc->uAdapt = FALSE;
}
#endif
// pSc->uAdapt = 0;
switch (pDb->uAdfMode)
{
case 0:
_update_energy2(pDb, pSc);
_update_energy3(pDb, pSc);
_update_energy4(pDb, pSc);
break;
case 2:
{
if (pSc->uAdapt)
{
for (blk = 0; blk < GAEC_BLKS; blk++)
{
if (blk != 0)
{
_cancel(pDb, pSc, blk);
}
_adapt2 (pDb, pSc, blk);
}
}
else
{
_update_energy2(pDb, pSc);
}
_update_energy3(pDb, pSc);
_update_energy4(pDb, pSc);
break;
}
case 3:
{
if (pSc->uAdapt)
{
for (blk = 0; blk < GAEC_BLKS/2; blk++)
{
if (blk != 0)
{
_cancel(pDb, pSc, blk*2);
_cancel(pDb, pSc, blk*2+1);
}
_adapt3 (pDb, pSc, blk*2);
}
}
else
{
_update_energy3(pDb, pSc);
}
_update_energy2(pDb, pSc);
_update_energy4(pDb, pSc);
break;
}
case 4:
{
if (pSc->uAdapt)
{
_adapt4 (pDb, pSc);
}
else
{
_update_energy4 (pDb, pSc);
}
_update_energy2(pDb, pSc);
_update_energy3(pDb, pSc);
break;
}
default:
break;
} // end-of-switch
}
/*-------------------------------------------------------------------------*/
void gaec_adf_stepsize
/*-------------------------------------------------------------------------*/
(
GAEC_tDb *pDb,
GAEC_tSc *pSc
)
{
// asTmp use: GAEC_BANDS+1
S16 band;
S16 sAddLoss = GAEC_DB(1.0) * (GAEC_BANDS/2);
for (band = 0; band < GAEC_BANDS+1; band++)
{
pSc->u.asTmp[band] = 0;
}
for (band = 0; band < GAEC_BANDS/2; band++)
{
pSc->u.asTmp[band] = sAddLoss;
sAddLoss -= GAEC_DB(1.0);
}
for (band = 0; band < GAEC_BANDS+1; band++)
{
S16 sErleLoss;
S16 sExpectedErrEn = pDb->asExpectedErrEn[band];
sAddLoss = 0;
switch (pDb->uAdfMode)
{
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -