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

📄 decode.c

📁 MPEG 2的音频编码软件。喜欢多媒体的开发人员可以看看。
💻 C
📖 第 1 页 / 共 5 页
字号:
		    break;
	 case  9:   /* copy T5 and T6 from T0 */
		    bit_alloc[5][i] = bit_alloc[T5T0][i];
		    bit_alloc[6][i] = bit_alloc[T6T0][i];
		    break;
	 case 10:   /* copy T5 from T2 */
		    bit_alloc[5][i] = bit_alloc[2][i];
		    break;
	 case 11:   /* copy T5 from T2 and T6 from T1 */
		    bit_alloc[5][i] = bit_alloc[2][i];
		    bit_alloc[6][i] = bit_alloc[T6T1][i];
		    break;
	 case 12:   /* copy T5 and T6 from T2 */
		    bit_alloc[5][i] = bit_alloc[6][i] = bit_alloc[2][i];
		    break;
	 case 13:   /* copy T5 from T2 and T6 from T4 */
		    bit_alloc[5][i] = bit_alloc[2][i];
		    bit_alloc[6][i] = bit_alloc[4][i];
		    break;
	 case 14:   /* copy T5 from T3 */
		    bit_alloc[5][i] = bit_alloc[3][i];
		    break;
	 case 15:   /* copy T5 from T3 and T6 from T1 */
		    bit_alloc[5][i] = bit_alloc[3][i];
		    bit_alloc[6][i] = bit_alloc[T6T1][i];
		    break;
	 case 16:   /* copy T5 from T3 and T6 from T2 */
		    bit_alloc[5][i] = bit_alloc[3][i];
		    bit_alloc[6][i] = bit_alloc[2][i];
		    break;
	 case 17:   /* copy T5 from T3 and T6 from T4 */
		    bit_alloc[5][i] = bit_alloc[3][i];
		    bit_alloc[6][i] = bit_alloc[4][i];
		    break;
	 case 18:   /* copy T5 and T6 from T3 */
		    bit_alloc[5][i] = bit_alloc[6][i] = bit_alloc[3][i];
		    break;
	 }
      }

   for (i=sblimit; i<SBLIMIT; i++)
      for (j=*l; j<*m; j++)
	 bit_alloc[j][i] = 0;

   if (bits_log)
   {
      for (j= *l; j < *m; j++)
         for (i = 0; i < SBLIMIT; i++)
	 {
	    int alloc_bits = 0, alloc_id = bit_alloc[j][i];

	    if (actual_alloc[j][i] > 0)
	       alloc_bits = 12 * (*alloc)[i][alloc_id].bits * (*alloc)[i][alloc_id].group;

	    printf ("alloc_bi[ %d ][ %2d ]= %3d\n", j, i, alloc_bits);
	 }
   }
}
#endif

void II_decode_bitalloc_ml(Bit_stream *bs,
			   frame_params *fr_ps,
			   unsigned int bit_alloc_ml[7][SBLIMIT],	
			   int *m)
{
   int i,j;
   int sblimit_ml = fr_ps->sblimit_ml;
   al_table *alloc_ml = fr_ps->alloc_ml;

   /* JR: no dynamic crosstalk for multilingual channels */
   /* JR: no phantom center coding for multilingual channels */
   /* JR: no joint coding for multilingual channels */
   /* JR: they're really simple, aren't they? */

   for (i=0;i<sblimit_ml;i++)
    for (j=0;j<*m;j++) 
     bit_alloc_ml[j][i] = (char) getbits (bs, (*alloc_ml)[i][0].bits);
   for (i=sblimit_ml;i<SBLIMIT;i++) 
    for (j=0;j<*m;j++) 
     bit_alloc_ml[j][i] = 0;
}

/*****************************************************************
/*
/* The following two functions implement the layer II
/* format of scale factor extraction. Layer I involves reading
/* 6 bit per subband as scale factor. Layer II requires reading
/* first the scfsi which in turn indicate the number of scale factors
/* transmitted.
/*   Layer II : II_decode_scale
/*
/*************************** Layer II stuff ***************************/
/* 28.9.93 R.S. reading of the prediction coefficients */
/* 03.6.94 R.S. read pred-coef. due to MPEG 2 - DIS    */
/**********************************************************************/
/* JMZ 09/03/1995 Multilingual adaptations , WtK 7/8/95               */
/**********************************************************************/

void I_decode_scale (Bit_stream   *bs,
		     frame_params *fr_ps,
		     unsigned int bit_alloc[7][SBLIMIT],	
		     unsigned int scale_index[7][3][SBLIMIT],	
		     int	  part,
		     int	  scf_log)
{
   int i,j;
   int stereo = fr_ps->stereo;
   int sblimit = fr_ps->sblimit;

   for (i=0; i<SBLIMIT; i++)
      for (j=0;j<stereo;j++)
	 if (!bit_alloc[j][i])
	    scale_index[j][part][i] = SCALE_RANGE-1;
	 else                    /* 6 bit per scale factor */
	    scale_index[j][part][i] = getbits (bs, 6);
}

