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

📄 dyn_cross.c

📁 MPEG 2的音频编码软件。喜欢多媒体的开发人员可以看看。
💻 C
📖 第 1 页 / 共 4 页
字号:
		    T2outof[sbgr] = L0;
		else
		    T2outof[sbgr] = R0;
		T3outof[sbgr] = L0;
		T4outof[sbgr] = R0;
		break;
	  case 4:
		T2[sbgr] = C; T3[sbgr] = LS; T4[sbgr] = R;
		if(fr_ps->header->dyn_cross_LR == 0)
		    T2outof[sbgr] = L0;
		else
		    T2outof[sbgr] = R0;
		T3outof[sbgr] = L0;
		T4outof[sbgr] = R0;
		break;
	  case 5:
		T2[sbgr] = C; T3[sbgr] = L; T4[sbgr] = R;
		if(fr_ps->header->dyn_cross_LR == 0)
		    T2outof[sbgr] = L0;
		else
		    T2outof[sbgr] = R0;
		T3outof[sbgr] = L0;
		T4outof[sbgr] = R0;
		break;
	  case 6:
		T2[sbgr] = R; T3[sbgr] = L; T4[sbgr] = RS;
		T2outof[sbgr] = R0;
		T3outof[sbgr] = L0;
		T4outof[sbgr] = R0;
		break;
	  case 7:
		T2[sbgr] = L; T3[sbgr] = LS; T4[sbgr] = R;
		T2outof[sbgr] = L0;
		T3outof[sbgr] = L0;
		T4outof[sbgr] = R0;
		break;
	    }	/* switch() */
	}
	else if (fr_ps->config == 310)
	{
	    /* 3/1 */
	    switch(fr_ps->header->tc_alloc[sbgr]) {
	  case 0:
		T2[sbgr] = 2;
		T3[sbgr] = 3;
		if(fr_ps->header->dyn_cross_LR == 0)
		    T2outof[sbgr] = T3outof[sbgr] = L0;
		else
		    T2outof[sbgr] = T3outof[sbgr] = R0;
		break;
	  case 1:
		T2[sbgr] = L;
		T3[sbgr] = 3;
		T2outof[sbgr] = L0;
		if(fr_ps->header->dyn_cross_LR == 0)
		    T3outof[sbgr] = L0;
		else
		    T3outof[sbgr] = R0;
		break;
	  case 2:
		T2[sbgr] = R;
		T3[sbgr] = 3;
		T2outof[sbgr] = R0;
		if(fr_ps->header->dyn_cross_LR == 0)
		    T3outof[sbgr] = L0;
		else
		    T3outof[sbgr] = R0;
		break;
	  case 3:
		T2[sbgr] = 2;
		T3[sbgr] = L;
		if(fr_ps->header->dyn_cross_LR == 0)
		    T2outof[sbgr] = L0;
		else
		    T2outof[sbgr] = R0;
		T3outof[sbgr] = L0;
		break;
	  case 4:
		T2[sbgr] = 2;
		T3[sbgr] = R;
		if(fr_ps->header->dyn_cross_LR == 0)
		    T2outof[sbgr] = L0;
		else
		    T2outof[sbgr] = R0;
		T3outof[sbgr] = R0;
		break;
	  case 5:
		T2[sbgr] = L;
		T3[sbgr] = R;
		T2outof[sbgr] = L0;
		T3outof[sbgr] = R0;
		break;
	    }	/* switch() */
	}
	else if (fr_ps->config == 220)
	{
	    /* 2/2 */
	    switch(fr_ps->header->tc_alloc[sbgr]) {
	  case 0:
		T2[sbgr] = 2; T3[sbgr] = 3;
		break;
	  case 1:
		T2[sbgr] = L; T3[sbgr] = 3;
		break;
	  case 2:
		T2[sbgr] = 2; T3[sbgr] = R;
		break;
	  case 3:
		T2[sbgr] = L; T3[sbgr] = R;
		break;
	    }	/* switch() */
	    T2outof[sbgr] = L0;
	    T3outof[sbgr] = R0;
	}
	else if (fr_ps->config == 300 || fr_ps->config == 302)
	{
	    /* 3/0 (+ 2/0) */
	    switch(fr_ps->header->tc_alloc[sbgr]) {
	  case 0:
		T2[sbgr] = 2;
		if(fr_ps->header->dyn_cross_LR == 0)
		    T2outof[sbgr] = L0;
		else
		    T2outof[sbgr] = R0;
		break;
	  case 1:
		T2[sbgr] = L;
		T2outof[sbgr] = L0;
		break;
	  case 2:
		T2[sbgr] = R;
		T2outof[sbgr] = R0;
		break;
	    }	/* switch() */
	}
	else if (fr_ps->config == 210)
	{
	    /* 2/1 */
	    switch(fr_ps->header->tc_alloc[sbgr]) {
	  case 0:
		T2[sbgr] = 2;
		if(fr_ps->header->dyn_cross_LR == 0)
		    T2outof[sbgr] = L0;
		else
		    T2outof[sbgr] = R0;
		break;
	  case 1:
		T2[sbgr] = L;
		T2outof[sbgr] = L0;
		break;
	  case 2:
		T2[sbgr] = R;
		T2outof[sbgr] = R0;
		break;
	    }	/* switch() */
	}
	if (fr_ps->config == 302)
	{
	    /* 3/0 + 2/0 */
	    T3[sbgr] = 3; 
	    T4[sbgr] = 4; 
	    T4outof[sbgr] = 3;
	}
	else if (fr_ps->config == 202)
	{
	    /* 2/0 + 2/0 */
	    T2[sbgr] = 2; 
	    T3[sbgr] = 3; 
	    T3outof[sbgr] = 2;
	}
	else if (fr_ps->config == 102)
	{
	    /* 1/0 + 2/0 */
	    T2[sbgr] = 2; 
	    T2outof[sbgr] = 1;
	}
    }	/* for(sbgr.. */
}

