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

📄 downmix.c

📁 Trolltech公司发布的图形界面操作系统。可在qt-embedded-2.3.7平台上编译为嵌入式图形界面操作系统。
💻 C
📖 第 1 页 / 共 2 页
字号:
	samples[i] += (samples[i + 256] + samples[i + 512] +		       samples[i + 768] + samples[i + 1024] + bias);}static void mix3to2 (sample_t * samples, sample_t bias){    int i;    sample_t common;    for (i = 0; i < 256; i++) {	common = samples[i + 256] + bias;	samples[i] += common;	samples[i + 256] = samples[i + 512] + common;    }}static void mix21to2 (sample_t * left, sample_t * right, sample_t bias){    int i;    sample_t common;    for (i = 0; i < 256; i++) {	common = right[i + 256] + bias;	left[i] += common;	right[i] += common;    }}static void mix21toS (sample_t * samples, sample_t bias){    int i;    sample_t surround;    for (i = 0; i < 256; i++) {	surround = samples[i + 512];	samples[i] += bias - surround;	samples[i + 256] += bias + surround;    }}static void mix31to2 (sample_t * samples, sample_t bias){    int i;    sample_t common;    for (i = 0; i < 256; i++) {	common = samples[i + 256] + samples[i + 768] + bias;	samples[i] += common;	samples[i + 256] = samples[i + 512] + common;    }}static void mix31toS (sample_t * samples, sample_t bias){    int i;    sample_t common, surround;    for (i = 0; i < 256; i++) {	common = samples[i + 256] + bias;	surround = samples[i + 768];	samples[i] += common - surround;	samples[i + 256] = samples[i + 512] + common + surround;    }}static void mix22toS (sample_t * samples, sample_t bias){    int i;    sample_t surround;    for (i = 0; i < 256; i++) {	surround = samples[i + 512] + samples[i + 768];	samples[i] += bias - surround;	samples[i + 256] += bias + surround;    }}static void mix32to2 (sample_t * samples, sample_t bias){    int i;    sample_t common;    for (i = 0; i < 256; i++) {	common = samples[i + 256] + bias;	samples[i] += common + samples[i + 768];	samples[i + 256] = common + samples[i + 512] + samples[i + 1024];    }}static void mix32toS (sample_t * samples, sample_t bias){    int i;    sample_t common, surround;    for (i = 0; i < 256; i++) {	common = samples[i + 256] + bias;	surround = samples[i + 768] + samples[i + 1024];	samples[i] += common - surround;	samples[i + 256] = samples[i + 512] + common + surround;    }}static void move2to1 (sample_t * src, sample_t * dest, sample_t bias){    int i;    for (i = 0; i < 256; i++)	dest[i] = src[i] + src[i + 256] + bias;}static void zero (sample_t * samples){    int i;    for (i = 0; i < 256; i++)	samples[i] = 0;}void a52_downmix (sample_t * samples, int acmod, int output, sample_t bias,		  sample_t clev, sample_t slev){    switch (CONVERT (acmod, output & A52_CHANNEL_MASK)) {    case CONVERT (A52_CHANNEL, A52_CHANNEL2):	memcpy (samples, samples + 256, 256 * sizeof (sample_t));	break;    case CONVERT (A52_CHANNEL, A52_MONO):    case CONVERT (A52_STEREO, A52_MONO):    mix_2to1:	mix2to1 (samples, samples + 256, bias);	break;    case CONVERT (A52_2F1R, A52_MONO):	if (slev == 0)	    goto mix_2to1;    case CONVERT (A52_3F, A52_MONO):    mix_3to1:	mix3to1 (samples, bias);	break;    case CONVERT (A52_3F1R, A52_MONO):	if (slev == 0)	    goto mix_3to1;    case CONVERT (A52_2F2R, A52_MONO):	if (slev == 0)	    goto mix_2to1;	mix4to1 (samples, bias);	break;    case CONVERT (A52_3F2R, A52_MONO):	if (slev == 0)	    goto mix_3to1;	mix5to1 (samples, bias);	break;    case CONVERT (A52_MONO, A52_DOLBY):	memcpy (samples + 256, samples, 256 * sizeof (sample_t));	break;    case CONVERT (A52_3F, A52_STEREO):    case CONVERT (A52_3F, A52_DOLBY):    mix_3to2:	mix3to2 (samples, bias);	break;    case CONVERT (A52_2F1R, A52_STEREO):	if (slev == 0)	    break;	mix21to2 (samples, samples + 256, bias);	break;    case CONVERT (A52_2F1R, A52_DOLBY):	mix21toS (samples, bias);	break;    case CONVERT (A52_3F1R, A52_STEREO):	if (slev == 0)	    goto mix_3to2;	mix31to2 (samples, bias);	break;    case CONVERT (A52_3F1R, A52_DOLBY):	mix31toS (samples, bias);	break;    case CONVERT (A52_2F2R, A52_STEREO):	if (slev == 0)	    break;	mix2to1 (samples, samples + 512, bias);	mix2to1 (samples + 256, samples + 768, bias);	break;    case CONVERT (A52_2F2R, A52_DOLBY):	mix22toS (samples, bias);	break;    case CONVERT (A52_3F2R, A52_STEREO):	if (slev == 0)	    goto mix_3to2;	mix32to2 (samples, bias);	break;    case CONVERT (A52_3F2R, A52_DOLBY):	mix32toS (samples, bias);	break;    case CONVERT (A52_3F1R, A52_3F):	if (slev == 0)	    break;	mix21to2 (samples, samples + 512, bias);	break;    case CONVERT (A52_3F2R, A52_3F):	if (slev == 0)	    break;	mix2to1 (samples, samples + 768, bias);	mix2to1 (samples + 512, samples + 1024, bias);	break;    case CONVERT (A52_3F1R, A52_2F1R):	mix3to2 (samples, bias);	memcpy (samples + 512, samples + 768, 256 * sizeof (sample_t));	break;    case CONVERT (A52_2F2R, A52_2F1R):	mix2to1 (samples + 512, samples + 768, bias);	break;    case CONVERT (A52_3F2R, A52_2F1R):	mix3to2 (samples, bias);	move2to1 (samples + 768, samples + 512, bias);	break;    case CONVERT (A52_3F2R, A52_3F1R):	mix2to1 (samples + 768, samples + 1024, bias);	break;    case CONVERT (A52_2F1R, A52_2F2R):	memcpy (samples + 768, samples + 512, 256 * sizeof (sample_t));	break;    case CONVERT (A52_3F1R, A52_2F2R):	mix3to2 (samples, bias);	memcpy (samples + 512, samples + 768, 256 * sizeof (sample_t));	break;    case CONVERT (A52_3F2R, A52_2F2R):	mix3to2 (samples, bias);	memcpy (samples + 512, samples + 768, 256 * sizeof (sample_t));	memcpy (samples + 768, samples + 1024, 256 * sizeof (sample_t));	break;    case CONVERT (A52_3F1R, A52_3F2R):	memcpy (samples + 1027, samples + 768, 256 * sizeof (sample_t));	break;    }}void a52_upmix (sample_t * samples, int acmod, int output){    switch (CONVERT (acmod, output & A52_CHANNEL_MASK)) {    case CONVERT (A52_CHANNEL, A52_CHANNEL2):	memcpy (samples + 256, samples, 256 * sizeof (sample_t));	break;    case CONVERT (A52_3F2R, A52_MONO):	zero (samples + 1024);    case CONVERT (A52_3F1R, A52_MONO):    case CONVERT (A52_2F2R, A52_MONO):	zero (samples + 768);    case CONVERT (A52_3F, A52_MONO):    case CONVERT (A52_2F1R, A52_MONO):	zero (samples + 512);    case CONVERT (A52_CHANNEL, A52_MONO):    case CONVERT (A52_STEREO, A52_MONO):	zero (samples + 256);	break;    case CONVERT (A52_3F2R, A52_STEREO):    case CONVERT (A52_3F2R, A52_DOLBY):	zero (samples + 1024);    case CONVERT (A52_3F1R, A52_STEREO):    case CONVERT (A52_3F1R, A52_DOLBY):	zero (samples + 768);    case CONVERT (A52_3F, A52_STEREO):    case CONVERT (A52_3F, A52_DOLBY):    mix_3to2:	memcpy (samples + 512, samples + 256, 256 * sizeof (sample_t));	zero (samples + 256);	break;    case CONVERT (A52_2F2R, A52_STEREO):    case CONVERT (A52_2F2R, A52_DOLBY):	zero (samples + 768);    case CONVERT (A52_2F1R, A52_STEREO):    case CONVERT (A52_2F1R, A52_DOLBY):	zero (samples + 512);	break;    case CONVERT (A52_3F2R, A52_3F):	zero (samples + 1024);    case CONVERT (A52_3F1R, A52_3F):    case CONVERT (A52_2F2R, A52_2F1R):	zero (samples + 768);	break;    case CONVERT (A52_3F2R, A52_3F1R):	zero (samples + 1024);	break;    case CONVERT (A52_3F2R, A52_2F1R):	zero (samples + 1024);    case CONVERT (A52_3F1R, A52_2F1R):    mix_31to21:	memcpy (samples + 768, samples + 512, 256 * sizeof (sample_t));	goto mix_3to2;    case CONVERT (A52_3F2R, A52_2F2R):	memcpy (samples + 1024, samples + 768, 256 * sizeof (sample_t));	goto mix_31to21;    }}

⌨️ 快捷键说明

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