Mercurial > sdl-ios-xcode
diff src/audio/SDL_audiocvt.c @ 1985:8055185ae4ed
Added source color and alpha modulation support.
Added perl script to generate optimized render copy functions.
author | Sam Lantinga <slouken@libsdl.org> |
---|---|
date | Mon, 28 Aug 2006 03:17:39 +0000 |
parents | 3b4ce57c6215 |
children | 7abe37467fa5 |
line wrap: on
line diff
--- a/src/audio/SDL_audiocvt.c Thu Aug 24 12:49:59 2006 +0000 +++ b/src/audio/SDL_audiocvt.c Mon Aug 28 03:17:39 2006 +0000 @@ -36,7 +36,7 @@ #ifdef DEBUG_CONVERT fprintf(stderr, "Converting to mono\n"); #endif - switch (format & (SDL_AUDIO_MASK_SIGNED|SDL_AUDIO_MASK_BITSIZE)) { + switch (format & (SDL_AUDIO_MASK_SIGNED | SDL_AUDIO_MASK_BITSIZE)) { case AUDIO_U8: { Uint8 *src, *dst; @@ -170,15 +170,15 @@ if (SDL_AUDIO_ISBIGENDIAN(format)) { for (i = cvt->len_cvt / 8; i; --i, src += 2) { const Sint64 added = - (((Sint64) (Sint32) SDL_SwapBE32(src[0])) + - ((Sint64) (Sint32) SDL_SwapBE32(src[1]))); + (((Sint64) (Sint32) SDL_SwapBE32(src[0])) + + ((Sint64) (Sint32) SDL_SwapBE32(src[1]))); *(dst++) = SDL_SwapBE32((Uint32) ((Sint32) (added >> 1))); } } else { for (i = cvt->len_cvt / 8; i; --i, src += 2) { const Sint64 added = - (((Sint64) (Sint32) SDL_SwapLE32(src[0])) + - ((Sint64) (Sint32) SDL_SwapLE32(src[1]))); + (((Sint64) (Sint32) SDL_SwapLE32(src[0])) + + ((Sint64) (Sint32) SDL_SwapLE32(src[1]))); *(dst++) = SDL_SwapLE32((Uint32) ((Sint32) (added >> 1))); } } @@ -188,7 +188,11 @@ case AUDIO_F32: { /* !!! FIXME: this convert union is nasty. */ - union { float f; Uint32 ui32; } f2i; + union + { + float f; + Uint32 ui32; + } f2i; const Uint32 *src = (const Uint32 *) cvt->buf; Uint32 *dst = (Uint32 *) cvt->buf; if (SDL_AUDIO_ISBIGENDIAN(format)) { @@ -235,7 +239,7 @@ fprintf(stderr, "Converting down from 6 channels to stereo\n"); #endif - #define strip_chans_6_to_2(type) \ +#define strip_chans_6_to_2(type) \ { \ const type *src = (const type *) cvt->buf; \ type *dst = (type *) cvt->buf; \ @@ -249,18 +253,18 @@ /* this function only cares about typesize, and data as a block of bits. */ switch (SDL_AUDIO_BITSIZE(format)) { - case 8: - strip_chans_6_to_2(Uint8); - break; - case 16: - strip_chans_6_to_2(Uint16); - break; - case 32: - strip_chans_6_to_2(Uint32); - break; + case 8: + strip_chans_6_to_2(Uint8); + break; + case 16: + strip_chans_6_to_2(Uint16); + break; + case 32: + strip_chans_6_to_2(Uint32); + break; } - #undef strip_chans_6_to_2 +#undef strip_chans_6_to_2 cvt->len_cvt /= 3; if (cvt->filters[++cvt->filter_index]) { @@ -279,7 +283,7 @@ fprintf(stderr, "Converting 6 down to quad\n"); #endif - #define strip_chans_6_to_4(type) \ +#define strip_chans_6_to_4(type) \ { \ const type *src = (const type *) cvt->buf; \ type *dst = (type *) cvt->buf; \ @@ -295,18 +299,18 @@ /* this function only cares about typesize, and data as a block of bits. */ switch (SDL_AUDIO_BITSIZE(format)) { - case 8: - strip_chans_6_to_4(Uint8); - break; - case 16: - strip_chans_6_to_4(Uint16); - break; - case 32: - strip_chans_6_to_4(Uint32); - break; + case 8: + strip_chans_6_to_4(Uint8); + break; + case 16: + strip_chans_6_to_4(Uint16); + break; + case 32: + strip_chans_6_to_4(Uint32); + break; } - #undef strip_chans_6_to_4 +#undef strip_chans_6_to_4 cvt->len_cvt /= 6; cvt->len_cvt *= 4; @@ -325,7 +329,7 @@ fprintf(stderr, "Converting to stereo\n"); #endif - #define dup_chans_1_to_2(type) \ +#define dup_chans_1_to_2(type) \ { \ const type *src = (const type *) (cvt->buf + cvt->len_cvt); \ type *dst = (type *) (cvt->buf + cvt->len_cvt * 2); \ @@ -338,18 +342,18 @@ /* this function only cares about typesize, and data as a block of bits. */ switch (SDL_AUDIO_BITSIZE(format)) { - case 8: - dup_chans_1_to_2(Uint8); - break; - case 16: - dup_chans_1_to_2(Uint16); - break; - case 32: - dup_chans_1_to_2(Uint32); - break; + case 8: + dup_chans_1_to_2(Uint8); + break; + case 16: + dup_chans_1_to_2(Uint16); + break; + case 32: + dup_chans_1_to_2(Uint32); + break; } - #undef dup_chans_1_to_2 +#undef dup_chans_1_to_2 cvt->len_cvt *= 2; if (cvt->filters[++cvt->filter_index]) { @@ -368,7 +372,7 @@ fprintf(stderr, "Converting stereo to surround\n"); #endif - switch (format & (SDL_AUDIO_MASK_SIGNED|SDL_AUDIO_MASK_BITSIZE)) { + switch (format & (SDL_AUDIO_MASK_SIGNED | SDL_AUDIO_MASK_BITSIZE)) { case AUDIO_U8: { Uint8 *src, *dst, lf, rf, ce; @@ -573,7 +577,11 @@ case AUDIO_F32: { - union { float f; Uint32 ui32; } f2i; /* !!! FIXME: lame. */ + union + { + float f; + Uint32 ui32; + } f2i; /* !!! FIXME: lame. */ float lf, rf, ce; const Uint32 *src = (const Uint32 *) cvt->buf + cvt->len_cvt; Uint32 *dst = (Uint32 *) cvt->buf + cvt->len_cvt * 3; @@ -640,7 +648,7 @@ fprintf(stderr, "Converting stereo to quad\n"); #endif - switch (format & (SDL_AUDIO_MASK_SIGNED|SDL_AUDIO_MASK_BITSIZE)) { + switch (format & (SDL_AUDIO_MASK_SIGNED | SDL_AUDIO_MASK_BITSIZE)) { case AUDIO_U8: { Uint8 *src, *dst, lf, rf, ce; @@ -831,7 +839,7 @@ fprintf(stderr, "Converting audio rate * 2 (mono)\n"); #endif - #define mul2_mono(type) { \ +#define mul2_mono(type) { \ const type *src = (const type *) (cvt->buf + cvt->len_cvt); \ type *dst = (type *) (cvt->buf + (cvt->len_cvt * 2)); \ for (i = cvt->len_cvt / sizeof (type); i; --i) { \ @@ -853,7 +861,7 @@ break; } - #undef mul2_mono +#undef mul2_mono cvt->len_cvt *= 2; if (cvt->filters[++cvt->filter_index]) { @@ -872,7 +880,7 @@ fprintf(stderr, "Converting audio rate * 2 (stereo)\n"); #endif - #define mul2_stereo(type) { \ +#define mul2_stereo(type) { \ const type *src = (const type *) (cvt->buf + cvt->len_cvt); \ type *dst = (type *) (cvt->buf + (cvt->len_cvt * 2)); \ for (i = cvt->len_cvt / (sizeof (type) * 2); i; --i) { \ @@ -899,7 +907,7 @@ break; } - #undef mul2_stereo +#undef mul2_stereo cvt->len_cvt *= 2; if (cvt->filters[++cvt->filter_index]) { @@ -917,7 +925,7 @@ fprintf(stderr, "Converting audio rate * 2 (quad)\n"); #endif - #define mul2_quad(type) { \ +#define mul2_quad(type) { \ const type *src = (const type *) (cvt->buf + cvt->len_cvt); \ type *dst = (type *) (cvt->buf + (cvt->len_cvt * 2)); \ for (i = cvt->len_cvt / (sizeof (type) * 4); i; --i) { \ @@ -950,7 +958,7 @@ break; } - #undef mul2_quad +#undef mul2_quad cvt->len_cvt *= 2; if (cvt->filters[++cvt->filter_index]) { @@ -969,7 +977,7 @@ fprintf(stderr, "Converting audio rate * 2 (six channels)\n"); #endif - #define mul2_chansix(type) { \ +#define mul2_chansix(type) { \ const type *src = (const type *) (cvt->buf + cvt->len_cvt); \ type *dst = (type *) (cvt->buf + (cvt->len_cvt * 2)); \ for (i = cvt->len_cvt / (sizeof (type) * 6); i; --i) { \ @@ -1008,7 +1016,7 @@ break; } - #undef mul2_chansix +#undef mul2_chansix cvt->len_cvt *= 2; if (cvt->filters[++cvt->filter_index]) { @@ -1026,7 +1034,7 @@ fprintf(stderr, "Converting audio rate / 2 (mono)\n"); #endif - #define div2_mono(type) { \ +#define div2_mono(type) { \ const type *src = (const type *) cvt->buf; \ type *dst = (type *) cvt->buf; \ for (i = cvt->len_cvt / (sizeof (type) * 2); i; --i) { \ @@ -1048,7 +1056,7 @@ break; } - #undef div2_mono +#undef div2_mono cvt->len_cvt /= 2; if (cvt->filters[++cvt->filter_index]) { @@ -1067,7 +1075,7 @@ fprintf(stderr, "Converting audio rate / 2 (stereo)\n"); #endif - #define div2_stereo(type) { \ +#define div2_stereo(type) { \ const type *src = (const type *) cvt->buf; \ type *dst = (type *) cvt->buf; \ for (i = cvt->len_cvt / (sizeof (type) * 4); i; --i) { \ @@ -1090,7 +1098,7 @@ break; } - #undef div2_stereo +#undef div2_stereo cvt->len_cvt /= 2; if (cvt->filters[++cvt->filter_index]) { @@ -1109,7 +1117,7 @@ fprintf(stderr, "Converting audio rate / 2 (quad)\n"); #endif - #define div2_quad(type) { \ +#define div2_quad(type) { \ const type *src = (const type *) cvt->buf; \ type *dst = (type *) cvt->buf; \ for (i = cvt->len_cvt / (sizeof (type) * 8); i; --i) { \ @@ -1134,7 +1142,7 @@ break; } - #undef div2_quad +#undef div2_quad cvt->len_cvt /= 2; if (cvt->filters[++cvt->filter_index]) { @@ -1152,7 +1160,7 @@ fprintf(stderr, "Converting audio rate / 2 (six channels)\n"); #endif - #define div2_chansix(type) { \ +#define div2_chansix(type) { \ const type *src = (const type *) cvt->buf; \ type *dst = (type *) cvt->buf; \ for (i = cvt->len_cvt / (sizeof (type) * 12); i; --i) { \ @@ -1179,7 +1187,7 @@ break; } - #undef div_chansix +#undef div_chansix cvt->len_cvt /= 2; if (cvt->filters[++cvt->filter_index]) { @@ -1309,7 +1317,7 @@ * processor, platform, compiler, or library here. */ - return NULL; /* no specialized converter code available. */ + return NULL; /* no specialized converter code available. */ } @@ -1340,7 +1348,7 @@ } if (filter == NULL) { - return -1; /* Still no matching converter?! */ + return -1; /* Still no matching converter?! */ } } @@ -1354,10 +1362,10 @@ cvt->len_ratio /= (src_bitsize / dst_bitsize); } - return 1; /* added a converter. */ + return 1; /* added a converter. */ } - return 0; /* no conversion necessary. */ + return 0; /* no conversion necessary. */ } @@ -1379,11 +1387,10 @@ if ((SDL_AUDIO_BITSIZE(dst_fmt) > 16) && (!SDL_AUDIO_ISSIGNED(dst_fmt))) { return -1; } - - #ifdef DEBUG_CONVERT +#ifdef DEBUG_CONVERT printf("Build format %04x->%04x, channels %u->%u, rate %d->%d\n", - src_fmt, dst_fmt, src_channels, dst_channels, src_rate, dst_rate); - #endif + src_fmt, dst_fmt, src_channels, dst_channels, src_rate, dst_rate); +#endif /* Start off with no conversion necessary */ @@ -1397,7 +1404,7 @@ /* Convert data types, if necessary. Updates (cvt). */ if (SDL_BuildAudioTypeCVT(cvt, src_fmt, dst_fmt) == -1) - return -1; /* shouldn't happen, but just in case... */ + return -1; /* shouldn't happen, but just in case... */ /* Channel conversion */ if (src_channels != dst_channels) {