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

📄 encode.c

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