⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 dyn_cross.c

📁 MPEG 2的音频编码软件。喜欢多媒体的开发人员可以看看。
💻 C
📖 第 1 页 / 共 4 页
字号:
	    }
	    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 + -