#ifdef Augmentation_7ch
void trans_chan_aug (frame_params *fr_ps) 		    
	    /* in:  int	fr_ps->header->tc_alloc[SBGRS], 
    	     *	    int	fr_ps->numchan,	    
	     *	    int	fr_ps->header->matrix,	    0 normal -, 3 no matricing 
	     *	    int fr_ps->header->dyn_cross_LR  0 out of L0, 1 out of R0
	     */			    
/*  global parameters
 *  out:    T2[SBGRS], T3[SBGRS], T4[SBGRS], T2outof[SBGRS], T3outof[SBGRS], T4outof[SBGRS]
 */
{  
    int sbgr;

    for (sbgr = 0; sbgr < SBGRS; sbgr++)
    {
	/* 5/2 */
	switch (fr_ps->header->aug_tc_alloc[sbgr])
	{
	case 0:
	      T5[sbgr] = LC;
	      T6[sbgr] = RC;
	      break;
	case 1:
	      T5[sbgr] = L7;
	      T6[sbgr] = RC;
	      break;
	case 2:
	      T5[sbgr] = LC;
	      T6[sbgr] = R7;
	      break;
	case 3:
	      T5[sbgr] = L7;
	      T6[sbgr] = R7;
	      break;
	case 4:
	      T5[sbgr] = LC;
	      T6[sbgr] = C7;
	      break;
	case 5:
	      T5[sbgr] = L7;
	      T6[sbgr] = C7;
	      break;
	case 6:
	      T5[sbgr] = C7;
	      T6[sbgr] = RC;
	      break;
	case 7:
	      T5[sbgr] = C7;
	      T6[sbgr] = R7;
	      break;
	}	/* switch() */
    }
}
#endif

/************************************************************************
 *
 * combine
 *
 * Version 1.0	    94/06/27	Andreas Silzle, IRT
 *
 * Add two channels into a mono channel to use it in dynamic crosstalk.
 *
 ************************************************************************/

void combine ( 
	frame_params	*fr_ps, 		    
	    /* in:  int	fr_ps->header->tc_alloc[SBGRS], 
	     *	    int fr_ps->sblimit,			
	     */
	double	sb_sample[CHANMAX3][3][SCALE_BLOCK][SBLIMIT],	/* in */
	double	sb_sample_sum[5][3][SCALE_BLOCK][SBLIMIT]) 	
		    /* out; T23, T24, T34, T234, T56 */
{  
/*  global parameters
 *  in:	T2[SBGRS], T3[SBGRS], T4[SBGRS]
 *      sb_groups[SBGRS]
 */
    int sb, sbgr, smp, sufr;

    for (sbgr=0; sbgr < SBGRS; sbgr++)
    {
	for (sb = ((sbgr==0) ? 0:(sb_groups[sbgr-1]+1)); 
		sb <= sb_groups[sbgr]; sb++)
	{
	    for (smp = 0; smp < SCALE_BLOCK; smp++)
	    {
		for (sufr = 0; sufr < 3; ++sufr)
		{
		    if (fr_ps->config == 320 || fr_ps->config == 310 || fr_ps->config == 220 || fr_ps->config == 202)
			sb_sample_sum[T23][sufr][smp][sb] = 
			    .5 * (sb_sample[T2[sbgr]][sufr][smp][sb]
				+ sb_sample[T3[sbgr]][sufr][smp][sb]);
		    else if (fr_ps->config == 102)
			sb_sample_sum[T23][sufr][smp][sb] = 
			    .5 * (sb_sample[1       ][sufr][smp][sb]
				+ sb_sample[T2[sbgr]][sufr][smp][sb]);
		    else if (fr_ps->config == 302)
			sb_sample_sum[T23][sufr][smp][sb] = 
			    .5 * (sb_sample[T3[sbgr]][sufr][smp][sb]
				+ sb_sample[T4[sbgr]][sufr][smp][sb]);
		    if (fr_ps->config == 320)
		    {
			sb_sample_sum[T24][sufr][smp][sb] = 
			    .5 * (sb_sample[T2[sbgr]][sufr][smp][sb]
				+ sb_sample[T4[sbgr]][sufr][smp][sb]);
			sb_sample_sum[T34][sufr][smp][sb] = 
			    .5 * (sb_sample[T3[sbgr]][sufr][smp][sb]
				+ sb_sample[T4[sbgr]][sufr][smp][sb]);
			sb_sample_sum[T234][sufr][smp][sb] = 
			    .333333 * (sb_sample[T2[sbgr]][sufr][smp][sb]
				+ sb_sample[T3[sbgr]][sufr][smp][sb]
				+ sb_sample[T4[sbgr]][sufr][smp][sb]);
		    }
		}   /* for(sufr.. */
	    }	    /* for(smp.. */
	}	    /* for(sb.. */
    }		    /* for(sbgr.. */	
}

