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

📄 decode.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 页 / 共 5 页
字号:
   if (bits_log)   {      for (j= 0; j < stereo; j++)         for (i = 0; i < SBLIMIT; i++)	 {	    int alloc_bits = 0, alloc_id = bit_alloc[j][i];	    if ((j == 0 || i < jsbound) && bit_alloc[j][i] > 0)	       alloc_bits = 12 * (alloc_id + 1);	    printf ("alloc_bi[ %d ][ %2d ]= %3d\n", j, i, alloc_bits);	 }   }}void II_decode_bitalloc (Bit_stream *bs,			 frame_params *fr_ps,			 unsigned int bit_alloc[7][SBLIMIT],				 int bits_log){   int i,j,c,sbgr;   int stereo = fr_ps->stereo;   int sblimit = fr_ps->sblimit;   int jsbound = fr_ps->jsbound;   al_table *alloc = fr_ps->alloc;   unsigned int actual_alloc[7][SBLIMIT];   for (i = 0; i < SBLIMIT; i++)      for (j = 0; j < stereo; j++)	 actual_alloc[j][i] = 0;   for (i=0; i<jsbound; i++)      for (j=0;j<stereo;j++)	 actual_alloc[j][i] = bit_alloc[j][i] = (char) getbits (bs, (*alloc)[i][0].bits);   for (i=jsbound; i<sblimit; i++)   /* expand to 2 channels */      actual_alloc[0][i] = bit_alloc[0][i] = bit_alloc[1][i] = (char) getbits (bs, (*alloc)[i][0].bits);   for (i=sblimit; i<SBLIMIT; i++)      for (j=0; j<stereo; j++)	  bit_alloc[j][i] = 0;   if (bits_log)   {      for (j= 0; j < stereo; 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);	 }   }}void II_decode_bitalloc_mc (Bit_stream *bs,			    frame_params *fr_ps,			    unsigned int bit_alloc[7][SBLIMIT],				    int *l, int *m, int bits_log){   layer *info = fr_ps->header;   int i,j,c,sbgr;   int sblimit = fr_ps->sblimit_mc;   al_table *alloc = fr_ps->alloc_mc;   unsigned int actual_alloc[7][SBLIMIT];   for (i = 0; i < SBLIMIT; i++)      for (j = *l; j < *m; j++)	 actual_alloc[j][i] = 0;   /* 10/31/95 Ralf Schwalbe LFE */   if (info->lfe)      info->lfe_alloc = (char) getbits (bs, (*alloc)[0][0].bits);   for (i=0; i<sblimit; i++)      if (info->dyn_cross_on == 0)	 for (j=*l;j<*m;j++)	 {	    if ((fr_ps->header->center != 3) || (i < 12) || (j !=2))	       actual_alloc[j][i] = bit_alloc[j][i] = (char) getbits (bs, (*alloc)[i][0].bits);	    else	       bit_alloc[j][i] = 0;	 }      else  /* dyn. cross mode */      {	 if (i == 0) sbgr = 0;	 else	    for (c = 1; c < 12; c++)	    {	       if ((sb_groups[c-1] < i) && (i <= sb_groups[c]))	       {		  sbgr = c;  /* search the valid subband group */		  break;	       }	    } 	 /* 960816 FdB new setup for dyn. crosstalk modes */	 if (info->dyn_cross_mode[sbgr] == 0)	 {	    for (j = *l; j < *m; j++)	       if (fr_ps->header->center == 3 && i >= 12 && j == 2)		  bit_alloc[j][i] = 0;	       else if (info->surround == 3 && info->dyn_second_stereo[sbgr] == 1)	       {		  if (info->center != 0 && j == 4)		     bit_alloc[j][i] = bit_alloc[3][i];		  else if (info->center == 0 && j == 3)		     bit_alloc[j][i] = bit_alloc[2][i];		  else		     actual_alloc[j][i] = bit_alloc[j][i] = (char) getbits (bs, (*alloc)[i][0].bits);	       }	       else		  actual_alloc[j][i] = bit_alloc[j][i] = (char) getbits (bs, (*alloc)[i][0].bits);	 }	 else if (fr_ps->dyn_cross_bits == 1)   /* for channel mode 3/0 and 2/1 */	 {	    /* DynX mode has to be 1 */	    if ((info->center == 3) && (i >= 12))    /* 3/0 + phantom center */	       bit_alloc[2][i] = 0;	    else if (info->tc_alloc[sbgr] == 1)	       bit_alloc[2][i] = bit_alloc[0][i];	    else if (info->tc_alloc[sbgr] == 2)	       bit_alloc[2][i] = bit_alloc[1][i];	    else	       if (info->dyn_cross_LR)		  bit_alloc[2][i] = bit_alloc[1][i];	       else		  bit_alloc[2][i] = bit_alloc[0][i]; 	    if (info->surround == 3)		/* 3/0 + 2/0 */	    {	       actual_alloc[3][i] = bit_alloc[3][i] = (char) getbits (bs, (*alloc)[i][0].bits);	       if (info->dyn_second_stereo[sbgr] == 1)		  bit_alloc[4][i] = bit_alloc[3][i];	       else		  actual_alloc[4][i] = bit_alloc[4][i] = (char) getbits (bs, (*alloc)[i][0].bits);	    }	 }	 else if (fr_ps->dyn_cross_bits == 3)   /* for channel mode 3/1 and 2/2 */	 {	    if ((info->center == 3) && (i >= 12))    /* 3/1 + phantom center */	       bit_alloc[2][i] = 0;	    else if ((info->dyn_cross_mode[sbgr] == 1) || (info->dyn_cross_mode[sbgr] == 4))	       actual_alloc[2][i] = bit_alloc[2][i] = (char) getbits (bs, (*alloc)[i][0].bits);	    else	    {	       /* T2 not transmitted */	       if (fr_ps->header->surround == 2 ||	/* 2/2 mode */				   fr_ps->header->tc_alloc[sbgr] == 1 ||	/* 3/1 mode */		   fr_ps->header->tc_alloc[sbgr] == 5 ||	/* 3/1 mode (matrix mode 2 only) */		   fr_ps->header->tc_alloc[sbgr] != 2 && !fr_ps->header->dyn_cross_LR)		  bit_alloc[2][i] = bit_alloc[0][i];	/* C, L or Ls from L0 */	       else		  bit_alloc[2][i] = bit_alloc[1][i];	/* C, R or Rs from RO */	    } 	    if (info->dyn_cross_mode[sbgr] == 2)	       actual_alloc[3][i] = bit_alloc[3][i] = (char) getbits (bs, (*alloc)[i][0].bits);	    else if (info->dyn_cross_mode[sbgr] == 4)	       bit_alloc[3][i] = bit_alloc[2][i];	    else	    {	       /* T3 not transmitted */	       if (fr_ps->header->surround == 2 ||	/* 2/2 mode */		   fr_ps->header->tc_alloc[sbgr] == 4 ||	/* 3/1 mode */		   fr_ps->header->tc_alloc[sbgr] == 5 ||	/* 3/1 mode (matrix mode 2 only) */		   fr_ps->header->tc_alloc[sbgr] < 3 && fr_ps->header->dyn_cross_LR)		  bit_alloc[3][i] = bit_alloc[1][i];	/* S, R or Rs from R0 */	       else		  bit_alloc[3][i] = bit_alloc[0][i];	/* S, L or Ls from LO */	    }	 } 	 else if (fr_ps->dyn_cross_bits == 4)   /* for channel mode 3/2 */	 {	    /* T2 */	    if ((info->center == 3) && (i >= 12))    /* 3/2 + phantom center */	       bit_alloc[2][i] = 0;	    else switch (info->dyn_cross_mode[sbgr])	    {	    case 1 :   /* T2 contains bitalloc info */	    case 2 :	    case 4 :	    case 8 :	    case 9 :	    case 10: 	    case 11: 	    case 12: 	    case 14: 		       actual_alloc[2][i] = bit_alloc[2][i] = (char) getbits (bs, (*alloc)[i][0].bits);		       break;	    case 3 :   /* T2 contains no bitalloc info */	    case 5 :	    case 6 :	    case 7 :	    case 13: 		       if ((info->tc_alloc[sbgr] == 1) || (info->tc_alloc[sbgr] == 7))			  bit_alloc[2][i] = bit_alloc[0][i];		       else if ((info->tc_alloc[sbgr] == 2) || (info->tc_alloc[sbgr] == 6))			  bit_alloc[2][i] = bit_alloc[1][i];		       else			  if (info->dyn_cross_LR)			     bit_alloc[2][i] = bit_alloc[1][i];			  else			     bit_alloc[2][i] = bit_alloc[0][i];		       break;	    } 	    /* T3 */	    switch (info->dyn_cross_mode[sbgr])	    {	    case 1 :   /* T3 contains bitalloc info */	    case 3 :	    case 5 :	    case 8 :	    case 10: 	    case 13: 		       actual_alloc[3][i] = bit_alloc[3][i] = (char) getbits (bs, (*alloc)[i][0].bits);		       break;	    case 2 :   /* T3 has to copy its bitalloc from T0 */	    case 4 :	    case 6 :	    case 7 :	    case 12: 		       bit_alloc[3][i] = bit_alloc[0][i];		       break;	    case 9 :   /* T3 has to copy its bitalloc from T2 */	    case 11:	    case 14: 		       bit_alloc[3][i] = bit_alloc[2][i];		       break;	    } 	    /* T4 */	    switch (info->dyn_cross_mode[sbgr])	    {	    case 2 :   /* T4 contains bitalloc info */	    case 3 :	    case 6 :	    case 9 : 		       actual_alloc[4][i] = bit_alloc[4][i] = (char) getbits (bs, (*alloc)[i][0].bits);		       break;	    case 1 :   /* T4 has to copy its bitalloc from T1 */	    case 4 :	    case 5 :	    case 7 :	    case 11: 		       bit_alloc[4][i] = bit_alloc[1][i];		       break;	    case 10:   /* T4 has to copy its bitalloc from T2 */	    case 12:	    case 14: 		       bit_alloc[4][i] = bit_alloc[2][i];		       break;	    case 8 :   /* T4 has to copy its bitalloc from T3 */	    case 13: 		       bit_alloc[4][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);	 }   }}#ifdef Augmentation_7chvoid II_decode_bitalloc_aug (Bit_stream *bs,			     frame_params *fr_ps,			     unsigned int bit_alloc[7][SBLIMIT],				     int *l, int *m, int bits_log){   layer *info = fr_ps->header;   int i,j,c,sbgr;   /* int stereo = fr_ps->stereo; */ /* not used for mc - decoding */   int sblimit = fr_ps->sblimit_mc;   al_table *alloc = fr_ps->alloc_mc;   unsigned int actual_alloc[7][SBLIMIT];   for (i = 0; i < SBLIMIT; i++)      for (j = *l; j < *m; j++)	 actual_alloc[j][i] = 0;   for (i=0; i<sblimit; i++)      if (info->aug_dyn_cross_on == 0)	 for (j=*l;j<*m;j++)	    actual_alloc[j][i] = bit_alloc[j][i] = (char) getbits (bs, (*alloc)[i][0].bits);      else  /* dyn. cross mode */      {        int T5T0 = 0, T6T0 = 0, T6T1 = 1;    	 if(i == 0) sbgr = 0;	 else	    for(c = 1; c < 12; c++)	    {	       if((sb_groups[c-1] < i) && (i <= sb_groups[c]))	       {		 sbgr = c;  /* search the valid subband group */		 break;		}	     }         if (info->tc_aug_alloc[sbgr] == 4 || info->tc_aug_alloc[sbgr] == 5)    	  if (info->dyn_cross_LR == 0)	    T6T1 = 0;	  else	    T6T0 = 1;        else if (info->tc_aug_alloc[sbgr] == 6 || info->tc_aug_alloc[sbgr] == 7)          if (info->dyn_cross_LR)	    T5T0 = 1;	 /* read bitalloc info from bitstream */	 switch (info->dyn_cross_aug_mode[sbgr])	 {	 case  0:   /* T5 and T6 contains bitalloc info */		    actual_alloc[5][i] = bit_alloc[5][i] = (char) getbits (bs, (*alloc)[i][0].bits);		    actual_alloc[6][i] = bit_alloc[6][i] = (char) getbits (bs, (*alloc)[i][0].bits);		    break;	 case  1:   /* T5 contains bitalloc info */	 case  2:	 case  3:	 case  4:		    actual_alloc[5][i] = bit_alloc[5][i] = (char) getbits (bs, (*alloc)[i][0].bits);		    break; 	 case  5:   /* T6 contains bitalloc info */	 case 10:	 case 14:		    actual_alloc[6][i] = bit_alloc[6][i] = (char) getbits (bs, (*alloc)[i][0].bits);		    break;	 } 	 /* copy bitalloc info from other channels */	 switch (info->dyn_cross_aug_mode[sbgr])	 {	 case  1:   /* copy T6 from T1 */		    bit_alloc[6][i] = bit_alloc[T6T1][i];		    break;	 case  2:   /* copy T6 from T2 */		    bit_alloc[6][i] = bit_alloc[2][i];		    break;	 case  3:   /* copy T6 from T4 */		    bit_alloc[6][i] = bit_alloc[4][i];		    break;	 case  4:   /* copy T6 from T5 */		    bit_alloc[6][i] = bit_alloc[5][i];		    break;	 case  5:   /* copy T5 from T0 */		    bit_alloc[5][i] = bit_alloc[T5T0][i];		    break;	 case  6:   /* copy T5 from T0 and T6 from T1 */		    bit_alloc[5][i] = bit_alloc[T5T0][i];		    bit_alloc[6][i] = bit_alloc[T6T1][i];		    break;	 case  7:   /* copy T5 from T0 and T6 from T2 */		    bit_alloc[5][i] = bit_alloc[T5T0][i];		    bit_alloc[6][i] = bit_alloc[2][i];		    break;	 case  8:   /* copy T5 from T0 and T6 from T4 */		    bit_alloc[5][i] = bit_alloc[T5T0][i];		    bit_alloc[6][i] = bit_alloc[4][i];		    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];

⌨️ 快捷键说明

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