void II_decode_scale (Bit_stream *bs,
		      frame_params *fr_ps,
		      unsigned int scfsi[7][SBLIMIT], 		
		      unsigned int bit_alloc[7][SBLIMIT],	
		      unsigned int scale_index[7][3][SBLIMIT],	
		      int *l, int *m, int scfsi_log)
{
    layer *info = fr_ps->header;
    int stereo = fr_ps->stereo;
    int i,j;
    int px,pci;
    int sblimit = fr_ps->sblimit;

    if (*m == stereo)
	sblimit = fr_ps->sblimit;
    else
    	sblimit = fr_ps->sblimit_mc;

    for (i = 0; i < sblimit; i++) 
    {
	for (j = *l; j < *m; j++)   /* 2 bit scfsi */
	    if (bit_alloc[j][i]) 
	 	scfsi[j][i] = (char) getbits (bs, 2);
	    else
		scfsi[j][i] = 4;
    }

    for (i = sblimit; i < SBLIMIT; i++) 
	for (j = *l; j < *m; j++)
	    scfsi[j][i] = 4;

    if (scfsi_log)
    {
	for (j= *l; j < *m; j++)
	    for (i = 0; i < SBLIMIT; i++)
	    {
		int scf_bits;
    
		switch (scfsi[j][i])
		{
		    /* all three scale factors transmitted */
		    case 0 : scf_bits = 20;
			     break;
		    /* two scale factors transmitted */
		    case 1 :
		    case 3 : scf_bits = 14;
			     break;
		    /* only one scale factor transmitted */
		    case 2 : scf_bits = 8;
			     break;
		    /* no scale factors transmitted */
		    default : scf_bits = 0;
		}
		printf ("scf_bits[ %d ][ %2d ]= %3d\n", j, i, scf_bits);
	    }
    }

    /* 3.6.94 R.S. read the prediction coefficients in the mc - part */
    if (*m > stereo && *m < 7)
	if (fr_ps->header->mc_prediction_on == 1)
	    for (i = 0; i < 8; i++)
		if (fr_ps->header->mc_prediction[i] == 1)
		    for (px = 0; px < pred_coef_table[fr_ps->pred_mode][fr_ps->header->dyn_cross_mode[i]]; px++)
			if (fr_ps->header->mc_predsi[i][px] != 0)
			{
			    /* predictors are transfered */
			    fr_ps->header->mc_delay_comp[i][px] = getbits (bs, 3);
			    for (pci = 0; pci < fr_ps->header->mc_predsi[i][px]; pci++)
				fr_ps->header->mc_pred_coeff[i][px][pci] = getbits (bs, 8);
			}
			else
			{
			    /* no prediction coef. */
			    fr_ps->header->mc_pred_coeff[i][px][0] = 127;     /* Index 127 -> 0.0 */
			    fr_ps->header->mc_delay_comp[i][px] = 0;
			}

    /* 31/10/95 Ralf Schwalbe LFE */
    if (*l == stereo)
	if (info->lfe)
	    if (info->lfe_alloc)
		info->lfe_scf = getbits (bs, 6);

    for (i = 0; i < sblimit; i++) 
	for (j = *l; j < *m; j++)
	    if (bit_alloc[j][i])
		switch (scfsi[j][i])
		{
		    /* all three scale factors transmitted */
		    case 0 : scale_index[j][0][i] = getbits (bs, 6);
			     scale_index[j][1][i] = getbits (bs, 6);
			     scale_index[j][2][i] = getbits (bs, 6);
			     break;
		    /* scale factor 1 & 3 transmitted */
		    case 1 : scale_index[j][0][i] =
			     scale_index[j][1][i] = getbits (bs, 6);
			     scale_index[j][2][i] = getbits (bs, 6);
			     break;
		    /* scale factor 1 & 2 transmitted */
		    case 3 : scale_index[j][0][i] = getbits (bs, 6);
			     scale_index[j][1][i] =
			     scale_index[j][2][i] = getbits (bs, 6);
			     break;
		    /* only one scale factor transmitted */
		    case 2 : scale_index[j][0][i] =
			     scale_index[j][1][i] =
			     scale_index[j][2][i] = getbits (bs, 6);
			     break;
		    default : scale_index[j][0][i] =
			      scale_index[j][1][i] =
			      scale_index[j][2][i] = SCALE_RANGE-1;
			      break;
		}
	    else
		scale_index[j][0][i] = scale_index[j][1][i] = scale_index[j][2][i] = SCALE_RANGE-1;

    for (i = sblimit; i < SBLIMIT; i++)
	for (j = *l; j < *m; j++)
	    scale_index[j][0][i] = scale_index[j][1][i] = scale_index[j][2][i] = SCALE_RANGE-1;
}

/**********************************************************************/
/* JMZ 15/03/1995 Multilingual                                        */
/**********************************************************************/

