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

📄 predisto.c

📁 MPEG 2的音频编码软件。喜欢多媒体的开发人员可以看看。
💻 C
📖 第 1 页 / 共 3 页
字号:
/******************************************************************/
/* Multilingual JMZ 08/03/1995 */

if(n_ml_ch >0)
{
	for (i = 0; i < sblimit_ml; i++)
	  for(j = 7; j < (n_ml_ch+7); ++j)
	  {
	     k=j;
	     if ((used[k][i] != 2) && (small > mnr[k][i])) 
	     {
                  small = mnr[k][i];
                  min_sb = i;  min_ch = k;
	     }
	}
}

/* Multilingual JMZ 08/03/1995 */
/******************************************************************/

	 
     if(min_sb > -1) 
     { 
       if (min_ch < stereo) 
       {
	 increment = 12 * ((*alloc)[min_sb][bit_alloc[min_ch][min_sb]+1].group * 
	             (*alloc)[min_sb][bit_alloc[min_ch][min_sb]+1].bits);
		     /* how many bits are needed */
         if (used[min_ch][min_sb])
          increment -= 12 * ((*alloc)[min_sb][bit_alloc[min_ch][min_sb]].group * 
                            (*alloc)[min_sb][bit_alloc[min_ch][min_sb]].bits);
       } 
       else if (min_ch < 7 || n_ml_ch == 0) /* Multichannel */ 
       {
	 increment = 12 * ((*alloc_mc)[min_sb][bit_alloc[min_ch][min_sb]+1].group * 
	             (*alloc_mc)[min_sb][bit_alloc[min_ch][min_sb]+1].bits);
		     /* how many bits are needed */
         if (used[min_ch][min_sb])
          increment -= 12 * ((*alloc_mc)[min_sb][bit_alloc[min_ch][min_sb]].group * 
                            (*alloc_mc)[min_sb][bit_alloc[min_ch][min_sb]].bits);
       } 
       else /* MultiLingual 7/8/95 WtK */ 
       {
	  increment   = ((*alloc_ml)[min_sb][bit_alloc[min_ch][min_sb]+1].group * 
			 (*alloc_ml)[min_sb][bit_alloc[min_ch][min_sb]+1].bits);
	  if (used[min_ch][min_sb])
	   increment -= ((*alloc_ml)[min_sb][bit_alloc[min_ch][min_sb]].group * 
			 (*alloc_ml)[min_sb][bit_alloc[min_ch][min_sb]].bits);
	  if (fr_ps->header->multiling_fs==1) increment *=  6;
	  else                                increment *= 12;
       }

       /* scale factor bits required for subband [min] */
       if (used[min_ch][min_sb]) scale = seli = 0;
       else 
       {			  /* this channel had no bits or scfs before */
         seli = 2;
         scale = 6 * sfsPerScfsi[scfsi[min_ch][min_sb]];
	}
	
       if(fr_ps->header->ext_bit_stream_present == 1)
       {
	if (adb_mpg1 > bspl_mpg1 + bscf_mpg1 + bsel_mpg1 + seli + scale + increment) 
	{
	   bspl_mpg1 += increment;  /* bits for subband sample */
	   bscf_mpg1 += scale;      /* bits for scale factor */
	   bsel_mpg1 += seli;       /* bits for scfsi code */
	}
	else
	   used[min_ch][min_sb] = 2;  /* can't increase this alloc */
       }
	
       
       if ((ad > bspl + bscf + bsel + seli + scale + increment) && (used[min_ch][min_sb] != 2)) 
       {
	    ba = ++bit_alloc[min_ch][min_sb]; /* next up alloc */
	    bspl += increment;		    /* bits for subband sample */
	    bscf += scale;		    /* bits for scale factor */
	    bsel += seli;			    /* bits for scfsi code */
	    used[min_ch][min_sb] = 1;	    /* subband has bits */
	    if (min_ch<7)
	      mnr[min_ch][min_sb] = -perm_smr[min_ch][min_sb] +
				    snr[(*alloc)[min_sb][ba].quant+1];
	    else
	      mnr[min_ch][min_sb] = -perm_smr[min_ch][min_sb] +
				    snr[(*alloc_ml)[min_sb][ba].quant+1];
			    
	    /* Check if subband has been fully allocated max bits */
	    if (min_ch < stereo) 
	    {
	     if (ba >= (1<<(*alloc)[min_sb][0].bits)-1) used[min_ch][min_sb] = 2;
	    } 
	    else if (min_ch < 7 || n_ml_ch == 0) /* Multichannel */ 
	    {
	     if (ba >= (1<<(*alloc_mc)[min_sb][0].bits)-1) used[min_ch][min_sb] = 2;
	    } 
	    else 
	    {
	     if (ba >= (1<<(*alloc_ml)[min_sb][0].bits)-1) used[min_ch][min_sb] = 2;
	    }
	}
	else used[min_ch][min_sb] = 2;  /* can't increase this alloc */

      }   /* end of if-loop if min_sb >-1 */
   } while(min_sb > -1);   /* until could find no channel */
   /* Calculate the number of bits left */

   ad -= bspl+bscf+bsel; 
   *adb = ad;
   for (i=sblimit;i<SBLIMIT;i++) for (k = 0; k < 2; k++) 
      bit_alloc[k][i]=0;
   for (i=sblimit_ml;i<SBLIMIT;i++) for (k = 7; k < 7+n_ml_ch; k++) 
      bit_alloc[k][i]=0;
}
 

