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

📄 sdl_audiocvt.c

📁 完整的RTP RTSP代码库
💻 C
📖 第 1 页 / 共 3 页
字号:
						dst[1] = (lf&0xFF);						dst[0] = ((lf>>8)&0xFF);						dst[3] = (rf&0xFF);						dst[2] = ((rf>>8)&0xFF);						dst[1+4] = (lr&0xFF);						dst[0+4] = ((lr>>8)&0xFF);						dst[3+4] = (rr&0xFF);						dst[2+4] = ((rr>>8)&0xFF);						dst[1+8] = (ce&0xFF);						dst[0+8] = ((ce>>8)&0xFF);						dst[3+8] = (ce&0xFF);						dst[2+8] = ((ce>>8)&0xFF);				}			} else {				for ( i=cvt->len_cvt/4; i; --i ) {					dst -= 12;					src -= 4;					lf = (Uint16)((src[1]<<8)|src[0]);					rf = (Uint16)((src[3]<<8)|src[2]);					ce = (lf/2) + (rf/2);					rr = lf - ce;					lr = rf - ce;						dst[0] = (lf&0xFF);						dst[1] = ((lf>>8)&0xFF);						dst[2] = (rf&0xFF);						dst[3] = ((rf>>8)&0xFF);						dst[0+4] = (lr&0xFF);						dst[1+4] = ((lr>>8)&0xFF);						dst[2+4] = (rr&0xFF);						dst[3+4] = ((rr>>8)&0xFF);						dst[0+8] = (ce&0xFF);						dst[1+8] = ((ce>>8)&0xFF);						dst[2+8] = (ce&0xFF);						dst[3+8] = ((ce>>8)&0xFF);				}			}		}		break;		case AUDIO_S16: {			Uint8 *src, *dst;			Sint16 lf, rf, ce, lr, rr;			src = cvt->buf+cvt->len_cvt;			dst = cvt->buf+cvt->len_cvt*3;			if ( (format & 0x1000) == 0x1000 ) {				for ( i=cvt->len_cvt/4; i; --i ) {					dst -= 12;					src -= 4;					lf = (Sint16)((src[0]<<8)|src[1]);					rf = (Sint16)((src[2]<<8)|src[3]);					ce = (lf/2) + (rf/2);					rr = lf - ce;					lr = rf - ce;						dst[1] = (lf&0xFF);						dst[0] = ((lf>>8)&0xFF);						dst[3] = (rf&0xFF);						dst[2] = ((rf>>8)&0xFF);						dst[1+4] = (lr&0xFF);						dst[0+4] = ((lr>>8)&0xFF);						dst[3+4] = (rr&0xFF);						dst[2+4] = ((rr>>8)&0xFF);						dst[1+8] = (ce&0xFF);						dst[0+8] = ((ce>>8)&0xFF);						dst[3+8] = (ce&0xFF);						dst[2+8] = ((ce>>8)&0xFF);				}			} else {				for ( i=cvt->len_cvt/4; i; --i ) {					dst -= 12;					src -= 4;					lf = (Sint16)((src[1]<<8)|src[0]);					rf = (Sint16)((src[3]<<8)|src[2]);					ce = (lf/2) + (rf/2);					rr = lf - ce;					lr = rf - ce;						dst[0] = (lf&0xFF);						dst[1] = ((lf>>8)&0xFF);						dst[2] = (rf&0xFF);						dst[3] = ((rf>>8)&0xFF);						dst[0+4] = (lr&0xFF);						dst[1+4] = ((lr>>8)&0xFF);						dst[2+4] = (rr&0xFF);						dst[3+4] = ((rr>>8)&0xFF);						dst[0+8] = (ce&0xFF);						dst[1+8] = ((ce>>8)&0xFF);						dst[2+8] = (ce&0xFF);						dst[3+8] = ((ce>>8)&0xFF);				}			}		}		break;	}	cvt->len_cvt *= 3;	if ( cvt->filters[++cvt->filter_index] ) {		cvt->filters[cvt->filter_index](cvt, format);	}}/* Duplicate a stereo channel to a pseudo-4.0 stream */void SDL_ConvertSurround_4(SDL_AudioCVT *cvt, Uint16 format){	int i;#ifdef DEBUG_CONVERT	fprintf(stderr, "Converting stereo to quad\n");#endif	switch (format&0x8018) {		case AUDIO_U8: {			Uint8 *src, *dst, lf, rf, ce;			src = (Uint8 *)(cvt->buf+cvt->len_cvt);			dst = (Uint8 *)(cvt->buf+cvt->len_cvt*2);			for ( i=cvt->len_cvt; i; --i ) {				dst -= 4;				src -= 2;				lf = src[0];				rf = src[1];				ce = (lf/2) + (rf/2);				dst[0] = lf;				dst[1] = rf;				dst[2] = lf - ce;				dst[3] = rf - ce;			}		}		break;		case AUDIO_S8: {			Sint8 *src, *dst, lf, rf, ce;			src = cvt->buf+cvt->len_cvt;			dst = cvt->buf+cvt->len_cvt*2;			for ( i=cvt->len_cvt; i; --i ) {				dst -= 4;				src -= 2;				lf = src[0];				rf = src[1];				ce = (lf/2) + (rf/2);				dst[0] = lf;				dst[1] = rf;				dst[2] = lf - ce;				dst[3] = rf - ce;			}		}		break;		case AUDIO_U16: {			Uint8 *src, *dst;			Uint16 lf, rf, ce, lr, rr;			src = cvt->buf+cvt->len_cvt;			dst = cvt->buf+cvt->len_cvt*2;			if ( (format & 0x1000) == 0x1000 ) {				for ( i=cvt->len_cvt/4; i; --i ) {					dst -= 8;					src -= 4;					lf = (Uint16)((src[0]<<8)|src[1]);					rf = (Uint16)((src[2]<<8)|src[3]);					ce = (lf/2) + (rf/2);					rr = lf - ce;					lr = rf - ce;						dst[1] = (lf&0xFF);						dst[0] = ((lf>>8)&0xFF);						dst[3] = (rf&0xFF);						dst[2] = ((rf>>8)&0xFF);						dst[1+4] = (lr&0xFF);						dst[0+4] = ((lr>>8)&0xFF);						dst[3+4] = (rr&0xFF);						dst[2+4] = ((rr>>8)&0xFF);				}			} else {				for ( i=cvt->len_cvt/4; i; --i ) {					dst -= 8;					src -= 4;					lf = (Uint16)((src[1]<<8)|src[0]);					rf = (Uint16)((src[3]<<8)|src[2]);					ce = (lf/2) + (rf/2);					rr = lf - ce;					lr = rf - ce;						dst[0] = (lf&0xFF);						dst[1] = ((lf>>8)&0xFF);						dst[2] = (rf&0xFF);						dst[3] = ((rf>>8)&0xFF);						dst[0+4] = (lr&0xFF);						dst[1+4] = ((lr>>8)&0xFF);						dst[2+4] = (rr&0xFF);						dst[3+4] = ((rr>>8)&0xFF);				}			}		}		break;		case AUDIO_S16: {			Uint8 *src, *dst;			Sint16 lf, rf, ce, lr, rr;			src = cvt->buf+cvt->len_cvt;			dst = cvt->buf+cvt->len_cvt*2;			if ( (format & 0x1000) == 0x1000 ) {				for ( i=cvt->len_cvt/4; i; --i ) {					dst -= 8;					src -= 4;					lf = (Sint16)((src[0]<<8)|src[1]);					rf = (Sint16)((src[2]<<8)|src[3]);					ce = (lf/2) + (rf/2);					rr = lf - ce;					lr = rf - ce;						dst[1] = (lf&0xFF);						dst[0] = ((lf>>8)&0xFF);						dst[3] = (rf&0xFF);						dst[2] = ((rf>>8)&0xFF);						dst[1+4] = (lr&0xFF);						dst[0+4] = ((lr>>8)&0xFF);						dst[3+4] = (rr&0xFF);						dst[2+4] = ((rr>>8)&0xFF);				}			} else {				for ( i=cvt->len_cvt/4; i; --i ) {					dst -= 8;					src -= 4;					lf = (Sint16)((src[1]<<8)|src[0]);					rf = (Sint16)((src[3]<<8)|src[2]);					ce = (lf/2) + (rf/2);					rr = lf - ce;					lr = rf - ce;						dst[0] = (lf&0xFF);						dst[1] = ((lf>>8)&0xFF);						dst[2] = (rf&0xFF);						dst[3] = ((rf>>8)&0xFF);						dst[0+4] = (lr&0xFF);						dst[1+4] = ((lr>>8)&0xFF);						dst[2+4] = (rr&0xFF);						dst[3+4] = ((rr>>8)&0xFF);				}			}		}		break;	}	cvt->len_cvt *= 2;	if ( cvt->filters[++cvt->filter_index] ) {		cvt->filters[cvt->filter_index](cvt, format);	}}/* Convert 8-bit to 16-bit - LSB */void SDL_Convert16LSB(SDL_AudioCVT *cvt, Uint16 format){	int i;	Uint8 *src, *dst;#ifdef DEBUG_CONVERT	fprintf(stderr, "Converting to 16-bit LSB\n");#endif	src = cvt->buf+cvt->len_cvt;	dst = cvt->buf+cvt->len_cvt*2;	for ( i=cvt->len_cvt; i; --i ) {		src -= 1;		dst -= 2;		dst[1] = *src;		dst[0] = 0;	}	format = ((format & ~0x0008) | AUDIO_U16LSB);	cvt->len_cvt *= 2;	if ( cvt->filters[++cvt->filter_index] ) {		cvt->filters[cvt->filter_index](cvt, format);	}}/* Convert 8-bit to 16-bit - MSB */void SDL_Convert16MSB(SDL_AudioCVT *cvt, Uint16 format){	int i;	Uint8 *src, *dst;#ifdef DEBUG_CONVERT	fprintf(stderr, "Converting to 16-bit MSB\n");#endif	src = cvt->buf+cvt->len_cvt;	dst = cvt->buf+cvt->len_cvt*2;	for ( i=cvt->len_cvt; i; --i ) {		src -= 1;		dst -= 2;		dst[0] = *src;		dst[1] = 0;	}	format = ((format & ~0x0008) | AUDIO_U16MSB);	cvt->len_cvt *= 2;	if ( cvt->filters[++cvt->filter_index] ) {		cvt->filters[cvt->filter_index](cvt, format);	}}/* Convert 16-bit to 8-bit */void SDL_Convert8(SDL_AudioCVT *cvt, Uint16 format){	int i;	Uint8 *src, *dst;#ifdef DEBUG_CONVERT	fprintf(stderr, "Converting to 8-bit\n");#endif	src = cvt->buf;	dst = cvt->buf;	if ( (format & 0x1000) != 0x1000 ) { /* Little endian */		++src;	}	for ( i=cvt->len_cvt/2; i; --i ) {		*dst = *src;		src += 2;		dst += 1;	}	format = ((format & ~0x9010) | AUDIO_U8);	cvt->len_cvt /= 2;	if ( cvt->filters[++cvt->filter_index] ) {		cvt->filters[cvt->filter_index](cvt, format);	}}/* Toggle signed/unsigned */void SDL_ConvertSign(SDL_AudioCVT *cvt, Uint16 format){	int i;	Uint8 *data;#ifdef DEBUG_CONVERT	fprintf(stderr, "Converting audio signedness\n");#endif	data = cvt->buf;	if ( (format & 0xFF) == 16 ) {		if ( (format & 0x1000) != 0x1000 ) { /* Little endian */			++data;		}		for ( i=cvt->len_cvt/2; i; --i ) {			*data ^= 0x80;			data += 2;		}	} else {		for ( i=cvt->len_cvt; i; --i ) {			*data++ ^= 0x80;		}	}	format = (format ^ 0x8000);	if ( cvt->filters[++cvt->filter_index] ) {		cvt->filters[cvt->filter_index](cvt, format);	}}/* Toggle endianness */void SDL_ConvertEndian(SDL_AudioCVT *cvt, Uint16 format){	int i;	Uint8 *data, tmp;#ifdef DEBUG_CONVERT	fprintf(stderr, "Converting audio endianness\n");#endif	data = cvt->buf;	for ( i=cvt->len_cvt/2; i; --i ) {		tmp = data[0];		data[0] = data[1];		data[1] = tmp;		data += 2;	}	format = (format ^ 0x1000);	if ( cvt->filters[++cvt->filter_index] ) {		cvt->filters[cvt->filter_index](cvt, format);	}}/* Convert rate up by multiple of 2 */void SDL_RateMUL2(SDL_AudioCVT *cvt, Uint16 format){	int i;	Uint8 *src, *dst;#ifdef DEBUG_CONVERT	fprintf(stderr, "Converting audio rate * 2\n");#endif	src = cvt->buf+cvt->len_cvt;	dst = cvt->buf+cvt->len_cvt*2;	switch (format & 0xFF) {		case 8:			for ( i=cvt->len_cvt; i; --i ) {				src -= 1;				dst -= 2;				dst[0] = src[0];				dst[1] = src[0];			}			break;		case 16:			for ( i=cvt->len_cvt/2; i; --i ) {				src -= 2;				dst -= 4;				dst[0] = src[0];				dst[1] = src[1];				dst[2] = src[0];				dst[3] = src[1];			}			break;	}	cvt->len_cvt *= 2;	if ( cvt->filters[++cvt->filter_index] ) {		cvt->filters[cvt->filter_index](cvt, format);	}}/* Convert rate up by multiple of 2, for stereo */void SDL_RateMUL2_c2(SDL_AudioCVT *cvt, Uint16 format){	int i;	Uint8 *src, *dst;#ifdef DEBUG_CONVERT	fprintf(stderr, "Converting audio rate * 2\n");#endif	src = cvt->buf+cvt->len_cvt;	dst = cvt->buf+cvt->len_cvt*2;	switch (format & 0xFF) {		case 8:			for ( i=cvt->len_cvt/2; i; --i ) {				src -= 2;				dst -= 4;				dst[0] = src[0];				dst[1] = src[1];				dst[2] = src[0];				dst[3] = src[1];			}			break;		case 16:			for ( i=cvt->len_cvt/4; i; --i ) {				src -= 4;				dst -= 8;				dst[0] = src[0];				dst[1] = src[1];				dst[2] = src[2];				dst[3] = src[3];				dst[4] = src[0];				dst[5] = src[1];				dst[6] = src[2];				dst[7] = src[3];			}			break;	}	cvt->len_cvt *= 2;	if ( cvt->filters[++cvt->filter_index] ) {		cvt->filters[cvt->filter_index](cvt, format);	}}/* Convert rate up by multiple of 2, for quad */void SDL_RateMUL2_c4(SDL_AudioCVT *cvt, Uint16 format){	int i;	Uint8 *src, *dst;#ifdef DEBUG_CONVERT	fprintf(stderr, "Converting audio rate * 2\n");#endif	src = cvt->buf+cvt->len_cvt;	dst = cvt->buf+cvt->len_cvt*2;	switch (format & 0xFF) {		case 8:			for ( i=cvt->len_cvt/4; i; --i ) {				src -= 4;				dst -= 8;				dst[0] = src[0];				dst[1] = src[1];				dst[2] = src[2];				dst[3] = src[3];				dst[4] = src[0];				dst[5] = src[1];				dst[6] = src[2];				dst[7] = src[3];			}			break;		case 16:			for ( i=cvt->len_cvt/8; i; --i ) {				src -= 8;				dst -= 16;				dst[0] = src[0];				dst[1] = src[1];				dst[2] = src[2];				dst[3] = src[3];				dst[4] = src[4];				dst[5] = src[5];				dst[6] = src[6];				dst[7] = src[7];				dst[8] = src[0];				dst[9] = src[1];				dst[10] = src[2];				dst[11] = src[3];				dst[12] = src[4];				dst[13] = src[5];				dst[14] = src[6];				dst[15] = src[7];			}			break;	}	cvt->len_cvt *= 2;	if ( cvt->filters[++cvt->filter_index] ) {		cvt->filters[cvt->filter_index](cvt, format);	}

⌨️ 快捷键说明

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