void II_decode_scale_ml(Bit_stream *bs,
		        frame_params *fr_ps,
		        unsigned int scfsi[7][SBLIMIT], 		
		        unsigned int bit_alloc[7][SBLIMIT],	
		        unsigned int scale_index[7][3][SBLIMIT],	
		        int *m)
{
   int i,j;
   int px,pci;
   int sblimit_ml = fr_ps->sblimit_ml;


   for (i=0;i<sblimit_ml;i++) for (j=0;j<*m;j++)   /* 2 bit scfsi */
	if (bit_alloc[j][i]) 
		{
	  	scfsi[j][i] = (char) getbits (bs, 2);
	  	}
	else scfsi[j][i] = 4;
   for (i=sblimit_ml;i<SBLIMIT;i++) for (j=0;j<*m;j++)
	scfsi[j][i] = 4;

   for (i = 0; i < sblimit_ml; i++) for (j = 0; j < *m; j++) {
	  if (bit_alloc[j][i])
	    switch (scfsi[j][i]) {
		 /* all three scale factors transmitted */
		 case 0 : scale_index[j][0][i] = getbits (bs, 6);
			  scale_index[j][1][i] = getbits (bs, 6);
			  scale_index[j][2][i] = getbits (bs, 6);
			  break;
		 /* scale factor 1 & 3 transmitted */
		 case 1 : scale_index[j][0][i] =
			  scale_index[j][1][i] = getbits (bs, 6);
			  scale_index[j][2][i] = getbits (bs, 6);
			  break;
	         /* scale factor 1 & 2 transmitted */
		 case 3 : scale_index[j][0][i] = getbits (bs, 6);
			  scale_index[j][1][i] =
			  scale_index[j][2][i] = getbits (bs, 6);
         		  break;
		 /* only one scale factor transmitted */
	         case 2 : scale_index[j][0][i] =
		          scale_index[j][1][i] =
		          scale_index[j][2][i] = getbits (bs, 6);
         		  break;
		 default : scale_index[j][0][i] =
		           scale_index[j][1][i] =
		           scale_index[j][2][i] = SCALE_RANGE-1;
         		   break;
          }
          else {
                          scale_index[j][0][i] = scale_index[j][1][i] =
	                  scale_index[j][2][i] = SCALE_RANGE-1;
	  }
   }

   for (i=sblimit_ml;i<SBLIMIT;i++) for (j=0;j<*m;j++) {
		          scale_index[j][0][i] = scale_index[j][1][i] =
		          scale_index[j][2][i] = SCALE_RANGE-1;
   }
}

/**************************************************************
/*
/* The following two routines take care of reading the
/* compressed sample from the bit stream for layer 2.
/* For layer 1, read the number of bits as indicated
/* by the bit_alloc information. For layer 2, if grouping is
/* indicated for a particular subband, then the sample size has
/* to be read from the bits_group and the merged samples has
/* to be decompose into the three distinct samples. Otherwise,
/* it is the same for as layer one.
/*
/*************************** Layer II stuff ************************/

void I_buffer_sample (Bit_stream *bs,
		      frame_params *fr_ps,
		      unsigned int sample[7][3][SBLIMIT],
		      unsigned int bit_alloc[7][SBLIMIT])
{
   int i,j,k;
   int stereo = fr_ps->stereo;
   int sblimit = fr_ps->sblimit;
   int jsbound = fr_ps->jsbound;
   unsigned int s;

   for (i=0; i<jsbound; i++)
      for (j=0; j<stereo; j++)
	 if ((k = bit_alloc[j][i]) == 0)
	    sample[j][0][i] = 0;
	 else 
	    sample[j][0][i] = (unsigned int) getbits (bs, k+1);

   for (i=jsbound; i<SBLIMIT; i++)
   {
      if ((k = bit_alloc[0][i]) == 0)
	 s = 0;
      else 
	 s = (unsigned int) getbits (bs, k+1);

      for (j=0; j<stereo; j++)
	 sample[j][0][i] = s;
   }
}

void II_buffer_sample (Bit_stream *bs,
		       frame_params *fr_ps,
		       unsigned int sample[7][3][SBLIMIT],
		       unsigned int bit_alloc[7][SBLIMIT])
{
   int i,j,k,m;
   int stereo = fr_ps->stereo;
   int sblimit = fr_ps->sblimit;
   int jsbound = fr_ps->jsbound;
   al_table *alloc = fr_ps->alloc;

   for (i=0;i<sblimit;i++)
      for (j= 0;j<((i<jsbound)? stereo:1);j++)
      {
	   if (bit_alloc[j][i])
	   {
		 /* check for grouping in subband */
		 if ((*alloc)[i][bit_alloc[j][i]].group==3)
	 	 {
			for (m=0;m<3;m++)
			{
			  k = (*alloc)[i][bit_alloc[j][i]].bits;
			  sample[j][m][i] = (unsigned int) getbits (bs, k);
			 }
		 }
		 else
		 {    /* bit_alloc = 3, 5, 9 */
		   unsigned int nlevels, c=0;

		   nlevels = (*alloc)[i][bit_alloc[j][i]].steps;
		   k=(*alloc)[i][bit_alloc[j][i]].bits;
		   c = (unsigned int) getbits (bs, k);

		   for (k=0;k<3;k++)
		   {
			 sample[j][k][i] = c % nlevels;
			 c /= nlevels;
		   }
		 }
	   }
	   else
	   {      /* for no sample transmitted */

⌨️ 快捷键说明

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