void matri(double (*sbs_sample)[3][12][32], frame_params *fr_ps, double (*sb_sample)[3][12][32],
	 unsigned int (*scalar)[3][32], int sblimit, unsigned int (*scfsi)[32], 
	 unsigned int (*scfsi_dyn)[32], unsigned int (*bit_alloc)[32], 
	 unsigned int (*subband)[3][12][32])
{
  int i, j, k, l, ch1, ch2, m, n;
  
  layer *info = fr_ps->header;

	for(k = 0; k < 8; k++)
	{
          if(fr_ps->header->mc_pred[k] == 0)
	  {	
	    switch(fr_ps->header->tc_alloc[k])
	    {
		case 0: 
	 	    for( j = 0; j < 3; ++j)
			for(l = 0; l < 12; l ++)
			{
				sb_sample[0][j][l][k] = sb_sample[5][j][l][k] + sbs_sample[2][j][l][k] + sbs_sample[3][j][l][k];
				sb_sample[1][j][l][k] = sb_sample[6][j][l][k] + sbs_sample[2][j][l][k] + sbs_sample[4][j][l][k];
			}
			m = 0; n = 2;
			scale_factor_calc(scalar,sblimit, m, n, k, sb_sample);
		     break;
		case 1:
	 	    for( j = 0; j < 3; ++j)
			for(l = 0; l < 12; l ++)
			{
				sb_sample[0][j][l][k] = sbs_sample[5][j][l][k] + sb_sample[2][j][l][k] + sbs_sample[3][j][l][k];
			}
			
			m = 0; n = 1;
			scale_factor_calc(scalar,sblimit, m, n, k, sb_sample);
			trans_pattern(scalar, scfsi, fr_ps,scfsi_dyn);
			pre_quant(sbs_sample, m, n, sb_sample, scalar, bit_alloc, subband, fr_ps);

	 	    for( j = 0; j < 3; ++j)
			for(l = 0; l < 12; l ++)
			{
				sbs_sample[2][j][l][k] = sbs_sample[0][j][l][k] - sbs_sample[5][j][l][k] - sbs_sample[3][j][l][k];
				sb_sample[1][j][l][k] = sb_sample[6][j][l][k] + sbs_sample[2][j][l][k] + sbs_sample[4][j][l][k];
			}
			m = 1; n = 2;
			scale_factor_calc(scalar,sblimit, m, n, k, sb_sample);
			
		     break;
		case 2:
	 	    for( j = 0; j < 3; ++j)
			for(l = 0; l < 12; l ++)
			{
				sb_sample[1][j][l][k] = sbs_sample[6][j][l][k] + sb_sample[2][j][l][k] + sbs_sample[4][j][l][k];
			}
			
			m = 1; n = 2;
			scale_factor_calc(scalar,sblimit, m, n, k, sb_sample);
			trans_pattern(scalar, scfsi, fr_ps,scfsi_dyn);
			pre_quant(sbs_sample, m, n, sb_sample, scalar, bit_alloc, subband, fr_ps);

	 	    for( j = 0; j < 3; ++j)
			for(l = 0; l < 12; l ++)
			{
				sbs_sample[2][j][l][k] = sbs_sample[1][j][l][k] - sbs_sample[6][j][l][k] - sbs_sample[4][j][l][k];
				sb_sample[0][j][l][k] = sb_sample[5][j][l][k] + sbs_sample[2][j][l][k] + sbs_sample[3][j][l][k];
			}
			m = 0; n = 1;
			scale_factor_calc(scalar,sblimit, m, n, k, sb_sample);
			
		     break;
		case 3: 
	 	    for( j = 0; j < 3; ++j)
			for(l = 0; l < 12; l ++)
			{
				sb_sample[0][j][l][k] = sbs_sample[5][j][l][k] + sbs_sample[2][j][l][k] + sb_sample[3][j][l][k];
				sb_sample[1][j][l][k] = sb_sample[6][j][l][k] + sbs_sample[2][j][l][k] + sbs_sample[4][j][l][k];
			}
			m = 0; n = 2;
			scale_factor_calc(scalar,sblimit, m, n, k, sb_sample);
		     break;
		case 4: 
	 	    for( j = 0; j < 3; ++j)
			for(l = 0; l < 12; l ++)
			{
				sb_sample[0][j][l][k] = sb_sample[5][j][l][k] + sbs_sample[2][j][l][k] + sbs_sample[3][j][l][k];
				sb_sample[1][j][l][k] = sbs_sample[6][j][l][k] + sbs_sample[2][j][l][k] + sb_sample[4][j][l][k];
			}
			m = 0; n = 2;
			scale_factor_calc(scalar,sblimit, m, n, k, sb_sample);
		     break;
		case 5: 
	 	    for( j = 0; j < 3; ++j)
			for(l = 0; l < 12; l ++)
			{
				sb_sample[0][j][l][k] = sbs_sample[5][j][l][k] + sbs_sample[2][j][l][k] + sb_sample[3][j][l][k];
				sb_sample[1][j][l][k] = sbs_sample[6][j][l][k] + sbs_sample[2][j][l][k] + sb_sample[4][j][l][k];
			}
			m = 0; n = 2;
			scale_factor_calc(scalar,sblimit, m, n, k, sb_sample);
		     break;
		case 6:
	 	    for( j = 0; j < 3; ++j)
			for(l = 0; l < 12; l ++)
			{
				sb_sample[1][j][l][k] = sbs_sample[6][j][l][k] + sb_sample[2][j][l][k] + sbs_sample[4][j][l][k];
			}
			
			m = 1; n = 2;
			scale_factor_calc(scalar,sblimit, m, n, k, sb_sample);
			trans_pattern(scalar, scfsi, fr_ps,scfsi_dyn);
			pre_quant(sbs_sample, m, n, sb_sample, scalar, bit_alloc, subband, fr_ps);

	 	    for( j = 0; j < 3; ++j)
			for(l = 0; l < 12; l ++)
			{
				sbs_sample[2][j][l][k] = sbs_sample[1][j][l][k] - sbs_sample[6][j][l][k] - sbs_sample[4][j][l][k];
				sb_sample[0][j][l][k] = sbs_sample[5][j][l][k] + sbs_sample[2][j][l][k] + sb_sample[3][j][l][k];
			}
			m = 0; n = 1;
			scale_factor_calc(scalar,sblimit, m, n, k, sb_sample);
			
		     break;
		case 7:
	 	    for( j = 0; j < 3; ++j)
			for(l = 0; l < 12; l ++)
			{
				sb_sample[0][j][l][k] = sbs_sample[5][j][l][k] + sb_sample[2][j][l][k] + sbs_sample[3][j][l][k];
			}
			
			m = 0; n = 1;
			scale_factor_calc(scalar,sblimit, m, n, k, sb_sample);
			trans_pattern(scalar, scfsi, fr_ps,scfsi_dyn);
			pre_quant(sbs_sample, m, n, sb_sample, scalar, bit_alloc, subband, fr_ps);

	 	    for( j = 0; j < 3; ++j)
			for(l = 0; l < 12; l ++)
			{
				sbs_sample[2][j][l][k] = sbs_sample[0][j][l][k] - sbs_sample[5][j][l][k] - sbs_sample[3][j][l][k];
				sb_sample[1][j][l][k] = sbs_sample[6][j][l][k] + sbs_sample[2][j][l][k] + sb_sample[4][j][l][k];
			}
			m = 1; n = 2;
			scale_factor_calc(scalar,sblimit, m, n, k, sb_sample);
			
		     break;
	    }
	  }
	} 
	
	for(i = 8; i < 12; i++)
	{
          if(fr_ps->header->mc_pred[k] == 0)
	  {
	    switch(fr_ps->header->tc_alloc[i])
	    {
		case 0: 
	 	    for( j = 0; j < 3; ++j)
			for(l = 0; l < 12; l ++)
			    for( k = sb_groups[i-1] + 1; k <= sb_groups[i]; k++)
			    {
				sb_sample[0][j][l][k] = sb_sample[5][j][l][k] + sbs_sample[2][j][l][k] + sbs_sample[3][j][l][k];
				sb_sample[1][j][l][k] = sb_sample[6][j][l][k] + sbs_sample[2][j][l][k] + sbs_sample[4][j][l][k];
			    }
			 m = 0; n = 2;    
			 scale_factor_calc(scalar,sblimit, m, n, i, sb_sample);
		     break;
		case 1:
	 	    for( j = 0; j < 3; ++j)
			for(l = 0; l < 12; l ++)
			    for( k = sb_groups[i-1] + 1; k <= sb_groups[i]; k++)
			    {
				sb_sample[0][j][l][k] = sbs_sample[5][j][l][k] + sb_sample[2][j][l][k] + sbs_sample[3][j][l][k];
			    }
			
			m = 0; n = 1;
			scale_factor_calc(scalar,sblimit, m, n, i, sb_sample);
			trans_pattern(scalar, scfsi, fr_ps,scfsi_dyn);
			pre_quant(sbs_sample, m, n, sb_sample, scalar, bit_alloc, subband, fr_ps);

	 	    for( j = 0; j < 3; ++j)
			for(l = 0; l < 12; l ++)
			    for( k = sb_groups[i-1] + 1; k <= sb_groups[i]; k++)
			    {
				sbs_sample[2][j][l][k] = sbs_sample[0][j][l][k] - sbs_sample[5][j][l][k] - sbs_sample[3][j][l][k];
				sb_sample[1][j][l][k] = sb_sample[6][j][l][k] + sbs_sample[2][j][l][k] + sbs_sample[4][j][l][k];
			    }
			m = 1; n = 2;
			scale_factor_calc(scalar,sblimit, m, n, i, sb_sample);
		     break;
		case 2:
	 	    for( j = 0; j < 3; ++j)
			for(l = 0; l < 12; l ++)
			    for( k = sb_groups[i-1] + 1; k <= sb_groups[i]; k++)
			    {
				sb_sample[1][j][l][k] = sbs_sample[6][j][l][k] + sb_sample[2][j][l][k] + sbs_sample[4][j][l][k];
			    }
			
			m = 1; n = 2;
			scale_factor_calc(scalar,sblimit, m, n, i, sb_sample);
			trans_pattern(scalar, scfsi, fr_ps,scfsi_dyn);
			pre_quant(sbs_sample, m, n, sb_sample, scalar, bit_alloc, subband, fr_ps);

	 	    for( j = 0; j < 3; ++j)
			for(l = 0; l < 12; l ++)
			    for( k = sb_groups[i-1] + 1; k <= sb_groups[i]; k++)
			    {
				sbs_sample[2][j][l][k] = sbs_sample[1][j][l][k] - sbs_sample[6][j][l][k] - sbs_sample[4][j][l][k];
				sb_sample[0][j][l][k] = sb_sample[5][j][l][k] + sbs_sample[2][j][l][k] + sbs_sample[3][j][l][k];
			    }
			m = 0; n = 1;
			scale_factor_calc(scalar,sblimit, m, n, i, sb_sample);
			    
		     break;
		case 3: 
	 	    for( j = 0; j < 3; ++j)
			for(l = 0; l < 12; l ++)
			    for( k = sb_groups[i-1] + 1; k <= sb_groups[i]; k++)
			    {
				sb_sample[0][j][l][k] = sbs_sample[5][j][l][k] + sbs_sample[2][j][l][k] + sb_sample[3][j][l][k];
				sb_sample[1][j][l][k] = sb_sample[6][j][l][k] + sbs_sample[2][j][l][k] + sbs_sample[4][j][l][k];
			    }
			m = 0; n = 2;
			scale_factor_calc(scalar,sblimit, m, n, i, sb_sample);
		     break;
		case 4: 
	 	    for( j = 0; j < 3; ++j)
			for(l = 0; l < 12; l ++)
			    for( k = sb_groups[i-1] + 1; k <= sb_groups[i]; k++)
			    {
				sb_sample[0][j][l][k] = sb_sample[5][j][l][k] + sbs_sample[2][j][l][k] + sbs_sample[3][j][l][k];
				sb_sample[1][j][l][k] = sbs_sample[6][j][l][k] + sbs_sample[2][j][l][k] + sb_sample[4][j][l][k];
			    }
			m = 0; n = 2;
			scale_factor_calc(scalar,sblimit, m, n, i, sb_sample);
		     break;
		case 5: 
	 	    for( j = 0; j < 3; ++j)
			for(l = 0; l < 12; l ++)
			    for( k = sb_groups[i-1] + 1; k <= sb_groups[i]; k++)
			    {
				sb_sample[0][j][l][k] = sbs_sample[5][j][l][k] + sbs_sample[2][j][l][k] + sb_sample[3][j][l][k];
				sb_sample[1][j][l][k] = sbs_sample[6][j][l][k] + sbs_sample[2][j][l][k] + sb_sample[4][j][l][k];
			    }
			m = 0; n = 2;
			scale_factor_calc(scalar,sblimit, m, n, i, sb_sample);
		     break;
		case 6:
	 	    for( j = 0; j < 3; ++j)
			for(l = 0; l < 12; l ++)
			    for( k = sb_groups[i-1] + 1; k <= sb_groups[i]; k++)
			    {
				sb_sample[1][j][l][k] = sbs_sample[6][j][l][k] + sb_sample[2][j][l][k] + sbs_sample[4][j][l][k];
			    }
			
			m = 1; n = 2;
			scale_factor_calc(scalar,sblimit, m, n, i, sb_sample);
			trans_pattern(scalar, scfsi, fr_ps,scfsi_dyn);
			pre_quant(sbs_sample, m, n, sb_sample, scalar, bit_alloc, subband, fr_ps);

	 	    for( j = 0; j < 3; ++j)
			for(l = 0; l < 12; l ++)
			    for( k = sb_groups[i-1] + 1; k <= sb_groups[i]; k++)
			    {
				sbs_sample[2][j][l][k] = sbs_sample[1][j][l][k] - sbs_sample[6][j][l][k] - sbs_sample[4][j][l][k];
				sb_sample[0][j][l][k] = sbs_sample[5][j][l][k] + sbs_sample[2][j][l][k] + sb_sample[3][j][l][k];
			    }
			m = 0; n = 1;
			scale_factor_calc(scalar,sblimit, m, n, i, sb_sample);
			
		     break;
		case 7:
	 	    for( j = 0; j < 3; ++j)
			for(l = 0; l < 12; l ++)
			    for( k = sb_groups[i-1] + 1; k <= sb_groups[i]; k++)
			    {
				sb_sample[0][j][l][k] = sbs_sample[5][j][l][k] + sb_sample[2][j][l][k] + sbs_sample[3][j][l][k];
			    }
			

⌨️ 快捷键说明

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