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

📄 dyn_cross.c

📁 ISO mp3 sources (distribution 10) Layer 1/2/3, C Source, 512 k Sources of the Mpeg 1,2 layer 1,2
💻 C
📖 第 1 页 / 共 4 页
字号:
/********************************************************************** * ISO MPEG Audio Subgroup Software Simulation Group (1996) * ISO 13818-3 MPEG-2 Audio Multichannel Encoder * * $Id: dyn_cross.c 1.3 1996/02/12 07:13:35 rowlands Exp $ * * $Log: dyn_cross.c $ * Revision 1.3  1996/02/12 07:13:35  rowlands * Release following Munich meeting * **********************************************************************/#include "common.h"#include "encoder.h"/************************************************************************ * * take_dyn_cross * * Version 1.0	    94/10/24	Andreas Silzle, IRT * * Copy the sums, scf, scfsi, if required, in the normal positions. * ************************************************************************//* #define LOW_SBGR	5	original value 960619 FdB			*/#define LOW_SBGR	0   /* lowest subbandgroup, in which dyn_cross is done.*/			    /* All sb-groups under that boarder are not	       */			    /* affected by dyn_cross			       */void take_dyn_cross (	int		dyn_cr,		frame_params	*fr_ps,  		    	    /* out: int	fr_ps->header->dyn_cross_on, 	     *	    int	fr_ps->header->dyn_cross_LR,     	     *	    int	fr_ps->header->dyn_cross[SBGRS],	    	     */			    	double		sb_sample_sum[5][3][SCALE_BLOCK][SBLIMIT], 	    						    /* in, T23, T24, T34, T234, T56 */	unsigned int	scalar_sum[][3][SBLIMIT], 			/* in */ 	unsigned int	scfsi_sum[][SBLIMIT],  				/* in */	unsigned int	scfsi_dyn[][SBLIMIT],  				/* in */	double		sb_sample[CHANMAX3][3][SCALE_BLOCK][SBLIMIT],	/* out */	unsigned int	scalar[][3][SBLIMIT], 				/* out */ 	unsigned int	scfsi[][SBLIMIT]) 				/* out */{    int	    sbgr, sb, sufr, smp, dyn_second_stereo = 0;    layer *info  = fr_ps->header;    int center   = info->center;    int surround = info->surround;    fr_ps->header->dyn_cross_on = 0;    if (fr_ps->header->dyn_cross_LR && (fr_ps->config == 302 || fr_ps->config == 202 || fr_ps->config == 102))	dyn_second_stereo = 1;/*    printf ("dyn_cr: %2d\n", dyn_cr); */    for (sbgr = LOW_SBGR; sbgr < SBGRS; sbgr++)    {	/* signalization */	if (dyn_cr == 0 && dyn_second_stereo == 0)	{	    fr_ps->header->dyn_cross[sbgr] = 0;	    fr_ps->header->dyn_second_stereo[sbgr] = 0;	}	else	{	    fr_ps->header->dyn_cross_on = 1;	    /* original value 960619 FdB */ 	    /* fr_ps->header->dyn_cross[sbgr] = dyn_cr; */	    /* systematic variation of dynamic crosstalk over all subbands */	    if (dyn_cr == -1)	    {		switch (fr_ps->config)		{		    case 320:	fr_ps->header->dyn_cross[sbgr] = rand () % 15;				break;		    case 310:		    case 220:	fr_ps->header->dyn_cross[sbgr] = rand () % 5;				break;		    case 300:		    case 302:		    case 210:	fr_ps->header->dyn_cross[sbgr] = rand () % 2;				break;		    default:	fr_ps->header->dyn_cross[sbgr] = 0;				break;		}	    }	    else		fr_ps->header->dyn_cross[sbgr] = dyn_cr;	    fr_ps->header->dyn_second_stereo[sbgr] = dyn_second_stereo;/*            printf ("sbgr: %2d dyn_cr: %2d dyn_2nd_st: %2d\n",	    	    sbgr, fr_ps->header->dyn_cross[sbgr],		    fr_ps->header->dyn_second_stereo[sbgr]);*/	    /* copying sums, scf, scfsi */	    	    /* 960627 FdB DynX dependent on configuration */	    if (fr_ps->config == 320)	    {		/* 3/2 */		if(fr_ps->header->dyn_cross[sbgr] == 9 || fr_ps->header->dyn_cross[sbgr] == 11) {		    T3from[sbgr] = T2[sbgr];		    for(sb=((sbgr==0) ? 0:(sb_groups[sbgr-1]+1)); 			    sb<=sb_groups[sbgr]; sb++) {			scfsi[T2[sbgr]][sb] = scfsi_sum[T23][sb];			for(sufr = 0; sufr<3; ++sufr) {			    scalar[T2[sbgr]][sufr][sb] = scalar_sum[T23][sufr][sb];			    for(smp = 0; smp<SCALE_BLOCK; ++smp) {				sb_sample[T2[sbgr]][sufr][smp][sb] = 				    sb_sample_sum[T23][sufr][smp][sb];			    }   /* for(smp..) */			}	    /* for(sufr.). */		    }	    /* for(sb..) */		} 		else if(fr_ps->header->dyn_cross[sbgr] == 10 || fr_ps->header->dyn_cross[sbgr] == 12) {		    T4from[sbgr] = T2[sbgr];		    for(sb=((sbgr==0) ? 0:(sb_groups[sbgr-1]+1)); 			    sb<=sb_groups[sbgr]; sb++) {			scfsi[T2[sbgr]][sb] = scfsi_sum[T24][sb];			for(sufr = 0; sufr<3; ++sufr) {			    scalar[T2[sbgr]][sufr][sb] = scalar_sum[T24][sufr][sb];			    for(smp = 0; smp<SCALE_BLOCK; ++smp) {				sb_sample[T2[sbgr]][sufr][smp][sb] = 				    sb_sample_sum[T24][sufr][smp][sb];			    }   /* for(smp..) */			}	    /* for(sufr..) */		    }	    /* for(sb..) */		} 		else if(fr_ps->header->dyn_cross[sbgr] == 8 || fr_ps->header->dyn_cross[sbgr] == 13) {		    T4from[sbgr] = T3[sbgr];		    for(sb=((sbgr==0) ? 0:(sb_groups[sbgr-1]+1)); 			    sb<=sb_groups[sbgr]; sb++) {			scfsi[T3[sbgr]][sb] = scfsi_sum[T34][sb];			for(sufr = 0; sufr<3; ++sufr) {			    scalar[T3[sbgr]][sufr][sb] = scalar_sum[T34][sufr][sb];			    for(smp = 0; smp<SCALE_BLOCK; ++smp) {				sb_sample[T3[sbgr]][sufr][smp][sb] = 				    sb_sample_sum[T34][sufr][smp][sb];			    }   /* for(smp..) */			}	    /* for(sufr..) */		    }	    /* for(sb..) */		} 		else if(fr_ps->header->dyn_cross[sbgr] == 14) {		    T3from[sbgr] = T4from[sbgr] = T2[sbgr];		    for(sb=((sbgr==0) ? 0:(sb_groups[sbgr-1]+1)); 			    sb<=sb_groups[sbgr]; sb++) {			scfsi[T2[sbgr]][sb] = scfsi_sum[T234][sb];			for(sufr = 0; sufr<3; ++sufr) {			    scalar[T2[sbgr]][sufr][sb] = scalar_sum[T234][sufr][sb];			    for(smp = 0; smp<SCALE_BLOCK; ++smp) {				sb_sample[T2[sbgr]][sufr][smp][sb] = 				    sb_sample_sum[T234][sufr][smp][sb];			    }   /* for(smp..) */			}	    /* for(sufr..) */		    }	    /* for(sb..) */		}		    /* if(dyncr_do[sbgr]..) */			/* scfsi_dyn in scfsi of L0 and R0 */		/* T2 */		switch(fr_ps->header->dyn_cross[sbgr]) {	      case 3: case 5: case 6: case 7: case 13:		    T2from[sbgr] = T2outof[sbgr];		    for(sb=((sbgr==0) ? 0:(sb_groups[sbgr-1]+1)); 			    sb<=sb_groups[sbgr]; sb++) 			scfsi[T2outof[sbgr]][sb] = scfsi_dyn[T2outof[sbgr]][sb];		    break;	    		}	/* switch(dyncr_do[sbgr]) */		/* T3 */		switch(fr_ps->header->dyn_cross[sbgr]) {	      case 2: case 4: case 6: case 7: case 12:		    T3from[sbgr] = T3outof[sbgr];		    for(sb=((sbgr==0) ? 0:(sb_groups[sbgr-1]+1)); 			    sb<=sb_groups[sbgr]; sb++) 			scfsi[L0][sb] = scfsi_dyn[L0][sb];		    break;	    		}	/* switch(dyncr_do[sbgr]) */		/* T4 */		switch(fr_ps->header->dyn_cross[sbgr]) {	      case 1: case 4: case 5: case 7: case 11:		    T4from[sbgr] = T4outof[sbgr];		    for(sb=((sbgr==0) ? 0:(sb_groups[sbgr-1]+1)); 			    sb<=sb_groups[sbgr]; sb++) 			scfsi[R0][sb] = scfsi_dyn[R0][sb];		    break;	    		}	/* switch(fr_ps->header->dyn_cross[sbgr]) */	    }	    else if (fr_ps->config == 310 || fr_ps->config == 220)	    {		/* 3/1 and 2/2 */		if(fr_ps->header->dyn_cross[sbgr] == 4) {		    for(sb=((sbgr==0) ? 0:(sb_groups[sbgr-1]+1)); 			    sb<=sb_groups[sbgr]; sb++) {			scfsi[T2[sbgr]][sb] = scfsi_sum[T23][sb];			for(sufr = 0; sufr<3; ++sufr) {			    scalar[T2[sbgr]][sufr][sb] = scalar_sum[T23][sufr][sb];			    for(smp = 0; smp<SCALE_BLOCK; ++smp) {				sb_sample[T2[sbgr]][sufr][smp][sb] = 				    sb_sample_sum[T23][sufr][smp][sb];			    }   /* for(smp..) */			}	    /* for(sufr.). */		    }	    /* for(sb..) */		}     		/* scfsi_dyn in scfsi of L0 and R0 */		/* T2 */		switch(fr_ps->header->dyn_cross[sbgr]) {	      case 2: case 3:		    for(sb=((sbgr==0) ? 0:(sb_groups[sbgr-1]+1)); 			    sb<=sb_groups[sbgr]; sb++) 			scfsi[T2outof[sbgr]][sb] = scfsi_dyn[T2outof[sbgr]][sb];		    break;	    		}	/* switch(dyncr_do[sbgr]) */		/* T3 */		switch(fr_ps->header->dyn_cross[sbgr]) {	      case 1: case 3:		    for(sb=((sbgr==0) ? 0:(sb_groups[sbgr-1]+1)); 			    sb<=sb_groups[sbgr]; sb++) 			scfsi[T3outof[sbgr]][sb] = scfsi_dyn[T3outof[sbgr]][sb];		    break;	    		}	/* switch(dyncr_do[sbgr]) */	    }	    else if (fr_ps->config == 300 || fr_ps->config == 302 || fr_ps->config == 210)	    {		/* 3/0 (+2/0) and 2/1 */		/* scfsi_dyn in scfsi of L0 and R0 */		/* T2 */		switch(fr_ps->header->dyn_cross[sbgr]) {	      case 1:		    for(sb=((sbgr==0) ? 0:(sb_groups[sbgr-1]+1)); 			    sb<=sb_groups[sbgr]; sb++) 			scfsi[T2outof[sbgr]][sb] = scfsi_dyn[T2outof[sbgr]][sb];		    break;	    		}	/* switch(dyncr_do[sbgr]) */    		if (fr_ps->header->dyn_second_stereo[sbgr])		    for (sb=((sbgr==0) ? 0:(sb_groups[sbgr-1]+1)); sb<=sb_groups[sbgr]; sb++)		    {			scfsi[T3[sbgr]][sb] = scfsi_sum[T23][sb];			for (sufr = 0; sufr<3; ++sufr)			{			    scalar[T3[sbgr]][sufr][sb] = scalar_sum[T23][sufr][sb];			    for (smp = 0; smp<SCALE_BLOCK; ++smp)				sb_sample[T3[sbgr]][sufr][smp][sb] = sb_sample_sum[T23][sufr][smp][sb];			}	    /* for(sufr..) */		    }	    /* for(sb..) */	    }	    else if (fr_ps->config == 202)	    {		if (fr_ps->header->dyn_second_stereo[sbgr])		    for (sb=((sbgr==0) ? 0:(sb_groups[sbgr-1]+1)); sb<=sb_groups[sbgr]; sb++)		    {			scfsi[T2[sbgr]][sb] = scfsi_sum[T23][sb];			for (sufr = 0; sufr<3; ++sufr)			{			    scalar[T2[sbgr]][sufr][sb] = scalar_sum[T23][sufr][sb];			    for (smp = 0; smp<SCALE_BLOCK; ++smp)				sb_sample[T2[sbgr]][sufr][smp][sb] = sb_sample_sum[T23][sufr][smp][sb];			}	    /* for(sufr.). */		    }	    /* for(sb..) */	    }	    else if (fr_ps->config == 102)	    {		if (fr_ps->header->dyn_second_stereo[sbgr])		    for (sb=((sbgr==0) ? 0:(sb_groups[sbgr-1]+1)); sb<=sb_groups[sbgr]; sb++)		    {			scfsi[1][sb] = scfsi_sum[T23][sb];			for (sufr = 0; sufr<3; ++sufr)			{			    scalar[1][sufr][sb] = scalar_sum[T23][sufr][sb];			    for (smp = 0; smp<SCALE_BLOCK; ++smp)				sb_sample[1][sufr][smp][sb] = sb_sample_sum[T23][sufr][smp][sb];			}	    /* for(sufr.). */		    }	    /* for(sb..) */	    }	}	/* if(fr_ps->header->dyn_cross[sbgr] == 0) */    }		/* for(sbgr=0.. */}#ifdef Augmentation_7chvoid take_dyn_cross_aug (	int		aug_dyn_cr,		frame_params	*fr_ps,  		    	    /* out: int	fr_ps->header->dyn_cross_on, 	     *	    int	fr_ps->header->dyn_cross_LR,     	     *	    int	fr_ps->header->dyn_cross[SBGRS],	    	     */			    	double		sb_sample_sum[5][3][SCALE_BLOCK][SBLIMIT], 	    						    /* in, T23, T24, T34, T234, T56 */	unsigned int	scalar_sum[][3][SBLIMIT], 			/* in */ 	unsigned int	scfsi_sum[][SBLIMIT],  				/* in */	unsigned int	scfsi_dyn[][SBLIMIT],  				/* in */	double		sb_sample[CHANMAX3][3][SCALE_BLOCK][SBLIMIT],	/* out */	unsigned int	scalar[][3][SBLIMIT], 				/* out */ 	unsigned int	scfsi[][SBLIMIT]) 				/* out */{    int	    sbgr, sb, sufr, smp;    layer *info  = fr_ps->header;    int center   = info->center;    int surround = info->surround;    fr_ps->header->aug_dyn_cross_on = 1;    for (sbgr = LOW_SBGR; sbgr < SBGRS; sbgr++)    {	if (aug_dyn_cr == -1)	    fr_ps->header->aug_dyn_cross[sbgr] = rand () % 19;	else	    fr_ps->header->aug_dyn_cross[sbgr] = aug_dyn_cr;	/* copying sums, scf, scfsi */		if (fr_ps->header->aug_dyn_cross[sbgr] == 4)	{	    for (sb = ((sbgr==0) ? 0:(sb_groups[sbgr-1]+1)); 		    sb <= sb_groups[sbgr]; sb++)	    {		scfsi[T5[sbgr]][sb] = scfsi_sum[T56][sb];		for (sufr = 0; sufr < 3; ++sufr)		{		    scalar[T5[sbgr]][sufr][sb] = scalar_sum[T56][sufr][sb];		    for (smp = 0; smp < SCALE_BLOCK; ++smp)			sb_sample[T5[sbgr]][sufr][smp][sb] = 			    sb_sample_sum[T56][sufr][smp][sb];		}	    }	}	/* scfsi_dyn in scfsi of MPEG2 channels */	/* L0 */	switch (fr_ps->header->aug_dyn_cross[sbgr])	{	case 5: case 6: case 7: case 8: case 9:	      for (sb = ((sbgr==0) ? 0:(sb_groups[sbgr-1]+1)); 		      sb <= sb_groups[sbgr]; sb++) 		  scfsi[L0][sb] = scfsi_dyn[L0][sb];	      break;	    	}	/* R0 */	switch (fr_ps->header->aug_dyn_cross[sbgr])	{	case 1: case 6: case 11: case 15:	      for (sb = ((sbgr==0) ? 0:(sb_groups[sbgr-1]+1)); 		      sb <= sb_groups[sbgr]; sb++) 		  scfsi[R0][sb] = scfsi_dyn[R0][sb];	      break;	    	}	/* T2 */	switch (fr_ps->header->aug_dyn_cross[sbgr])	{	case 2: case 7: case 10: case 11: case 12: case 13: case 16:	      for (sb = ((sbgr==0) ? 0:(sb_groups[sbgr-1]+1)); 		      sb <= sb_groups[sbgr]; sb++) 		  scfsi[T2[sbgr]][sb] = scfsi_dyn[T2[sbgr]][sb];	      break;	    	}	/* T3 */	switch (fr_ps->header->aug_dyn_cross[sbgr])	{	case 14: case 15: case 16: case 17: case 18:	      for (sb = ((sbgr==0) ? 0:(sb_groups[sbgr-1]+1)); 		      sb <= sb_groups[sbgr]; sb++) 		  scfsi[T3[sbgr]][sb] = scfsi_dyn[T3[sbgr]][sb];	      break;	    	}	/* T4 */	switch (fr_ps->header->aug_dyn_cross[sbgr])	{	case 3: case 8: case 13: case 17:	      for (sb = ((sbgr==0) ? 0:(sb_groups[sbgr-1]+1)); 		      sb <= sb_groups[sbgr]; sb++) 		  scfsi[T4[sbgr]][sb] = scfsi_dyn[T4[sbgr]][sb];	      break;	    	}    }}#endif/************************************************************************ * * trans_chan * * Version 1.0	    94/06/27	Andreas Silzle, IRT * Version 1.1	    94/10/28	Andreas Silzle, IRT * * Which channels are in the transmission channels  * T2[SBGRS], T3[SBGRS], T4[SBGRS], T2outof{SBGRS] per subband group. * T2outof[] can be changed later by fr_ps->header->dyn_cross_LR. * ************************************************************************/void trans_chan (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++)    {	/* 960627 FdB tca dependent on configuration */	if (fr_ps->config == 320)	{	    /* 3/2 */	    switch(fr_ps->header->tc_alloc[sbgr]) {	  case 0:		T2[sbgr] = C; T3[sbgr] = LS; T4[sbgr] = RS;		if(fr_ps->header->dyn_cross_LR == 0)		    T2outof[sbgr] = L0;		else		    T2outof[sbgr] = R0;		T3outof[sbgr] = L0;		T4outof[sbgr] = R0;		break;	  case 1:		T2[sbgr] = L; T3[sbgr] = LS; T4[sbgr] = RS;		T2outof[sbgr] = L0;		T3outof[sbgr] = L0;		T4outof[sbgr] = R0;		break;	  case 2:		T2[sbgr] = R; T3[sbgr] = LS; T4[sbgr] = RS;		T2outof[sbgr] = R0;		T3outof[sbgr] = L0;		T4outof[sbgr] = R0;		break;	  case 3:		T2[sbgr] = C; T3[sbgr] = L; T4[sbgr] = RS;		if(fr_ps->header->dyn_cross_LR == 0)

⌨️ 快捷键说明

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