📄 dyn_cross.c
字号:
}
break;
case 9:
if (min_ch == T2[sbgr]) {
*seli += 2;
*scale += 6 * sfsPerScfsi[scfsi[T3[sbgr]][min_sb]];
}
break;
case 10:
if (min_ch == T2[sbgr]) {
*seli += 2;
*scale += 6 * sfsPerScfsi[scfsi[T4[sbgr]][min_sb]];
}
break;
case 11:
if (min_ch == T2[sbgr]) {
*seli += 2;
*scale += 6 * sfsPerScfsi[scfsi[T3[sbgr]][min_sb]];
}
if (min_ch == R0) {
*seli += 2;
*scale += 6 * sfsPerScfsi[scfsi[T4[sbgr]][min_sb]];
}
break;
case 12:
if (min_ch == T2[sbgr]) {
*seli += 2;
*scale += 6 * sfsPerScfsi[scfsi[T4[sbgr]][min_sb]];
}
if (min_ch == L0) {
*seli += 2;
*scale += 6 * sfsPerScfsi[scfsi[T3[sbgr]][min_sb]];
}
break;
case 13:
if (min_ch == T2outof[sbgr] && (center != 3 || sbgr < 10)) {
*seli += 2;
*scale += 6 * sfsPerScfsi[scfsi[T2[sbgr]][min_sb]];
}
if (min_ch == T3[sbgr]) {
*seli += 2;
*scale += 6 * sfsPerScfsi[scfsi[T4[sbgr]][min_sb]];
}
break;
case 14:
if (min_ch == T2[sbgr]) {
*seli += 4;
*scale += 6 * sfsPerScfsi[scfsi[T3[sbgr]][min_sb]];
*scale += 6 * sfsPerScfsi[scfsi[T4[sbgr]][min_sb]];
}
break;
case 15:
fprintf(stderr, "FORBIDDEN DYN_CROSS!!!!!\n");
fflush(stderr);
exit(0);
break;
} /* switch.. */
}
else if (fr_ps->config == 310 || fr_ps->config == 220)
{
/* 3/1 and 2/2 */
switch (fr_ps->header->dyn_cross[sbgr]) {
case 0:
break; /* no additional scf and scfsi */
case 1:
if (min_ch == T3outof[sbgr]) {
*seli += 2;
*scale += 6 * sfsPerScfsi[scfsi[T3[sbgr]][min_sb]];
}
break;
case 2:
if (min_ch == T2outof[sbgr] && (center != 3 || sbgr < 10)) {
*seli += 2;
*scale += 6 * sfsPerScfsi[scfsi[T2[sbgr]][min_sb]];
}
break;
case 3:
if (min_ch == T2outof[sbgr] && (center != 3 || sbgr < 10)) {
*seli += 2;
*scale += 6 * sfsPerScfsi[scfsi[T2[sbgr]][min_sb]];
}
if (min_ch == T3outof[sbgr]) {
*seli += 2;
*scale += 6 * sfsPerScfsi[scfsi[T3[sbgr]][min_sb]];
}
break;
case 4:
if (min_ch == T2[sbgr]) {
*seli += 2;
*scale += 6 * sfsPerScfsi[scfsi[T3[sbgr]][min_sb]];
}
break;
default:
fprintf(stderr, "FORBIDDEN DYN_CROSS!!!!!\n");
fflush(stderr);
exit(0);
break;
} /* switch.. */
}
else if (fr_ps->config == 300 || fr_ps->config == 302 || fr_ps->config == 210)
{
/* 3/0 (+2/0) and 2/1 */
switch(fr_ps->header->dyn_cross[sbgr]) {
case 0:
break; /* no additional scf and scfsi */
case 1:
if (min_ch == T2outof[sbgr] && (center != 3 || sbgr < 10)) {
*seli += 2;
*scale += 6 * sfsPerScfsi[scfsi[T2[sbgr]][min_sb]];
}
break;
default:
fprintf(stderr, "FORBIDDEN DYN_CROSS!!!!!\n");
fflush(stderr);
exit(0);
break;
} /* switch.. */
if (fr_ps->config == 302 && info->dyn_second_stereo[sbgr] && min_ch == T4outof[sbgr])
{
*seli += 2;
*scale += 6 * sfsPerScfsi[scfsi[T4[sbgr]][min_sb]];
}
}
else if (fr_ps->config == 202 && info->dyn_second_stereo[sbgr] && min_ch == T3outof[sbgr])
{
*seli += 2;
*scale += 6 * sfsPerScfsi[scfsi[T3[sbgr]][min_sb]];
}
else if (fr_ps->config == 102 && info->dyn_second_stereo[sbgr] && min_ch == T2outof[sbgr])
{
*seli += 2;
*scale += 6 * sfsPerScfsi[scfsi[T2[sbgr]][min_sb]];
}
}
#ifdef Augmentation_7ch
void dyn_bal_aug (
unsigned int scfsi[CHANMAX3][SBLIMIT], /* in */
int sbgr, /* in */
frame_params *fr_ps, /* in: fr_ps->header->dyn_cross[sbgr] */
int min_ch, /* in */
int min_sb, /* in */
int *seli, /* in, out */
int *scale) /* in, out */
{
/* global parameters
* in: T2[SBGRS], T3[SBGRS], T4[SBGRS], T5[SBGRS]
*/
static int sfsPerScfsi[] = { 3,2,1,2 }; /* lookup # sfs per scfsi */
int dynx_T2 = !dyn_ch (fr_ps, sbgr, 2);
int dynx_T3 = !dyn_ch (fr_ps, sbgr, 3);
int dynx_T4 = !dyn_ch (fr_ps, sbgr, 4);
int T5T0 = L0, T6T0 = L0, T6T1 = R0;
if (fr_ps->header->aug_tc_alloc[sbgr] == 4 || fr_ps->header->aug_tc_alloc[sbgr] == 5)
if (fr_ps->header->dyn_cross_LR == 0)
T6T1 = L0;
else
T6T0 = R0;
else if (fr_ps->header->aug_tc_alloc[sbgr] == 6 || fr_ps->header->aug_tc_alloc[sbgr] == 7)
if (fr_ps->header->dyn_cross_LR)
T5T0 = R0;
/* 5/2 */
switch (fr_ps->header->aug_dyn_cross[sbgr])
{
case 0:
break; /* no additional scf and scfsi */
case 1:
if (min_ch == T6T1)
{
*seli += 2;
*scale += 6 * sfsPerScfsi[scfsi[T6[sbgr]][min_sb]];
}
break;
case 2:
if (min_ch == T2[sbgr] || (dynx_T2 && min_ch == T2from[sbgr]))
{
*seli += 2;
*scale += 6 * sfsPerScfsi[scfsi[T6[sbgr]][min_sb]];
}
break;
case 3:
if (min_ch == T4[sbgr] || (dynx_T4 && min_ch == T4from[sbgr]))
{
*seli += 2;
*scale += 6 * sfsPerScfsi[scfsi[T6[sbgr]][min_sb]];
}
break;
case 4:
if (min_ch == T5[sbgr])
{
*seli += 2;
*scale += 6 * sfsPerScfsi[scfsi[T6[sbgr]][min_sb]];
}
break;
case 5:
if (min_ch == T5T0)
{
*seli += 2;
*scale += 6 * sfsPerScfsi[scfsi[T5[sbgr]][min_sb]];
}
break;
case 6:
if (min_ch == T5T0)
{
*seli += 2;
*scale += 6 * sfsPerScfsi[scfsi[T5[sbgr]][min_sb]];
}
else if (min_ch == T6T1)
{
*seli += 2;
*scale += 6 * sfsPerScfsi[scfsi[T6[sbgr]][min_sb]];
}
break;
case 7:
if (min_ch == T5T0)
{
*seli += 2;
*scale += 6 * sfsPerScfsi[scfsi[T5[sbgr]][min_sb]];
}
if (min_ch == T2[sbgr] || (dynx_T2 && min_ch == T2from[sbgr]))
{
*seli += 2;
*scale += 6 * sfsPerScfsi[scfsi[T6[sbgr]][min_sb]];
}
break;
case 8:
if (min_ch == T5T0)
{
*seli += 2;
*scale += 6 * sfsPerScfsi[scfsi[T5[sbgr]][min_sb]];
}
if (min_ch == T4[sbgr] || (dynx_T4 && min_ch == T4from[sbgr]))
{
*seli += 2;
*scale += 6 * sfsPerScfsi[scfsi[T6[sbgr]][min_sb]];
}
break;
case 9:
if (min_ch == T5T0)
{
*seli += 2;
*scale += 6 * sfsPerScfsi[scfsi[T5[sbgr]][min_sb]];
}
if (min_ch == T6T0)
{
*seli += 2;
*scale += 6 * sfsPerScfsi[scfsi[T6[sbgr]][min_sb]];
}
break;
case 10:
if (min_ch == T2[sbgr] || (dynx_T2 && min_ch == T2from[sbgr]))
{
*seli += 2;
*scale += 6 * sfsPerScfsi[scfsi[T5[sbgr]][min_sb]];
}
break;
case 11:
if (min_ch == T2[sbgr] || (dynx_T2 && min_ch == T2from[sbgr]))
{
*seli += 2;
*scale += 6 * sfsPerScfsi[scfsi[T5[sbgr]][min_sb]];
}
if (min_ch == T6T1)
{
*seli += 2;
*scale += 6 * sfsPerScfsi[scfsi[T6[sbgr]][min_sb]];
}
break;
case 12:
if (min_ch == T2[sbgr] || (dynx_T2 && min_ch == T2from[sbgr]))
{
*seli += 4;
*scale += 6 * sfsPerScfsi[scfsi[T5[sbgr]][min_sb]];
*scale += 6 * sfsPerScfsi[scfsi[T6[sbgr]][min_sb]];
}
break;
case 13:
if (min_ch == T2[sbgr] || (dynx_T2 && min_ch == T2from[sbgr]))
{
*seli += 2;
*scale += 6 * sfsPerScfsi[scfsi[T5[sbgr]][min_sb]];
}
if (min_ch == T4[sbgr] || (dynx_T4 && min_ch == T4from[sbgr]))
{
*seli += 2;
*scale += 6 * sfsPerScfsi[scfsi[T6[sbgr]][min_sb]];
}
break;
case 14:
if (min_ch == T3[sbgr] || (dynx_T3 && min_ch == T3from[sbgr]))
{
*seli += 2;
*scale += 6 * sfsPerScfsi[scfsi[T5[sbgr]][min_sb]];
}
break;
case 15:
if (min_ch == T3[sbgr] || (dynx_T3 && min_ch == T3from[sbgr]))
{
*seli += 2;
*scale += 6 * sfsPerScfsi[scfsi[T5[sbgr]][min_sb]];
}
if (min_ch == T6T1)
{
*seli += 2;
*scale += 6 * sfsPerScfsi[scfsi[T6[sbgr]][min_sb]];
}
break;
case 16:
if (min_ch == T3[sbgr] || (dynx_T3 && min_ch == T3from[sbgr]))
{
*seli += 2;
*scale += 6 * sfsPerScfsi[scfsi[T5[sbgr]][min_sb]];
}
if (min_ch == T2[sbgr] || (dynx_T2 && min_ch == T2from[sbgr]))
{
*seli += 2;
*scale += 6 * sfsPerScfsi[scfsi[T6[sbgr]][min_sb]];
}
break;
case 17:
if (min_ch == T3[sbgr] || (dynx_T3 && min_ch == T3from[sbgr]))
{
*seli += 2;
*scale += 6 * sfsPerScfsi[scfsi[T5[sbgr]][min_sb]];
}
if (min_ch == T4[sbgr] || (dynx_T4 && min_ch == T4from[sbgr]))
{
*seli += 2;
*scale += 6 * sfsPerScfsi[scfsi[T6[sbgr]][min_sb]];
}
break;
case 18:
if (min_ch == T3[sbgr] || (dynx_T3 && min_ch == T3from[sbgr]))
{
*seli += 4;
*scale += 6 * sfsPerScfsi[scfsi[T5[sbgr]][min_sb]];
*scale += 6 * sfsPerScfsi[scfsi[T6[sbgr]][min_sb]];
}
break;
default:
fprintf (stderr, "FORBIDDEN AUG_DYN_CROSS!!!!!\n");
fflush (stderr);
exit (1);
break;
}
}
#endif
/****************************************************************************
*
* void choose_dyn
*
* bit_alloc of the dynamic crosstalk channels must be have a value;
* only for sending scf in datastream.
*
* 07/94 Susanne Ritscher
* 94/10/31 Andreas Silzle little remake
* 94/12/30 Andreas Silzle
* fill only up to that subband of the basic channel
* which is unequal zero.
*
*****************************************************************************/
void choose_dyn (
frame_params *fr_ps,
/* in: fr_ps->header->dyn_cross[sbgr]
* fr_ps->alloc
*/
int min_ch, /* in */
int min_sb, /* in */
int sbgr, /* in */
unsigned int bit_alloc[CHANMAX3][SBLIMIT]) /* out */
{
/* global parameters
* in: T2[SBGRS], T3[SBGRS], T4[SBGRS], T2outof[SBGRS]
*/
layer *info = fr_ps->header;
int center = info->center;
int surround = info->surround;
/* 960627 FdB DynX dependent on configuration */
if (fr_ps->config == 320)
{
/* 3/2 */
switch(fr_ps->header->dyn_cross[sbgr]) {
case 0:
break;
case 1:
if(min_ch == R0 && bit_alloc[R0][min_sb] != 0)
bit_alloc[T4[sbgr]][min_sb] = 1;
break;
case 2:
if(min_ch == L0 && bit_alloc[L0][min_sb] != 0)
bit_alloc[T3[sbgr]][min_sb] = 1;
break;
case 3:
if(min_ch == T2outof[sbgr] && bit_alloc[T2outof[sbgr]][min_sb] != 0)
bit_alloc[T2[sbgr]][min_sb] = 1;
break;
case 4:
if(min_ch == R0 && bit_alloc[R0][min_sb] != 0)
bit_alloc[T4[sbgr]][min_sb] = 1;
if(min_ch == L0 && bit_alloc[L0][min_sb] != 0)
bit_alloc[T3[sbgr]][min_sb] = 1;
break;
case 5:
if(min_ch == T2outof[sbgr] && bit_alloc[T2outof[sbgr]][min_sb] != 0)
bit_alloc[T2[sbgr]][min_sb] = 1;
if(min_ch == R0 && bit_alloc[R0][min_sb] != 0)
bit_alloc[T4[sbgr]][min_sb] = 1;
break;
case 6:
if(min_ch == T2outof[sbgr] && bit_alloc[T2outof[sbgr]][min_sb] != 0)
bit_alloc[T2[sbgr]][min_sb] = 1;
if(min_ch == L0 && bit_alloc[L0][min_sb] != 0)
bit_alloc[T3[sbgr]][min_sb] = 1;
break;
case 7:
if(min_ch == T2outof[sbgr] && bit_alloc[T2outof[sbgr]][min_sb] != 0)
bit_alloc[T2[sbgr]][min_sb] = 1;
if(min_ch == L0 && bit_alloc[L0][min_sb] != 0)
bit_alloc[T3[sbgr]][min_sb] = 1;
if(min_ch == R0 && bit_alloc[R0][min_sb] != 0)
bit_alloc[T4[sbgr]][min_sb] = 1;
break;
case 8:
if(min_ch == T3[sbgr] && bit_alloc[T3[sbgr]][min_sb] != 0)
bit_alloc[T4[sbgr]][min_sb] = 1;
break;
case 9:
if(min_ch == T2[sbgr] && bit_alloc[T2[sbgr]][min_sb] != 0)
bit_alloc[T3[sbgr]][min_sb] = 1;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -