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

📄 downmix.c

📁 Trolltech公司发布的图形界面操作系统。可在qt-embedded-2.3.10平台上编译为嵌入式图形界面操作系统。
💻 C
📖 第 1 页 / 共 2 页
字号:
static void mix4to1 (sample_t * samples, sample_t bias){    int i;    for (i = 0; i < 256; i++)	samples[i] += BIAS (samples[i + 256] + samples[i + 512] +			    samples[i + 768]);}static void mix5to1 (sample_t * samples, sample_t bias){    int i;    for (i = 0; i < 256; i++)	samples[i] += BIAS (samples[i + 256] + samples[i + 512] +			    samples[i + 768] + samples[i + 1024]);}static void mix3to2 (sample_t * samples, sample_t bias){    int i;    sample_t common;    for (i = 0; i < 256; i++) {	common = BIAS (samples[i + 256]);	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 = BIAS (right[i + 256]);	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 = BIAS (samples[i + 256] + samples[i + 768]);	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 = BIAS (samples[i + 256]);	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 = BIAS (samples[i + 256]);	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 = BIAS (samples[i + 256]);	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] = BIAS (src[i] + src[i + 256]);}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,		  level_t clev, level_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 + 1024, 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 + -