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

📄 layer1.cpp

📁 是一本学习MFC的好书
💻 CPP
字号:


#include "mpg123.h"


/**
 *
 **/

static void I_step_one (unsigned int balloc[], unsigned int scale_index[2][SBLIMIT],struct frame *fr)
{
	unsigned int *ba=balloc;
	unsigned int *sca = (unsigned int *) scale_index;

	if(fr->stereo) {
		int i;
		int jsbound = fr->jsbound;

		for (i=0;i<jsbound;i++) { 
			*ba++ = getbits(4);
			*ba++ = getbits(4);
		}

		for (i=jsbound;i<SBLIMIT;i++)
			*ba++ = getbits(4);

		ba = balloc;

		for (i=0;i<jsbound;i++) {
			if ((*ba++))
				*sca++ = getbits(6);
			if ((*ba++))
				*sca++ = getbits(6);
		}

		for (i=jsbound;i<SBLIMIT;i++) {
			if ((*ba++)) {
				*sca++ =  getbits(6);
				*sca++ =  getbits(6);
			}
		}
	} else {	
		int i;

		for (i=0;i<SBLIMIT;i++)
			*ba++ = getbits(4);

		ba = balloc;

		for (i=0;i<SBLIMIT;i++) {
			if ((*ba++))
				*sca++ = getbits(6);
		}
	}
}


/**
 *
 **/

static void I_step_two (real fraction[2][SBLIMIT],unsigned int balloc[2*SBLIMIT],
	unsigned int scale_index[2][SBLIMIT],struct frame *fr)
{
	int i,n;
	int smpb[2*SBLIMIT]; 
	int *sample;
	register unsigned int *ba;
	register unsigned int *sca = (unsigned int *) scale_index;

	if(fr->stereo) {
		int jsbound = fr->jsbound;
		register real *f0 = fraction[0];
		register real *f1 = fraction[1];
		ba = balloc;

		for (sample=smpb,i=0;i<jsbound;i++)  {
			if ((n = *ba++))
				*sample++ = getbits(n+1);
			if ((n = *ba++))
				*sample++ = getbits(n+1);
		}

		for (i=jsbound;i<SBLIMIT;i++) {
			if ((n = *ba++))
				*sample++ = getbits(n+1);
		}

		ba = balloc;

		for (sample=smpb,i=0;i<jsbound;i++) {
			if((n=*ba++))
				*f0++ = (real) ( ((-1)<<n) + (*sample++) + 1) * muls[n+1][*sca++];
			else
				*f0++ = 0.0;

			if((n=*ba++))
				*f1++ = (real) ( ((-1)<<n) + (*sample++) + 1) * muls[n+1][*sca++];
			else
				*f1++ = 0.0;
		}

		for (i=jsbound;i<SBLIMIT;i++) {
			if ((n=*ba++)) {
				real samp = ( ((-1)<<n) + (*sample++) + 1);
				*f0++ = samp * muls[n+1][*sca++];
				*f1++ = samp * muls[n+1][*sca++];
			} else
				*f0++ = *f1++ = 0.0;
		}
	} else {	
		register real *f0 = fraction[0];
		ba = balloc;

		for (sample=smpb,i=0;i<SBLIMIT;i++) {
			if ((n = *ba++))
				*sample++ = getbits(n+1);
		}

		ba = balloc;

		for (sample=smpb,i=0;i<SBLIMIT;i++) {
			if((n=*ba++))
				*f0++ = (real) ( ((-1)<<n) + (*sample++) + 1) * muls[n+1][*sca++];
			else
				*f0++ = 0.0;
		}
	}
}


/**
 *
 **/

int do_layer1(struct frame *fr,unsigned char *pcm_sample,int *pcm_point)
{
	int clip=0;
	int i,stereo = fr->stereo;
	unsigned int balloc[2*SBLIMIT];
	unsigned int scale_index[2][SBLIMIT];
	real fraction[2][SBLIMIT];
	int single = fr->single;

	fr->jsbound = (fr->mode == MPG_MD_JOINT_STEREO) ? (fr->mode_ext<<2)+4 : 32;

	if(stereo == 1 || single == 3)
		single = 0;

	I_step_one (balloc,scale_index,fr);

	for (i=0;i<SCALE_BLOCK;i++) {
		I_step_two (fraction,balloc,scale_index,fr);

	if(single >= 0) {
        clip += synth_1to1_mono( (real*)fraction[single],pcm_sample,pcm_point);
      } else {
        int p1 = *pcm_point;
        clip += synth_1to1( (real*)fraction[0],0,pcm_sample,&p1);
        clip += synth_1to1( (real*)fraction[1],1,pcm_sample,pcm_point);
      }
  }

  return clip;
}

⌨️ 快捷键说明

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