#ifdef Augmentation_7ch
void combine_aug ( 
	frame_params	*fr_ps, 		    
	    /* in:  int	fr_ps->header->tc_alloc[SBGRS], 
	     *	    int fr_ps->sblimit,			
	     */
	double	sb_sample[CHANMAX3][3][SCALE_BLOCK][SBLIMIT],	/* in */
	double	sb_sample_sum[5][3][SCALE_BLOCK][SBLIMIT]) 	
		    /* out; T23, T24, T34, T234, T56 */
{  
/*  global parameters
 *  in:	T2[SBGRS], T3[SBGRS], T4[SBGRS]
 *      sb_groups[SBGRS]
 */
    int sb, sbgr, smp, sufr;

    for (sbgr = 0; sbgr < SBGRS; sbgr++)
    {
	for (sb = ((sbgr==0) ? 0:(sb_groups[sbgr-1]+1)); 
		sb <= sb_groups[sbgr]; sb++)
	{
	    for (smp = 0; smp < SCALE_BLOCK; smp++)
	    {
		for (sufr = 0; sufr < 3; ++sufr)
		{
		    sb_sample_sum[T56][sufr][smp][sb] = 
			.5 * (sb_sample[T5[sbgr]][sufr][smp][sb]
			    + sb_sample[T6[sbgr]][sufr][smp][sb]);
		}   /* for (sufr.. */
	    }	    /* for (smp.. */
	}	    /* for (sb.. */
    }		    /* for (sbgr.. */	
}
#endif

/****************************************************************************
 *
 *  void dyn_bal
 *
 *  Add the bits for scf and scfsi of the channel with dynamic crosstalk
 *  in the case of min_ch is L0 and R0.
 *
 *  07/94	Susanne Ritscher
 *  94/10/28	Andreas Silzle	    little remake
 *
 *****************************************************************************/

void dyn_bal (
	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], T2outof[SBGRS], T3outof[SBGRS], T4outof[SBGRS]
 */
    static int	sfsPerScfsi[] = { 3,2,1,2 };    /* lookup # sfs per scfsi */
    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;	    /* no additional scf and scfsi */
      case 1:  
	    if (min_ch == R0) {
		*seli += 2;
		*scale += 6 * sfsPerScfsi[scfsi[T4[sbgr]][min_sb]];
	    }
	    break;
      case 2:  
	    if (min_ch == L0) {
		*seli += 2;
		*scale += 6 * sfsPerScfsi[scfsi[T3[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]];
	    }
	    break;
      case 4: 
	    if (min_ch == L0) {
		*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 5:  
	    if (min_ch == T2outof[sbgr] && (center != 3 || sbgr < 10)) {
		*seli += 2;
		*scale += 6 * sfsPerScfsi[scfsi[T2[sbgr]][min_sb]];
	    }
	    if (min_ch == R0) {
		*seli += 2;
		*scale += 6 * sfsPerScfsi[scfsi[T4[sbgr]][min_sb]];
	    }
	    break;
      case 6: 
	    if (min_ch == T2outof[sbgr] && (center != 3 || sbgr < 10)) {
		*seli += 2;
		*scale += 6 * sfsPerScfsi[scfsi[T2[sbgr]][min_sb]];
	    }
	    if (min_ch == L0) {
		*seli += 2;
		*scale += 6 * sfsPerScfsi[scfsi[T3[sbgr]][min_sb]];
	    }
	    break;
      case 7: 
	    if (min_ch == T2outof[sbgr] && (center != 3 || sbgr < 10)) {
		*seli += 2;
		*scale += 6 * sfsPerScfsi[scfsi[T2[sbgr]][min_sb]];
	    }
	    if (min_ch == L0) {
		*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 8:
	    if (min_ch == T3[sbgr]) {
		*seli += 2;
		*scale += 6 * sfsPerScfsi[scfsi[T4[sbgr]][min_sb]];

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -