📄 encode.c
字号:
case 0: fr_ps->header->aug_tc_alloc[i] = rand () % 8;
break;
case 1: fr_ps->header->aug_tc_alloc[i] = rand () % 4;
break;
case 3: fr_ps->header->aug_tc_alloc[i] = 0;
break;
}
else
fr_ps->header->aug_tc_alloc[i] = aug_cha_sw;
#endif
}
/********************************************************/
/* JMZ 08/03/1995 Multilingual , WtK 07/08/95 */
if (n_ml_ch > 0)
{
for (k = 7; k < 7 + n_ml_ch; k++)
{
for (i = 0; i < sblimit_ml; max_sc[k][i] = multiple[max], i++)
for (j = 1, max = scalar[k][0][i]; j < 3; j++)
if (max > scalar[k][j][i])
max = scalar[k][j][i];
for (i= sblimit_ml; i < SBLIMIT;i++)
max_sc[k][i] = 1E-20;
}
}
/* JMZ 08/03/1995 Multilingual */
/********************************************************/
}
/***************************************************************************
/*
/* tc_alloc (Layer II, multichannel)
/*
/* PURPOSE: For each subbandgroup the three transmissionchannels are
/* determined by taking the channel with the lowest level
/* according to the tabel tc_allocation in the draft
/* 8/10/93, SR
/*
/* changed to a certain limit of TC_ALLOC which must be stepped
/* beyond, before there is channel-switching
/* 9/20/93 SR
/* JMZ 08/03/1995 Ajout pour traiter les differentes configurations
/* envisagees dans la norme
/**************************************************************************/
void tc_alloc (frame_params *fr_ps, double (*max_sc)[32])
{
layer *info = fr_ps->header;
int center = info->center;
int surround = info->surround;
int matrix = info->matrix;
int i, l, k;
int min;
double min1;
double min2[7][12];
/* 01/03/1995 JMZ Configuration 3/2 */
if (surround == 2 && center != 0)
{
/* if (matrix == 3) ->tc_alloc = 0
else if (center == 3) ->tc_alloc = 0,3,4,5
else ->tc_alloc = 0,1,2,3,4,5,6,7 */
if (matrix == 3)
{
for (i = 0; i < 12; i++)
fr_ps->header->tc_alloc[i] = 0;
}
else if (center == 3) /* && matrix != 3 */
{
/* 3/2 Phantom Center coding */
for (i = 0; i < 8; i++)
{
if (((20 * log10(max_sc[3][i])) - (20 * log10(max_sc[5][i]))) > TC_ALLOC)
{
if (max_sc[6][i] < max_sc[4][i])
fr_ps->header->tc_alloc[i] = 5;
else
fr_ps->header->tc_alloc[i] = 3;
}
else if (((20 * log10(max_sc[4][i])) - (20 * log10(max_sc[6][i]))) > TC_ALLOC)
fr_ps->header->tc_alloc[i] = 4;
else
fr_ps->header->tc_alloc[i] = 0;
}
for (i = 8; i < 12; i++)
{
for (k = 2; k < 7; k++)
{
min2[k][i] = 0.0;
for (l = (sb_groups[i-1] + 1); l <= sb_groups[i]; l++)
min2[k][i] += max_sc[k][l];
min2[k][i] = min2[k][i] / (sb_groups[i] - sb_groups[i-1]);
}
if (((20 * log10(min2[3][i])) - (20 * log10(min2[5][i]))) > TC_ALLOC)
{
if (min2[6][i] < min2[4][i])
fr_ps->header->tc_alloc[i] = 5;
else
fr_ps->header->tc_alloc[i] = 3;
}
else if (((20 * log10(min2[4][i])) - (20 * log10(min2[6][i]))) > TC_ALLOC)
fr_ps->header->tc_alloc[i] = 4;
else
fr_ps->header->tc_alloc[i] = 0;
}
}
else
{
/* 3/2 no Phantom Center coding */
for (i = 0; i < 8; i++)
{
if (((20 * log10(max_sc[2][i])) - (20 * log10(max_sc[5][i]))) > TC_ALLOC)
{
if (max_sc[6][i] < max_sc[5][i])
min = 6;
else if (max_sc[6][i] == max_sc[5][i])
{
if (max_sc[3][i] <= max_sc[5][i])
min = 5;
else
min = 6;
}
else
min = 5;
}
else if (((20 * log10(max_sc[2][i])) - (20 * log10(max_sc[6][i]))) > TC_ALLOC)
{
min = 6;
/* 01/03/1995 JMZ Simplification */
}
else
{
min = 2;
}
switch (min)
{
case 5: if (max_sc[4][i] <= max_sc[6][i]) /* left front,Rs*/
fr_ps->header->tc_alloc[i] = 1;
else
fr_ps->header->tc_alloc[i] = 7; /*R*/
break;
case 6: if (max_sc[3][i] <= max_sc[5][i]) /* right front,Ls*/
fr_ps->header->tc_alloc[i] = 2;
else
fr_ps->header->tc_alloc[i] = 6; /* L */
break;
case 2: if (((20 * log10(max_sc[3][i])) - (20 * log10(max_sc[5][i]))) > TC_ALLOC)
{
if (max_sc[4][i] <= max_sc[6][i])
fr_ps->header->tc_alloc[i] = 3;
else
fr_ps->header->tc_alloc[i] = 5;
}
else
{
if (((20 * log10(max_sc[4][i])) - (20 * log10(max_sc[6][i]))) > TC_ALLOC)
fr_ps->header->tc_alloc[i] = 4;
else
fr_ps->header->tc_alloc[i] = 0;
}
break;
}
}
for (i = 8; i < 12; i++) /*taking the average scalefactor of each sb-group*/
{
for (k = 2; k < 7; k++)
{
min2[k][i] = 0.0;
for (l = (sb_groups[i-1] + 1); l <= sb_groups[i]; l++)
min2[k][i] += max_sc[k][l];
min2[k][i] = min2[k][i] / (sb_groups[i] - sb_groups[i-1]);
}
if (((20 * log10(min2[2][i])) - (20 * log10(min2[5][i]))) > TC_ALLOC)
{
if (min2[6][i] < min2[5][i])
min = 6;
else if (min2[6][i] == min2[5][i])
{
if (min2[3][i] <= min2[5][i])
min = 5;
else
min = 6;
}
else
min = 5;
}
else if (((20 * log10(min2[2][i])) - (20 * log10(min2[6][i]))) > TC_ALLOC)
{
min = 6;
/* 01/03/1995 JMZ Simplification */
}
else
{
min = 2;
}
switch (min)
{
case 5: if (min2[4][i] <= min2[6][i]) /* left front,Rs*/
fr_ps->header->tc_alloc[i] = 1;
else
fr_ps->header->tc_alloc[i] = 7; /*R*/
break;
case 6: if (min2[3][i] <= min2[5][i]) /* right front,Ls*/
fr_ps->header->tc_alloc[i] = 2;
else
fr_ps->header->tc_alloc[i] = 6; /* L */
break;
case 2: if (((20 * log10(min2[3][i])) - (20 * log10(min2[5][i]))) > TC_ALLOC)
{
if (min2[4][i] <= min2[6][i])
fr_ps->header->tc_alloc[i] = 3;
else
fr_ps->header->tc_alloc[i] = 5;
}
else
{
if (((20 * log10(min2[4][i])) - (20 * log10(min2[6][i]))) > TC_ALLOC)
fr_ps->header->tc_alloc[i] = 4;
else
fr_ps->header->tc_alloc[i] = 0;
}
break;
}
}
}
}
/* 01/03/1995 JMZ Configuration 3/1 */
if (surround == 1 && center != 0)
{
/* if (matrix == 3) ->tc_alloc = 0
else if (center == 3) ->tc_alloc = 0,3,4
else if (matrix == 2) ->tc_alloc = 0,1,2,3,4,5
else ->tc_alloc = 0,1,2,3,4 */
if (matrix == 3)
{
for (i = 0; i < 12; i++)
fr_ps->header->tc_alloc[i] = 0;
}
else if (center == 3) /* && matrix != 3 */
{
/* 3/1 Phantom Center coding */
for (i = 0; i < 8; i++)
{
if (((20 * log10(max_sc[3][i])) - (20 * log10(max_sc[5][i]))) > TC_ALLOC)
{
if (max_sc[6][i] < max_sc[5][i])
fr_ps->header->tc_alloc[i] = 4;
else
fr_ps->header->tc_alloc[i] = 3;
}
else if (((20 * log10(max_sc[3][i])) - (20 * log10(max_sc[6][i]))) > TC_ALLOC)
fr_ps->header->tc_alloc[i] = 4;
else
fr_ps->header->tc_alloc[i] = 0;
}
for (i = 8; i < 12; i++)
{
for (k = 2; k < 7; k++)
{
min2[k][i] = 0.0;
for (l = (sb_groups[i-1] + 1); l <= sb_groups[i]; l++)
min2[k][i] += max_sc[k][l];
min2[k][i] = min2[k][i] / (sb_groups[i] - sb_groups[i-1]);
}
if (((20 * log10(min2[3][i])) - (20 * log10(min2[5][i]))) > TC_ALLOC)
{
if (min2[6][i] < min2[5][i])
fr_ps->header->tc_alloc[i] = 4;
else
fr_ps->header->tc_alloc[i] = 3;
}
else
if (((20 * log10(min2[3][i])) - (20 * log10(min2[6][i]))) > TC_ALLOC)
fr_ps->header->tc_alloc[i] = 4;
else
fr_ps->header->tc_alloc[i] = 0;
}
}
else
/*
if(matrix==2)
{
}
else
*/
{
/* 3/1 no Phantom Center coding */
for (i = 0; i < 8; i++)
{
if (((20 * log10(max_sc[2][i])) - (20 * log10(max_sc[5][i]))) > TC_ALLOC)
{
if (max_sc[6][i] < max_sc[5][i])
min = 6;
else
min = 5;
}
else if (((20 * log10(max_sc[2][i])) - (20 * log10(max_sc[6][i]))) > TC_ALLOC)
min = 6;
else
min = 2;
switch (min)
{
case 5: fr_ps->header->tc_alloc[i] = 1;
break;
case 6: fr_ps->header->tc_alloc[i] = 2;
break;
case 2: if (((20 * log10(max_sc[3][i])) - (20 * log10(max_sc[5][i]))) > TC_ALLOC)
{
if (max_sc[6][i] <= max_sc[5][i])
fr_ps->header->tc_alloc[i] = 4;
else
fr_ps->header->tc_alloc[i] = 3;
}
else
{
if (((20 * log10(max_sc[3][i])) - (20 * log10(max_sc[6][i]))) > TC_ALLOC)
fr_ps->header->tc_alloc[i] = 4;
else
fr_ps->header->tc_alloc[i] = 0;
}
break;
}
}
for (i = 8; i < 12; i++)
{
for (k = 2; k < 7; k++)
{
min2[k][i] = 0.0;
for (l = (sb_groups[i-1] + 1); l <= sb_groups[i]; l++)
min2[k][i] += max_sc[k][l];
min2[k][i] = min2[k][i] / (sb_groups[i] - sb_groups[i-1]);
}
if (((20 * log10(min2[2][i])) - (20 * log10(min2[5][i]))) > TC_ALLOC)
{
if (min2[6][i] < min2[5][i])
min = 6;
else
min = 5;
}
else if (((20 * log10(min2[2][i])) - (20 * log10(min2[6][i]))) > TC_ALLOC)
min = 6;
else
min = 2;
switch (min)
{
case 5: fr_ps->header->tc_alloc[i] = 1;
break;
case 6: fr_ps->header->tc_alloc[i] = 2;
break;
case 2: if (((20 * log10(min2[3][i])) - (20 * log10(min2[5][i]))) > TC_ALLOC)
{
if (min2[6][i] <= min2[5][i])
fr_ps->header->tc_alloc[i] = 4;
else
fr_ps->header->tc_alloc[i] = 3;
}
else
{
if (((20 * log10(min2[3][i])) - (20 * log10(min2[6][i]))) > TC_ALLOC)
fr_ps->header->tc_alloc[i] = 4;
else
fr_ps->header->tc_alloc[i] = 0;
}
break;
}
}
}
}
/* 01/03/1995 JMZ Configuration 3/0 (+2/0) */
if (center != 0 && (surround == 3 || surround == 0))
{
if (matrix == 3 || center == 3)
{
for (i = 0; i < 12; i++)
fr_ps->header->tc_alloc[i] = 0;
}
/* 02/02/97 FdB no matrix == 2 allowed for 3/0
else if (matrix == 2)
{
for(i = 0; i < 8; i++)
{
if(((20 * log10(max_sc[2][i])) - (20 * log10(max_sc[5][i]))) > TC_ALLOC)
{
if(max_sc[6][i] < max_sc[5][i])
fr_ps->header->tc_alloc[i] = 2;
else fr_ps->header->tc_alloc[i] = 1;
}
else if(((20 *
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -