|
|
@@ -1,7 +1,6 @@
|
|
|
-/* DO NOT EDIT! This file is generated by sdlgenaudiocvt.pl */
|
|
|
/*
|
|
|
Simple DirectMedia Layer
|
|
|
- Copyright (C) 1997-2016 Sam Lantinga <[email protected]>
|
|
|
+ Copyright (C) 1997-2017 Sam Lantinga <[email protected]>
|
|
|
|
|
|
This software is provided 'as-is', without any express or implied
|
|
|
warranty. In no event will the authors be held liable for any damages
|
|
|
@@ -23,15993 +22,798 @@
|
|
|
#include "../SDL_internal.h"
|
|
|
#include "SDL_audio.h"
|
|
|
#include "SDL_audio_c.h"
|
|
|
+#include "SDL_cpuinfo.h"
|
|
|
+#include "SDL_assert.h"
|
|
|
|
|
|
-#ifndef DEBUG_CONVERT
|
|
|
-#define DEBUG_CONVERT 0
|
|
|
-#endif
|
|
|
-
|
|
|
+/* !!! FIXME: write NEON code. */
|
|
|
+#define HAVE_NEON_INTRINSICS 0
|
|
|
|
|
|
-/* If you can guarantee your data and need space, you can eliminate code... */
|
|
|
-
|
|
|
-/* Just build the arbitrary resamplers if you're saving code space. */
|
|
|
-#ifndef LESS_RESAMPLERS
|
|
|
-#define LESS_RESAMPLERS 0
|
|
|
+#ifdef __SSE2__
|
|
|
+#define HAVE_SSE2_INTRINSICS 1
|
|
|
#endif
|
|
|
|
|
|
-/* Don't build any resamplers if you're REALLY saving code space. */
|
|
|
-#ifndef NO_RESAMPLERS
|
|
|
-#define NO_RESAMPLERS 0
|
|
|
+#if defined(__x86_64__) && HAVE_SSE2_INTRINSICS
|
|
|
+#define NEED_SCALAR_CONVERTER_FALLBACKS 0 /* x86_64 guarantees SSE2. */
|
|
|
+#elif __MACOSX__ && HAVE_SSE2_INTRINSICS
|
|
|
+#define NEED_SCALAR_CONVERTER_FALLBACKS 0 /* Mac OS X/Intel guarantees SSE2. */
|
|
|
+#elif defined(__ARM_ARCH) && (__ARM_ARCH >= 8) && HAVE_NEON_INTRINSICS
|
|
|
+#define NEED_SCALAR_CONVERTER_FALLBACKS 0 /* ARMv8+ promise NEON. */
|
|
|
+#elif defined(__APPLE__) && defined(__ARM_ARCH) && (__ARM_ARCH >= 7) && HAVE_NEON_INTRINSICS
|
|
|
+#define NEED_SCALAR_CONVERTER_FALLBACKS 0 /* All Apple ARMv7 chips promise NEON support. */
|
|
|
#endif
|
|
|
|
|
|
-/* Don't build any type converters if you're saving code space. */
|
|
|
-#ifndef NO_CONVERTERS
|
|
|
-#define NO_CONVERTERS 0
|
|
|
+/* Set to zero if platform is guaranteed to use a SIMD codepath here. */
|
|
|
+#ifndef NEED_SCALAR_CONVERTER_FALLBACKS
|
|
|
+#define NEED_SCALAR_CONVERTER_FALLBACKS 1
|
|
|
#endif
|
|
|
|
|
|
+/* Function pointers set to a CPU-specific implementation. */
|
|
|
+SDL_AudioFilter SDL_Convert_S8_to_F32 = NULL;
|
|
|
+SDL_AudioFilter SDL_Convert_U8_to_F32 = NULL;
|
|
|
+SDL_AudioFilter SDL_Convert_S16_to_F32 = NULL;
|
|
|
+SDL_AudioFilter SDL_Convert_U16_to_F32 = NULL;
|
|
|
+SDL_AudioFilter SDL_Convert_S32_to_F32 = NULL;
|
|
|
+SDL_AudioFilter SDL_Convert_F32_to_S8 = NULL;
|
|
|
+SDL_AudioFilter SDL_Convert_F32_to_U8 = NULL;
|
|
|
+SDL_AudioFilter SDL_Convert_F32_to_S16 = NULL;
|
|
|
+SDL_AudioFilter SDL_Convert_F32_to_U16 = NULL;
|
|
|
+SDL_AudioFilter SDL_Convert_F32_to_S32 = NULL;
|
|
|
|
|
|
-/* *INDENT-OFF* */
|
|
|
|
|
|
-#define DIVBY127 0.0078740157480315f
|
|
|
-#define DIVBY32767 3.05185094759972e-05f
|
|
|
-#define DIVBY2147483647 4.6566128752458e-10f
|
|
|
+#define DIVBY128 0.0078125f
|
|
|
+#define DIVBY32768 0.000030517578125f
|
|
|
+#define DIVBY2147483648 0.00000000046566128730773926
|
|
|
|
|
|
-#if !NO_CONVERTERS
|
|
|
|
|
|
+#if NEED_SCALAR_CONVERTER_FALLBACKS
|
|
|
static void SDLCALL
|
|
|
-SDL_Convert_U8_to_S8(SDL_AudioCVT * cvt, SDL_AudioFormat format)
|
|
|
+SDL_Convert_S8_to_F32_Scalar(SDL_AudioCVT *cvt, SDL_AudioFormat format)
|
|
|
{
|
|
|
+ const Sint8 *src = ((const Sint8 *) (cvt->buf + cvt->len_cvt)) - 1;
|
|
|
+ float *dst = ((float *) (cvt->buf + cvt->len_cvt * 4)) - 1;
|
|
|
int i;
|
|
|
- const Uint8 *src;
|
|
|
- Sint8 *dst;
|
|
|
|
|
|
-#if DEBUG_CONVERT
|
|
|
- fprintf(stderr, "Converting AUDIO_U8 to AUDIO_S8.\n");
|
|
|
-#endif
|
|
|
+ LOG_DEBUG_CONVERT("AUDIO_S8", "AUDIO_F32");
|
|
|
|
|
|
- src = (const Uint8 *) cvt->buf;
|
|
|
- dst = (Sint8 *) cvt->buf;
|
|
|
- for (i = cvt->len_cvt / sizeof (Uint8); i; --i, ++src, ++dst) {
|
|
|
- const Sint8 val = ((*src) ^ 0x80);
|
|
|
- *dst = ((Sint8) val);
|
|
|
+ for (i = cvt->len_cvt; i; --i, --src, --dst) {
|
|
|
+ *dst = ((float) *src) * DIVBY128;
|
|
|
}
|
|
|
|
|
|
+ cvt->len_cvt *= 4;
|
|
|
if (cvt->filters[++cvt->filter_index]) {
|
|
|
- cvt->filters[cvt->filter_index] (cvt, AUDIO_S8);
|
|
|
+ cvt->filters[cvt->filter_index](cvt, AUDIO_F32SYS);
|
|
|
}
|
|
|
}
|
|
|
|
|
|
static void SDLCALL
|
|
|
-SDL_Convert_U8_to_U16LSB(SDL_AudioCVT * cvt, SDL_AudioFormat format)
|
|
|
+SDL_Convert_U8_to_F32_Scalar(SDL_AudioCVT *cvt, SDL_AudioFormat format)
|
|
|
{
|
|
|
+ const Uint8 *src = ((const Uint8 *) (cvt->buf + cvt->len_cvt)) - 1;
|
|
|
+ float *dst = ((float *) (cvt->buf + cvt->len_cvt * 4)) - 1;
|
|
|
int i;
|
|
|
- const Uint8 *src;
|
|
|
- Uint16 *dst;
|
|
|
|
|
|
-#if DEBUG_CONVERT
|
|
|
- fprintf(stderr, "Converting AUDIO_U8 to AUDIO_U16LSB.\n");
|
|
|
-#endif
|
|
|
+ LOG_DEBUG_CONVERT("AUDIO_U8", "AUDIO_F32");
|
|
|
|
|
|
- src = ((const Uint8 *) (cvt->buf + cvt->len_cvt)) - 1;
|
|
|
- dst = ((Uint16 *) (cvt->buf + cvt->len_cvt * 2)) - 1;
|
|
|
- for (i = cvt->len_cvt / sizeof (Uint8); i; --i, --src, --dst) {
|
|
|
- const Uint16 val = (((Uint16) *src) << 8);
|
|
|
- *dst = SDL_SwapLE16(val);
|
|
|
+ for (i = cvt->len_cvt; i; --i, --src, --dst) {
|
|
|
+ *dst = (((float) *src) * DIVBY128) - 1.0f;
|
|
|
}
|
|
|
|
|
|
- cvt->len_cvt *= 2;
|
|
|
+ cvt->len_cvt *= 4;
|
|
|
if (cvt->filters[++cvt->filter_index]) {
|
|
|
- cvt->filters[cvt->filter_index] (cvt, AUDIO_U16LSB);
|
|
|
+ cvt->filters[cvt->filter_index](cvt, AUDIO_F32SYS);
|
|
|
}
|
|
|
}
|
|
|
|
|
|
static void SDLCALL
|
|
|
-SDL_Convert_U8_to_S16LSB(SDL_AudioCVT * cvt, SDL_AudioFormat format)
|
|
|
+SDL_Convert_S16_to_F32_Scalar(SDL_AudioCVT *cvt, SDL_AudioFormat format)
|
|
|
{
|
|
|
+ const Sint16 *src = ((const Sint16 *) (cvt->buf + cvt->len_cvt)) - 1;
|
|
|
+ float *dst = ((float *) (cvt->buf + cvt->len_cvt * 2)) - 1;
|
|
|
int i;
|
|
|
- const Uint8 *src;
|
|
|
- Sint16 *dst;
|
|
|
|
|
|
-#if DEBUG_CONVERT
|
|
|
- fprintf(stderr, "Converting AUDIO_U8 to AUDIO_S16LSB.\n");
|
|
|
-#endif
|
|
|
+ LOG_DEBUG_CONVERT("AUDIO_S16", "AUDIO_F32");
|
|
|
|
|
|
- src = ((const Uint8 *) (cvt->buf + cvt->len_cvt)) - 1;
|
|
|
- dst = ((Sint16 *) (cvt->buf + cvt->len_cvt * 2)) - 1;
|
|
|
- for (i = cvt->len_cvt / sizeof (Uint8); i; --i, --src, --dst) {
|
|
|
- const Sint16 val = (((Sint16) ((*src) ^ 0x80)) << 8);
|
|
|
- *dst = ((Sint16) SDL_SwapLE16(val));
|
|
|
+ for (i = cvt->len_cvt / sizeof (Sint16); i; --i, --src, --dst) {
|
|
|
+ *dst = ((float) *src) * DIVBY32768;
|
|
|
}
|
|
|
|
|
|
cvt->len_cvt *= 2;
|
|
|
if (cvt->filters[++cvt->filter_index]) {
|
|
|
- cvt->filters[cvt->filter_index] (cvt, AUDIO_S16LSB);
|
|
|
+ cvt->filters[cvt->filter_index](cvt, AUDIO_F32SYS);
|
|
|
}
|
|
|
}
|
|
|
|
|
|
static void SDLCALL
|
|
|
-SDL_Convert_U8_to_U16MSB(SDL_AudioCVT * cvt, SDL_AudioFormat format)
|
|
|
+SDL_Convert_U16_to_F32_Scalar(SDL_AudioCVT *cvt, SDL_AudioFormat format)
|
|
|
{
|
|
|
+ const Uint16 *src = ((const Uint16 *) (cvt->buf + cvt->len_cvt)) - 1;
|
|
|
+ float *dst = ((float *) (cvt->buf + cvt->len_cvt * 2)) - 1;
|
|
|
int i;
|
|
|
- const Uint8 *src;
|
|
|
- Uint16 *dst;
|
|
|
|
|
|
-#if DEBUG_CONVERT
|
|
|
- fprintf(stderr, "Converting AUDIO_U8 to AUDIO_U16MSB.\n");
|
|
|
-#endif
|
|
|
+ LOG_DEBUG_CONVERT("AUDIO_U16", "AUDIO_F32");
|
|
|
|
|
|
- src = ((const Uint8 *) (cvt->buf + cvt->len_cvt)) - 1;
|
|
|
- dst = ((Uint16 *) (cvt->buf + cvt->len_cvt * 2)) - 1;
|
|
|
- for (i = cvt->len_cvt / sizeof (Uint8); i; --i, --src, --dst) {
|
|
|
- const Uint16 val = (((Uint16) *src) << 8);
|
|
|
- *dst = SDL_SwapBE16(val);
|
|
|
+ for (i = cvt->len_cvt / sizeof (Uint16); i; --i, --src, --dst) {
|
|
|
+ *dst = (((float) *src) * DIVBY32768) - 1.0f;
|
|
|
}
|
|
|
|
|
|
cvt->len_cvt *= 2;
|
|
|
if (cvt->filters[++cvt->filter_index]) {
|
|
|
- cvt->filters[cvt->filter_index] (cvt, AUDIO_U16MSB);
|
|
|
+ cvt->filters[cvt->filter_index](cvt, AUDIO_F32SYS);
|
|
|
}
|
|
|
}
|
|
|
|
|
|
static void SDLCALL
|
|
|
-SDL_Convert_U8_to_S16MSB(SDL_AudioCVT * cvt, SDL_AudioFormat format)
|
|
|
+SDL_Convert_S32_to_F32_Scalar(SDL_AudioCVT *cvt, SDL_AudioFormat format)
|
|
|
{
|
|
|
+ const Sint32 *src = (const Sint32 *) cvt->buf;
|
|
|
+ float *dst = (float *) cvt->buf;
|
|
|
int i;
|
|
|
- const Uint8 *src;
|
|
|
- Sint16 *dst;
|
|
|
|
|
|
-#if DEBUG_CONVERT
|
|
|
- fprintf(stderr, "Converting AUDIO_U8 to AUDIO_S16MSB.\n");
|
|
|
-#endif
|
|
|
+ LOG_DEBUG_CONVERT("AUDIO_S32", "AUDIO_F32");
|
|
|
|
|
|
- src = ((const Uint8 *) (cvt->buf + cvt->len_cvt)) - 1;
|
|
|
- dst = ((Sint16 *) (cvt->buf + cvt->len_cvt * 2)) - 1;
|
|
|
- for (i = cvt->len_cvt / sizeof (Uint8); i; --i, --src, --dst) {
|
|
|
- const Sint16 val = (((Sint16) ((*src) ^ 0x80)) << 8);
|
|
|
- *dst = ((Sint16) SDL_SwapBE16(val));
|
|
|
+ for (i = cvt->len_cvt / sizeof (Sint32); i; --i, ++src, ++dst) {
|
|
|
+ *dst = (float) (((double) *src) * DIVBY2147483648);
|
|
|
}
|
|
|
|
|
|
- cvt->len_cvt *= 2;
|
|
|
if (cvt->filters[++cvt->filter_index]) {
|
|
|
- cvt->filters[cvt->filter_index] (cvt, AUDIO_S16MSB);
|
|
|
+ cvt->filters[cvt->filter_index](cvt, AUDIO_F32SYS);
|
|
|
}
|
|
|
}
|
|
|
|
|
|
static void SDLCALL
|
|
|
-SDL_Convert_U8_to_S32LSB(SDL_AudioCVT * cvt, SDL_AudioFormat format)
|
|
|
+SDL_Convert_F32_to_S8_Scalar(SDL_AudioCVT *cvt, SDL_AudioFormat format)
|
|
|
{
|
|
|
+ const float *src = (const float *) cvt->buf;
|
|
|
+ Sint8 *dst = (Sint8 *) cvt->buf;
|
|
|
int i;
|
|
|
- const Uint8 *src;
|
|
|
- Sint32 *dst;
|
|
|
|
|
|
-#if DEBUG_CONVERT
|
|
|
- fprintf(stderr, "Converting AUDIO_U8 to AUDIO_S32LSB.\n");
|
|
|
-#endif
|
|
|
+ LOG_DEBUG_CONVERT("AUDIO_F32", "AUDIO_S8");
|
|
|
|
|
|
- src = ((const Uint8 *) (cvt->buf + cvt->len_cvt)) - 1;
|
|
|
- dst = ((Sint32 *) (cvt->buf + cvt->len_cvt * 4)) - 1;
|
|
|
- for (i = cvt->len_cvt / sizeof (Uint8); i; --i, --src, --dst) {
|
|
|
- const Sint32 val = (((Sint32) ((*src) ^ 0x80)) << 24);
|
|
|
- *dst = ((Sint32) SDL_SwapLE32(val));
|
|
|
+ for (i = cvt->len_cvt / sizeof (float); i; --i, ++src, ++dst) {
|
|
|
+ const float sample = *src;
|
|
|
+ if (sample > 1.0f) {
|
|
|
+ *dst = 127;
|
|
|
+ } else if (sample < -1.0f) {
|
|
|
+ *dst = -127;
|
|
|
+ } else {
|
|
|
+ *dst = (Sint8)(sample * 127.0f);
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
- cvt->len_cvt *= 4;
|
|
|
+ cvt->len_cvt /= 4;
|
|
|
if (cvt->filters[++cvt->filter_index]) {
|
|
|
- cvt->filters[cvt->filter_index] (cvt, AUDIO_S32LSB);
|
|
|
+ cvt->filters[cvt->filter_index](cvt, AUDIO_S8);
|
|
|
}
|
|
|
}
|
|
|
|
|
|
static void SDLCALL
|
|
|
-SDL_Convert_U8_to_S32MSB(SDL_AudioCVT * cvt, SDL_AudioFormat format)
|
|
|
+SDL_Convert_F32_to_U8_Scalar(SDL_AudioCVT *cvt, SDL_AudioFormat format)
|
|
|
{
|
|
|
+ const float *src = (const float *) cvt->buf;
|
|
|
+ Uint8 *dst = (Uint8 *) cvt->buf;
|
|
|
int i;
|
|
|
- const Uint8 *src;
|
|
|
- Sint32 *dst;
|
|
|
|
|
|
-#if DEBUG_CONVERT
|
|
|
- fprintf(stderr, "Converting AUDIO_U8 to AUDIO_S32MSB.\n");
|
|
|
-#endif
|
|
|
+ LOG_DEBUG_CONVERT("AUDIO_F32", "AUDIO_U8");
|
|
|
|
|
|
- src = ((const Uint8 *) (cvt->buf + cvt->len_cvt)) - 1;
|
|
|
- dst = ((Sint32 *) (cvt->buf + cvt->len_cvt * 4)) - 1;
|
|
|
- for (i = cvt->len_cvt / sizeof (Uint8); i; --i, --src, --dst) {
|
|
|
- const Sint32 val = (((Sint32) ((*src) ^ 0x80)) << 24);
|
|
|
- *dst = ((Sint32) SDL_SwapBE32(val));
|
|
|
+ for (i = cvt->len_cvt / sizeof (float); i; --i, ++src, ++dst) {
|
|
|
+ const float sample = *src;
|
|
|
+ if (sample > 1.0f) {
|
|
|
+ *dst = 255;
|
|
|
+ } else if (sample < -1.0f) {
|
|
|
+ *dst = 0;
|
|
|
+ } else {
|
|
|
+ *dst = (Uint8)((sample + 1.0f) * 127.0f);
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
- cvt->len_cvt *= 4;
|
|
|
+ cvt->len_cvt /= 4;
|
|
|
if (cvt->filters[++cvt->filter_index]) {
|
|
|
- cvt->filters[cvt->filter_index] (cvt, AUDIO_S32MSB);
|
|
|
+ cvt->filters[cvt->filter_index](cvt, AUDIO_U8);
|
|
|
}
|
|
|
}
|
|
|
|
|
|
static void SDLCALL
|
|
|
-SDL_Convert_U8_to_F32LSB(SDL_AudioCVT * cvt, SDL_AudioFormat format)
|
|
|
+SDL_Convert_F32_to_S16_Scalar(SDL_AudioCVT *cvt, SDL_AudioFormat format)
|
|
|
{
|
|
|
+ const float *src = (const float *) cvt->buf;
|
|
|
+ Sint16 *dst = (Sint16 *) cvt->buf;
|
|
|
int i;
|
|
|
- const Uint8 *src;
|
|
|
- float *dst;
|
|
|
|
|
|
-#if DEBUG_CONVERT
|
|
|
- fprintf(stderr, "Converting AUDIO_U8 to AUDIO_F32LSB.\n");
|
|
|
-#endif
|
|
|
+ LOG_DEBUG_CONVERT("AUDIO_F32", "AUDIO_S16");
|
|
|
|
|
|
- src = ((const Uint8 *) (cvt->buf + cvt->len_cvt)) - 1;
|
|
|
- dst = ((float *) (cvt->buf + cvt->len_cvt * 4)) - 1;
|
|
|
- for (i = cvt->len_cvt / sizeof (Uint8); i; --i, --src, --dst) {
|
|
|
- const float val = ((((float) *src) * DIVBY127) - 1.0f);
|
|
|
- *dst = SDL_SwapFloatLE(val);
|
|
|
+ for (i = cvt->len_cvt / sizeof (float); i; --i, ++src, ++dst) {
|
|
|
+ const float sample = *src;
|
|
|
+ if (sample > 1.0f) {
|
|
|
+ *dst = 32767;
|
|
|
+ } else if (sample < -1.0f) {
|
|
|
+ *dst = -32767;
|
|
|
+ } else {
|
|
|
+ *dst = (Sint16)(sample * 32767.0f);
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
- cvt->len_cvt *= 4;
|
|
|
+ cvt->len_cvt /= 2;
|
|
|
if (cvt->filters[++cvt->filter_index]) {
|
|
|
- cvt->filters[cvt->filter_index] (cvt, AUDIO_F32LSB);
|
|
|
+ cvt->filters[cvt->filter_index](cvt, AUDIO_S16SYS);
|
|
|
}
|
|
|
}
|
|
|
|
|
|
static void SDLCALL
|
|
|
-SDL_Convert_U8_to_F32MSB(SDL_AudioCVT * cvt, SDL_AudioFormat format)
|
|
|
+SDL_Convert_F32_to_U16_Scalar(SDL_AudioCVT *cvt, SDL_AudioFormat format)
|
|
|
{
|
|
|
+ const float *src = (const float *) cvt->buf;
|
|
|
+ Uint16 *dst = (Uint16 *) cvt->buf;
|
|
|
int i;
|
|
|
- const Uint8 *src;
|
|
|
- float *dst;
|
|
|
|
|
|
-#if DEBUG_CONVERT
|
|
|
- fprintf(stderr, "Converting AUDIO_U8 to AUDIO_F32MSB.\n");
|
|
|
-#endif
|
|
|
+ LOG_DEBUG_CONVERT("AUDIO_F32", "AUDIO_U16");
|
|
|
|
|
|
- src = ((const Uint8 *) (cvt->buf + cvt->len_cvt)) - 1;
|
|
|
- dst = ((float *) (cvt->buf + cvt->len_cvt * 4)) - 1;
|
|
|
- for (i = cvt->len_cvt / sizeof (Uint8); i; --i, --src, --dst) {
|
|
|
- const float val = ((((float) *src) * DIVBY127) - 1.0f);
|
|
|
- *dst = SDL_SwapFloatBE(val);
|
|
|
+ for (i = cvt->len_cvt / sizeof (float); i; --i, ++src, ++dst) {
|
|
|
+ const float sample = *src;
|
|
|
+ if (sample > 1.0f) {
|
|
|
+ *dst = 65534;
|
|
|
+ } else if (sample < -1.0f) {
|
|
|
+ *dst = 0;
|
|
|
+ } else {
|
|
|
+ *dst = (Uint16)((sample + 1.0f) * 32767.0f);
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
- cvt->len_cvt *= 4;
|
|
|
+ cvt->len_cvt /= 2;
|
|
|
if (cvt->filters[++cvt->filter_index]) {
|
|
|
- cvt->filters[cvt->filter_index] (cvt, AUDIO_F32MSB);
|
|
|
+ cvt->filters[cvt->filter_index](cvt, AUDIO_U16SYS);
|
|
|
}
|
|
|
}
|
|
|
|
|
|
static void SDLCALL
|
|
|
-SDL_Convert_S8_to_U8(SDL_AudioCVT * cvt, SDL_AudioFormat format)
|
|
|
+SDL_Convert_F32_to_S32_Scalar(SDL_AudioCVT *cvt, SDL_AudioFormat format)
|
|
|
{
|
|
|
+ const float *src = (const float *) cvt->buf;
|
|
|
+ Sint32 *dst = (Sint32 *) cvt->buf;
|
|
|
int i;
|
|
|
- const Uint8 *src;
|
|
|
- Uint8 *dst;
|
|
|
|
|
|
-#if DEBUG_CONVERT
|
|
|
- fprintf(stderr, "Converting AUDIO_S8 to AUDIO_U8.\n");
|
|
|
-#endif
|
|
|
+ LOG_DEBUG_CONVERT("AUDIO_F32", "AUDIO_S32");
|
|
|
|
|
|
- src = (const Uint8 *) cvt->buf;
|
|
|
- dst = (Uint8 *) cvt->buf;
|
|
|
- for (i = cvt->len_cvt / sizeof (Uint8); i; --i, ++src, ++dst) {
|
|
|
- const Uint8 val = ((((Sint8) *src)) ^ 0x80);
|
|
|
- *dst = val;
|
|
|
+ for (i = cvt->len_cvt / sizeof (float); i; --i, ++src, ++dst) {
|
|
|
+ const float sample = *src;
|
|
|
+ if (sample > 1.0f) {
|
|
|
+ *dst = 2147483647;
|
|
|
+ } else if (sample < -1.0f) {
|
|
|
+ *dst = -2147483647;
|
|
|
+ } else {
|
|
|
+ *dst = (Sint32)((double)sample * 2147483647.0);
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
if (cvt->filters[++cvt->filter_index]) {
|
|
|
- cvt->filters[cvt->filter_index] (cvt, AUDIO_U8);
|
|
|
+ cvt->filters[cvt->filter_index](cvt, AUDIO_S32SYS);
|
|
|
}
|
|
|
}
|
|
|
-
|
|
|
-static void SDLCALL
|
|
|
-SDL_Convert_S8_to_U16LSB(SDL_AudioCVT * cvt, SDL_AudioFormat format)
|
|
|
-{
|
|
|
- int i;
|
|
|
- const Uint8 *src;
|
|
|
- Uint16 *dst;
|
|
|
-
|
|
|
-#if DEBUG_CONVERT
|
|
|
- fprintf(stderr, "Converting AUDIO_S8 to AUDIO_U16LSB.\n");
|
|
|
#endif
|
|
|
|
|
|
- src = ((const Uint8 *) (cvt->buf + cvt->len_cvt)) - 1;
|
|
|
- dst = ((Uint16 *) (cvt->buf + cvt->len_cvt * 2)) - 1;
|
|
|
- for (i = cvt->len_cvt / sizeof (Uint8); i; --i, --src, --dst) {
|
|
|
- const Uint16 val = (((Uint16) ((((Sint8) *src)) ^ 0x80)) << 8);
|
|
|
- *dst = SDL_SwapLE16(val);
|
|
|
- }
|
|
|
-
|
|
|
- cvt->len_cvt *= 2;
|
|
|
- if (cvt->filters[++cvt->filter_index]) {
|
|
|
- cvt->filters[cvt->filter_index] (cvt, AUDIO_U16LSB);
|
|
|
- }
|
|
|
-}
|
|
|
|
|
|
+#if HAVE_SSE2_INTRINSICS
|
|
|
static void SDLCALL
|
|
|
-SDL_Convert_S8_to_S16LSB(SDL_AudioCVT * cvt, SDL_AudioFormat format)
|
|
|
+SDL_Convert_S8_to_F32_SSE2(SDL_AudioCVT *cvt, SDL_AudioFormat format)
|
|
|
{
|
|
|
+ const Sint8 *src = ((const Sint8 *) (cvt->buf + cvt->len_cvt)) - 1;
|
|
|
+ float *dst = ((float *) (cvt->buf + cvt->len_cvt * 4)) - 1;
|
|
|
int i;
|
|
|
- const Uint8 *src;
|
|
|
- Sint16 *dst;
|
|
|
-
|
|
|
-#if DEBUG_CONVERT
|
|
|
- fprintf(stderr, "Converting AUDIO_S8 to AUDIO_S16LSB.\n");
|
|
|
-#endif
|
|
|
|
|
|
- src = ((const Uint8 *) (cvt->buf + cvt->len_cvt)) - 1;
|
|
|
- dst = ((Sint16 *) (cvt->buf + cvt->len_cvt * 2)) - 1;
|
|
|
- for (i = cvt->len_cvt / sizeof (Uint8); i; --i, --src, --dst) {
|
|
|
- const Sint16 val = (((Sint16) ((Sint8) *src)) << 8);
|
|
|
- *dst = ((Sint16) SDL_SwapLE16(val));
|
|
|
- }
|
|
|
+ LOG_DEBUG_CONVERT("AUDIO_S8", "AUDIO_F32 (using SSE2)");
|
|
|
|
|
|
- cvt->len_cvt *= 2;
|
|
|
- if (cvt->filters[++cvt->filter_index]) {
|
|
|
- cvt->filters[cvt->filter_index] (cvt, AUDIO_S16LSB);
|
|
|
+ /* Get dst aligned to 16 bytes (since buffer is growing, we don't have to worry about overreading from src) */
|
|
|
+ for (i = cvt->len_cvt; i && (((size_t) (dst-15)) & 15); --i, --src, --dst) {
|
|
|
+ *dst = ((float) *src) * DIVBY128;
|
|
|
}
|
|
|
-}
|
|
|
-
|
|
|
-static void SDLCALL
|
|
|
-SDL_Convert_S8_to_U16MSB(SDL_AudioCVT * cvt, SDL_AudioFormat format)
|
|
|
-{
|
|
|
- int i;
|
|
|
- const Uint8 *src;
|
|
|
- Uint16 *dst;
|
|
|
|
|
|
-#if DEBUG_CONVERT
|
|
|
- fprintf(stderr, "Converting AUDIO_S8 to AUDIO_U16MSB.\n");
|
|
|
-#endif
|
|
|
+ src -= 15; dst -= 15; /* adjust to read SSE blocks from the start. */
|
|
|
+ SDL_assert(!i || ((((size_t) dst) & 15) == 0));
|
|
|
|
|
|
- src = ((const Uint8 *) (cvt->buf + cvt->len_cvt)) - 1;
|
|
|
- dst = ((Uint16 *) (cvt->buf + cvt->len_cvt * 2)) - 1;
|
|
|
- for (i = cvt->len_cvt / sizeof (Uint8); i; --i, --src, --dst) {
|
|
|
- const Uint16 val = (((Uint16) ((((Sint8) *src)) ^ 0x80)) << 8);
|
|
|
- *dst = SDL_SwapBE16(val);
|
|
|
- }
|
|
|
+ /* Make sure src is aligned too. */
|
|
|
+ if ((((size_t) src) & 15) == 0) {
|
|
|
+ /* Aligned! Do SSE blocks as long as we have 16 bytes available. */
|
|
|
+ const __m128i *mmsrc = (const __m128i *) src;
|
|
|
+ const __m128i zero = _mm_setzero_si128();
|
|
|
+ const __m128 divby128 = _mm_set1_ps(DIVBY128);
|
|
|
+ while (i >= 16) { /* 16 * 8-bit */
|
|
|
+ const __m128i bytes = _mm_load_si128(mmsrc); /* get 16 sint8 into an XMM register. */
|
|
|
+ /* treat as int16, shift left to clear every other sint16, then back right with sign-extend. Now sint16. */
|
|
|
+ const __m128i shorts1 = _mm_srai_epi16(_mm_slli_epi16(bytes, 8), 8);
|
|
|
+ /* right-shift-sign-extend gets us sint16 with the other set of values. */
|
|
|
+ const __m128i shorts2 = _mm_srai_epi16(bytes, 8);
|
|
|
+ /* unpack against zero to make these int32, shift to make them sign-extend, convert to float, multiply. Whew! */
|
|
|
+ const __m128 floats1 = _mm_mul_ps(_mm_cvtepi32_ps(_mm_srai_epi32(_mm_slli_epi32(_mm_unpacklo_epi16(shorts1, zero), 16), 16)), divby128);
|
|
|
+ const __m128 floats2 = _mm_mul_ps(_mm_cvtepi32_ps(_mm_srai_epi32(_mm_slli_epi32(_mm_unpacklo_epi16(shorts2, zero), 16), 16)), divby128);
|
|
|
+ const __m128 floats3 = _mm_mul_ps(_mm_cvtepi32_ps(_mm_srai_epi32(_mm_slli_epi32(_mm_unpackhi_epi16(shorts1, zero), 16), 16)), divby128);
|
|
|
+ const __m128 floats4 = _mm_mul_ps(_mm_cvtepi32_ps(_mm_srai_epi32(_mm_slli_epi32(_mm_unpackhi_epi16(shorts2, zero), 16), 16)), divby128);
|
|
|
+ /* Interleave back into correct order, store. */
|
|
|
+ _mm_store_ps(dst, _mm_unpacklo_ps(floats1, floats2));
|
|
|
+ _mm_store_ps(dst+4, _mm_unpackhi_ps(floats1, floats2));
|
|
|
+ _mm_store_ps(dst+8, _mm_unpacklo_ps(floats3, floats4));
|
|
|
+ _mm_store_ps(dst+12, _mm_unpackhi_ps(floats3, floats4));
|
|
|
+ i -= 16; mmsrc--; dst -= 16;
|
|
|
+ }
|
|
|
|
|
|
- cvt->len_cvt *= 2;
|
|
|
- if (cvt->filters[++cvt->filter_index]) {
|
|
|
- cvt->filters[cvt->filter_index] (cvt, AUDIO_U16MSB);
|
|
|
+ src = (const Sint8 *) mmsrc;
|
|
|
}
|
|
|
-}
|
|
|
-
|
|
|
-static void SDLCALL
|
|
|
-SDL_Convert_S8_to_S16MSB(SDL_AudioCVT * cvt, SDL_AudioFormat format)
|
|
|
-{
|
|
|
- int i;
|
|
|
- const Uint8 *src;
|
|
|
- Sint16 *dst;
|
|
|
|
|
|
-#if DEBUG_CONVERT
|
|
|
- fprintf(stderr, "Converting AUDIO_S8 to AUDIO_S16MSB.\n");
|
|
|
-#endif
|
|
|
+ src += 15; dst += 15; /* adjust for any scalar finishing. */
|
|
|
|
|
|
- src = ((const Uint8 *) (cvt->buf + cvt->len_cvt)) - 1;
|
|
|
- dst = ((Sint16 *) (cvt->buf + cvt->len_cvt * 2)) - 1;
|
|
|
- for (i = cvt->len_cvt / sizeof (Uint8); i; --i, --src, --dst) {
|
|
|
- const Sint16 val = (((Sint16) ((Sint8) *src)) << 8);
|
|
|
- *dst = ((Sint16) SDL_SwapBE16(val));
|
|
|
+ /* Finish off any leftovers with scalar operations. */
|
|
|
+ while (i) {
|
|
|
+ *dst = ((float) *src) * DIVBY128;
|
|
|
+ i--; src--; dst--;
|
|
|
}
|
|
|
|
|
|
- cvt->len_cvt *= 2;
|
|
|
+ cvt->len_cvt *= 4;
|
|
|
if (cvt->filters[++cvt->filter_index]) {
|
|
|
- cvt->filters[cvt->filter_index] (cvt, AUDIO_S16MSB);
|
|
|
+ cvt->filters[cvt->filter_index](cvt, AUDIO_F32SYS);
|
|
|
}
|
|
|
}
|
|
|
|
|
|
static void SDLCALL
|
|
|
-SDL_Convert_S8_to_S32LSB(SDL_AudioCVT * cvt, SDL_AudioFormat format)
|
|
|
+SDL_Convert_U8_to_F32_SSE2(SDL_AudioCVT *cvt, SDL_AudioFormat format)
|
|
|
{
|
|
|
+ const Uint8 *src = ((const Uint8 *) (cvt->buf + cvt->len_cvt)) - 1;
|
|
|
+ float *dst = ((float *) (cvt->buf + cvt->len_cvt * 4)) - 1;
|
|
|
int i;
|
|
|
- const Uint8 *src;
|
|
|
- Sint32 *dst;
|
|
|
|
|
|
-#if DEBUG_CONVERT
|
|
|
- fprintf(stderr, "Converting AUDIO_S8 to AUDIO_S32LSB.\n");
|
|
|
-#endif
|
|
|
-
|
|
|
- src = ((const Uint8 *) (cvt->buf + cvt->len_cvt)) - 1;
|
|
|
- dst = ((Sint32 *) (cvt->buf + cvt->len_cvt * 4)) - 1;
|
|
|
- for (i = cvt->len_cvt / sizeof (Uint8); i; --i, --src, --dst) {
|
|
|
- const Sint32 val = (((Sint32) ((Sint8) *src)) << 24);
|
|
|
- *dst = ((Sint32) SDL_SwapLE32(val));
|
|
|
- }
|
|
|
+ LOG_DEBUG_CONVERT("AUDIO_U8", "AUDIO_F32 (using SSE2)");
|
|
|
|
|
|
- cvt->len_cvt *= 4;
|
|
|
- if (cvt->filters[++cvt->filter_index]) {
|
|
|
- cvt->filters[cvt->filter_index] (cvt, AUDIO_S32LSB);
|
|
|
+ /* Get dst aligned to 16 bytes (since buffer is growing, we don't have to worry about overreading from src) */
|
|
|
+ for (i = cvt->len_cvt; i && (((size_t) (dst-15)) & 15); --i, --src, --dst) {
|
|
|
+ *dst = (((float) *src) * DIVBY128) - 1.0f;
|
|
|
}
|
|
|
-}
|
|
|
-
|
|
|
-static void SDLCALL
|
|
|
-SDL_Convert_S8_to_S32MSB(SDL_AudioCVT * cvt, SDL_AudioFormat format)
|
|
|
-{
|
|
|
- int i;
|
|
|
- const Uint8 *src;
|
|
|
- Sint32 *dst;
|
|
|
|
|
|
-#if DEBUG_CONVERT
|
|
|
- fprintf(stderr, "Converting AUDIO_S8 to AUDIO_S32MSB.\n");
|
|
|
-#endif
|
|
|
+ src -= 15; dst -= 15; /* adjust to read SSE blocks from the start. */
|
|
|
+ SDL_assert(!i || ((((size_t) dst) & 15) == 0));
|
|
|
|
|
|
- src = ((const Uint8 *) (cvt->buf + cvt->len_cvt)) - 1;
|
|
|
- dst = ((Sint32 *) (cvt->buf + cvt->len_cvt * 4)) - 1;
|
|
|
- for (i = cvt->len_cvt / sizeof (Uint8); i; --i, --src, --dst) {
|
|
|
- const Sint32 val = (((Sint32) ((Sint8) *src)) << 24);
|
|
|
- *dst = ((Sint32) SDL_SwapBE32(val));
|
|
|
- }
|
|
|
+ /* Make sure src is aligned too. */
|
|
|
+ if ((((size_t) src) & 15) == 0) {
|
|
|
+ /* Aligned! Do SSE blocks as long as we have 16 bytes available. */
|
|
|
+ const __m128i *mmsrc = (const __m128i *) src;
|
|
|
+ const __m128i zero = _mm_setzero_si128();
|
|
|
+ const __m128 divby128 = _mm_set1_ps(DIVBY128);
|
|
|
+ const __m128 minus1 = _mm_set1_ps(-1.0f);
|
|
|
+ while (i >= 16) { /* 16 * 8-bit */
|
|
|
+ const __m128i bytes = _mm_load_si128(mmsrc); /* get 16 uint8 into an XMM register. */
|
|
|
+ /* treat as int16, shift left to clear every other sint16, then back right with zero-extend. Now uint16. */
|
|
|
+ const __m128i shorts1 = _mm_srli_epi16(_mm_slli_epi16(bytes, 8), 8);
|
|
|
+ /* right-shift-zero-extend gets us uint16 with the other set of values. */
|
|
|
+ const __m128i shorts2 = _mm_srli_epi16(bytes, 8);
|
|
|
+ /* unpack against zero to make these int32, convert to float, multiply, add. Whew! */
|
|
|
+ /* Note that AVX2 can do floating point multiply+add in one instruction, fwiw. SSE2 cannot. */
|
|
|
+ const __m128 floats1 = _mm_add_ps(_mm_mul_ps(_mm_cvtepi32_ps(_mm_unpacklo_epi16(shorts1, zero)), divby128), minus1);
|
|
|
+ const __m128 floats2 = _mm_add_ps(_mm_mul_ps(_mm_cvtepi32_ps(_mm_unpacklo_epi16(shorts2, zero)), divby128), minus1);
|
|
|
+ const __m128 floats3 = _mm_add_ps(_mm_mul_ps(_mm_cvtepi32_ps(_mm_unpackhi_epi16(shorts1, zero)), divby128), minus1);
|
|
|
+ const __m128 floats4 = _mm_add_ps(_mm_mul_ps(_mm_cvtepi32_ps(_mm_unpackhi_epi16(shorts2, zero)), divby128), minus1);
|
|
|
+ /* Interleave back into correct order, store. */
|
|
|
+ _mm_store_ps(dst, _mm_unpacklo_ps(floats1, floats2));
|
|
|
+ _mm_store_ps(dst+4, _mm_unpackhi_ps(floats1, floats2));
|
|
|
+ _mm_store_ps(dst+8, _mm_unpacklo_ps(floats3, floats4));
|
|
|
+ _mm_store_ps(dst+12, _mm_unpackhi_ps(floats3, floats4));
|
|
|
+ i -= 16; mmsrc--; dst -= 16;
|
|
|
+ }
|
|
|
|
|
|
- cvt->len_cvt *= 4;
|
|
|
- if (cvt->filters[++cvt->filter_index]) {
|
|
|
- cvt->filters[cvt->filter_index] (cvt, AUDIO_S32MSB);
|
|
|
+ src = (const Uint8 *) mmsrc;
|
|
|
}
|
|
|
-}
|
|
|
-
|
|
|
-static void SDLCALL
|
|
|
-SDL_Convert_S8_to_F32LSB(SDL_AudioCVT * cvt, SDL_AudioFormat format)
|
|
|
-{
|
|
|
- int i;
|
|
|
- const Uint8 *src;
|
|
|
- float *dst;
|
|
|
|
|
|
-#if DEBUG_CONVERT
|
|
|
- fprintf(stderr, "Converting AUDIO_S8 to AUDIO_F32LSB.\n");
|
|
|
-#endif
|
|
|
+ src += 15; dst += 15; /* adjust for any scalar finishing. */
|
|
|
|
|
|
- src = ((const Uint8 *) (cvt->buf + cvt->len_cvt)) - 1;
|
|
|
- dst = ((float *) (cvt->buf + cvt->len_cvt * 4)) - 1;
|
|
|
- for (i = cvt->len_cvt / sizeof (Uint8); i; --i, --src, --dst) {
|
|
|
- const float val = (((float) ((Sint8) *src)) * DIVBY127);
|
|
|
- *dst = SDL_SwapFloatLE(val);
|
|
|
+ /* Finish off any leftovers with scalar operations. */
|
|
|
+ while (i) {
|
|
|
+ *dst = (((float) *src) * DIVBY128) - 1.0f;
|
|
|
+ i--; src--; dst--;
|
|
|
}
|
|
|
|
|
|
cvt->len_cvt *= 4;
|
|
|
if (cvt->filters[++cvt->filter_index]) {
|
|
|
- cvt->filters[cvt->filter_index] (cvt, AUDIO_F32LSB);
|
|
|
+ cvt->filters[cvt->filter_index](cvt, AUDIO_F32SYS);
|
|
|
}
|
|
|
}
|
|
|
|
|
|
static void SDLCALL
|
|
|
-SDL_Convert_S8_to_F32MSB(SDL_AudioCVT * cvt, SDL_AudioFormat format)
|
|
|
+SDL_Convert_S16_to_F32_SSE2(SDL_AudioCVT *cvt, SDL_AudioFormat format)
|
|
|
{
|
|
|
+ const Sint16 *src = ((const Sint16 *) (cvt->buf + cvt->len_cvt)) - 1;
|
|
|
+ float *dst = ((float *) (cvt->buf + cvt->len_cvt * 2)) - 1;
|
|
|
int i;
|
|
|
- const Uint8 *src;
|
|
|
- float *dst;
|
|
|
|
|
|
-#if DEBUG_CONVERT
|
|
|
- fprintf(stderr, "Converting AUDIO_S8 to AUDIO_F32MSB.\n");
|
|
|
-#endif
|
|
|
+ LOG_DEBUG_CONVERT("AUDIO_S16", "AUDIO_F32 (using SSE2)");
|
|
|
|
|
|
- src = ((const Uint8 *) (cvt->buf + cvt->len_cvt)) - 1;
|
|
|
- dst = ((float *) (cvt->buf + cvt->len_cvt * 4)) - 1;
|
|
|
- for (i = cvt->len_cvt / sizeof (Uint8); i; --i, --src, --dst) {
|
|
|
- const float val = (((float) ((Sint8) *src)) * DIVBY127);
|
|
|
- *dst = SDL_SwapFloatBE(val);
|
|
|
+ /* Get dst aligned to 16 bytes (since buffer is growing, we don't have to worry about overreading from src) */
|
|
|
+ for (i = cvt->len_cvt / sizeof (Sint16); i && (((size_t) (dst-7)) & 15); --i, --src, --dst) {
|
|
|
+ *dst = ((float) *src) * DIVBY32768;
|
|
|
}
|
|
|
|
|
|
- cvt->len_cvt *= 4;
|
|
|
- if (cvt->filters[++cvt->filter_index]) {
|
|
|
- cvt->filters[cvt->filter_index] (cvt, AUDIO_F32MSB);
|
|
|
- }
|
|
|
-}
|
|
|
+ src -= 7; dst -= 7; /* adjust to read SSE blocks from the start. */
|
|
|
+ SDL_assert(!i || ((((size_t) dst) & 15) == 0));
|
|
|
|
|
|
-static void SDLCALL
|
|
|
-SDL_Convert_U16LSB_to_U8(SDL_AudioCVT * cvt, SDL_AudioFormat format)
|
|
|
-{
|
|
|
- int i;
|
|
|
- const Uint16 *src;
|
|
|
- Uint8 *dst;
|
|
|
+ /* Make sure src is aligned too. */
|
|
|
+ if ((((size_t) src) & 15) == 0) {
|
|
|
+ /* Aligned! Do SSE blocks as long as we have 16 bytes available. */
|
|
|
+ const __m128 divby32768 = _mm_set1_ps(DIVBY32768);
|
|
|
+ while (i >= 8) { /* 8 * 16-bit */
|
|
|
+ const __m128i ints = _mm_load_si128((__m128i const *) src); /* get 8 sint16 into an XMM register. */
|
|
|
+ /* treat as int32, shift left to clear every other sint16, then back right with sign-extend. Now sint32. */
|
|
|
+ const __m128i a = _mm_srai_epi32(_mm_slli_epi32(ints, 16), 16);
|
|
|
+ /* right-shift-sign-extend gets us sint32 with the other set of values. */
|
|
|
+ const __m128i b = _mm_srai_epi32(ints, 16);
|
|
|
+ /* Interleave these back into the right order, convert to float, multiply, store. */
|
|
|
+ _mm_store_ps(dst, _mm_mul_ps(_mm_cvtepi32_ps(_mm_unpacklo_epi32(a, b)), divby32768));
|
|
|
+ _mm_store_ps(dst+4, _mm_mul_ps(_mm_cvtepi32_ps(_mm_unpackhi_epi32(a, b)), divby32768));
|
|
|
+ i -= 8; src -= 8; dst -= 8;
|
|
|
+ }
|
|
|
+ }
|
|
|
|
|
|
-#if DEBUG_CONVERT
|
|
|
- fprintf(stderr, "Converting AUDIO_U16LSB to AUDIO_U8.\n");
|
|
|
-#endif
|
|
|
+ src += 7; dst += 7; /* adjust for any scalar finishing. */
|
|
|
|
|
|
- src = (const Uint16 *) cvt->buf;
|
|
|
- dst = (Uint8 *) cvt->buf;
|
|
|
- for (i = cvt->len_cvt / sizeof (Uint16); i; --i, ++src, ++dst) {
|
|
|
- const Uint8 val = ((Uint8) (SDL_SwapLE16(*src) >> 8));
|
|
|
- *dst = val;
|
|
|
+ /* Finish off any leftovers with scalar operations. */
|
|
|
+ while (i) {
|
|
|
+ *dst = ((float) *src) * DIVBY32768;
|
|
|
+ i--; src--; dst--;
|
|
|
}
|
|
|
|
|
|
- cvt->len_cvt /= 2;
|
|
|
+ cvt->len_cvt *= 2;
|
|
|
if (cvt->filters[++cvt->filter_index]) {
|
|
|
- cvt->filters[cvt->filter_index] (cvt, AUDIO_U8);
|
|
|
+ cvt->filters[cvt->filter_index](cvt, AUDIO_F32SYS);
|
|
|
}
|
|
|
}
|
|
|
|
|
|
static void SDLCALL
|
|
|
-SDL_Convert_U16LSB_to_S8(SDL_AudioCVT * cvt, SDL_AudioFormat format)
|
|
|
+SDL_Convert_U16_to_F32_SSE2(SDL_AudioCVT *cvt, SDL_AudioFormat format)
|
|
|
{
|
|
|
+ const Uint16 *src = ((const Uint16 *) (cvt->buf + cvt->len_cvt)) - 1;
|
|
|
+ float *dst = ((float *) (cvt->buf + cvt->len_cvt * 2)) - 1;
|
|
|
int i;
|
|
|
- const Uint16 *src;
|
|
|
- Sint8 *dst;
|
|
|
|
|
|
-#if DEBUG_CONVERT
|
|
|
- fprintf(stderr, "Converting AUDIO_U16LSB to AUDIO_S8.\n");
|
|
|
-#endif
|
|
|
+ LOG_DEBUG_CONVERT("AUDIO_U16", "AUDIO_F32 (using SSE2)");
|
|
|
|
|
|
- src = (const Uint16 *) cvt->buf;
|
|
|
- dst = (Sint8 *) cvt->buf;
|
|
|
- for (i = cvt->len_cvt / sizeof (Uint16); i; --i, ++src, ++dst) {
|
|
|
- const Sint8 val = ((Sint8) (((SDL_SwapLE16(*src)) ^ 0x8000) >> 8));
|
|
|
- *dst = ((Sint8) val);
|
|
|
+ /* Get dst aligned to 16 bytes (since buffer is growing, we don't have to worry about overreading from src) */
|
|
|
+ for (i = cvt->len_cvt / sizeof (Sint16); i && (((size_t) (dst-7)) & 15); --i, --src, --dst) {
|
|
|
+ *dst = (((float) *src) * DIVBY32768) - 1.0f;
|
|
|
}
|
|
|
|
|
|
- cvt->len_cvt /= 2;
|
|
|
- if (cvt->filters[++cvt->filter_index]) {
|
|
|
- cvt->filters[cvt->filter_index] (cvt, AUDIO_S8);
|
|
|
- }
|
|
|
-}
|
|
|
+ src -= 7; dst -= 7; /* adjust to read SSE blocks from the start. */
|
|
|
+ SDL_assert(!i || ((((size_t) dst) & 15) == 0));
|
|
|
|
|
|
-static void SDLCALL
|
|
|
-SDL_Convert_U16LSB_to_S16LSB(SDL_AudioCVT * cvt, SDL_AudioFormat format)
|
|
|
-{
|
|
|
- int i;
|
|
|
- const Uint16 *src;
|
|
|
- Sint16 *dst;
|
|
|
+ /* Make sure src is aligned too. */
|
|
|
+ if ((((size_t) src) & 15) == 0) {
|
|
|
+ /* Aligned! Do SSE blocks as long as we have 16 bytes available. */
|
|
|
+ const __m128 divby32768 = _mm_set1_ps(DIVBY32768);
|
|
|
+ const __m128 minus1 = _mm_set1_ps(1.0f);
|
|
|
+ while (i >= 8) { /* 8 * 16-bit */
|
|
|
+ const __m128i ints = _mm_load_si128((__m128i const *) src); /* get 8 sint16 into an XMM register. */
|
|
|
+ /* treat as int32, shift left to clear every other sint16, then back right with zero-extend. Now sint32. */
|
|
|
+ const __m128i a = _mm_srli_epi32(_mm_slli_epi32(ints, 16), 16);
|
|
|
+ /* right-shift-sign-extend gets us sint32 with the other set of values. */
|
|
|
+ const __m128i b = _mm_srli_epi32(ints, 16);
|
|
|
+ /* Interleave these back into the right order, convert to float, multiply, store. */
|
|
|
+ _mm_store_ps(dst, _mm_add_ps(_mm_mul_ps(_mm_cvtepi32_ps(_mm_unpacklo_epi32(a, b)), divby32768), minus1));
|
|
|
+ _mm_store_ps(dst+4, _mm_add_ps(_mm_mul_ps(_mm_cvtepi32_ps(_mm_unpackhi_epi32(a, b)), divby32768), minus1));
|
|
|
+ i -= 8; src -= 8; dst -= 8;
|
|
|
+ }
|
|
|
+ }
|
|
|
|
|
|
-#if DEBUG_CONVERT
|
|
|
- fprintf(stderr, "Converting AUDIO_U16LSB to AUDIO_S16LSB.\n");
|
|
|
-#endif
|
|
|
+ src += 7; dst += 7; /* adjust for any scalar finishing. */
|
|
|
|
|
|
- src = (const Uint16 *) cvt->buf;
|
|
|
- dst = (Sint16 *) cvt->buf;
|
|
|
- for (i = cvt->len_cvt / sizeof (Uint16); i; --i, ++src, ++dst) {
|
|
|
- const Sint16 val = ((SDL_SwapLE16(*src)) ^ 0x8000);
|
|
|
- *dst = ((Sint16) SDL_SwapLE16(val));
|
|
|
+ /* Finish off any leftovers with scalar operations. */
|
|
|
+ while (i) {
|
|
|
+ *dst = (((float) *src) * DIVBY32768) - 1.0f;
|
|
|
+ i--; src--; dst--;
|
|
|
}
|
|
|
|
|
|
+ cvt->len_cvt *= 2;
|
|
|
if (cvt->filters[++cvt->filter_index]) {
|
|
|
- cvt->filters[cvt->filter_index] (cvt, AUDIO_S16LSB);
|
|
|
+ cvt->filters[cvt->filter_index](cvt, AUDIO_F32SYS);
|
|
|
}
|
|
|
}
|
|
|
|
|
|
static void SDLCALL
|
|
|
-SDL_Convert_U16LSB_to_U16MSB(SDL_AudioCVT * cvt, SDL_AudioFormat format)
|
|
|
+SDL_Convert_S32_to_F32_SSE2(SDL_AudioCVT *cvt, SDL_AudioFormat format)
|
|
|
{
|
|
|
+ const Sint32 *src = (const Sint32 *) cvt->buf;
|
|
|
+ float *dst = (float *) cvt->buf;
|
|
|
int i;
|
|
|
- const Uint16 *src;
|
|
|
- Uint16 *dst;
|
|
|
-
|
|
|
-#if DEBUG_CONVERT
|
|
|
- fprintf(stderr, "Converting AUDIO_U16LSB to AUDIO_U16MSB.\n");
|
|
|
-#endif
|
|
|
|
|
|
- src = (const Uint16 *) cvt->buf;
|
|
|
- dst = (Uint16 *) cvt->buf;
|
|
|
- for (i = cvt->len_cvt / sizeof (Uint16); i; --i, ++src, ++dst) {
|
|
|
- const Uint16 val = SDL_SwapLE16(*src);
|
|
|
- *dst = SDL_SwapBE16(val);
|
|
|
- }
|
|
|
+ LOG_DEBUG_CONVERT("AUDIO_S32", "AUDIO_F32 (using SSE2)");
|
|
|
|
|
|
- if (cvt->filters[++cvt->filter_index]) {
|
|
|
- cvt->filters[cvt->filter_index] (cvt, AUDIO_U16MSB);
|
|
|
+ /* Get dst aligned to 16 bytes */
|
|
|
+ for (i = cvt->len_cvt / sizeof (Sint32); i && (((size_t) dst) & 15); --i, ++src, ++dst) {
|
|
|
+ *dst = (float) (((double) *src) * DIVBY2147483648);
|
|
|
}
|
|
|
-}
|
|
|
|
|
|
-static void SDLCALL
|
|
|
-SDL_Convert_U16LSB_to_S16MSB(SDL_AudioCVT * cvt, SDL_AudioFormat format)
|
|
|
-{
|
|
|
- int i;
|
|
|
- const Uint16 *src;
|
|
|
- Sint16 *dst;
|
|
|
+ SDL_assert(!i || ((((size_t) dst) & 15) == 0));
|
|
|
+ SDL_assert(!i || ((((size_t) src) & 15) == 0));
|
|
|
|
|
|
-#if DEBUG_CONVERT
|
|
|
- fprintf(stderr, "Converting AUDIO_U16LSB to AUDIO_S16MSB.\n");
|
|
|
-#endif
|
|
|
+ {
|
|
|
+ /* Aligned! Do SSE blocks as long as we have 16 bytes available. */
|
|
|
+ const __m128d divby2147483648 = _mm_set1_pd(DIVBY2147483648);
|
|
|
+ const __m128i *mmsrc = (const __m128i *) src;
|
|
|
+ while (i >= 4) { /* 4 * sint32 */
|
|
|
+ const __m128i ints = _mm_load_si128(mmsrc);
|
|
|
+ /* bitshift the whole register over, so _mm_cvtepi32_pd can read the top ints in the bottom of the vector. */
|
|
|
+ const __m128d doubles1 = _mm_mul_pd(_mm_cvtepi32_pd(_mm_srli_si128(ints, 8)), divby2147483648);
|
|
|
+ const __m128d doubles2 = _mm_mul_pd(_mm_cvtepi32_pd(ints), divby2147483648);
|
|
|
+ /* convert to float32, bitshift/or to get these into a vector to store. */
|
|
|
+ _mm_store_ps(dst, _mm_castsi128_ps(_mm_or_si128(_mm_slli_si128(_mm_castps_si128(_mm_cvtpd_ps(doubles1)), 8), _mm_castps_si128(_mm_cvtpd_ps(doubles2)))));
|
|
|
+ i -= 4; mmsrc++; dst += 4;
|
|
|
+ }
|
|
|
+ src = (const Sint32 *) mmsrc;
|
|
|
+ }
|
|
|
|
|
|
- src = (const Uint16 *) cvt->buf;
|
|
|
- dst = (Sint16 *) cvt->buf;
|
|
|
- for (i = cvt->len_cvt / sizeof (Uint16); i; --i, ++src, ++dst) {
|
|
|
- const Sint16 val = ((SDL_SwapLE16(*src)) ^ 0x8000);
|
|
|
- *dst = ((Sint16) SDL_SwapBE16(val));
|
|
|
+ /* Finish off any leftovers with scalar operations. */
|
|
|
+ while (i) {
|
|
|
+ *dst = (float) (((double) *src) * DIVBY2147483648);
|
|
|
+ i--; src++; dst++;
|
|
|
}
|
|
|
|
|
|
if (cvt->filters[++cvt->filter_index]) {
|
|
|
- cvt->filters[cvt->filter_index] (cvt, AUDIO_S16MSB);
|
|
|
+ cvt->filters[cvt->filter_index](cvt, AUDIO_F32SYS);
|
|
|
}
|
|
|
}
|
|
|
|
|
|
static void SDLCALL
|
|
|
-SDL_Convert_U16LSB_to_S32LSB(SDL_AudioCVT * cvt, SDL_AudioFormat format)
|
|
|
+SDL_Convert_F32_to_S8_SSE2(SDL_AudioCVT *cvt, SDL_AudioFormat format)
|
|
|
{
|
|
|
+ const float *src = (const float *) cvt->buf;
|
|
|
+ Sint8 *dst = (Sint8 *) cvt->buf;
|
|
|
int i;
|
|
|
- const Uint16 *src;
|
|
|
- Sint32 *dst;
|
|
|
-
|
|
|
-#if DEBUG_CONVERT
|
|
|
- fprintf(stderr, "Converting AUDIO_U16LSB to AUDIO_S32LSB.\n");
|
|
|
-#endif
|
|
|
|
|
|
- src = ((const Uint16 *) (cvt->buf + cvt->len_cvt)) - 1;
|
|
|
- dst = ((Sint32 *) (cvt->buf + cvt->len_cvt * 2)) - 1;
|
|
|
- for (i = cvt->len_cvt / sizeof (Uint16); i; --i, --src, --dst) {
|
|
|
- const Sint32 val = (((Sint32) ((SDL_SwapLE16(*src)) ^ 0x8000)) << 16);
|
|
|
- *dst = ((Sint32) SDL_SwapLE32(val));
|
|
|
- }
|
|
|
+ LOG_DEBUG_CONVERT("AUDIO_F32", "AUDIO_S8 (using SSE2)");
|
|
|
|
|
|
- cvt->len_cvt *= 2;
|
|
|
- if (cvt->filters[++cvt->filter_index]) {
|
|
|
- cvt->filters[cvt->filter_index] (cvt, AUDIO_S32LSB);
|
|
|
+ /* Get dst aligned to 16 bytes */
|
|
|
+ for (i = cvt->len_cvt / sizeof (float); i && (((size_t) dst) & 15); --i, ++src, ++dst) {
|
|
|
+ *dst = (Sint8) (*src * 127.0f);
|
|
|
}
|
|
|
-}
|
|
|
|
|
|
-static void SDLCALL
|
|
|
-SDL_Convert_U16LSB_to_S32MSB(SDL_AudioCVT * cvt, SDL_AudioFormat format)
|
|
|
-{
|
|
|
- int i;
|
|
|
- const Uint16 *src;
|
|
|
- Sint32 *dst;
|
|
|
+ SDL_assert(!i || ((((size_t) dst) & 15) == 0));
|
|
|
|
|
|
-#if DEBUG_CONVERT
|
|
|
- fprintf(stderr, "Converting AUDIO_U16LSB to AUDIO_S32MSB.\n");
|
|
|
-#endif
|
|
|
+ /* Make sure src is aligned too. */
|
|
|
+ if ((((size_t) src) & 15) == 0) {
|
|
|
+ /* Aligned! Do SSE blocks as long as we have 16 bytes available. */
|
|
|
+ const __m128 mulby127 = _mm_set1_ps(127.0f);
|
|
|
+ __m128i *mmdst = (__m128i *) dst;
|
|
|
+ while (i >= 16) { /* 16 * float32 */
|
|
|
+ const __m128i ints1 = _mm_cvtps_epi32(_mm_mul_ps(_mm_load_ps(src), mulby127)); /* load 4 floats, convert to sint32 */
|
|
|
+ const __m128i ints2 = _mm_cvtps_epi32(_mm_mul_ps(_mm_load_ps(src+4), mulby127)); /* load 4 floats, convert to sint32 */
|
|
|
+ const __m128i ints3 = _mm_cvtps_epi32(_mm_mul_ps(_mm_load_ps(src+8), mulby127)); /* load 4 floats, convert to sint32 */
|
|
|
+ const __m128i ints4 = _mm_cvtps_epi32(_mm_mul_ps(_mm_load_ps(src+12), mulby127)); /* load 4 floats, convert to sint32 */
|
|
|
+ _mm_store_si128(mmdst, _mm_packs_epi16(_mm_packs_epi32(ints1, ints2), _mm_packs_epi32(ints3, ints4))); /* pack down, store out. */
|
|
|
+ i -= 16; src += 16; mmdst++;
|
|
|
+ }
|
|
|
+ dst = (Sint8 *) mmdst;
|
|
|
+ }
|
|
|
|
|
|
- src = ((const Uint16 *) (cvt->buf + cvt->len_cvt)) - 1;
|
|
|
- dst = ((Sint32 *) (cvt->buf + cvt->len_cvt * 2)) - 1;
|
|
|
- for (i = cvt->len_cvt / sizeof (Uint16); i; --i, --src, --dst) {
|
|
|
- const Sint32 val = (((Sint32) ((SDL_SwapLE16(*src)) ^ 0x8000)) << 16);
|
|
|
- *dst = ((Sint32) SDL_SwapBE32(val));
|
|
|
+ /* Finish off any leftovers with scalar operations. */
|
|
|
+ while (i) {
|
|
|
+ *dst = (Sint8) (*src * 127.0f);
|
|
|
+ i--; src++; dst++;
|
|
|
}
|
|
|
|
|
|
- cvt->len_cvt *= 2;
|
|
|
+ cvt->len_cvt /= 4;
|
|
|
if (cvt->filters[++cvt->filter_index]) {
|
|
|
- cvt->filters[cvt->filter_index] (cvt, AUDIO_S32MSB);
|
|
|
+ cvt->filters[cvt->filter_index](cvt, AUDIO_S8);
|
|
|
}
|
|
|
}
|
|
|
|
|
|
static void SDLCALL
|
|
|
-SDL_Convert_U16LSB_to_F32LSB(SDL_AudioCVT * cvt, SDL_AudioFormat format)
|
|
|
+SDL_Convert_F32_to_U8_SSE2(SDL_AudioCVT *cvt, SDL_AudioFormat format)
|
|
|
{
|
|
|
+ const float *src = (const float *) cvt->buf;
|
|
|
+ Uint8 *dst = (Uint8 *) cvt->buf;
|
|
|
int i;
|
|
|
- const Uint16 *src;
|
|
|
- float *dst;
|
|
|
|
|
|
-#if DEBUG_CONVERT
|
|
|
- fprintf(stderr, "Converting AUDIO_U16LSB to AUDIO_F32LSB.\n");
|
|
|
-#endif
|
|
|
-
|
|
|
- src = ((const Uint16 *) (cvt->buf + cvt->len_cvt)) - 1;
|
|
|
- dst = ((float *) (cvt->buf + cvt->len_cvt * 2)) - 1;
|
|
|
- for (i = cvt->len_cvt / sizeof (Uint16); i; --i, --src, --dst) {
|
|
|
- const float val = ((((float) SDL_SwapLE16(*src)) * DIVBY32767) - 1.0f);
|
|
|
- *dst = SDL_SwapFloatLE(val);
|
|
|
- }
|
|
|
+ LOG_DEBUG_CONVERT("AUDIO_F32", "AUDIO_U8 (using SSE2)");
|
|
|
|
|
|
- cvt->len_cvt *= 2;
|
|
|
- if (cvt->filters[++cvt->filter_index]) {
|
|
|
- cvt->filters[cvt->filter_index] (cvt, AUDIO_F32LSB);
|
|
|
+ /* Get dst aligned to 16 bytes */
|
|
|
+ for (i = cvt->len_cvt / sizeof (float); i && (((size_t) dst) & 15); --i, ++src, ++dst) {
|
|
|
+ *dst = (Uint8) ((*src + 1.0f) * 127.0f);
|
|
|
}
|
|
|
-}
|
|
|
|
|
|
-static void SDLCALL
|
|
|
-SDL_Convert_U16LSB_to_F32MSB(SDL_AudioCVT * cvt, SDL_AudioFormat format)
|
|
|
-{
|
|
|
- int i;
|
|
|
- const Uint16 *src;
|
|
|
- float *dst;
|
|
|
+ SDL_assert(!i || ((((size_t) dst) & 15) == 0));
|
|
|
|
|
|
-#if DEBUG_CONVERT
|
|
|
- fprintf(stderr, "Converting AUDIO_U16LSB to AUDIO_F32MSB.\n");
|
|
|
-#endif
|
|
|
+ /* Make sure src is aligned too. */
|
|
|
+ if ((((size_t) src) & 15) == 0) {
|
|
|
+ /* Aligned! Do SSE blocks as long as we have 16 bytes available. */
|
|
|
+ const __m128 add1 = _mm_set1_ps(1.0f);
|
|
|
+ const __m128 mulby127 = _mm_set1_ps(127.0f);
|
|
|
+ __m128i *mmdst = (__m128i *) dst;
|
|
|
+ while (i >= 16) { /* 16 * float32 */
|
|
|
+ const __m128i ints1 = _mm_cvtps_epi32(_mm_mul_ps(_mm_add_ps(_mm_load_ps(src), add1), mulby127)); /* load 4 floats, convert to sint32 */
|
|
|
+ const __m128i ints2 = _mm_cvtps_epi32(_mm_mul_ps(_mm_add_ps(_mm_load_ps(src+4), add1), mulby127)); /* load 4 floats, convert to sint32 */
|
|
|
+ const __m128i ints3 = _mm_cvtps_epi32(_mm_mul_ps(_mm_add_ps(_mm_load_ps(src+8), add1), mulby127)); /* load 4 floats, convert to sint32 */
|
|
|
+ const __m128i ints4 = _mm_cvtps_epi32(_mm_mul_ps(_mm_add_ps(_mm_load_ps(src+12), add1), mulby127)); /* load 4 floats, convert to sint32 */
|
|
|
+ _mm_store_si128(mmdst, _mm_packus_epi16(_mm_packs_epi32(ints1, ints2), _mm_packs_epi32(ints3, ints4))); /* pack down, store out. */
|
|
|
+ i -= 16; src += 16; mmdst++;
|
|
|
+ }
|
|
|
+ dst = (Uint8 *) mmdst;
|
|
|
+ }
|
|
|
|
|
|
- src = ((const Uint16 *) (cvt->buf + cvt->len_cvt)) - 1;
|
|
|
- dst = ((float *) (cvt->buf + cvt->len_cvt * 2)) - 1;
|
|
|
- for (i = cvt->len_cvt / sizeof (Uint16); i; --i, --src, --dst) {
|
|
|
- const float val = ((((float) SDL_SwapLE16(*src)) * DIVBY32767) - 1.0f);
|
|
|
- *dst = SDL_SwapFloatBE(val);
|
|
|
+ /* Finish off any leftovers with scalar operations. */
|
|
|
+ while (i) {
|
|
|
+ *dst = (Uint8) ((*src + 1.0f) * 127.0f);
|
|
|
+ i--; src++; dst++;
|
|
|
}
|
|
|
|
|
|
- cvt->len_cvt *= 2;
|
|
|
+ cvt->len_cvt /= 4;
|
|
|
if (cvt->filters[++cvt->filter_index]) {
|
|
|
- cvt->filters[cvt->filter_index] (cvt, AUDIO_F32MSB);
|
|
|
+ cvt->filters[cvt->filter_index](cvt, AUDIO_U8);
|
|
|
}
|
|
|
}
|
|
|
|
|
|
static void SDLCALL
|
|
|
-SDL_Convert_S16LSB_to_U8(SDL_AudioCVT * cvt, SDL_AudioFormat format)
|
|
|
+SDL_Convert_F32_to_S16_SSE2(SDL_AudioCVT *cvt, SDL_AudioFormat format)
|
|
|
{
|
|
|
+ const float *src = (const float *) cvt->buf;
|
|
|
+ Sint16 *dst = (Sint16 *) cvt->buf;
|
|
|
int i;
|
|
|
- const Uint16 *src;
|
|
|
- Uint8 *dst;
|
|
|
-
|
|
|
-#if DEBUG_CONVERT
|
|
|
- fprintf(stderr, "Converting AUDIO_S16LSB to AUDIO_U8.\n");
|
|
|
-#endif
|
|
|
|
|
|
- src = (const Uint16 *) cvt->buf;
|
|
|
- dst = (Uint8 *) cvt->buf;
|
|
|
- for (i = cvt->len_cvt / sizeof (Uint16); i; --i, ++src, ++dst) {
|
|
|
- const Uint8 val = ((Uint8) (((((Sint16) SDL_SwapLE16(*src))) ^ 0x8000) >> 8));
|
|
|
- *dst = val;
|
|
|
- }
|
|
|
+ LOG_DEBUG_CONVERT("AUDIO_F32", "AUDIO_S16 (using SSE2)");
|
|
|
|
|
|
- cvt->len_cvt /= 2;
|
|
|
- if (cvt->filters[++cvt->filter_index]) {
|
|
|
- cvt->filters[cvt->filter_index] (cvt, AUDIO_U8);
|
|
|
+ /* Get dst aligned to 16 bytes */
|
|
|
+ for (i = cvt->len_cvt / sizeof (float); i && (((size_t) dst) & 15); --i, ++src, ++dst) {
|
|
|
+ *dst = (Sint16) (*src * 32767.0f);
|
|
|
}
|
|
|
-}
|
|
|
|
|
|
-static void SDLCALL
|
|
|
-SDL_Convert_S16LSB_to_S8(SDL_AudioCVT * cvt, SDL_AudioFormat format)
|
|
|
-{
|
|
|
- int i;
|
|
|
- const Uint16 *src;
|
|
|
- Sint8 *dst;
|
|
|
+ SDL_assert(!i || ((((size_t) dst) & 15) == 0));
|
|
|
|
|
|
-#if DEBUG_CONVERT
|
|
|
- fprintf(stderr, "Converting AUDIO_S16LSB to AUDIO_S8.\n");
|
|
|
-#endif
|
|
|
+ /* Make sure src is aligned too. */
|
|
|
+ if ((((size_t) src) & 15) == 0) {
|
|
|
+ /* Aligned! Do SSE blocks as long as we have 16 bytes available. */
|
|
|
+ const __m128 mulby32767 = _mm_set1_ps(32767.0f);
|
|
|
+ __m128i *mmdst = (__m128i *) dst;
|
|
|
+ while (i >= 8) { /* 8 * float32 */
|
|
|
+ const __m128i ints1 = _mm_cvtps_epi32(_mm_mul_ps(_mm_load_ps(src), mulby32767)); /* load 4 floats, convert to sint32 */
|
|
|
+ const __m128i ints2 = _mm_cvtps_epi32(_mm_mul_ps(_mm_load_ps(src+4), mulby32767)); /* load 4 floats, convert to sint32 */
|
|
|
+ _mm_store_si128(mmdst, _mm_packs_epi32(ints1, ints2)); /* pack to sint16, store out. */
|
|
|
+ i -= 8; src += 8; mmdst++;
|
|
|
+ }
|
|
|
+ dst = (Sint16 *) mmdst;
|
|
|
+ }
|
|
|
|
|
|
- src = (const Uint16 *) cvt->buf;
|
|
|
- dst = (Sint8 *) cvt->buf;
|
|
|
- for (i = cvt->len_cvt / sizeof (Uint16); i; --i, ++src, ++dst) {
|
|
|
- const Sint8 val = ((Sint8) (((Sint16) SDL_SwapLE16(*src)) >> 8));
|
|
|
- *dst = ((Sint8) val);
|
|
|
+ /* Finish off any leftovers with scalar operations. */
|
|
|
+ while (i) {
|
|
|
+ *dst = (Sint16) (*src * 32767.0f);
|
|
|
+ i--; src++; dst++;
|
|
|
}
|
|
|
|
|
|
cvt->len_cvt /= 2;
|
|
|
if (cvt->filters[++cvt->filter_index]) {
|
|
|
- cvt->filters[cvt->filter_index] (cvt, AUDIO_S8);
|
|
|
+ cvt->filters[cvt->filter_index](cvt, AUDIO_S16SYS);
|
|
|
}
|
|
|
}
|
|
|
|
|
|
static void SDLCALL
|
|
|
-SDL_Convert_S16LSB_to_U16LSB(SDL_AudioCVT * cvt, SDL_AudioFormat format)
|
|
|
+SDL_Convert_F32_to_U16_SSE2(SDL_AudioCVT *cvt, SDL_AudioFormat format)
|
|
|
{
|
|
|
+ const float *src = (const float *) cvt->buf;
|
|
|
+ Uint16 *dst = (Uint16 *) cvt->buf;
|
|
|
int i;
|
|
|
- const Uint16 *src;
|
|
|
- Uint16 *dst;
|
|
|
-
|
|
|
-#if DEBUG_CONVERT
|
|
|
- fprintf(stderr, "Converting AUDIO_S16LSB to AUDIO_U16LSB.\n");
|
|
|
-#endif
|
|
|
|
|
|
- src = (const Uint16 *) cvt->buf;
|
|
|
- dst = (Uint16 *) cvt->buf;
|
|
|
- for (i = cvt->len_cvt / sizeof (Uint16); i; --i, ++src, ++dst) {
|
|
|
- const Uint16 val = ((((Sint16) SDL_SwapLE16(*src))) ^ 0x8000);
|
|
|
- *dst = SDL_SwapLE16(val);
|
|
|
- }
|
|
|
+ LOG_DEBUG_CONVERT("AUDIO_F32", "AUDIO_U16 (using SSE2)");
|
|
|
|
|
|
- if (cvt->filters[++cvt->filter_index]) {
|
|
|
- cvt->filters[cvt->filter_index] (cvt, AUDIO_U16LSB);
|
|
|
+ /* Get dst aligned to 16 bytes */
|
|
|
+ for (i = cvt->len_cvt / sizeof (float); i && (((size_t) dst) & 15); --i, ++src, ++dst) {
|
|
|
+ *dst = (Uint16) ((*src + 1.0f) * 32767.0f);
|
|
|
}
|
|
|
-}
|
|
|
-
|
|
|
-static void SDLCALL
|
|
|
-SDL_Convert_S16LSB_to_U16MSB(SDL_AudioCVT * cvt, SDL_AudioFormat format)
|
|
|
-{
|
|
|
- int i;
|
|
|
- const Uint16 *src;
|
|
|
- Uint16 *dst;
|
|
|
-
|
|
|
-#if DEBUG_CONVERT
|
|
|
- fprintf(stderr, "Converting AUDIO_S16LSB to AUDIO_U16MSB.\n");
|
|
|
-#endif
|
|
|
|
|
|
- src = (const Uint16 *) cvt->buf;
|
|
|
- dst = (Uint16 *) cvt->buf;
|
|
|
- for (i = cvt->len_cvt / sizeof (Uint16); i; --i, ++src, ++dst) {
|
|
|
- const Uint16 val = ((((Sint16) SDL_SwapLE16(*src))) ^ 0x8000);
|
|
|
- *dst = SDL_SwapBE16(val);
|
|
|
- }
|
|
|
+ SDL_assert(!i || ((((size_t) dst) & 15) == 0));
|
|
|
|
|
|
- if (cvt->filters[++cvt->filter_index]) {
|
|
|
- cvt->filters[cvt->filter_index] (cvt, AUDIO_U16MSB);
|
|
|
+ /* Make sure src is aligned too. */
|
|
|
+ if ((((size_t) src) & 15) == 0) {
|
|
|
+ /* Aligned! Do SSE blocks as long as we have 16 bytes available. */
|
|
|
+ /* This calculates differently than the scalar path because SSE2 can't
|
|
|
+ pack int32 data down to unsigned int16. _mm_packs_epi32 does signed
|
|
|
+ saturation, so that would corrupt our data. _mm_packus_epi32 exists,
|
|
|
+ but not before SSE 4.1. So we convert from float to sint16, packing
|
|
|
+ that down with legit signed saturation, and then xor the top bit
|
|
|
+ against 1. This results in the correct unsigned 16-bit value, even
|
|
|
+ though it looks like dark magic. */
|
|
|
+ const __m128 mulby32767 = _mm_set1_ps(32767.0f);
|
|
|
+ const __m128i topbit = _mm_set1_epi16(-32768);
|
|
|
+ __m128i *mmdst = (__m128i *) dst;
|
|
|
+ while (i >= 8) { /* 8 * float32 */
|
|
|
+ const __m128i ints1 = _mm_cvtps_epi32(_mm_mul_ps(_mm_load_ps(src), mulby32767)); /* load 4 floats, convert to sint32 */
|
|
|
+ const __m128i ints2 = _mm_cvtps_epi32(_mm_mul_ps(_mm_load_ps(src+4), mulby32767)); /* load 4 floats, convert to sint32 */
|
|
|
+ _mm_store_si128(mmdst, _mm_xor_si128(_mm_packs_epi32(ints1, ints2), topbit)); /* pack to sint16, xor top bit, store out. */
|
|
|
+ i -= 8; src += 8; mmdst++;
|
|
|
+ }
|
|
|
+ dst = (Uint16 *) mmdst;
|
|
|
}
|
|
|
-}
|
|
|
-
|
|
|
-static void SDLCALL
|
|
|
-SDL_Convert_S16LSB_to_S16MSB(SDL_AudioCVT * cvt, SDL_AudioFormat format)
|
|
|
-{
|
|
|
- int i;
|
|
|
- const Uint16 *src;
|
|
|
- Sint16 *dst;
|
|
|
-
|
|
|
-#if DEBUG_CONVERT
|
|
|
- fprintf(stderr, "Converting AUDIO_S16LSB to AUDIO_S16MSB.\n");
|
|
|
-#endif
|
|
|
|
|
|
- src = (const Uint16 *) cvt->buf;
|
|
|
- dst = (Sint16 *) cvt->buf;
|
|
|
- for (i = cvt->len_cvt / sizeof (Uint16); i; --i, ++src, ++dst) {
|
|
|
- const Sint16 val = ((Sint16) SDL_SwapLE16(*src));
|
|
|
- *dst = ((Sint16) SDL_SwapBE16(val));
|
|
|
+ /* Finish off any leftovers with scalar operations. */
|
|
|
+ while (i) {
|
|
|
+ *dst = (Uint16) ((*src + 1.0f) * 32767.0f);
|
|
|
+ i--; src++; dst++;
|
|
|
}
|
|
|
|
|
|
+ cvt->len_cvt /= 2;
|
|
|
if (cvt->filters[++cvt->filter_index]) {
|
|
|
- cvt->filters[cvt->filter_index] (cvt, AUDIO_S16MSB);
|
|
|
+ cvt->filters[cvt->filter_index](cvt, AUDIO_U16SYS);
|
|
|
}
|
|
|
}
|
|
|
|
|
|
static void SDLCALL
|
|
|
-SDL_Convert_S16LSB_to_S32LSB(SDL_AudioCVT * cvt, SDL_AudioFormat format)
|
|
|
+SDL_Convert_F32_to_S32_SSE2(SDL_AudioCVT *cvt, SDL_AudioFormat format)
|
|
|
{
|
|
|
+ const float *src = (const float *) cvt->buf;
|
|
|
+ Sint32 *dst = (Sint32 *) cvt->buf;
|
|
|
int i;
|
|
|
- const Uint16 *src;
|
|
|
- Sint32 *dst;
|
|
|
-
|
|
|
-#if DEBUG_CONVERT
|
|
|
- fprintf(stderr, "Converting AUDIO_S16LSB to AUDIO_S32LSB.\n");
|
|
|
-#endif
|
|
|
|
|
|
- src = ((const Uint16 *) (cvt->buf + cvt->len_cvt)) - 1;
|
|
|
- dst = ((Sint32 *) (cvt->buf + cvt->len_cvt * 2)) - 1;
|
|
|
- for (i = cvt->len_cvt / sizeof (Uint16); i; --i, --src, --dst) {
|
|
|
- const Sint32 val = (((Sint32) ((Sint16) SDL_SwapLE16(*src))) << 16);
|
|
|
- *dst = ((Sint32) SDL_SwapLE32(val));
|
|
|
- }
|
|
|
+ LOG_DEBUG_CONVERT("AUDIO_F32", "AUDIO_S32 (using SSE2)");
|
|
|
|
|
|
- cvt->len_cvt *= 2;
|
|
|
- if (cvt->filters[++cvt->filter_index]) {
|
|
|
- cvt->filters[cvt->filter_index] (cvt, AUDIO_S32LSB);
|
|
|
+ /* Get dst aligned to 16 bytes */
|
|
|
+ for (i = cvt->len_cvt / sizeof (float); i && (((size_t) dst) & 15); --i, ++src, ++dst) {
|
|
|
+ *dst = (Sint32) (((double) *src) * 2147483647.0);
|
|
|
}
|
|
|
-}
|
|
|
|
|
|
-static void SDLCALL
|
|
|
-SDL_Convert_S16LSB_to_S32MSB(SDL_AudioCVT * cvt, SDL_AudioFormat format)
|
|
|
-{
|
|
|
- int i;
|
|
|
- const Uint16 *src;
|
|
|
- Sint32 *dst;
|
|
|
+ SDL_assert(!i || ((((size_t) dst) & 15) == 0));
|
|
|
+ SDL_assert(!i || ((((size_t) src) & 15) == 0));
|
|
|
|
|
|
-#if DEBUG_CONVERT
|
|
|
- fprintf(stderr, "Converting AUDIO_S16LSB to AUDIO_S32MSB.\n");
|
|
|
-#endif
|
|
|
+ {
|
|
|
+ /* Aligned! Do SSE blocks as long as we have 16 bytes available. */
|
|
|
+ const __m128d mulby2147483647 = _mm_set1_pd(2147483647.0);
|
|
|
+ __m128i *mmdst = (__m128i *) dst;
|
|
|
+ while (i >= 4) { /* 4 * float32 */
|
|
|
+ const __m128 floats = _mm_load_ps(src);
|
|
|
+ /* bitshift the whole register over, so _mm_cvtps_pd can read the top floats in the bottom of the vector. */
|
|
|
+ const __m128d doubles1 = _mm_mul_pd(_mm_cvtps_pd(_mm_castsi128_ps(_mm_srli_si128(_mm_castps_si128(floats), 8))), mulby2147483647);
|
|
|
+ const __m128d doubles2 = _mm_mul_pd(_mm_cvtps_pd(floats), mulby2147483647);
|
|
|
+ _mm_store_si128(mmdst, _mm_or_si128(_mm_slli_si128(_mm_cvtpd_epi32(doubles1), 8), _mm_cvtpd_epi32(doubles2)));
|
|
|
+ i -= 4; src += 4; mmdst++;
|
|
|
+ }
|
|
|
+ dst = (Sint32 *) mmdst;
|
|
|
+ }
|
|
|
|
|
|
- src = ((const Uint16 *) (cvt->buf + cvt->len_cvt)) - 1;
|
|
|
- dst = ((Sint32 *) (cvt->buf + cvt->len_cvt * 2)) - 1;
|
|
|
- for (i = cvt->len_cvt / sizeof (Uint16); i; --i, --src, --dst) {
|
|
|
- const Sint32 val = (((Sint32) ((Sint16) SDL_SwapLE16(*src))) << 16);
|
|
|
- *dst = ((Sint32) SDL_SwapBE32(val));
|
|
|
+ /* Finish off any leftovers with scalar operations. */
|
|
|
+ while (i) {
|
|
|
+ *dst = (Sint32) (((double) *src) * 2147483647.0);
|
|
|
+ i--; src++; dst++;
|
|
|
}
|
|
|
|
|
|
- cvt->len_cvt *= 2;
|
|
|
if (cvt->filters[++cvt->filter_index]) {
|
|
|
- cvt->filters[cvt->filter_index] (cvt, AUDIO_S32MSB);
|
|
|
+ cvt->filters[cvt->filter_index](cvt, AUDIO_S32SYS);
|
|
|
}
|
|
|
}
|
|
|
-
|
|
|
-static void SDLCALL
|
|
|
-SDL_Convert_S16LSB_to_F32LSB(SDL_AudioCVT * cvt, SDL_AudioFormat format)
|
|
|
-{
|
|
|
- int i;
|
|
|
- const Uint16 *src;
|
|
|
- float *dst;
|
|
|
-
|
|
|
-#if DEBUG_CONVERT
|
|
|
- fprintf(stderr, "Converting AUDIO_S16LSB to AUDIO_F32LSB.\n");
|
|
|
#endif
|
|
|
|
|
|
- src = ((const Uint16 *) (cvt->buf + cvt->len_cvt)) - 1;
|
|
|
- dst = ((float *) (cvt->buf + cvt->len_cvt * 2)) - 1;
|
|
|
- for (i = cvt->len_cvt / sizeof (Uint16); i; --i, --src, --dst) {
|
|
|
- const float val = (((float) ((Sint16) SDL_SwapLE16(*src))) * DIVBY32767);
|
|
|
- *dst = SDL_SwapFloatLE(val);
|
|
|
- }
|
|
|
-
|
|
|
- cvt->len_cvt *= 2;
|
|
|
- if (cvt->filters[++cvt->filter_index]) {
|
|
|
- cvt->filters[cvt->filter_index] (cvt, AUDIO_F32LSB);
|
|
|
- }
|
|
|
-}
|
|
|
|
|
|
-static void SDLCALL
|
|
|
-SDL_Convert_S16LSB_to_F32MSB(SDL_AudioCVT * cvt, SDL_AudioFormat format)
|
|
|
+void SDL_ChooseAudioConverters(void)
|
|
|
{
|
|
|
- int i;
|
|
|
- const Uint16 *src;
|
|
|
- float *dst;
|
|
|
-
|
|
|
-#if DEBUG_CONVERT
|
|
|
- fprintf(stderr, "Converting AUDIO_S16LSB to AUDIO_F32MSB.\n");
|
|
|
-#endif
|
|
|
+ static SDL_bool converters_chosen = SDL_FALSE;
|
|
|
|
|
|
- src = ((const Uint16 *) (cvt->buf + cvt->len_cvt)) - 1;
|
|
|
- dst = ((float *) (cvt->buf + cvt->len_cvt * 2)) - 1;
|
|
|
- for (i = cvt->len_cvt / sizeof (Uint16); i; --i, --src, --dst) {
|
|
|
- const float val = (((float) ((Sint16) SDL_SwapLE16(*src))) * DIVBY32767);
|
|
|
- *dst = SDL_SwapFloatBE(val);
|
|
|
+ if (converters_chosen) {
|
|
|
+ return;
|
|
|
}
|
|
|
|
|
|
- cvt->len_cvt *= 2;
|
|
|
- if (cvt->filters[++cvt->filter_index]) {
|
|
|
- cvt->filters[cvt->filter_index] (cvt, AUDIO_F32MSB);
|
|
|
- }
|
|
|
-}
|
|
|
+#define SET_CONVERTER_FUNCS(fntype) \
|
|
|
+ SDL_Convert_S8_to_F32 = SDL_Convert_S8_to_F32_##fntype; \
|
|
|
+ SDL_Convert_U8_to_F32 = SDL_Convert_U8_to_F32_##fntype; \
|
|
|
+ SDL_Convert_S16_to_F32 = SDL_Convert_S16_to_F32_##fntype; \
|
|
|
+ SDL_Convert_U16_to_F32 = SDL_Convert_U16_to_F32_##fntype; \
|
|
|
+ SDL_Convert_S32_to_F32 = SDL_Convert_S32_to_F32_##fntype; \
|
|
|
+ SDL_Convert_F32_to_S8 = SDL_Convert_F32_to_S8_##fntype; \
|
|
|
+ SDL_Convert_F32_to_U8 = SDL_Convert_F32_to_U8_##fntype; \
|
|
|
+ SDL_Convert_F32_to_S16 = SDL_Convert_F32_to_S16_##fntype; \
|
|
|
+ SDL_Convert_F32_to_U16 = SDL_Convert_F32_to_U16_##fntype; \
|
|
|
+ SDL_Convert_F32_to_S32 = SDL_Convert_F32_to_S32_##fntype; \
|
|
|
+ converters_chosen = SDL_TRUE
|
|
|
|
|
|
-static void SDLCALL
|
|
|
-SDL_Convert_U16MSB_to_U8(SDL_AudioCVT * cvt, SDL_AudioFormat format)
|
|
|
-{
|
|
|
- int i;
|
|
|
- const Uint16 *src;
|
|
|
- Uint8 *dst;
|
|
|
+#if HAVE_SSE2_INTRINSICS
|
|
|
+ if (SDL_HasSSE2()) {
|
|
|
+ SET_CONVERTER_FUNCS(SSE2);
|
|
|
+ return;
|
|
|
+ }
|
|
|
+#endif
|
|
|
|
|
|
-#if DEBUG_CONVERT
|
|
|
- fprintf(stderr, "Converting AUDIO_U16MSB to AUDIO_U8.\n");
|
|
|
+#if NEED_SCALAR_CONVERTER_FALLBACKS
|
|
|
+ SET_CONVERTER_FUNCS(Scalar);
|
|
|
#endif
|
|
|
|
|
|
- src = (const Uint16 *) cvt->buf;
|
|
|
- dst = (Uint8 *) cvt->buf;
|
|
|
- for (i = cvt->len_cvt / sizeof (Uint16); i; --i, ++src, ++dst) {
|
|
|
- const Uint8 val = ((Uint8) (SDL_SwapBE16(*src) >> 8));
|
|
|
- *dst = val;
|
|
|
- }
|
|
|
+#undef SET_CONVERTER_FUNCS
|
|
|
|
|
|
- cvt->len_cvt /= 2;
|
|
|
- if (cvt->filters[++cvt->filter_index]) {
|
|
|
- cvt->filters[cvt->filter_index] (cvt, AUDIO_U8);
|
|
|
- }
|
|
|
+ SDL_assert(converters_chosen == SDL_TRUE);
|
|
|
}
|
|
|
|
|
|
-static void SDLCALL
|
|
|
-SDL_Convert_U16MSB_to_S8(SDL_AudioCVT * cvt, SDL_AudioFormat format)
|
|
|
-{
|
|
|
- int i;
|
|
|
- const Uint16 *src;
|
|
|
- Sint8 *dst;
|
|
|
-
|
|
|
-#if DEBUG_CONVERT
|
|
|
- fprintf(stderr, "Converting AUDIO_U16MSB to AUDIO_S8.\n");
|
|
|
-#endif
|
|
|
-
|
|
|
- src = (const Uint16 *) cvt->buf;
|
|
|
- dst = (Sint8 *) cvt->buf;
|
|
|
- for (i = cvt->len_cvt / sizeof (Uint16); i; --i, ++src, ++dst) {
|
|
|
- const Sint8 val = ((Sint8) (((SDL_SwapBE16(*src)) ^ 0x8000) >> 8));
|
|
|
- *dst = ((Sint8) val);
|
|
|
- }
|
|
|
-
|
|
|
- cvt->len_cvt /= 2;
|
|
|
- if (cvt->filters[++cvt->filter_index]) {
|
|
|
- cvt->filters[cvt->filter_index] (cvt, AUDIO_S8);
|
|
|
- }
|
|
|
-}
|
|
|
-
|
|
|
-static void SDLCALL
|
|
|
-SDL_Convert_U16MSB_to_U16LSB(SDL_AudioCVT * cvt, SDL_AudioFormat format)
|
|
|
-{
|
|
|
- int i;
|
|
|
- const Uint16 *src;
|
|
|
- Uint16 *dst;
|
|
|
-
|
|
|
-#if DEBUG_CONVERT
|
|
|
- fprintf(stderr, "Converting AUDIO_U16MSB to AUDIO_U16LSB.\n");
|
|
|
-#endif
|
|
|
-
|
|
|
- src = (const Uint16 *) cvt->buf;
|
|
|
- dst = (Uint16 *) cvt->buf;
|
|
|
- for (i = cvt->len_cvt / sizeof (Uint16); i; --i, ++src, ++dst) {
|
|
|
- const Uint16 val = SDL_SwapBE16(*src);
|
|
|
- *dst = SDL_SwapLE16(val);
|
|
|
- }
|
|
|
-
|
|
|
- if (cvt->filters[++cvt->filter_index]) {
|
|
|
- cvt->filters[cvt->filter_index] (cvt, AUDIO_U16LSB);
|
|
|
- }
|
|
|
-}
|
|
|
-
|
|
|
-static void SDLCALL
|
|
|
-SDL_Convert_U16MSB_to_S16LSB(SDL_AudioCVT * cvt, SDL_AudioFormat format)
|
|
|
-{
|
|
|
- int i;
|
|
|
- const Uint16 *src;
|
|
|
- Sint16 *dst;
|
|
|
-
|
|
|
-#if DEBUG_CONVERT
|
|
|
- fprintf(stderr, "Converting AUDIO_U16MSB to AUDIO_S16LSB.\n");
|
|
|
-#endif
|
|
|
-
|
|
|
- src = (const Uint16 *) cvt->buf;
|
|
|
- dst = (Sint16 *) cvt->buf;
|
|
|
- for (i = cvt->len_cvt / sizeof (Uint16); i; --i, ++src, ++dst) {
|
|
|
- const Sint16 val = ((SDL_SwapBE16(*src)) ^ 0x8000);
|
|
|
- *dst = ((Sint16) SDL_SwapLE16(val));
|
|
|
- }
|
|
|
-
|
|
|
- if (cvt->filters[++cvt->filter_index]) {
|
|
|
- cvt->filters[cvt->filter_index] (cvt, AUDIO_S16LSB);
|
|
|
- }
|
|
|
-}
|
|
|
-
|
|
|
-static void SDLCALL
|
|
|
-SDL_Convert_U16MSB_to_S16MSB(SDL_AudioCVT * cvt, SDL_AudioFormat format)
|
|
|
-{
|
|
|
- int i;
|
|
|
- const Uint16 *src;
|
|
|
- Sint16 *dst;
|
|
|
-
|
|
|
-#if DEBUG_CONVERT
|
|
|
- fprintf(stderr, "Converting AUDIO_U16MSB to AUDIO_S16MSB.\n");
|
|
|
-#endif
|
|
|
-
|
|
|
- src = (const Uint16 *) cvt->buf;
|
|
|
- dst = (Sint16 *) cvt->buf;
|
|
|
- for (i = cvt->len_cvt / sizeof (Uint16); i; --i, ++src, ++dst) {
|
|
|
- const Sint16 val = ((SDL_SwapBE16(*src)) ^ 0x8000);
|
|
|
- *dst = ((Sint16) SDL_SwapBE16(val));
|
|
|
- }
|
|
|
-
|
|
|
- if (cvt->filters[++cvt->filter_index]) {
|
|
|
- cvt->filters[cvt->filter_index] (cvt, AUDIO_S16MSB);
|
|
|
- }
|
|
|
-}
|
|
|
-
|
|
|
-static void SDLCALL
|
|
|
-SDL_Convert_U16MSB_to_S32LSB(SDL_AudioCVT * cvt, SDL_AudioFormat format)
|
|
|
-{
|
|
|
- int i;
|
|
|
- const Uint16 *src;
|
|
|
- Sint32 *dst;
|
|
|
-
|
|
|
-#if DEBUG_CONVERT
|
|
|
- fprintf(stderr, "Converting AUDIO_U16MSB to AUDIO_S32LSB.\n");
|
|
|
-#endif
|
|
|
-
|
|
|
- src = ((const Uint16 *) (cvt->buf + cvt->len_cvt)) - 1;
|
|
|
- dst = ((Sint32 *) (cvt->buf + cvt->len_cvt * 2)) - 1;
|
|
|
- for (i = cvt->len_cvt / sizeof (Uint16); i; --i, --src, --dst) {
|
|
|
- const Sint32 val = (((Sint32) ((SDL_SwapBE16(*src)) ^ 0x8000)) << 16);
|
|
|
- *dst = ((Sint32) SDL_SwapLE32(val));
|
|
|
- }
|
|
|
-
|
|
|
- cvt->len_cvt *= 2;
|
|
|
- if (cvt->filters[++cvt->filter_index]) {
|
|
|
- cvt->filters[cvt->filter_index] (cvt, AUDIO_S32LSB);
|
|
|
- }
|
|
|
-}
|
|
|
-
|
|
|
-static void SDLCALL
|
|
|
-SDL_Convert_U16MSB_to_S32MSB(SDL_AudioCVT * cvt, SDL_AudioFormat format)
|
|
|
-{
|
|
|
- int i;
|
|
|
- const Uint16 *src;
|
|
|
- Sint32 *dst;
|
|
|
-
|
|
|
-#if DEBUG_CONVERT
|
|
|
- fprintf(stderr, "Converting AUDIO_U16MSB to AUDIO_S32MSB.\n");
|
|
|
-#endif
|
|
|
-
|
|
|
- src = ((const Uint16 *) (cvt->buf + cvt->len_cvt)) - 1;
|
|
|
- dst = ((Sint32 *) (cvt->buf + cvt->len_cvt * 2)) - 1;
|
|
|
- for (i = cvt->len_cvt / sizeof (Uint16); i; --i, --src, --dst) {
|
|
|
- const Sint32 val = (((Sint32) ((SDL_SwapBE16(*src)) ^ 0x8000)) << 16);
|
|
|
- *dst = ((Sint32) SDL_SwapBE32(val));
|
|
|
- }
|
|
|
-
|
|
|
- cvt->len_cvt *= 2;
|
|
|
- if (cvt->filters[++cvt->filter_index]) {
|
|
|
- cvt->filters[cvt->filter_index] (cvt, AUDIO_S32MSB);
|
|
|
- }
|
|
|
-}
|
|
|
-
|
|
|
-static void SDLCALL
|
|
|
-SDL_Convert_U16MSB_to_F32LSB(SDL_AudioCVT * cvt, SDL_AudioFormat format)
|
|
|
-{
|
|
|
- int i;
|
|
|
- const Uint16 *src;
|
|
|
- float *dst;
|
|
|
-
|
|
|
-#if DEBUG_CONVERT
|
|
|
- fprintf(stderr, "Converting AUDIO_U16MSB to AUDIO_F32LSB.\n");
|
|
|
-#endif
|
|
|
-
|
|
|
- src = ((const Uint16 *) (cvt->buf + cvt->len_cvt)) - 1;
|
|
|
- dst = ((float *) (cvt->buf + cvt->len_cvt * 2)) - 1;
|
|
|
- for (i = cvt->len_cvt / sizeof (Uint16); i; --i, --src, --dst) {
|
|
|
- const float val = ((((float) SDL_SwapBE16(*src)) * DIVBY32767) - 1.0f);
|
|
|
- *dst = SDL_SwapFloatLE(val);
|
|
|
- }
|
|
|
-
|
|
|
- cvt->len_cvt *= 2;
|
|
|
- if (cvt->filters[++cvt->filter_index]) {
|
|
|
- cvt->filters[cvt->filter_index] (cvt, AUDIO_F32LSB);
|
|
|
- }
|
|
|
-}
|
|
|
-
|
|
|
-static void SDLCALL
|
|
|
-SDL_Convert_U16MSB_to_F32MSB(SDL_AudioCVT * cvt, SDL_AudioFormat format)
|
|
|
-{
|
|
|
- int i;
|
|
|
- const Uint16 *src;
|
|
|
- float *dst;
|
|
|
-
|
|
|
-#if DEBUG_CONVERT
|
|
|
- fprintf(stderr, "Converting AUDIO_U16MSB to AUDIO_F32MSB.\n");
|
|
|
-#endif
|
|
|
-
|
|
|
- src = ((const Uint16 *) (cvt->buf + cvt->len_cvt)) - 1;
|
|
|
- dst = ((float *) (cvt->buf + cvt->len_cvt * 2)) - 1;
|
|
|
- for (i = cvt->len_cvt / sizeof (Uint16); i; --i, --src, --dst) {
|
|
|
- const float val = ((((float) SDL_SwapBE16(*src)) * DIVBY32767) - 1.0f);
|
|
|
- *dst = SDL_SwapFloatBE(val);
|
|
|
- }
|
|
|
-
|
|
|
- cvt->len_cvt *= 2;
|
|
|
- if (cvt->filters[++cvt->filter_index]) {
|
|
|
- cvt->filters[cvt->filter_index] (cvt, AUDIO_F32MSB);
|
|
|
- }
|
|
|
-}
|
|
|
-
|
|
|
-static void SDLCALL
|
|
|
-SDL_Convert_S16MSB_to_U8(SDL_AudioCVT * cvt, SDL_AudioFormat format)
|
|
|
-{
|
|
|
- int i;
|
|
|
- const Uint16 *src;
|
|
|
- Uint8 *dst;
|
|
|
-
|
|
|
-#if DEBUG_CONVERT
|
|
|
- fprintf(stderr, "Converting AUDIO_S16MSB to AUDIO_U8.\n");
|
|
|
-#endif
|
|
|
-
|
|
|
- src = (const Uint16 *) cvt->buf;
|
|
|
- dst = (Uint8 *) cvt->buf;
|
|
|
- for (i = cvt->len_cvt / sizeof (Uint16); i; --i, ++src, ++dst) {
|
|
|
- const Uint8 val = ((Uint8) (((((Sint16) SDL_SwapBE16(*src))) ^ 0x8000) >> 8));
|
|
|
- *dst = val;
|
|
|
- }
|
|
|
-
|
|
|
- cvt->len_cvt /= 2;
|
|
|
- if (cvt->filters[++cvt->filter_index]) {
|
|
|
- cvt->filters[cvt->filter_index] (cvt, AUDIO_U8);
|
|
|
- }
|
|
|
-}
|
|
|
-
|
|
|
-static void SDLCALL
|
|
|
-SDL_Convert_S16MSB_to_S8(SDL_AudioCVT * cvt, SDL_AudioFormat format)
|
|
|
-{
|
|
|
- int i;
|
|
|
- const Uint16 *src;
|
|
|
- Sint8 *dst;
|
|
|
-
|
|
|
-#if DEBUG_CONVERT
|
|
|
- fprintf(stderr, "Converting AUDIO_S16MSB to AUDIO_S8.\n");
|
|
|
-#endif
|
|
|
-
|
|
|
- src = (const Uint16 *) cvt->buf;
|
|
|
- dst = (Sint8 *) cvt->buf;
|
|
|
- for (i = cvt->len_cvt / sizeof (Uint16); i; --i, ++src, ++dst) {
|
|
|
- const Sint8 val = ((Sint8) (((Sint16) SDL_SwapBE16(*src)) >> 8));
|
|
|
- *dst = ((Sint8) val);
|
|
|
- }
|
|
|
-
|
|
|
- cvt->len_cvt /= 2;
|
|
|
- if (cvt->filters[++cvt->filter_index]) {
|
|
|
- cvt->filters[cvt->filter_index] (cvt, AUDIO_S8);
|
|
|
- }
|
|
|
-}
|
|
|
-
|
|
|
-static void SDLCALL
|
|
|
-SDL_Convert_S16MSB_to_U16LSB(SDL_AudioCVT * cvt, SDL_AudioFormat format)
|
|
|
-{
|
|
|
- int i;
|
|
|
- const Uint16 *src;
|
|
|
- Uint16 *dst;
|
|
|
-
|
|
|
-#if DEBUG_CONVERT
|
|
|
- fprintf(stderr, "Converting AUDIO_S16MSB to AUDIO_U16LSB.\n");
|
|
|
-#endif
|
|
|
-
|
|
|
- src = (const Uint16 *) cvt->buf;
|
|
|
- dst = (Uint16 *) cvt->buf;
|
|
|
- for (i = cvt->len_cvt / sizeof (Uint16); i; --i, ++src, ++dst) {
|
|
|
- const Uint16 val = ((((Sint16) SDL_SwapBE16(*src))) ^ 0x8000);
|
|
|
- *dst = SDL_SwapLE16(val);
|
|
|
- }
|
|
|
-
|
|
|
- if (cvt->filters[++cvt->filter_index]) {
|
|
|
- cvt->filters[cvt->filter_index] (cvt, AUDIO_U16LSB);
|
|
|
- }
|
|
|
-}
|
|
|
-
|
|
|
-static void SDLCALL
|
|
|
-SDL_Convert_S16MSB_to_S16LSB(SDL_AudioCVT * cvt, SDL_AudioFormat format)
|
|
|
-{
|
|
|
- int i;
|
|
|
- const Uint16 *src;
|
|
|
- Sint16 *dst;
|
|
|
-
|
|
|
-#if DEBUG_CONVERT
|
|
|
- fprintf(stderr, "Converting AUDIO_S16MSB to AUDIO_S16LSB.\n");
|
|
|
-#endif
|
|
|
-
|
|
|
- src = (const Uint16 *) cvt->buf;
|
|
|
- dst = (Sint16 *) cvt->buf;
|
|
|
- for (i = cvt->len_cvt / sizeof (Uint16); i; --i, ++src, ++dst) {
|
|
|
- const Sint16 val = ((Sint16) SDL_SwapBE16(*src));
|
|
|
- *dst = ((Sint16) SDL_SwapLE16(val));
|
|
|
- }
|
|
|
-
|
|
|
- if (cvt->filters[++cvt->filter_index]) {
|
|
|
- cvt->filters[cvt->filter_index] (cvt, AUDIO_S16LSB);
|
|
|
- }
|
|
|
-}
|
|
|
-
|
|
|
-static void SDLCALL
|
|
|
-SDL_Convert_S16MSB_to_U16MSB(SDL_AudioCVT * cvt, SDL_AudioFormat format)
|
|
|
-{
|
|
|
- int i;
|
|
|
- const Uint16 *src;
|
|
|
- Uint16 *dst;
|
|
|
-
|
|
|
-#if DEBUG_CONVERT
|
|
|
- fprintf(stderr, "Converting AUDIO_S16MSB to AUDIO_U16MSB.\n");
|
|
|
-#endif
|
|
|
-
|
|
|
- src = (const Uint16 *) cvt->buf;
|
|
|
- dst = (Uint16 *) cvt->buf;
|
|
|
- for (i = cvt->len_cvt / sizeof (Uint16); i; --i, ++src, ++dst) {
|
|
|
- const Uint16 val = ((((Sint16) SDL_SwapBE16(*src))) ^ 0x8000);
|
|
|
- *dst = SDL_SwapBE16(val);
|
|
|
- }
|
|
|
-
|
|
|
- if (cvt->filters[++cvt->filter_index]) {
|
|
|
- cvt->filters[cvt->filter_index] (cvt, AUDIO_U16MSB);
|
|
|
- }
|
|
|
-}
|
|
|
-
|
|
|
-static void SDLCALL
|
|
|
-SDL_Convert_S16MSB_to_S32LSB(SDL_AudioCVT * cvt, SDL_AudioFormat format)
|
|
|
-{
|
|
|
- int i;
|
|
|
- const Uint16 *src;
|
|
|
- Sint32 *dst;
|
|
|
-
|
|
|
-#if DEBUG_CONVERT
|
|
|
- fprintf(stderr, "Converting AUDIO_S16MSB to AUDIO_S32LSB.\n");
|
|
|
-#endif
|
|
|
-
|
|
|
- src = ((const Uint16 *) (cvt->buf + cvt->len_cvt)) - 1;
|
|
|
- dst = ((Sint32 *) (cvt->buf + cvt->len_cvt * 2)) - 1;
|
|
|
- for (i = cvt->len_cvt / sizeof (Uint16); i; --i, --src, --dst) {
|
|
|
- const Sint32 val = (((Sint32) ((Sint16) SDL_SwapBE16(*src))) << 16);
|
|
|
- *dst = ((Sint32) SDL_SwapLE32(val));
|
|
|
- }
|
|
|
-
|
|
|
- cvt->len_cvt *= 2;
|
|
|
- if (cvt->filters[++cvt->filter_index]) {
|
|
|
- cvt->filters[cvt->filter_index] (cvt, AUDIO_S32LSB);
|
|
|
- }
|
|
|
-}
|
|
|
-
|
|
|
-static void SDLCALL
|
|
|
-SDL_Convert_S16MSB_to_S32MSB(SDL_AudioCVT * cvt, SDL_AudioFormat format)
|
|
|
-{
|
|
|
- int i;
|
|
|
- const Uint16 *src;
|
|
|
- Sint32 *dst;
|
|
|
-
|
|
|
-#if DEBUG_CONVERT
|
|
|
- fprintf(stderr, "Converting AUDIO_S16MSB to AUDIO_S32MSB.\n");
|
|
|
-#endif
|
|
|
-
|
|
|
- src = ((const Uint16 *) (cvt->buf + cvt->len_cvt)) - 1;
|
|
|
- dst = ((Sint32 *) (cvt->buf + cvt->len_cvt * 2)) - 1;
|
|
|
- for (i = cvt->len_cvt / sizeof (Uint16); i; --i, --src, --dst) {
|
|
|
- const Sint32 val = (((Sint32) ((Sint16) SDL_SwapBE16(*src))) << 16);
|
|
|
- *dst = ((Sint32) SDL_SwapBE32(val));
|
|
|
- }
|
|
|
-
|
|
|
- cvt->len_cvt *= 2;
|
|
|
- if (cvt->filters[++cvt->filter_index]) {
|
|
|
- cvt->filters[cvt->filter_index] (cvt, AUDIO_S32MSB);
|
|
|
- }
|
|
|
-}
|
|
|
-
|
|
|
-static void SDLCALL
|
|
|
-SDL_Convert_S16MSB_to_F32LSB(SDL_AudioCVT * cvt, SDL_AudioFormat format)
|
|
|
-{
|
|
|
- int i;
|
|
|
- const Uint16 *src;
|
|
|
- float *dst;
|
|
|
-
|
|
|
-#if DEBUG_CONVERT
|
|
|
- fprintf(stderr, "Converting AUDIO_S16MSB to AUDIO_F32LSB.\n");
|
|
|
-#endif
|
|
|
-
|
|
|
- src = ((const Uint16 *) (cvt->buf + cvt->len_cvt)) - 1;
|
|
|
- dst = ((float *) (cvt->buf + cvt->len_cvt * 2)) - 1;
|
|
|
- for (i = cvt->len_cvt / sizeof (Uint16); i; --i, --src, --dst) {
|
|
|
- const float val = (((float) ((Sint16) SDL_SwapBE16(*src))) * DIVBY32767);
|
|
|
- *dst = SDL_SwapFloatLE(val);
|
|
|
- }
|
|
|
-
|
|
|
- cvt->len_cvt *= 2;
|
|
|
- if (cvt->filters[++cvt->filter_index]) {
|
|
|
- cvt->filters[cvt->filter_index] (cvt, AUDIO_F32LSB);
|
|
|
- }
|
|
|
-}
|
|
|
-
|
|
|
-static void SDLCALL
|
|
|
-SDL_Convert_S16MSB_to_F32MSB(SDL_AudioCVT * cvt, SDL_AudioFormat format)
|
|
|
-{
|
|
|
- int i;
|
|
|
- const Uint16 *src;
|
|
|
- float *dst;
|
|
|
-
|
|
|
-#if DEBUG_CONVERT
|
|
|
- fprintf(stderr, "Converting AUDIO_S16MSB to AUDIO_F32MSB.\n");
|
|
|
-#endif
|
|
|
-
|
|
|
- src = ((const Uint16 *) (cvt->buf + cvt->len_cvt)) - 1;
|
|
|
- dst = ((float *) (cvt->buf + cvt->len_cvt * 2)) - 1;
|
|
|
- for (i = cvt->len_cvt / sizeof (Uint16); i; --i, --src, --dst) {
|
|
|
- const float val = (((float) ((Sint16) SDL_SwapBE16(*src))) * DIVBY32767);
|
|
|
- *dst = SDL_SwapFloatBE(val);
|
|
|
- }
|
|
|
-
|
|
|
- cvt->len_cvt *= 2;
|
|
|
- if (cvt->filters[++cvt->filter_index]) {
|
|
|
- cvt->filters[cvt->filter_index] (cvt, AUDIO_F32MSB);
|
|
|
- }
|
|
|
-}
|
|
|
-
|
|
|
-static void SDLCALL
|
|
|
-SDL_Convert_S32LSB_to_U8(SDL_AudioCVT * cvt, SDL_AudioFormat format)
|
|
|
-{
|
|
|
- int i;
|
|
|
- const Uint32 *src;
|
|
|
- Uint8 *dst;
|
|
|
-
|
|
|
-#if DEBUG_CONVERT
|
|
|
- fprintf(stderr, "Converting AUDIO_S32LSB to AUDIO_U8.\n");
|
|
|
-#endif
|
|
|
-
|
|
|
- src = (const Uint32 *) cvt->buf;
|
|
|
- dst = (Uint8 *) cvt->buf;
|
|
|
- for (i = cvt->len_cvt / sizeof (Uint32); i; --i, ++src, ++dst) {
|
|
|
- const Uint8 val = ((Uint8) (((((Sint32) SDL_SwapLE32(*src))) ^ 0x80000000) >> 24));
|
|
|
- *dst = val;
|
|
|
- }
|
|
|
-
|
|
|
- cvt->len_cvt /= 4;
|
|
|
- if (cvt->filters[++cvt->filter_index]) {
|
|
|
- cvt->filters[cvt->filter_index] (cvt, AUDIO_U8);
|
|
|
- }
|
|
|
-}
|
|
|
-
|
|
|
-static void SDLCALL
|
|
|
-SDL_Convert_S32LSB_to_S8(SDL_AudioCVT * cvt, SDL_AudioFormat format)
|
|
|
-{
|
|
|
- int i;
|
|
|
- const Uint32 *src;
|
|
|
- Sint8 *dst;
|
|
|
-
|
|
|
-#if DEBUG_CONVERT
|
|
|
- fprintf(stderr, "Converting AUDIO_S32LSB to AUDIO_S8.\n");
|
|
|
-#endif
|
|
|
-
|
|
|
- src = (const Uint32 *) cvt->buf;
|
|
|
- dst = (Sint8 *) cvt->buf;
|
|
|
- for (i = cvt->len_cvt / sizeof (Uint32); i; --i, ++src, ++dst) {
|
|
|
- const Sint8 val = ((Sint8) (((Sint32) SDL_SwapLE32(*src)) >> 24));
|
|
|
- *dst = ((Sint8) val);
|
|
|
- }
|
|
|
-
|
|
|
- cvt->len_cvt /= 4;
|
|
|
- if (cvt->filters[++cvt->filter_index]) {
|
|
|
- cvt->filters[cvt->filter_index] (cvt, AUDIO_S8);
|
|
|
- }
|
|
|
-}
|
|
|
-
|
|
|
-static void SDLCALL
|
|
|
-SDL_Convert_S32LSB_to_U16LSB(SDL_AudioCVT * cvt, SDL_AudioFormat format)
|
|
|
-{
|
|
|
- int i;
|
|
|
- const Uint32 *src;
|
|
|
- Uint16 *dst;
|
|
|
-
|
|
|
-#if DEBUG_CONVERT
|
|
|
- fprintf(stderr, "Converting AUDIO_S32LSB to AUDIO_U16LSB.\n");
|
|
|
-#endif
|
|
|
-
|
|
|
- src = (const Uint32 *) cvt->buf;
|
|
|
- dst = (Uint16 *) cvt->buf;
|
|
|
- for (i = cvt->len_cvt / sizeof (Uint32); i; --i, ++src, ++dst) {
|
|
|
- const Uint16 val = ((Uint16) (((((Sint32) SDL_SwapLE32(*src))) ^ 0x80000000) >> 16));
|
|
|
- *dst = SDL_SwapLE16(val);
|
|
|
- }
|
|
|
-
|
|
|
- cvt->len_cvt /= 2;
|
|
|
- if (cvt->filters[++cvt->filter_index]) {
|
|
|
- cvt->filters[cvt->filter_index] (cvt, AUDIO_U16LSB);
|
|
|
- }
|
|
|
-}
|
|
|
-
|
|
|
-static void SDLCALL
|
|
|
-SDL_Convert_S32LSB_to_S16LSB(SDL_AudioCVT * cvt, SDL_AudioFormat format)
|
|
|
-{
|
|
|
- int i;
|
|
|
- const Uint32 *src;
|
|
|
- Sint16 *dst;
|
|
|
-
|
|
|
-#if DEBUG_CONVERT
|
|
|
- fprintf(stderr, "Converting AUDIO_S32LSB to AUDIO_S16LSB.\n");
|
|
|
-#endif
|
|
|
-
|
|
|
- src = (const Uint32 *) cvt->buf;
|
|
|
- dst = (Sint16 *) cvt->buf;
|
|
|
- for (i = cvt->len_cvt / sizeof (Uint32); i; --i, ++src, ++dst) {
|
|
|
- const Sint16 val = ((Sint16) (((Sint32) SDL_SwapLE32(*src)) >> 16));
|
|
|
- *dst = ((Sint16) SDL_SwapLE16(val));
|
|
|
- }
|
|
|
-
|
|
|
- cvt->len_cvt /= 2;
|
|
|
- if (cvt->filters[++cvt->filter_index]) {
|
|
|
- cvt->filters[cvt->filter_index] (cvt, AUDIO_S16LSB);
|
|
|
- }
|
|
|
-}
|
|
|
-
|
|
|
-static void SDLCALL
|
|
|
-SDL_Convert_S32LSB_to_U16MSB(SDL_AudioCVT * cvt, SDL_AudioFormat format)
|
|
|
-{
|
|
|
- int i;
|
|
|
- const Uint32 *src;
|
|
|
- Uint16 *dst;
|
|
|
-
|
|
|
-#if DEBUG_CONVERT
|
|
|
- fprintf(stderr, "Converting AUDIO_S32LSB to AUDIO_U16MSB.\n");
|
|
|
-#endif
|
|
|
-
|
|
|
- src = (const Uint32 *) cvt->buf;
|
|
|
- dst = (Uint16 *) cvt->buf;
|
|
|
- for (i = cvt->len_cvt / sizeof (Uint32); i; --i, ++src, ++dst) {
|
|
|
- const Uint16 val = ((Uint16) (((((Sint32) SDL_SwapLE32(*src))) ^ 0x80000000) >> 16));
|
|
|
- *dst = SDL_SwapBE16(val);
|
|
|
- }
|
|
|
-
|
|
|
- cvt->len_cvt /= 2;
|
|
|
- if (cvt->filters[++cvt->filter_index]) {
|
|
|
- cvt->filters[cvt->filter_index] (cvt, AUDIO_U16MSB);
|
|
|
- }
|
|
|
-}
|
|
|
-
|
|
|
-static void SDLCALL
|
|
|
-SDL_Convert_S32LSB_to_S16MSB(SDL_AudioCVT * cvt, SDL_AudioFormat format)
|
|
|
-{
|
|
|
- int i;
|
|
|
- const Uint32 *src;
|
|
|
- Sint16 *dst;
|
|
|
-
|
|
|
-#if DEBUG_CONVERT
|
|
|
- fprintf(stderr, "Converting AUDIO_S32LSB to AUDIO_S16MSB.\n");
|
|
|
-#endif
|
|
|
-
|
|
|
- src = (const Uint32 *) cvt->buf;
|
|
|
- dst = (Sint16 *) cvt->buf;
|
|
|
- for (i = cvt->len_cvt / sizeof (Uint32); i; --i, ++src, ++dst) {
|
|
|
- const Sint16 val = ((Sint16) (((Sint32) SDL_SwapLE32(*src)) >> 16));
|
|
|
- *dst = ((Sint16) SDL_SwapBE16(val));
|
|
|
- }
|
|
|
-
|
|
|
- cvt->len_cvt /= 2;
|
|
|
- if (cvt->filters[++cvt->filter_index]) {
|
|
|
- cvt->filters[cvt->filter_index] (cvt, AUDIO_S16MSB);
|
|
|
- }
|
|
|
-}
|
|
|
-
|
|
|
-static void SDLCALL
|
|
|
-SDL_Convert_S32LSB_to_S32MSB(SDL_AudioCVT * cvt, SDL_AudioFormat format)
|
|
|
-{
|
|
|
- int i;
|
|
|
- const Uint32 *src;
|
|
|
- Sint32 *dst;
|
|
|
-
|
|
|
-#if DEBUG_CONVERT
|
|
|
- fprintf(stderr, "Converting AUDIO_S32LSB to AUDIO_S32MSB.\n");
|
|
|
-#endif
|
|
|
-
|
|
|
- src = (const Uint32 *) cvt->buf;
|
|
|
- dst = (Sint32 *) cvt->buf;
|
|
|
- for (i = cvt->len_cvt / sizeof (Uint32); i; --i, ++src, ++dst) {
|
|
|
- const Sint32 val = ((Sint32) SDL_SwapLE32(*src));
|
|
|
- *dst = ((Sint32) SDL_SwapBE32(val));
|
|
|
- }
|
|
|
-
|
|
|
- if (cvt->filters[++cvt->filter_index]) {
|
|
|
- cvt->filters[cvt->filter_index] (cvt, AUDIO_S32MSB);
|
|
|
- }
|
|
|
-}
|
|
|
-
|
|
|
-static void SDLCALL
|
|
|
-SDL_Convert_S32LSB_to_F32LSB(SDL_AudioCVT * cvt, SDL_AudioFormat format)
|
|
|
-{
|
|
|
- int i;
|
|
|
- const Uint32 *src;
|
|
|
- float *dst;
|
|
|
-
|
|
|
-#if DEBUG_CONVERT
|
|
|
- fprintf(stderr, "Converting AUDIO_S32LSB to AUDIO_F32LSB.\n");
|
|
|
-#endif
|
|
|
-
|
|
|
- src = (const Uint32 *) cvt->buf;
|
|
|
- dst = (float *) cvt->buf;
|
|
|
- for (i = cvt->len_cvt / sizeof (Uint32); i; --i, ++src, ++dst) {
|
|
|
- const float val = (((float) ((Sint32) SDL_SwapLE32(*src))) * DIVBY2147483647);
|
|
|
- *dst = SDL_SwapFloatLE(val);
|
|
|
- }
|
|
|
-
|
|
|
- if (cvt->filters[++cvt->filter_index]) {
|
|
|
- cvt->filters[cvt->filter_index] (cvt, AUDIO_F32LSB);
|
|
|
- }
|
|
|
-}
|
|
|
-
|
|
|
-static void SDLCALL
|
|
|
-SDL_Convert_S32LSB_to_F32MSB(SDL_AudioCVT * cvt, SDL_AudioFormat format)
|
|
|
-{
|
|
|
- int i;
|
|
|
- const Uint32 *src;
|
|
|
- float *dst;
|
|
|
-
|
|
|
-#if DEBUG_CONVERT
|
|
|
- fprintf(stderr, "Converting AUDIO_S32LSB to AUDIO_F32MSB.\n");
|
|
|
-#endif
|
|
|
-
|
|
|
- src = (const Uint32 *) cvt->buf;
|
|
|
- dst = (float *) cvt->buf;
|
|
|
- for (i = cvt->len_cvt / sizeof (Uint32); i; --i, ++src, ++dst) {
|
|
|
- const float val = (((float) ((Sint32) SDL_SwapLE32(*src))) * DIVBY2147483647);
|
|
|
- *dst = SDL_SwapFloatBE(val);
|
|
|
- }
|
|
|
-
|
|
|
- if (cvt->filters[++cvt->filter_index]) {
|
|
|
- cvt->filters[cvt->filter_index] (cvt, AUDIO_F32MSB);
|
|
|
- }
|
|
|
-}
|
|
|
-
|
|
|
-static void SDLCALL
|
|
|
-SDL_Convert_S32MSB_to_U8(SDL_AudioCVT * cvt, SDL_AudioFormat format)
|
|
|
-{
|
|
|
- int i;
|
|
|
- const Uint32 *src;
|
|
|
- Uint8 *dst;
|
|
|
-
|
|
|
-#if DEBUG_CONVERT
|
|
|
- fprintf(stderr, "Converting AUDIO_S32MSB to AUDIO_U8.\n");
|
|
|
-#endif
|
|
|
-
|
|
|
- src = (const Uint32 *) cvt->buf;
|
|
|
- dst = (Uint8 *) cvt->buf;
|
|
|
- for (i = cvt->len_cvt / sizeof (Uint32); i; --i, ++src, ++dst) {
|
|
|
- const Uint8 val = ((Uint8) (((((Sint32) SDL_SwapBE32(*src))) ^ 0x80000000) >> 24));
|
|
|
- *dst = val;
|
|
|
- }
|
|
|
-
|
|
|
- cvt->len_cvt /= 4;
|
|
|
- if (cvt->filters[++cvt->filter_index]) {
|
|
|
- cvt->filters[cvt->filter_index] (cvt, AUDIO_U8);
|
|
|
- }
|
|
|
-}
|
|
|
-
|
|
|
-static void SDLCALL
|
|
|
-SDL_Convert_S32MSB_to_S8(SDL_AudioCVT * cvt, SDL_AudioFormat format)
|
|
|
-{
|
|
|
- int i;
|
|
|
- const Uint32 *src;
|
|
|
- Sint8 *dst;
|
|
|
-
|
|
|
-#if DEBUG_CONVERT
|
|
|
- fprintf(stderr, "Converting AUDIO_S32MSB to AUDIO_S8.\n");
|
|
|
-#endif
|
|
|
-
|
|
|
- src = (const Uint32 *) cvt->buf;
|
|
|
- dst = (Sint8 *) cvt->buf;
|
|
|
- for (i = cvt->len_cvt / sizeof (Uint32); i; --i, ++src, ++dst) {
|
|
|
- const Sint8 val = ((Sint8) (((Sint32) SDL_SwapBE32(*src)) >> 24));
|
|
|
- *dst = ((Sint8) val);
|
|
|
- }
|
|
|
-
|
|
|
- cvt->len_cvt /= 4;
|
|
|
- if (cvt->filters[++cvt->filter_index]) {
|
|
|
- cvt->filters[cvt->filter_index] (cvt, AUDIO_S8);
|
|
|
- }
|
|
|
-}
|
|
|
-
|
|
|
-static void SDLCALL
|
|
|
-SDL_Convert_S32MSB_to_U16LSB(SDL_AudioCVT * cvt, SDL_AudioFormat format)
|
|
|
-{
|
|
|
- int i;
|
|
|
- const Uint32 *src;
|
|
|
- Uint16 *dst;
|
|
|
-
|
|
|
-#if DEBUG_CONVERT
|
|
|
- fprintf(stderr, "Converting AUDIO_S32MSB to AUDIO_U16LSB.\n");
|
|
|
-#endif
|
|
|
-
|
|
|
- src = (const Uint32 *) cvt->buf;
|
|
|
- dst = (Uint16 *) cvt->buf;
|
|
|
- for (i = cvt->len_cvt / sizeof (Uint32); i; --i, ++src, ++dst) {
|
|
|
- const Uint16 val = ((Uint16) (((((Sint32) SDL_SwapBE32(*src))) ^ 0x80000000) >> 16));
|
|
|
- *dst = SDL_SwapLE16(val);
|
|
|
- }
|
|
|
-
|
|
|
- cvt->len_cvt /= 2;
|
|
|
- if (cvt->filters[++cvt->filter_index]) {
|
|
|
- cvt->filters[cvt->filter_index] (cvt, AUDIO_U16LSB);
|
|
|
- }
|
|
|
-}
|
|
|
-
|
|
|
-static void SDLCALL
|
|
|
-SDL_Convert_S32MSB_to_S16LSB(SDL_AudioCVT * cvt, SDL_AudioFormat format)
|
|
|
-{
|
|
|
- int i;
|
|
|
- const Uint32 *src;
|
|
|
- Sint16 *dst;
|
|
|
-
|
|
|
-#if DEBUG_CONVERT
|
|
|
- fprintf(stderr, "Converting AUDIO_S32MSB to AUDIO_S16LSB.\n");
|
|
|
-#endif
|
|
|
-
|
|
|
- src = (const Uint32 *) cvt->buf;
|
|
|
- dst = (Sint16 *) cvt->buf;
|
|
|
- for (i = cvt->len_cvt / sizeof (Uint32); i; --i, ++src, ++dst) {
|
|
|
- const Sint16 val = ((Sint16) (((Sint32) SDL_SwapBE32(*src)) >> 16));
|
|
|
- *dst = ((Sint16) SDL_SwapLE16(val));
|
|
|
- }
|
|
|
-
|
|
|
- cvt->len_cvt /= 2;
|
|
|
- if (cvt->filters[++cvt->filter_index]) {
|
|
|
- cvt->filters[cvt->filter_index] (cvt, AUDIO_S16LSB);
|
|
|
- }
|
|
|
-}
|
|
|
-
|
|
|
-static void SDLCALL
|
|
|
-SDL_Convert_S32MSB_to_U16MSB(SDL_AudioCVT * cvt, SDL_AudioFormat format)
|
|
|
-{
|
|
|
- int i;
|
|
|
- const Uint32 *src;
|
|
|
- Uint16 *dst;
|
|
|
-
|
|
|
-#if DEBUG_CONVERT
|
|
|
- fprintf(stderr, "Converting AUDIO_S32MSB to AUDIO_U16MSB.\n");
|
|
|
-#endif
|
|
|
-
|
|
|
- src = (const Uint32 *) cvt->buf;
|
|
|
- dst = (Uint16 *) cvt->buf;
|
|
|
- for (i = cvt->len_cvt / sizeof (Uint32); i; --i, ++src, ++dst) {
|
|
|
- const Uint16 val = ((Uint16) (((((Sint32) SDL_SwapBE32(*src))) ^ 0x80000000) >> 16));
|
|
|
- *dst = SDL_SwapBE16(val);
|
|
|
- }
|
|
|
-
|
|
|
- cvt->len_cvt /= 2;
|
|
|
- if (cvt->filters[++cvt->filter_index]) {
|
|
|
- cvt->filters[cvt->filter_index] (cvt, AUDIO_U16MSB);
|
|
|
- }
|
|
|
-}
|
|
|
-
|
|
|
-static void SDLCALL
|
|
|
-SDL_Convert_S32MSB_to_S16MSB(SDL_AudioCVT * cvt, SDL_AudioFormat format)
|
|
|
-{
|
|
|
- int i;
|
|
|
- const Uint32 *src;
|
|
|
- Sint16 *dst;
|
|
|
-
|
|
|
-#if DEBUG_CONVERT
|
|
|
- fprintf(stderr, "Converting AUDIO_S32MSB to AUDIO_S16MSB.\n");
|
|
|
-#endif
|
|
|
-
|
|
|
- src = (const Uint32 *) cvt->buf;
|
|
|
- dst = (Sint16 *) cvt->buf;
|
|
|
- for (i = cvt->len_cvt / sizeof (Uint32); i; --i, ++src, ++dst) {
|
|
|
- const Sint16 val = ((Sint16) (((Sint32) SDL_SwapBE32(*src)) >> 16));
|
|
|
- *dst = ((Sint16) SDL_SwapBE16(val));
|
|
|
- }
|
|
|
-
|
|
|
- cvt->len_cvt /= 2;
|
|
|
- if (cvt->filters[++cvt->filter_index]) {
|
|
|
- cvt->filters[cvt->filter_index] (cvt, AUDIO_S16MSB);
|
|
|
- }
|
|
|
-}
|
|
|
-
|
|
|
-static void SDLCALL
|
|
|
-SDL_Convert_S32MSB_to_S32LSB(SDL_AudioCVT * cvt, SDL_AudioFormat format)
|
|
|
-{
|
|
|
- int i;
|
|
|
- const Uint32 *src;
|
|
|
- Sint32 *dst;
|
|
|
-
|
|
|
-#if DEBUG_CONVERT
|
|
|
- fprintf(stderr, "Converting AUDIO_S32MSB to AUDIO_S32LSB.\n");
|
|
|
-#endif
|
|
|
-
|
|
|
- src = (const Uint32 *) cvt->buf;
|
|
|
- dst = (Sint32 *) cvt->buf;
|
|
|
- for (i = cvt->len_cvt / sizeof (Uint32); i; --i, ++src, ++dst) {
|
|
|
- const Sint32 val = ((Sint32) SDL_SwapBE32(*src));
|
|
|
- *dst = ((Sint32) SDL_SwapLE32(val));
|
|
|
- }
|
|
|
-
|
|
|
- if (cvt->filters[++cvt->filter_index]) {
|
|
|
- cvt->filters[cvt->filter_index] (cvt, AUDIO_S32LSB);
|
|
|
- }
|
|
|
-}
|
|
|
-
|
|
|
-static void SDLCALL
|
|
|
-SDL_Convert_S32MSB_to_F32LSB(SDL_AudioCVT * cvt, SDL_AudioFormat format)
|
|
|
-{
|
|
|
- int i;
|
|
|
- const Uint32 *src;
|
|
|
- float *dst;
|
|
|
-
|
|
|
-#if DEBUG_CONVERT
|
|
|
- fprintf(stderr, "Converting AUDIO_S32MSB to AUDIO_F32LSB.\n");
|
|
|
-#endif
|
|
|
-
|
|
|
- src = (const Uint32 *) cvt->buf;
|
|
|
- dst = (float *) cvt->buf;
|
|
|
- for (i = cvt->len_cvt / sizeof (Uint32); i; --i, ++src, ++dst) {
|
|
|
- const float val = (((float) ((Sint32) SDL_SwapBE32(*src))) * DIVBY2147483647);
|
|
|
- *dst = SDL_SwapFloatLE(val);
|
|
|
- }
|
|
|
-
|
|
|
- if (cvt->filters[++cvt->filter_index]) {
|
|
|
- cvt->filters[cvt->filter_index] (cvt, AUDIO_F32LSB);
|
|
|
- }
|
|
|
-}
|
|
|
-
|
|
|
-static void SDLCALL
|
|
|
-SDL_Convert_S32MSB_to_F32MSB(SDL_AudioCVT * cvt, SDL_AudioFormat format)
|
|
|
-{
|
|
|
- int i;
|
|
|
- const Uint32 *src;
|
|
|
- float *dst;
|
|
|
-
|
|
|
-#if DEBUG_CONVERT
|
|
|
- fprintf(stderr, "Converting AUDIO_S32MSB to AUDIO_F32MSB.\n");
|
|
|
-#endif
|
|
|
-
|
|
|
- src = (const Uint32 *) cvt->buf;
|
|
|
- dst = (float *) cvt->buf;
|
|
|
- for (i = cvt->len_cvt / sizeof (Uint32); i; --i, ++src, ++dst) {
|
|
|
- const float val = (((float) ((Sint32) SDL_SwapBE32(*src))) * DIVBY2147483647);
|
|
|
- *dst = SDL_SwapFloatBE(val);
|
|
|
- }
|
|
|
-
|
|
|
- if (cvt->filters[++cvt->filter_index]) {
|
|
|
- cvt->filters[cvt->filter_index] (cvt, AUDIO_F32MSB);
|
|
|
- }
|
|
|
-}
|
|
|
-
|
|
|
-static void SDLCALL
|
|
|
-SDL_Convert_F32LSB_to_U8(SDL_AudioCVT * cvt, SDL_AudioFormat format)
|
|
|
-{
|
|
|
- int i;
|
|
|
- const float *src;
|
|
|
- Uint8 *dst;
|
|
|
-
|
|
|
-#if DEBUG_CONVERT
|
|
|
- fprintf(stderr, "Converting AUDIO_F32LSB to AUDIO_U8.\n");
|
|
|
-#endif
|
|
|
-
|
|
|
- src = (const float *) cvt->buf;
|
|
|
- dst = (Uint8 *) cvt->buf;
|
|
|
- for (i = cvt->len_cvt / sizeof (float); i; --i, ++src, ++dst) {
|
|
|
- const Uint8 val = ((Uint8) ((SDL_SwapFloatLE(*src) + 1.0f) * 127.0f));
|
|
|
- *dst = val;
|
|
|
- }
|
|
|
-
|
|
|
- cvt->len_cvt /= 4;
|
|
|
- if (cvt->filters[++cvt->filter_index]) {
|
|
|
- cvt->filters[cvt->filter_index] (cvt, AUDIO_U8);
|
|
|
- }
|
|
|
-}
|
|
|
-
|
|
|
-static void SDLCALL
|
|
|
-SDL_Convert_F32LSB_to_S8(SDL_AudioCVT * cvt, SDL_AudioFormat format)
|
|
|
-{
|
|
|
- int i;
|
|
|
- const float *src;
|
|
|
- Sint8 *dst;
|
|
|
-
|
|
|
-#if DEBUG_CONVERT
|
|
|
- fprintf(stderr, "Converting AUDIO_F32LSB to AUDIO_S8.\n");
|
|
|
-#endif
|
|
|
-
|
|
|
- src = (const float *) cvt->buf;
|
|
|
- dst = (Sint8 *) cvt->buf;
|
|
|
- for (i = cvt->len_cvt / sizeof (float); i; --i, ++src, ++dst) {
|
|
|
- const Sint8 val = ((Sint8) (SDL_SwapFloatLE(*src) * 127.0f));
|
|
|
- *dst = ((Sint8) val);
|
|
|
- }
|
|
|
-
|
|
|
- cvt->len_cvt /= 4;
|
|
|
- if (cvt->filters[++cvt->filter_index]) {
|
|
|
- cvt->filters[cvt->filter_index] (cvt, AUDIO_S8);
|
|
|
- }
|
|
|
-}
|
|
|
-
|
|
|
-static void SDLCALL
|
|
|
-SDL_Convert_F32LSB_to_U16LSB(SDL_AudioCVT * cvt, SDL_AudioFormat format)
|
|
|
-{
|
|
|
- int i;
|
|
|
- const float *src;
|
|
|
- Uint16 *dst;
|
|
|
-
|
|
|
-#if DEBUG_CONVERT
|
|
|
- fprintf(stderr, "Converting AUDIO_F32LSB to AUDIO_U16LSB.\n");
|
|
|
-#endif
|
|
|
-
|
|
|
- src = (const float *) cvt->buf;
|
|
|
- dst = (Uint16 *) cvt->buf;
|
|
|
- for (i = cvt->len_cvt / sizeof (float); i; --i, ++src, ++dst) {
|
|
|
- const Uint16 val = ((Uint16) ((SDL_SwapFloatLE(*src) + 1.0f) * 32767.0f));
|
|
|
- *dst = SDL_SwapLE16(val);
|
|
|
- }
|
|
|
-
|
|
|
- cvt->len_cvt /= 2;
|
|
|
- if (cvt->filters[++cvt->filter_index]) {
|
|
|
- cvt->filters[cvt->filter_index] (cvt, AUDIO_U16LSB);
|
|
|
- }
|
|
|
-}
|
|
|
-
|
|
|
-static void SDLCALL
|
|
|
-SDL_Convert_F32LSB_to_S16LSB(SDL_AudioCVT * cvt, SDL_AudioFormat format)
|
|
|
-{
|
|
|
- int i;
|
|
|
- const float *src;
|
|
|
- Sint16 *dst;
|
|
|
-
|
|
|
-#if DEBUG_CONVERT
|
|
|
- fprintf(stderr, "Converting AUDIO_F32LSB to AUDIO_S16LSB.\n");
|
|
|
-#endif
|
|
|
-
|
|
|
- src = (const float *) cvt->buf;
|
|
|
- dst = (Sint16 *) cvt->buf;
|
|
|
- for (i = cvt->len_cvt / sizeof (float); i; --i, ++src, ++dst) {
|
|
|
- const Sint16 val = ((Sint16) (SDL_SwapFloatLE(*src) * 32767.0f));
|
|
|
- *dst = ((Sint16) SDL_SwapLE16(val));
|
|
|
- }
|
|
|
-
|
|
|
- cvt->len_cvt /= 2;
|
|
|
- if (cvt->filters[++cvt->filter_index]) {
|
|
|
- cvt->filters[cvt->filter_index] (cvt, AUDIO_S16LSB);
|
|
|
- }
|
|
|
-}
|
|
|
-
|
|
|
-static void SDLCALL
|
|
|
-SDL_Convert_F32LSB_to_U16MSB(SDL_AudioCVT * cvt, SDL_AudioFormat format)
|
|
|
-{
|
|
|
- int i;
|
|
|
- const float *src;
|
|
|
- Uint16 *dst;
|
|
|
-
|
|
|
-#if DEBUG_CONVERT
|
|
|
- fprintf(stderr, "Converting AUDIO_F32LSB to AUDIO_U16MSB.\n");
|
|
|
-#endif
|
|
|
-
|
|
|
- src = (const float *) cvt->buf;
|
|
|
- dst = (Uint16 *) cvt->buf;
|
|
|
- for (i = cvt->len_cvt / sizeof (float); i; --i, ++src, ++dst) {
|
|
|
- const Uint16 val = ((Uint16) ((SDL_SwapFloatLE(*src) + 1.0f) * 32767.0f));
|
|
|
- *dst = SDL_SwapBE16(val);
|
|
|
- }
|
|
|
-
|
|
|
- cvt->len_cvt /= 2;
|
|
|
- if (cvt->filters[++cvt->filter_index]) {
|
|
|
- cvt->filters[cvt->filter_index] (cvt, AUDIO_U16MSB);
|
|
|
- }
|
|
|
-}
|
|
|
-
|
|
|
-static void SDLCALL
|
|
|
-SDL_Convert_F32LSB_to_S16MSB(SDL_AudioCVT * cvt, SDL_AudioFormat format)
|
|
|
-{
|
|
|
- int i;
|
|
|
- const float *src;
|
|
|
- Sint16 *dst;
|
|
|
-
|
|
|
-#if DEBUG_CONVERT
|
|
|
- fprintf(stderr, "Converting AUDIO_F32LSB to AUDIO_S16MSB.\n");
|
|
|
-#endif
|
|
|
-
|
|
|
- src = (const float *) cvt->buf;
|
|
|
- dst = (Sint16 *) cvt->buf;
|
|
|
- for (i = cvt->len_cvt / sizeof (float); i; --i, ++src, ++dst) {
|
|
|
- const Sint16 val = ((Sint16) (SDL_SwapFloatLE(*src) * 32767.0f));
|
|
|
- *dst = ((Sint16) SDL_SwapBE16(val));
|
|
|
- }
|
|
|
-
|
|
|
- cvt->len_cvt /= 2;
|
|
|
- if (cvt->filters[++cvt->filter_index]) {
|
|
|
- cvt->filters[cvt->filter_index] (cvt, AUDIO_S16MSB);
|
|
|
- }
|
|
|
-}
|
|
|
-
|
|
|
-static void SDLCALL
|
|
|
-SDL_Convert_F32LSB_to_S32LSB(SDL_AudioCVT * cvt, SDL_AudioFormat format)
|
|
|
-{
|
|
|
- int i;
|
|
|
- const float *src;
|
|
|
- Sint32 *dst;
|
|
|
-
|
|
|
-#if DEBUG_CONVERT
|
|
|
- fprintf(stderr, "Converting AUDIO_F32LSB to AUDIO_S32LSB.\n");
|
|
|
-#endif
|
|
|
-
|
|
|
- src = (const float *) cvt->buf;
|
|
|
- dst = (Sint32 *) cvt->buf;
|
|
|
- for (i = cvt->len_cvt / sizeof (float); i; --i, ++src, ++dst) {
|
|
|
- const Sint32 val = ((Sint32) (SDL_SwapFloatLE(*src) * 2147483647.0));
|
|
|
- *dst = ((Sint32) SDL_SwapLE32(val));
|
|
|
- }
|
|
|
-
|
|
|
- if (cvt->filters[++cvt->filter_index]) {
|
|
|
- cvt->filters[cvt->filter_index] (cvt, AUDIO_S32LSB);
|
|
|
- }
|
|
|
-}
|
|
|
-
|
|
|
-static void SDLCALL
|
|
|
-SDL_Convert_F32LSB_to_S32MSB(SDL_AudioCVT * cvt, SDL_AudioFormat format)
|
|
|
-{
|
|
|
- int i;
|
|
|
- const float *src;
|
|
|
- Sint32 *dst;
|
|
|
-
|
|
|
-#if DEBUG_CONVERT
|
|
|
- fprintf(stderr, "Converting AUDIO_F32LSB to AUDIO_S32MSB.\n");
|
|
|
-#endif
|
|
|
-
|
|
|
- src = (const float *) cvt->buf;
|
|
|
- dst = (Sint32 *) cvt->buf;
|
|
|
- for (i = cvt->len_cvt / sizeof (float); i; --i, ++src, ++dst) {
|
|
|
- const Sint32 val = ((Sint32) (SDL_SwapFloatLE(*src) * 2147483647.0));
|
|
|
- *dst = ((Sint32) SDL_SwapBE32(val));
|
|
|
- }
|
|
|
-
|
|
|
- if (cvt->filters[++cvt->filter_index]) {
|
|
|
- cvt->filters[cvt->filter_index] (cvt, AUDIO_S32MSB);
|
|
|
- }
|
|
|
-}
|
|
|
-
|
|
|
-static void SDLCALL
|
|
|
-SDL_Convert_F32LSB_to_F32MSB(SDL_AudioCVT * cvt, SDL_AudioFormat format)
|
|
|
-{
|
|
|
- int i;
|
|
|
- const float *src;
|
|
|
- float *dst;
|
|
|
-
|
|
|
-#if DEBUG_CONVERT
|
|
|
- fprintf(stderr, "Converting AUDIO_F32LSB to AUDIO_F32MSB.\n");
|
|
|
-#endif
|
|
|
-
|
|
|
- src = (const float *) cvt->buf;
|
|
|
- dst = (float *) cvt->buf;
|
|
|
- for (i = cvt->len_cvt / sizeof (float); i; --i, ++src, ++dst) {
|
|
|
- const float val = SDL_SwapFloatLE(*src);
|
|
|
- *dst = SDL_SwapFloatBE(val);
|
|
|
- }
|
|
|
-
|
|
|
- if (cvt->filters[++cvt->filter_index]) {
|
|
|
- cvt->filters[cvt->filter_index] (cvt, AUDIO_F32MSB);
|
|
|
- }
|
|
|
-}
|
|
|
-
|
|
|
-static void SDLCALL
|
|
|
-SDL_Convert_F32MSB_to_U8(SDL_AudioCVT * cvt, SDL_AudioFormat format)
|
|
|
-{
|
|
|
- int i;
|
|
|
- const float *src;
|
|
|
- Uint8 *dst;
|
|
|
-
|
|
|
-#if DEBUG_CONVERT
|
|
|
- fprintf(stderr, "Converting AUDIO_F32MSB to AUDIO_U8.\n");
|
|
|
-#endif
|
|
|
-
|
|
|
- src = (const float *) cvt->buf;
|
|
|
- dst = (Uint8 *) cvt->buf;
|
|
|
- for (i = cvt->len_cvt / sizeof (float); i; --i, ++src, ++dst) {
|
|
|
- const Uint8 val = ((Uint8) ((SDL_SwapFloatBE(*src) + 1.0f) * 127.0f));
|
|
|
- *dst = val;
|
|
|
- }
|
|
|
-
|
|
|
- cvt->len_cvt /= 4;
|
|
|
- if (cvt->filters[++cvt->filter_index]) {
|
|
|
- cvt->filters[cvt->filter_index] (cvt, AUDIO_U8);
|
|
|
- }
|
|
|
-}
|
|
|
-
|
|
|
-static void SDLCALL
|
|
|
-SDL_Convert_F32MSB_to_S8(SDL_AudioCVT * cvt, SDL_AudioFormat format)
|
|
|
-{
|
|
|
- int i;
|
|
|
- const float *src;
|
|
|
- Sint8 *dst;
|
|
|
-
|
|
|
-#if DEBUG_CONVERT
|
|
|
- fprintf(stderr, "Converting AUDIO_F32MSB to AUDIO_S8.\n");
|
|
|
-#endif
|
|
|
-
|
|
|
- src = (const float *) cvt->buf;
|
|
|
- dst = (Sint8 *) cvt->buf;
|
|
|
- for (i = cvt->len_cvt / sizeof (float); i; --i, ++src, ++dst) {
|
|
|
- const Sint8 val = ((Sint8) (SDL_SwapFloatBE(*src) * 127.0f));
|
|
|
- *dst = ((Sint8) val);
|
|
|
- }
|
|
|
-
|
|
|
- cvt->len_cvt /= 4;
|
|
|
- if (cvt->filters[++cvt->filter_index]) {
|
|
|
- cvt->filters[cvt->filter_index] (cvt, AUDIO_S8);
|
|
|
- }
|
|
|
-}
|
|
|
-
|
|
|
-static void SDLCALL
|
|
|
-SDL_Convert_F32MSB_to_U16LSB(SDL_AudioCVT * cvt, SDL_AudioFormat format)
|
|
|
-{
|
|
|
- int i;
|
|
|
- const float *src;
|
|
|
- Uint16 *dst;
|
|
|
-
|
|
|
-#if DEBUG_CONVERT
|
|
|
- fprintf(stderr, "Converting AUDIO_F32MSB to AUDIO_U16LSB.\n");
|
|
|
-#endif
|
|
|
-
|
|
|
- src = (const float *) cvt->buf;
|
|
|
- dst = (Uint16 *) cvt->buf;
|
|
|
- for (i = cvt->len_cvt / sizeof (float); i; --i, ++src, ++dst) {
|
|
|
- const Uint16 val = ((Uint16) ((SDL_SwapFloatBE(*src) + 1.0f) * 32767.0f));
|
|
|
- *dst = SDL_SwapLE16(val);
|
|
|
- }
|
|
|
-
|
|
|
- cvt->len_cvt /= 2;
|
|
|
- if (cvt->filters[++cvt->filter_index]) {
|
|
|
- cvt->filters[cvt->filter_index] (cvt, AUDIO_U16LSB);
|
|
|
- }
|
|
|
-}
|
|
|
-
|
|
|
-static void SDLCALL
|
|
|
-SDL_Convert_F32MSB_to_S16LSB(SDL_AudioCVT * cvt, SDL_AudioFormat format)
|
|
|
-{
|
|
|
- int i;
|
|
|
- const float *src;
|
|
|
- Sint16 *dst;
|
|
|
-
|
|
|
-#if DEBUG_CONVERT
|
|
|
- fprintf(stderr, "Converting AUDIO_F32MSB to AUDIO_S16LSB.\n");
|
|
|
-#endif
|
|
|
-
|
|
|
- src = (const float *) cvt->buf;
|
|
|
- dst = (Sint16 *) cvt->buf;
|
|
|
- for (i = cvt->len_cvt / sizeof (float); i; --i, ++src, ++dst) {
|
|
|
- const Sint16 val = ((Sint16) (SDL_SwapFloatBE(*src) * 32767.0f));
|
|
|
- *dst = ((Sint16) SDL_SwapLE16(val));
|
|
|
- }
|
|
|
-
|
|
|
- cvt->len_cvt /= 2;
|
|
|
- if (cvt->filters[++cvt->filter_index]) {
|
|
|
- cvt->filters[cvt->filter_index] (cvt, AUDIO_S16LSB);
|
|
|
- }
|
|
|
-}
|
|
|
-
|
|
|
-static void SDLCALL
|
|
|
-SDL_Convert_F32MSB_to_U16MSB(SDL_AudioCVT * cvt, SDL_AudioFormat format)
|
|
|
-{
|
|
|
- int i;
|
|
|
- const float *src;
|
|
|
- Uint16 *dst;
|
|
|
-
|
|
|
-#if DEBUG_CONVERT
|
|
|
- fprintf(stderr, "Converting AUDIO_F32MSB to AUDIO_U16MSB.\n");
|
|
|
-#endif
|
|
|
-
|
|
|
- src = (const float *) cvt->buf;
|
|
|
- dst = (Uint16 *) cvt->buf;
|
|
|
- for (i = cvt->len_cvt / sizeof (float); i; --i, ++src, ++dst) {
|
|
|
- const Uint16 val = ((Uint16) ((SDL_SwapFloatBE(*src) + 1.0f) * 32767.0f));
|
|
|
- *dst = SDL_SwapBE16(val);
|
|
|
- }
|
|
|
-
|
|
|
- cvt->len_cvt /= 2;
|
|
|
- if (cvt->filters[++cvt->filter_index]) {
|
|
|
- cvt->filters[cvt->filter_index] (cvt, AUDIO_U16MSB);
|
|
|
- }
|
|
|
-}
|
|
|
-
|
|
|
-static void SDLCALL
|
|
|
-SDL_Convert_F32MSB_to_S16MSB(SDL_AudioCVT * cvt, SDL_AudioFormat format)
|
|
|
-{
|
|
|
- int i;
|
|
|
- const float *src;
|
|
|
- Sint16 *dst;
|
|
|
-
|
|
|
-#if DEBUG_CONVERT
|
|
|
- fprintf(stderr, "Converting AUDIO_F32MSB to AUDIO_S16MSB.\n");
|
|
|
-#endif
|
|
|
-
|
|
|
- src = (const float *) cvt->buf;
|
|
|
- dst = (Sint16 *) cvt->buf;
|
|
|
- for (i = cvt->len_cvt / sizeof (float); i; --i, ++src, ++dst) {
|
|
|
- const Sint16 val = ((Sint16) (SDL_SwapFloatBE(*src) * 32767.0f));
|
|
|
- *dst = ((Sint16) SDL_SwapBE16(val));
|
|
|
- }
|
|
|
-
|
|
|
- cvt->len_cvt /= 2;
|
|
|
- if (cvt->filters[++cvt->filter_index]) {
|
|
|
- cvt->filters[cvt->filter_index] (cvt, AUDIO_S16MSB);
|
|
|
- }
|
|
|
-}
|
|
|
-
|
|
|
-static void SDLCALL
|
|
|
-SDL_Convert_F32MSB_to_S32LSB(SDL_AudioCVT * cvt, SDL_AudioFormat format)
|
|
|
-{
|
|
|
- int i;
|
|
|
- const float *src;
|
|
|
- Sint32 *dst;
|
|
|
-
|
|
|
-#if DEBUG_CONVERT
|
|
|
- fprintf(stderr, "Converting AUDIO_F32MSB to AUDIO_S32LSB.\n");
|
|
|
-#endif
|
|
|
-
|
|
|
- src = (const float *) cvt->buf;
|
|
|
- dst = (Sint32 *) cvt->buf;
|
|
|
- for (i = cvt->len_cvt / sizeof (float); i; --i, ++src, ++dst) {
|
|
|
- const Sint32 val = ((Sint32) (SDL_SwapFloatBE(*src) * 2147483647.0));
|
|
|
- *dst = ((Sint32) SDL_SwapLE32(val));
|
|
|
- }
|
|
|
-
|
|
|
- if (cvt->filters[++cvt->filter_index]) {
|
|
|
- cvt->filters[cvt->filter_index] (cvt, AUDIO_S32LSB);
|
|
|
- }
|
|
|
-}
|
|
|
-
|
|
|
-static void SDLCALL
|
|
|
-SDL_Convert_F32MSB_to_S32MSB(SDL_AudioCVT * cvt, SDL_AudioFormat format)
|
|
|
-{
|
|
|
- int i;
|
|
|
- const float *src;
|
|
|
- Sint32 *dst;
|
|
|
-
|
|
|
-#if DEBUG_CONVERT
|
|
|
- fprintf(stderr, "Converting AUDIO_F32MSB to AUDIO_S32MSB.\n");
|
|
|
-#endif
|
|
|
-
|
|
|
- src = (const float *) cvt->buf;
|
|
|
- dst = (Sint32 *) cvt->buf;
|
|
|
- for (i = cvt->len_cvt / sizeof (float); i; --i, ++src, ++dst) {
|
|
|
- const Sint32 val = ((Sint32) (SDL_SwapFloatBE(*src) * 2147483647.0));
|
|
|
- *dst = ((Sint32) SDL_SwapBE32(val));
|
|
|
- }
|
|
|
-
|
|
|
- if (cvt->filters[++cvt->filter_index]) {
|
|
|
- cvt->filters[cvt->filter_index] (cvt, AUDIO_S32MSB);
|
|
|
- }
|
|
|
-}
|
|
|
-
|
|
|
-static void SDLCALL
|
|
|
-SDL_Convert_F32MSB_to_F32LSB(SDL_AudioCVT * cvt, SDL_AudioFormat format)
|
|
|
-{
|
|
|
- int i;
|
|
|
- const float *src;
|
|
|
- float *dst;
|
|
|
-
|
|
|
-#if DEBUG_CONVERT
|
|
|
- fprintf(stderr, "Converting AUDIO_F32MSB to AUDIO_F32LSB.\n");
|
|
|
-#endif
|
|
|
-
|
|
|
- src = (const float *) cvt->buf;
|
|
|
- dst = (float *) cvt->buf;
|
|
|
- for (i = cvt->len_cvt / sizeof (float); i; --i, ++src, ++dst) {
|
|
|
- const float val = SDL_SwapFloatBE(*src);
|
|
|
- *dst = SDL_SwapFloatLE(val);
|
|
|
- }
|
|
|
-
|
|
|
- if (cvt->filters[++cvt->filter_index]) {
|
|
|
- cvt->filters[cvt->filter_index] (cvt, AUDIO_F32LSB);
|
|
|
- }
|
|
|
-}
|
|
|
-
|
|
|
-#endif /* !NO_CONVERTERS */
|
|
|
-
|
|
|
-
|
|
|
-const SDL_AudioTypeFilters sdl_audio_type_filters[] =
|
|
|
-{
|
|
|
-#if !NO_CONVERTERS
|
|
|
- { AUDIO_U8, AUDIO_S8, SDL_Convert_U8_to_S8 },
|
|
|
- { AUDIO_U8, AUDIO_U16LSB, SDL_Convert_U8_to_U16LSB },
|
|
|
- { AUDIO_U8, AUDIO_S16LSB, SDL_Convert_U8_to_S16LSB },
|
|
|
- { AUDIO_U8, AUDIO_U16MSB, SDL_Convert_U8_to_U16MSB },
|
|
|
- { AUDIO_U8, AUDIO_S16MSB, SDL_Convert_U8_to_S16MSB },
|
|
|
- { AUDIO_U8, AUDIO_S32LSB, SDL_Convert_U8_to_S32LSB },
|
|
|
- { AUDIO_U8, AUDIO_S32MSB, SDL_Convert_U8_to_S32MSB },
|
|
|
- { AUDIO_U8, AUDIO_F32LSB, SDL_Convert_U8_to_F32LSB },
|
|
|
- { AUDIO_U8, AUDIO_F32MSB, SDL_Convert_U8_to_F32MSB },
|
|
|
- { AUDIO_S8, AUDIO_U8, SDL_Convert_S8_to_U8 },
|
|
|
- { AUDIO_S8, AUDIO_U16LSB, SDL_Convert_S8_to_U16LSB },
|
|
|
- { AUDIO_S8, AUDIO_S16LSB, SDL_Convert_S8_to_S16LSB },
|
|
|
- { AUDIO_S8, AUDIO_U16MSB, SDL_Convert_S8_to_U16MSB },
|
|
|
- { AUDIO_S8, AUDIO_S16MSB, SDL_Convert_S8_to_S16MSB },
|
|
|
- { AUDIO_S8, AUDIO_S32LSB, SDL_Convert_S8_to_S32LSB },
|
|
|
- { AUDIO_S8, AUDIO_S32MSB, SDL_Convert_S8_to_S32MSB },
|
|
|
- { AUDIO_S8, AUDIO_F32LSB, SDL_Convert_S8_to_F32LSB },
|
|
|
- { AUDIO_S8, AUDIO_F32MSB, SDL_Convert_S8_to_F32MSB },
|
|
|
- { AUDIO_U16LSB, AUDIO_U8, SDL_Convert_U16LSB_to_U8 },
|
|
|
- { AUDIO_U16LSB, AUDIO_S8, SDL_Convert_U16LSB_to_S8 },
|
|
|
- { AUDIO_U16LSB, AUDIO_S16LSB, SDL_Convert_U16LSB_to_S16LSB },
|
|
|
- { AUDIO_U16LSB, AUDIO_U16MSB, SDL_Convert_U16LSB_to_U16MSB },
|
|
|
- { AUDIO_U16LSB, AUDIO_S16MSB, SDL_Convert_U16LSB_to_S16MSB },
|
|
|
- { AUDIO_U16LSB, AUDIO_S32LSB, SDL_Convert_U16LSB_to_S32LSB },
|
|
|
- { AUDIO_U16LSB, AUDIO_S32MSB, SDL_Convert_U16LSB_to_S32MSB },
|
|
|
- { AUDIO_U16LSB, AUDIO_F32LSB, SDL_Convert_U16LSB_to_F32LSB },
|
|
|
- { AUDIO_U16LSB, AUDIO_F32MSB, SDL_Convert_U16LSB_to_F32MSB },
|
|
|
- { AUDIO_S16LSB, AUDIO_U8, SDL_Convert_S16LSB_to_U8 },
|
|
|
- { AUDIO_S16LSB, AUDIO_S8, SDL_Convert_S16LSB_to_S8 },
|
|
|
- { AUDIO_S16LSB, AUDIO_U16LSB, SDL_Convert_S16LSB_to_U16LSB },
|
|
|
- { AUDIO_S16LSB, AUDIO_U16MSB, SDL_Convert_S16LSB_to_U16MSB },
|
|
|
- { AUDIO_S16LSB, AUDIO_S16MSB, SDL_Convert_S16LSB_to_S16MSB },
|
|
|
- { AUDIO_S16LSB, AUDIO_S32LSB, SDL_Convert_S16LSB_to_S32LSB },
|
|
|
- { AUDIO_S16LSB, AUDIO_S32MSB, SDL_Convert_S16LSB_to_S32MSB },
|
|
|
- { AUDIO_S16LSB, AUDIO_F32LSB, SDL_Convert_S16LSB_to_F32LSB },
|
|
|
- { AUDIO_S16LSB, AUDIO_F32MSB, SDL_Convert_S16LSB_to_F32MSB },
|
|
|
- { AUDIO_U16MSB, AUDIO_U8, SDL_Convert_U16MSB_to_U8 },
|
|
|
- { AUDIO_U16MSB, AUDIO_S8, SDL_Convert_U16MSB_to_S8 },
|
|
|
- { AUDIO_U16MSB, AUDIO_U16LSB, SDL_Convert_U16MSB_to_U16LSB },
|
|
|
- { AUDIO_U16MSB, AUDIO_S16LSB, SDL_Convert_U16MSB_to_S16LSB },
|
|
|
- { AUDIO_U16MSB, AUDIO_S16MSB, SDL_Convert_U16MSB_to_S16MSB },
|
|
|
- { AUDIO_U16MSB, AUDIO_S32LSB, SDL_Convert_U16MSB_to_S32LSB },
|
|
|
- { AUDIO_U16MSB, AUDIO_S32MSB, SDL_Convert_U16MSB_to_S32MSB },
|
|
|
- { AUDIO_U16MSB, AUDIO_F32LSB, SDL_Convert_U16MSB_to_F32LSB },
|
|
|
- { AUDIO_U16MSB, AUDIO_F32MSB, SDL_Convert_U16MSB_to_F32MSB },
|
|
|
- { AUDIO_S16MSB, AUDIO_U8, SDL_Convert_S16MSB_to_U8 },
|
|
|
- { AUDIO_S16MSB, AUDIO_S8, SDL_Convert_S16MSB_to_S8 },
|
|
|
- { AUDIO_S16MSB, AUDIO_U16LSB, SDL_Convert_S16MSB_to_U16LSB },
|
|
|
- { AUDIO_S16MSB, AUDIO_S16LSB, SDL_Convert_S16MSB_to_S16LSB },
|
|
|
- { AUDIO_S16MSB, AUDIO_U16MSB, SDL_Convert_S16MSB_to_U16MSB },
|
|
|
- { AUDIO_S16MSB, AUDIO_S32LSB, SDL_Convert_S16MSB_to_S32LSB },
|
|
|
- { AUDIO_S16MSB, AUDIO_S32MSB, SDL_Convert_S16MSB_to_S32MSB },
|
|
|
- { AUDIO_S16MSB, AUDIO_F32LSB, SDL_Convert_S16MSB_to_F32LSB },
|
|
|
- { AUDIO_S16MSB, AUDIO_F32MSB, SDL_Convert_S16MSB_to_F32MSB },
|
|
|
- { AUDIO_S32LSB, AUDIO_U8, SDL_Convert_S32LSB_to_U8 },
|
|
|
- { AUDIO_S32LSB, AUDIO_S8, SDL_Convert_S32LSB_to_S8 },
|
|
|
- { AUDIO_S32LSB, AUDIO_U16LSB, SDL_Convert_S32LSB_to_U16LSB },
|
|
|
- { AUDIO_S32LSB, AUDIO_S16LSB, SDL_Convert_S32LSB_to_S16LSB },
|
|
|
- { AUDIO_S32LSB, AUDIO_U16MSB, SDL_Convert_S32LSB_to_U16MSB },
|
|
|
- { AUDIO_S32LSB, AUDIO_S16MSB, SDL_Convert_S32LSB_to_S16MSB },
|
|
|
- { AUDIO_S32LSB, AUDIO_S32MSB, SDL_Convert_S32LSB_to_S32MSB },
|
|
|
- { AUDIO_S32LSB, AUDIO_F32LSB, SDL_Convert_S32LSB_to_F32LSB },
|
|
|
- { AUDIO_S32LSB, AUDIO_F32MSB, SDL_Convert_S32LSB_to_F32MSB },
|
|
|
- { AUDIO_S32MSB, AUDIO_U8, SDL_Convert_S32MSB_to_U8 },
|
|
|
- { AUDIO_S32MSB, AUDIO_S8, SDL_Convert_S32MSB_to_S8 },
|
|
|
- { AUDIO_S32MSB, AUDIO_U16LSB, SDL_Convert_S32MSB_to_U16LSB },
|
|
|
- { AUDIO_S32MSB, AUDIO_S16LSB, SDL_Convert_S32MSB_to_S16LSB },
|
|
|
- { AUDIO_S32MSB, AUDIO_U16MSB, SDL_Convert_S32MSB_to_U16MSB },
|
|
|
- { AUDIO_S32MSB, AUDIO_S16MSB, SDL_Convert_S32MSB_to_S16MSB },
|
|
|
- { AUDIO_S32MSB, AUDIO_S32LSB, SDL_Convert_S32MSB_to_S32LSB },
|
|
|
- { AUDIO_S32MSB, AUDIO_F32LSB, SDL_Convert_S32MSB_to_F32LSB },
|
|
|
- { AUDIO_S32MSB, AUDIO_F32MSB, SDL_Convert_S32MSB_to_F32MSB },
|
|
|
- { AUDIO_F32LSB, AUDIO_U8, SDL_Convert_F32LSB_to_U8 },
|
|
|
- { AUDIO_F32LSB, AUDIO_S8, SDL_Convert_F32LSB_to_S8 },
|
|
|
- { AUDIO_F32LSB, AUDIO_U16LSB, SDL_Convert_F32LSB_to_U16LSB },
|
|
|
- { AUDIO_F32LSB, AUDIO_S16LSB, SDL_Convert_F32LSB_to_S16LSB },
|
|
|
- { AUDIO_F32LSB, AUDIO_U16MSB, SDL_Convert_F32LSB_to_U16MSB },
|
|
|
- { AUDIO_F32LSB, AUDIO_S16MSB, SDL_Convert_F32LSB_to_S16MSB },
|
|
|
- { AUDIO_F32LSB, AUDIO_S32LSB, SDL_Convert_F32LSB_to_S32LSB },
|
|
|
- { AUDIO_F32LSB, AUDIO_S32MSB, SDL_Convert_F32LSB_to_S32MSB },
|
|
|
- { AUDIO_F32LSB, AUDIO_F32MSB, SDL_Convert_F32LSB_to_F32MSB },
|
|
|
- { AUDIO_F32MSB, AUDIO_U8, SDL_Convert_F32MSB_to_U8 },
|
|
|
- { AUDIO_F32MSB, AUDIO_S8, SDL_Convert_F32MSB_to_S8 },
|
|
|
- { AUDIO_F32MSB, AUDIO_U16LSB, SDL_Convert_F32MSB_to_U16LSB },
|
|
|
- { AUDIO_F32MSB, AUDIO_S16LSB, SDL_Convert_F32MSB_to_S16LSB },
|
|
|
- { AUDIO_F32MSB, AUDIO_U16MSB, SDL_Convert_F32MSB_to_U16MSB },
|
|
|
- { AUDIO_F32MSB, AUDIO_S16MSB, SDL_Convert_F32MSB_to_S16MSB },
|
|
|
- { AUDIO_F32MSB, AUDIO_S32LSB, SDL_Convert_F32MSB_to_S32LSB },
|
|
|
- { AUDIO_F32MSB, AUDIO_S32MSB, SDL_Convert_F32MSB_to_S32MSB },
|
|
|
- { AUDIO_F32MSB, AUDIO_F32LSB, SDL_Convert_F32MSB_to_F32LSB },
|
|
|
-#endif /* !NO_CONVERTERS */
|
|
|
- { 0, 0, NULL }
|
|
|
-};
|
|
|
-
|
|
|
-
|
|
|
-#if !NO_RESAMPLERS
|
|
|
-
|
|
|
-static void SDLCALL
|
|
|
-SDL_Upsample_U8_1c(SDL_AudioCVT * cvt, SDL_AudioFormat format)
|
|
|
-{
|
|
|
-#if DEBUG_CONVERT
|
|
|
- fprintf(stderr, "Upsample arbitrary (x%f) AUDIO_U8, 1 channels.\n", cvt->rate_incr);
|
|
|
-#endif
|
|
|
-
|
|
|
- const int srcsize = cvt->len_cvt - 16;
|
|
|
- const int dstsize = (int) (((double)(cvt->len_cvt/1)) * cvt->rate_incr) * 1;
|
|
|
- register int eps = 0;
|
|
|
- Uint8 *dst = ((Uint8 *) (cvt->buf + dstsize)) - 1;
|
|
|
- const Uint8 *src = ((Uint8 *) (cvt->buf + cvt->len_cvt)) - 1;
|
|
|
- const Uint8 *target = ((const Uint8 *) cvt->buf);
|
|
|
- Uint8 sample0 = src[0];
|
|
|
- Uint8 last_sample0 = sample0;
|
|
|
- while (dst >= target) {
|
|
|
- dst[0] = sample0;
|
|
|
- dst--;
|
|
|
- eps += srcsize;
|
|
|
- if ((eps << 1) >= dstsize) {
|
|
|
- src--;
|
|
|
- sample0 = (Uint8) ((((Sint16) src[0]) + ((Sint16) last_sample0)) >> 1);
|
|
|
- last_sample0 = sample0;
|
|
|
- eps -= dstsize;
|
|
|
- }
|
|
|
- }
|
|
|
- cvt->len_cvt = dstsize;
|
|
|
- if (cvt->filters[++cvt->filter_index]) {
|
|
|
- cvt->filters[cvt->filter_index] (cvt, format);
|
|
|
- }
|
|
|
-}
|
|
|
-
|
|
|
-static void SDLCALL
|
|
|
-SDL_Downsample_U8_1c(SDL_AudioCVT * cvt, SDL_AudioFormat format)
|
|
|
-{
|
|
|
-#if DEBUG_CONVERT
|
|
|
- fprintf(stderr, "Downsample arbitrary (x%f) AUDIO_U8, 1 channels.\n", cvt->rate_incr);
|
|
|
-#endif
|
|
|
-
|
|
|
- const int srcsize = cvt->len_cvt - 16;
|
|
|
- const int dstsize = (int) (((double)(cvt->len_cvt/1)) * cvt->rate_incr) * 1;
|
|
|
- register int eps = 0;
|
|
|
- Uint8 *dst = (Uint8 *) cvt->buf;
|
|
|
- const Uint8 *src = (Uint8 *) cvt->buf;
|
|
|
- const Uint8 *target = (const Uint8 *) (cvt->buf + dstsize);
|
|
|
- Uint8 sample0 = src[0];
|
|
|
- Uint8 last_sample0 = sample0;
|
|
|
- while (dst < target) {
|
|
|
- src++;
|
|
|
- eps += dstsize;
|
|
|
- if ((eps << 1) >= srcsize) {
|
|
|
- dst[0] = sample0;
|
|
|
- dst++;
|
|
|
- sample0 = (Uint8) ((((Sint16) src[0]) + ((Sint16) last_sample0)) >> 1);
|
|
|
- last_sample0 = sample0;
|
|
|
- eps -= srcsize;
|
|
|
- }
|
|
|
- }
|
|
|
- cvt->len_cvt = dstsize;
|
|
|
- if (cvt->filters[++cvt->filter_index]) {
|
|
|
- cvt->filters[cvt->filter_index] (cvt, format);
|
|
|
- }
|
|
|
-}
|
|
|
-
|
|
|
-static void SDLCALL
|
|
|
-SDL_Upsample_U8_2c(SDL_AudioCVT * cvt, SDL_AudioFormat format)
|
|
|
-{
|
|
|
-#if DEBUG_CONVERT
|
|
|
- fprintf(stderr, "Upsample arbitrary (x%f) AUDIO_U8, 2 channels.\n", cvt->rate_incr);
|
|
|
-#endif
|
|
|
-
|
|
|
- const int srcsize = cvt->len_cvt - 32;
|
|
|
- const int dstsize = (int) (((double)(cvt->len_cvt/2)) * cvt->rate_incr) * 2;
|
|
|
- register int eps = 0;
|
|
|
- Uint8 *dst = ((Uint8 *) (cvt->buf + dstsize)) - 2;
|
|
|
- const Uint8 *src = ((Uint8 *) (cvt->buf + cvt->len_cvt)) - 2;
|
|
|
- const Uint8 *target = ((const Uint8 *) cvt->buf);
|
|
|
- Uint8 sample1 = src[1];
|
|
|
- Uint8 sample0 = src[0];
|
|
|
- Uint8 last_sample1 = sample1;
|
|
|
- Uint8 last_sample0 = sample0;
|
|
|
- while (dst >= target) {
|
|
|
- dst[1] = sample1;
|
|
|
- dst[0] = sample0;
|
|
|
- dst -= 2;
|
|
|
- eps += srcsize;
|
|
|
- if ((eps << 1) >= dstsize) {
|
|
|
- src -= 2;
|
|
|
- sample1 = (Uint8) ((((Sint16) src[1]) + ((Sint16) last_sample1)) >> 1);
|
|
|
- sample0 = (Uint8) ((((Sint16) src[0]) + ((Sint16) last_sample0)) >> 1);
|
|
|
- last_sample1 = sample1;
|
|
|
- last_sample0 = sample0;
|
|
|
- eps -= dstsize;
|
|
|
- }
|
|
|
- }
|
|
|
- cvt->len_cvt = dstsize;
|
|
|
- if (cvt->filters[++cvt->filter_index]) {
|
|
|
- cvt->filters[cvt->filter_index] (cvt, format);
|
|
|
- }
|
|
|
-}
|
|
|
-
|
|
|
-static void SDLCALL
|
|
|
-SDL_Downsample_U8_2c(SDL_AudioCVT * cvt, SDL_AudioFormat format)
|
|
|
-{
|
|
|
-#if DEBUG_CONVERT
|
|
|
- fprintf(stderr, "Downsample arbitrary (x%f) AUDIO_U8, 2 channels.\n", cvt->rate_incr);
|
|
|
-#endif
|
|
|
-
|
|
|
- const int srcsize = cvt->len_cvt - 32;
|
|
|
- const int dstsize = (int) (((double)(cvt->len_cvt/2)) * cvt->rate_incr) * 2;
|
|
|
- register int eps = 0;
|
|
|
- Uint8 *dst = (Uint8 *) cvt->buf;
|
|
|
- const Uint8 *src = (Uint8 *) cvt->buf;
|
|
|
- const Uint8 *target = (const Uint8 *) (cvt->buf + dstsize);
|
|
|
- Uint8 sample0 = src[0];
|
|
|
- Uint8 sample1 = src[1];
|
|
|
- Uint8 last_sample0 = sample0;
|
|
|
- Uint8 last_sample1 = sample1;
|
|
|
- while (dst < target) {
|
|
|
- src += 2;
|
|
|
- eps += dstsize;
|
|
|
- if ((eps << 1) >= srcsize) {
|
|
|
- dst[0] = sample0;
|
|
|
- dst[1] = sample1;
|
|
|
- dst += 2;
|
|
|
- sample0 = (Uint8) ((((Sint16) src[0]) + ((Sint16) last_sample0)) >> 1);
|
|
|
- sample1 = (Uint8) ((((Sint16) src[1]) + ((Sint16) last_sample1)) >> 1);
|
|
|
- last_sample0 = sample0;
|
|
|
- last_sample1 = sample1;
|
|
|
- eps -= srcsize;
|
|
|
- }
|
|
|
- }
|
|
|
- cvt->len_cvt = dstsize;
|
|
|
- if (cvt->filters[++cvt->filter_index]) {
|
|
|
- cvt->filters[cvt->filter_index] (cvt, format);
|
|
|
- }
|
|
|
-}
|
|
|
-
|
|
|
-static void SDLCALL
|
|
|
-SDL_Upsample_U8_4c(SDL_AudioCVT * cvt, SDL_AudioFormat format)
|
|
|
-{
|
|
|
-#if DEBUG_CONVERT
|
|
|
- fprintf(stderr, "Upsample arbitrary (x%f) AUDIO_U8, 4 channels.\n", cvt->rate_incr);
|
|
|
-#endif
|
|
|
-
|
|
|
- const int srcsize = cvt->len_cvt - 64;
|
|
|
- const int dstsize = (int) (((double)(cvt->len_cvt/4)) * cvt->rate_incr) * 4;
|
|
|
- register int eps = 0;
|
|
|
- Uint8 *dst = ((Uint8 *) (cvt->buf + dstsize)) - 4;
|
|
|
- const Uint8 *src = ((Uint8 *) (cvt->buf + cvt->len_cvt)) - 4;
|
|
|
- const Uint8 *target = ((const Uint8 *) cvt->buf);
|
|
|
- Uint8 sample3 = src[3];
|
|
|
- Uint8 sample2 = src[2];
|
|
|
- Uint8 sample1 = src[1];
|
|
|
- Uint8 sample0 = src[0];
|
|
|
- Uint8 last_sample3 = sample3;
|
|
|
- Uint8 last_sample2 = sample2;
|
|
|
- Uint8 last_sample1 = sample1;
|
|
|
- Uint8 last_sample0 = sample0;
|
|
|
- while (dst >= target) {
|
|
|
- dst[3] = sample3;
|
|
|
- dst[2] = sample2;
|
|
|
- dst[1] = sample1;
|
|
|
- dst[0] = sample0;
|
|
|
- dst -= 4;
|
|
|
- eps += srcsize;
|
|
|
- if ((eps << 1) >= dstsize) {
|
|
|
- src -= 4;
|
|
|
- sample3 = (Uint8) ((((Sint16) src[3]) + ((Sint16) last_sample3)) >> 1);
|
|
|
- sample2 = (Uint8) ((((Sint16) src[2]) + ((Sint16) last_sample2)) >> 1);
|
|
|
- sample1 = (Uint8) ((((Sint16) src[1]) + ((Sint16) last_sample1)) >> 1);
|
|
|
- sample0 = (Uint8) ((((Sint16) src[0]) + ((Sint16) last_sample0)) >> 1);
|
|
|
- last_sample3 = sample3;
|
|
|
- last_sample2 = sample2;
|
|
|
- last_sample1 = sample1;
|
|
|
- last_sample0 = sample0;
|
|
|
- eps -= dstsize;
|
|
|
- }
|
|
|
- }
|
|
|
- cvt->len_cvt = dstsize;
|
|
|
- if (cvt->filters[++cvt->filter_index]) {
|
|
|
- cvt->filters[cvt->filter_index] (cvt, format);
|
|
|
- }
|
|
|
-}
|
|
|
-
|
|
|
-static void SDLCALL
|
|
|
-SDL_Downsample_U8_4c(SDL_AudioCVT * cvt, SDL_AudioFormat format)
|
|
|
-{
|
|
|
-#if DEBUG_CONVERT
|
|
|
- fprintf(stderr, "Downsample arbitrary (x%f) AUDIO_U8, 4 channels.\n", cvt->rate_incr);
|
|
|
-#endif
|
|
|
-
|
|
|
- const int srcsize = cvt->len_cvt - 64;
|
|
|
- const int dstsize = (int) (((double)(cvt->len_cvt/4)) * cvt->rate_incr) * 4;
|
|
|
- register int eps = 0;
|
|
|
- Uint8 *dst = (Uint8 *) cvt->buf;
|
|
|
- const Uint8 *src = (Uint8 *) cvt->buf;
|
|
|
- const Uint8 *target = (const Uint8 *) (cvt->buf + dstsize);
|
|
|
- Uint8 sample0 = src[0];
|
|
|
- Uint8 sample1 = src[1];
|
|
|
- Uint8 sample2 = src[2];
|
|
|
- Uint8 sample3 = src[3];
|
|
|
- Uint8 last_sample0 = sample0;
|
|
|
- Uint8 last_sample1 = sample1;
|
|
|
- Uint8 last_sample2 = sample2;
|
|
|
- Uint8 last_sample3 = sample3;
|
|
|
- while (dst < target) {
|
|
|
- src += 4;
|
|
|
- eps += dstsize;
|
|
|
- if ((eps << 1) >= srcsize) {
|
|
|
- dst[0] = sample0;
|
|
|
- dst[1] = sample1;
|
|
|
- dst[2] = sample2;
|
|
|
- dst[3] = sample3;
|
|
|
- dst += 4;
|
|
|
- sample0 = (Uint8) ((((Sint16) src[0]) + ((Sint16) last_sample0)) >> 1);
|
|
|
- sample1 = (Uint8) ((((Sint16) src[1]) + ((Sint16) last_sample1)) >> 1);
|
|
|
- sample2 = (Uint8) ((((Sint16) src[2]) + ((Sint16) last_sample2)) >> 1);
|
|
|
- sample3 = (Uint8) ((((Sint16) src[3]) + ((Sint16) last_sample3)) >> 1);
|
|
|
- last_sample0 = sample0;
|
|
|
- last_sample1 = sample1;
|
|
|
- last_sample2 = sample2;
|
|
|
- last_sample3 = sample3;
|
|
|
- eps -= srcsize;
|
|
|
- }
|
|
|
- }
|
|
|
- cvt->len_cvt = dstsize;
|
|
|
- if (cvt->filters[++cvt->filter_index]) {
|
|
|
- cvt->filters[cvt->filter_index] (cvt, format);
|
|
|
- }
|
|
|
-}
|
|
|
-
|
|
|
-static void SDLCALL
|
|
|
-SDL_Upsample_U8_6c(SDL_AudioCVT * cvt, SDL_AudioFormat format)
|
|
|
-{
|
|
|
-#if DEBUG_CONVERT
|
|
|
- fprintf(stderr, "Upsample arbitrary (x%f) AUDIO_U8, 6 channels.\n", cvt->rate_incr);
|
|
|
-#endif
|
|
|
-
|
|
|
- const int srcsize = cvt->len_cvt - 96;
|
|
|
- const int dstsize = (int) (((double)(cvt->len_cvt/6)) * cvt->rate_incr) * 6;
|
|
|
- register int eps = 0;
|
|
|
- Uint8 *dst = ((Uint8 *) (cvt->buf + dstsize)) - 6;
|
|
|
- const Uint8 *src = ((Uint8 *) (cvt->buf + cvt->len_cvt)) - 6;
|
|
|
- const Uint8 *target = ((const Uint8 *) cvt->buf);
|
|
|
- Uint8 sample5 = src[5];
|
|
|
- Uint8 sample4 = src[4];
|
|
|
- Uint8 sample3 = src[3];
|
|
|
- Uint8 sample2 = src[2];
|
|
|
- Uint8 sample1 = src[1];
|
|
|
- Uint8 sample0 = src[0];
|
|
|
- Uint8 last_sample5 = sample5;
|
|
|
- Uint8 last_sample4 = sample4;
|
|
|
- Uint8 last_sample3 = sample3;
|
|
|
- Uint8 last_sample2 = sample2;
|
|
|
- Uint8 last_sample1 = sample1;
|
|
|
- Uint8 last_sample0 = sample0;
|
|
|
- while (dst >= target) {
|
|
|
- dst[5] = sample5;
|
|
|
- dst[4] = sample4;
|
|
|
- dst[3] = sample3;
|
|
|
- dst[2] = sample2;
|
|
|
- dst[1] = sample1;
|
|
|
- dst[0] = sample0;
|
|
|
- dst -= 6;
|
|
|
- eps += srcsize;
|
|
|
- if ((eps << 1) >= dstsize) {
|
|
|
- src -= 6;
|
|
|
- sample5 = (Uint8) ((((Sint16) src[5]) + ((Sint16) last_sample5)) >> 1);
|
|
|
- sample4 = (Uint8) ((((Sint16) src[4]) + ((Sint16) last_sample4)) >> 1);
|
|
|
- sample3 = (Uint8) ((((Sint16) src[3]) + ((Sint16) last_sample3)) >> 1);
|
|
|
- sample2 = (Uint8) ((((Sint16) src[2]) + ((Sint16) last_sample2)) >> 1);
|
|
|
- sample1 = (Uint8) ((((Sint16) src[1]) + ((Sint16) last_sample1)) >> 1);
|
|
|
- sample0 = (Uint8) ((((Sint16) src[0]) + ((Sint16) last_sample0)) >> 1);
|
|
|
- last_sample5 = sample5;
|
|
|
- last_sample4 = sample4;
|
|
|
- last_sample3 = sample3;
|
|
|
- last_sample2 = sample2;
|
|
|
- last_sample1 = sample1;
|
|
|
- last_sample0 = sample0;
|
|
|
- eps -= dstsize;
|
|
|
- }
|
|
|
- }
|
|
|
- cvt->len_cvt = dstsize;
|
|
|
- if (cvt->filters[++cvt->filter_index]) {
|
|
|
- cvt->filters[cvt->filter_index] (cvt, format);
|
|
|
- }
|
|
|
-}
|
|
|
-
|
|
|
-static void SDLCALL
|
|
|
-SDL_Downsample_U8_6c(SDL_AudioCVT * cvt, SDL_AudioFormat format)
|
|
|
-{
|
|
|
-#if DEBUG_CONVERT
|
|
|
- fprintf(stderr, "Downsample arbitrary (x%f) AUDIO_U8, 6 channels.\n", cvt->rate_incr);
|
|
|
-#endif
|
|
|
-
|
|
|
- const int srcsize = cvt->len_cvt - 96;
|
|
|
- const int dstsize = (int) (((double)(cvt->len_cvt/6)) * cvt->rate_incr) * 6;
|
|
|
- register int eps = 0;
|
|
|
- Uint8 *dst = (Uint8 *) cvt->buf;
|
|
|
- const Uint8 *src = (Uint8 *) cvt->buf;
|
|
|
- const Uint8 *target = (const Uint8 *) (cvt->buf + dstsize);
|
|
|
- Uint8 sample0 = src[0];
|
|
|
- Uint8 sample1 = src[1];
|
|
|
- Uint8 sample2 = src[2];
|
|
|
- Uint8 sample3 = src[3];
|
|
|
- Uint8 sample4 = src[4];
|
|
|
- Uint8 sample5 = src[5];
|
|
|
- Uint8 last_sample0 = sample0;
|
|
|
- Uint8 last_sample1 = sample1;
|
|
|
- Uint8 last_sample2 = sample2;
|
|
|
- Uint8 last_sample3 = sample3;
|
|
|
- Uint8 last_sample4 = sample4;
|
|
|
- Uint8 last_sample5 = sample5;
|
|
|
- while (dst < target) {
|
|
|
- src += 6;
|
|
|
- eps += dstsize;
|
|
|
- if ((eps << 1) >= srcsize) {
|
|
|
- dst[0] = sample0;
|
|
|
- dst[1] = sample1;
|
|
|
- dst[2] = sample2;
|
|
|
- dst[3] = sample3;
|
|
|
- dst[4] = sample4;
|
|
|
- dst[5] = sample5;
|
|
|
- dst += 6;
|
|
|
- sample0 = (Uint8) ((((Sint16) src[0]) + ((Sint16) last_sample0)) >> 1);
|
|
|
- sample1 = (Uint8) ((((Sint16) src[1]) + ((Sint16) last_sample1)) >> 1);
|
|
|
- sample2 = (Uint8) ((((Sint16) src[2]) + ((Sint16) last_sample2)) >> 1);
|
|
|
- sample3 = (Uint8) ((((Sint16) src[3]) + ((Sint16) last_sample3)) >> 1);
|
|
|
- sample4 = (Uint8) ((((Sint16) src[4]) + ((Sint16) last_sample4)) >> 1);
|
|
|
- sample5 = (Uint8) ((((Sint16) src[5]) + ((Sint16) last_sample5)) >> 1);
|
|
|
- last_sample0 = sample0;
|
|
|
- last_sample1 = sample1;
|
|
|
- last_sample2 = sample2;
|
|
|
- last_sample3 = sample3;
|
|
|
- last_sample4 = sample4;
|
|
|
- last_sample5 = sample5;
|
|
|
- eps -= srcsize;
|
|
|
- }
|
|
|
- }
|
|
|
- cvt->len_cvt = dstsize;
|
|
|
- if (cvt->filters[++cvt->filter_index]) {
|
|
|
- cvt->filters[cvt->filter_index] (cvt, format);
|
|
|
- }
|
|
|
-}
|
|
|
-
|
|
|
-static void SDLCALL
|
|
|
-SDL_Upsample_U8_8c(SDL_AudioCVT * cvt, SDL_AudioFormat format)
|
|
|
-{
|
|
|
-#if DEBUG_CONVERT
|
|
|
- fprintf(stderr, "Upsample arbitrary (x%f) AUDIO_U8, 8 channels.\n", cvt->rate_incr);
|
|
|
-#endif
|
|
|
-
|
|
|
- const int srcsize = cvt->len_cvt - 128;
|
|
|
- const int dstsize = (int) (((double)(cvt->len_cvt/8)) * cvt->rate_incr) * 8;
|
|
|
- register int eps = 0;
|
|
|
- Uint8 *dst = ((Uint8 *) (cvt->buf + dstsize)) - 8;
|
|
|
- const Uint8 *src = ((Uint8 *) (cvt->buf + cvt->len_cvt)) - 8;
|
|
|
- const Uint8 *target = ((const Uint8 *) cvt->buf);
|
|
|
- Uint8 sample7 = src[7];
|
|
|
- Uint8 sample6 = src[6];
|
|
|
- Uint8 sample5 = src[5];
|
|
|
- Uint8 sample4 = src[4];
|
|
|
- Uint8 sample3 = src[3];
|
|
|
- Uint8 sample2 = src[2];
|
|
|
- Uint8 sample1 = src[1];
|
|
|
- Uint8 sample0 = src[0];
|
|
|
- Uint8 last_sample7 = sample7;
|
|
|
- Uint8 last_sample6 = sample6;
|
|
|
- Uint8 last_sample5 = sample5;
|
|
|
- Uint8 last_sample4 = sample4;
|
|
|
- Uint8 last_sample3 = sample3;
|
|
|
- Uint8 last_sample2 = sample2;
|
|
|
- Uint8 last_sample1 = sample1;
|
|
|
- Uint8 last_sample0 = sample0;
|
|
|
- while (dst >= target) {
|
|
|
- dst[7] = sample7;
|
|
|
- dst[6] = sample6;
|
|
|
- dst[5] = sample5;
|
|
|
- dst[4] = sample4;
|
|
|
- dst[3] = sample3;
|
|
|
- dst[2] = sample2;
|
|
|
- dst[1] = sample1;
|
|
|
- dst[0] = sample0;
|
|
|
- dst -= 8;
|
|
|
- eps += srcsize;
|
|
|
- if ((eps << 1) >= dstsize) {
|
|
|
- src -= 8;
|
|
|
- sample7 = (Uint8) ((((Sint16) src[7]) + ((Sint16) last_sample7)) >> 1);
|
|
|
- sample6 = (Uint8) ((((Sint16) src[6]) + ((Sint16) last_sample6)) >> 1);
|
|
|
- sample5 = (Uint8) ((((Sint16) src[5]) + ((Sint16) last_sample5)) >> 1);
|
|
|
- sample4 = (Uint8) ((((Sint16) src[4]) + ((Sint16) last_sample4)) >> 1);
|
|
|
- sample3 = (Uint8) ((((Sint16) src[3]) + ((Sint16) last_sample3)) >> 1);
|
|
|
- sample2 = (Uint8) ((((Sint16) src[2]) + ((Sint16) last_sample2)) >> 1);
|
|
|
- sample1 = (Uint8) ((((Sint16) src[1]) + ((Sint16) last_sample1)) >> 1);
|
|
|
- sample0 = (Uint8) ((((Sint16) src[0]) + ((Sint16) last_sample0)) >> 1);
|
|
|
- last_sample7 = sample7;
|
|
|
- last_sample6 = sample6;
|
|
|
- last_sample5 = sample5;
|
|
|
- last_sample4 = sample4;
|
|
|
- last_sample3 = sample3;
|
|
|
- last_sample2 = sample2;
|
|
|
- last_sample1 = sample1;
|
|
|
- last_sample0 = sample0;
|
|
|
- eps -= dstsize;
|
|
|
- }
|
|
|
- }
|
|
|
- cvt->len_cvt = dstsize;
|
|
|
- if (cvt->filters[++cvt->filter_index]) {
|
|
|
- cvt->filters[cvt->filter_index] (cvt, format);
|
|
|
- }
|
|
|
-}
|
|
|
-
|
|
|
-static void SDLCALL
|
|
|
-SDL_Downsample_U8_8c(SDL_AudioCVT * cvt, SDL_AudioFormat format)
|
|
|
-{
|
|
|
-#if DEBUG_CONVERT
|
|
|
- fprintf(stderr, "Downsample arbitrary (x%f) AUDIO_U8, 8 channels.\n", cvt->rate_incr);
|
|
|
-#endif
|
|
|
-
|
|
|
- const int srcsize = cvt->len_cvt - 128;
|
|
|
- const int dstsize = (int) (((double)(cvt->len_cvt/8)) * cvt->rate_incr) * 8;
|
|
|
- register int eps = 0;
|
|
|
- Uint8 *dst = (Uint8 *) cvt->buf;
|
|
|
- const Uint8 *src = (Uint8 *) cvt->buf;
|
|
|
- const Uint8 *target = (const Uint8 *) (cvt->buf + dstsize);
|
|
|
- Uint8 sample0 = src[0];
|
|
|
- Uint8 sample1 = src[1];
|
|
|
- Uint8 sample2 = src[2];
|
|
|
- Uint8 sample3 = src[3];
|
|
|
- Uint8 sample4 = src[4];
|
|
|
- Uint8 sample5 = src[5];
|
|
|
- Uint8 sample6 = src[6];
|
|
|
- Uint8 sample7 = src[7];
|
|
|
- Uint8 last_sample0 = sample0;
|
|
|
- Uint8 last_sample1 = sample1;
|
|
|
- Uint8 last_sample2 = sample2;
|
|
|
- Uint8 last_sample3 = sample3;
|
|
|
- Uint8 last_sample4 = sample4;
|
|
|
- Uint8 last_sample5 = sample5;
|
|
|
- Uint8 last_sample6 = sample6;
|
|
|
- Uint8 last_sample7 = sample7;
|
|
|
- while (dst < target) {
|
|
|
- src += 8;
|
|
|
- eps += dstsize;
|
|
|
- if ((eps << 1) >= srcsize) {
|
|
|
- dst[0] = sample0;
|
|
|
- dst[1] = sample1;
|
|
|
- dst[2] = sample2;
|
|
|
- dst[3] = sample3;
|
|
|
- dst[4] = sample4;
|
|
|
- dst[5] = sample5;
|
|
|
- dst[6] = sample6;
|
|
|
- dst[7] = sample7;
|
|
|
- dst += 8;
|
|
|
- sample0 = (Uint8) ((((Sint16) src[0]) + ((Sint16) last_sample0)) >> 1);
|
|
|
- sample1 = (Uint8) ((((Sint16) src[1]) + ((Sint16) last_sample1)) >> 1);
|
|
|
- sample2 = (Uint8) ((((Sint16) src[2]) + ((Sint16) last_sample2)) >> 1);
|
|
|
- sample3 = (Uint8) ((((Sint16) src[3]) + ((Sint16) last_sample3)) >> 1);
|
|
|
- sample4 = (Uint8) ((((Sint16) src[4]) + ((Sint16) last_sample4)) >> 1);
|
|
|
- sample5 = (Uint8) ((((Sint16) src[5]) + ((Sint16) last_sample5)) >> 1);
|
|
|
- sample6 = (Uint8) ((((Sint16) src[6]) + ((Sint16) last_sample6)) >> 1);
|
|
|
- sample7 = (Uint8) ((((Sint16) src[7]) + ((Sint16) last_sample7)) >> 1);
|
|
|
- last_sample0 = sample0;
|
|
|
- last_sample1 = sample1;
|
|
|
- last_sample2 = sample2;
|
|
|
- last_sample3 = sample3;
|
|
|
- last_sample4 = sample4;
|
|
|
- last_sample5 = sample5;
|
|
|
- last_sample6 = sample6;
|
|
|
- last_sample7 = sample7;
|
|
|
- eps -= srcsize;
|
|
|
- }
|
|
|
- }
|
|
|
- cvt->len_cvt = dstsize;
|
|
|
- if (cvt->filters[++cvt->filter_index]) {
|
|
|
- cvt->filters[cvt->filter_index] (cvt, format);
|
|
|
- }
|
|
|
-}
|
|
|
-
|
|
|
-static void SDLCALL
|
|
|
-SDL_Upsample_S8_1c(SDL_AudioCVT * cvt, SDL_AudioFormat format)
|
|
|
-{
|
|
|
-#if DEBUG_CONVERT
|
|
|
- fprintf(stderr, "Upsample arbitrary (x%f) AUDIO_S8, 1 channels.\n", cvt->rate_incr);
|
|
|
-#endif
|
|
|
-
|
|
|
- const int srcsize = cvt->len_cvt - 16;
|
|
|
- const int dstsize = (int) (((double)(cvt->len_cvt/1)) * cvt->rate_incr) * 1;
|
|
|
- register int eps = 0;
|
|
|
- Sint8 *dst = ((Sint8 *) (cvt->buf + dstsize)) - 1;
|
|
|
- const Sint8 *src = ((Sint8 *) (cvt->buf + cvt->len_cvt)) - 1;
|
|
|
- const Sint8 *target = ((const Sint8 *) cvt->buf);
|
|
|
- Sint8 sample0 = ((Sint8) src[0]);
|
|
|
- Sint8 last_sample0 = sample0;
|
|
|
- while (dst >= target) {
|
|
|
- dst[0] = ((Sint8) sample0);
|
|
|
- dst--;
|
|
|
- eps += srcsize;
|
|
|
- if ((eps << 1) >= dstsize) {
|
|
|
- src--;
|
|
|
- sample0 = (Sint8) ((((Sint16) ((Sint8) src[0])) + ((Sint16) last_sample0)) >> 1);
|
|
|
- last_sample0 = sample0;
|
|
|
- eps -= dstsize;
|
|
|
- }
|
|
|
- }
|
|
|
- cvt->len_cvt = dstsize;
|
|
|
- if (cvt->filters[++cvt->filter_index]) {
|
|
|
- cvt->filters[cvt->filter_index] (cvt, format);
|
|
|
- }
|
|
|
-}
|
|
|
-
|
|
|
-static void SDLCALL
|
|
|
-SDL_Downsample_S8_1c(SDL_AudioCVT * cvt, SDL_AudioFormat format)
|
|
|
-{
|
|
|
-#if DEBUG_CONVERT
|
|
|
- fprintf(stderr, "Downsample arbitrary (x%f) AUDIO_S8, 1 channels.\n", cvt->rate_incr);
|
|
|
-#endif
|
|
|
-
|
|
|
- const int srcsize = cvt->len_cvt - 16;
|
|
|
- const int dstsize = (int) (((double)(cvt->len_cvt/1)) * cvt->rate_incr) * 1;
|
|
|
- register int eps = 0;
|
|
|
- Sint8 *dst = (Sint8 *) cvt->buf;
|
|
|
- const Sint8 *src = (Sint8 *) cvt->buf;
|
|
|
- const Sint8 *target = (const Sint8 *) (cvt->buf + dstsize);
|
|
|
- Sint8 sample0 = ((Sint8) src[0]);
|
|
|
- Sint8 last_sample0 = sample0;
|
|
|
- while (dst < target) {
|
|
|
- src++;
|
|
|
- eps += dstsize;
|
|
|
- if ((eps << 1) >= srcsize) {
|
|
|
- dst[0] = ((Sint8) sample0);
|
|
|
- dst++;
|
|
|
- sample0 = (Sint8) ((((Sint16) ((Sint8) src[0])) + ((Sint16) last_sample0)) >> 1);
|
|
|
- last_sample0 = sample0;
|
|
|
- eps -= srcsize;
|
|
|
- }
|
|
|
- }
|
|
|
- cvt->len_cvt = dstsize;
|
|
|
- if (cvt->filters[++cvt->filter_index]) {
|
|
|
- cvt->filters[cvt->filter_index] (cvt, format);
|
|
|
- }
|
|
|
-}
|
|
|
-
|
|
|
-static void SDLCALL
|
|
|
-SDL_Upsample_S8_2c(SDL_AudioCVT * cvt, SDL_AudioFormat format)
|
|
|
-{
|
|
|
-#if DEBUG_CONVERT
|
|
|
- fprintf(stderr, "Upsample arbitrary (x%f) AUDIO_S8, 2 channels.\n", cvt->rate_incr);
|
|
|
-#endif
|
|
|
-
|
|
|
- const int srcsize = cvt->len_cvt - 32;
|
|
|
- const int dstsize = (int) (((double)(cvt->len_cvt/2)) * cvt->rate_incr) * 2;
|
|
|
- register int eps = 0;
|
|
|
- Sint8 *dst = ((Sint8 *) (cvt->buf + dstsize)) - 2;
|
|
|
- const Sint8 *src = ((Sint8 *) (cvt->buf + cvt->len_cvt)) - 2;
|
|
|
- const Sint8 *target = ((const Sint8 *) cvt->buf);
|
|
|
- Sint8 sample1 = ((Sint8) src[1]);
|
|
|
- Sint8 sample0 = ((Sint8) src[0]);
|
|
|
- Sint8 last_sample1 = sample1;
|
|
|
- Sint8 last_sample0 = sample0;
|
|
|
- while (dst >= target) {
|
|
|
- dst[1] = ((Sint8) sample1);
|
|
|
- dst[0] = ((Sint8) sample0);
|
|
|
- dst -= 2;
|
|
|
- eps += srcsize;
|
|
|
- if ((eps << 1) >= dstsize) {
|
|
|
- src -= 2;
|
|
|
- sample1 = (Sint8) ((((Sint16) ((Sint8) src[1])) + ((Sint16) last_sample1)) >> 1);
|
|
|
- sample0 = (Sint8) ((((Sint16) ((Sint8) src[0])) + ((Sint16) last_sample0)) >> 1);
|
|
|
- last_sample1 = sample1;
|
|
|
- last_sample0 = sample0;
|
|
|
- eps -= dstsize;
|
|
|
- }
|
|
|
- }
|
|
|
- cvt->len_cvt = dstsize;
|
|
|
- if (cvt->filters[++cvt->filter_index]) {
|
|
|
- cvt->filters[cvt->filter_index] (cvt, format);
|
|
|
- }
|
|
|
-}
|
|
|
-
|
|
|
-static void SDLCALL
|
|
|
-SDL_Downsample_S8_2c(SDL_AudioCVT * cvt, SDL_AudioFormat format)
|
|
|
-{
|
|
|
-#if DEBUG_CONVERT
|
|
|
- fprintf(stderr, "Downsample arbitrary (x%f) AUDIO_S8, 2 channels.\n", cvt->rate_incr);
|
|
|
-#endif
|
|
|
-
|
|
|
- const int srcsize = cvt->len_cvt - 32;
|
|
|
- const int dstsize = (int) (((double)(cvt->len_cvt/2)) * cvt->rate_incr) * 2;
|
|
|
- register int eps = 0;
|
|
|
- Sint8 *dst = (Sint8 *) cvt->buf;
|
|
|
- const Sint8 *src = (Sint8 *) cvt->buf;
|
|
|
- const Sint8 *target = (const Sint8 *) (cvt->buf + dstsize);
|
|
|
- Sint8 sample0 = ((Sint8) src[0]);
|
|
|
- Sint8 sample1 = ((Sint8) src[1]);
|
|
|
- Sint8 last_sample0 = sample0;
|
|
|
- Sint8 last_sample1 = sample1;
|
|
|
- while (dst < target) {
|
|
|
- src += 2;
|
|
|
- eps += dstsize;
|
|
|
- if ((eps << 1) >= srcsize) {
|
|
|
- dst[0] = ((Sint8) sample0);
|
|
|
- dst[1] = ((Sint8) sample1);
|
|
|
- dst += 2;
|
|
|
- sample0 = (Sint8) ((((Sint16) ((Sint8) src[0])) + ((Sint16) last_sample0)) >> 1);
|
|
|
- sample1 = (Sint8) ((((Sint16) ((Sint8) src[1])) + ((Sint16) last_sample1)) >> 1);
|
|
|
- last_sample0 = sample0;
|
|
|
- last_sample1 = sample1;
|
|
|
- eps -= srcsize;
|
|
|
- }
|
|
|
- }
|
|
|
- cvt->len_cvt = dstsize;
|
|
|
- if (cvt->filters[++cvt->filter_index]) {
|
|
|
- cvt->filters[cvt->filter_index] (cvt, format);
|
|
|
- }
|
|
|
-}
|
|
|
-
|
|
|
-static void SDLCALL
|
|
|
-SDL_Upsample_S8_4c(SDL_AudioCVT * cvt, SDL_AudioFormat format)
|
|
|
-{
|
|
|
-#if DEBUG_CONVERT
|
|
|
- fprintf(stderr, "Upsample arbitrary (x%f) AUDIO_S8, 4 channels.\n", cvt->rate_incr);
|
|
|
-#endif
|
|
|
-
|
|
|
- const int srcsize = cvt->len_cvt - 64;
|
|
|
- const int dstsize = (int) (((double)(cvt->len_cvt/4)) * cvt->rate_incr) * 4;
|
|
|
- register int eps = 0;
|
|
|
- Sint8 *dst = ((Sint8 *) (cvt->buf + dstsize)) - 4;
|
|
|
- const Sint8 *src = ((Sint8 *) (cvt->buf + cvt->len_cvt)) - 4;
|
|
|
- const Sint8 *target = ((const Sint8 *) cvt->buf);
|
|
|
- Sint8 sample3 = ((Sint8) src[3]);
|
|
|
- Sint8 sample2 = ((Sint8) src[2]);
|
|
|
- Sint8 sample1 = ((Sint8) src[1]);
|
|
|
- Sint8 sample0 = ((Sint8) src[0]);
|
|
|
- Sint8 last_sample3 = sample3;
|
|
|
- Sint8 last_sample2 = sample2;
|
|
|
- Sint8 last_sample1 = sample1;
|
|
|
- Sint8 last_sample0 = sample0;
|
|
|
- while (dst >= target) {
|
|
|
- dst[3] = ((Sint8) sample3);
|
|
|
- dst[2] = ((Sint8) sample2);
|
|
|
- dst[1] = ((Sint8) sample1);
|
|
|
- dst[0] = ((Sint8) sample0);
|
|
|
- dst -= 4;
|
|
|
- eps += srcsize;
|
|
|
- if ((eps << 1) >= dstsize) {
|
|
|
- src -= 4;
|
|
|
- sample3 = (Sint8) ((((Sint16) ((Sint8) src[3])) + ((Sint16) last_sample3)) >> 1);
|
|
|
- sample2 = (Sint8) ((((Sint16) ((Sint8) src[2])) + ((Sint16) last_sample2)) >> 1);
|
|
|
- sample1 = (Sint8) ((((Sint16) ((Sint8) src[1])) + ((Sint16) last_sample1)) >> 1);
|
|
|
- sample0 = (Sint8) ((((Sint16) ((Sint8) src[0])) + ((Sint16) last_sample0)) >> 1);
|
|
|
- last_sample3 = sample3;
|
|
|
- last_sample2 = sample2;
|
|
|
- last_sample1 = sample1;
|
|
|
- last_sample0 = sample0;
|
|
|
- eps -= dstsize;
|
|
|
- }
|
|
|
- }
|
|
|
- cvt->len_cvt = dstsize;
|
|
|
- if (cvt->filters[++cvt->filter_index]) {
|
|
|
- cvt->filters[cvt->filter_index] (cvt, format);
|
|
|
- }
|
|
|
-}
|
|
|
-
|
|
|
-static void SDLCALL
|
|
|
-SDL_Downsample_S8_4c(SDL_AudioCVT * cvt, SDL_AudioFormat format)
|
|
|
-{
|
|
|
-#if DEBUG_CONVERT
|
|
|
- fprintf(stderr, "Downsample arbitrary (x%f) AUDIO_S8, 4 channels.\n", cvt->rate_incr);
|
|
|
-#endif
|
|
|
-
|
|
|
- const int srcsize = cvt->len_cvt - 64;
|
|
|
- const int dstsize = (int) (((double)(cvt->len_cvt/4)) * cvt->rate_incr) * 4;
|
|
|
- register int eps = 0;
|
|
|
- Sint8 *dst = (Sint8 *) cvt->buf;
|
|
|
- const Sint8 *src = (Sint8 *) cvt->buf;
|
|
|
- const Sint8 *target = (const Sint8 *) (cvt->buf + dstsize);
|
|
|
- Sint8 sample0 = ((Sint8) src[0]);
|
|
|
- Sint8 sample1 = ((Sint8) src[1]);
|
|
|
- Sint8 sample2 = ((Sint8) src[2]);
|
|
|
- Sint8 sample3 = ((Sint8) src[3]);
|
|
|
- Sint8 last_sample0 = sample0;
|
|
|
- Sint8 last_sample1 = sample1;
|
|
|
- Sint8 last_sample2 = sample2;
|
|
|
- Sint8 last_sample3 = sample3;
|
|
|
- while (dst < target) {
|
|
|
- src += 4;
|
|
|
- eps += dstsize;
|
|
|
- if ((eps << 1) >= srcsize) {
|
|
|
- dst[0] = ((Sint8) sample0);
|
|
|
- dst[1] = ((Sint8) sample1);
|
|
|
- dst[2] = ((Sint8) sample2);
|
|
|
- dst[3] = ((Sint8) sample3);
|
|
|
- dst += 4;
|
|
|
- sample0 = (Sint8) ((((Sint16) ((Sint8) src[0])) + ((Sint16) last_sample0)) >> 1);
|
|
|
- sample1 = (Sint8) ((((Sint16) ((Sint8) src[1])) + ((Sint16) last_sample1)) >> 1);
|
|
|
- sample2 = (Sint8) ((((Sint16) ((Sint8) src[2])) + ((Sint16) last_sample2)) >> 1);
|
|
|
- sample3 = (Sint8) ((((Sint16) ((Sint8) src[3])) + ((Sint16) last_sample3)) >> 1);
|
|
|
- last_sample0 = sample0;
|
|
|
- last_sample1 = sample1;
|
|
|
- last_sample2 = sample2;
|
|
|
- last_sample3 = sample3;
|
|
|
- eps -= srcsize;
|
|
|
- }
|
|
|
- }
|
|
|
- cvt->len_cvt = dstsize;
|
|
|
- if (cvt->filters[++cvt->filter_index]) {
|
|
|
- cvt->filters[cvt->filter_index] (cvt, format);
|
|
|
- }
|
|
|
-}
|
|
|
-
|
|
|
-static void SDLCALL
|
|
|
-SDL_Upsample_S8_6c(SDL_AudioCVT * cvt, SDL_AudioFormat format)
|
|
|
-{
|
|
|
-#if DEBUG_CONVERT
|
|
|
- fprintf(stderr, "Upsample arbitrary (x%f) AUDIO_S8, 6 channels.\n", cvt->rate_incr);
|
|
|
-#endif
|
|
|
-
|
|
|
- const int srcsize = cvt->len_cvt - 96;
|
|
|
- const int dstsize = (int) (((double)(cvt->len_cvt/6)) * cvt->rate_incr) * 6;
|
|
|
- register int eps = 0;
|
|
|
- Sint8 *dst = ((Sint8 *) (cvt->buf + dstsize)) - 6;
|
|
|
- const Sint8 *src = ((Sint8 *) (cvt->buf + cvt->len_cvt)) - 6;
|
|
|
- const Sint8 *target = ((const Sint8 *) cvt->buf);
|
|
|
- Sint8 sample5 = ((Sint8) src[5]);
|
|
|
- Sint8 sample4 = ((Sint8) src[4]);
|
|
|
- Sint8 sample3 = ((Sint8) src[3]);
|
|
|
- Sint8 sample2 = ((Sint8) src[2]);
|
|
|
- Sint8 sample1 = ((Sint8) src[1]);
|
|
|
- Sint8 sample0 = ((Sint8) src[0]);
|
|
|
- Sint8 last_sample5 = sample5;
|
|
|
- Sint8 last_sample4 = sample4;
|
|
|
- Sint8 last_sample3 = sample3;
|
|
|
- Sint8 last_sample2 = sample2;
|
|
|
- Sint8 last_sample1 = sample1;
|
|
|
- Sint8 last_sample0 = sample0;
|
|
|
- while (dst >= target) {
|
|
|
- dst[5] = ((Sint8) sample5);
|
|
|
- dst[4] = ((Sint8) sample4);
|
|
|
- dst[3] = ((Sint8) sample3);
|
|
|
- dst[2] = ((Sint8) sample2);
|
|
|
- dst[1] = ((Sint8) sample1);
|
|
|
- dst[0] = ((Sint8) sample0);
|
|
|
- dst -= 6;
|
|
|
- eps += srcsize;
|
|
|
- if ((eps << 1) >= dstsize) {
|
|
|
- src -= 6;
|
|
|
- sample5 = (Sint8) ((((Sint16) ((Sint8) src[5])) + ((Sint16) last_sample5)) >> 1);
|
|
|
- sample4 = (Sint8) ((((Sint16) ((Sint8) src[4])) + ((Sint16) last_sample4)) >> 1);
|
|
|
- sample3 = (Sint8) ((((Sint16) ((Sint8) src[3])) + ((Sint16) last_sample3)) >> 1);
|
|
|
- sample2 = (Sint8) ((((Sint16) ((Sint8) src[2])) + ((Sint16) last_sample2)) >> 1);
|
|
|
- sample1 = (Sint8) ((((Sint16) ((Sint8) src[1])) + ((Sint16) last_sample1)) >> 1);
|
|
|
- sample0 = (Sint8) ((((Sint16) ((Sint8) src[0])) + ((Sint16) last_sample0)) >> 1);
|
|
|
- last_sample5 = sample5;
|
|
|
- last_sample4 = sample4;
|
|
|
- last_sample3 = sample3;
|
|
|
- last_sample2 = sample2;
|
|
|
- last_sample1 = sample1;
|
|
|
- last_sample0 = sample0;
|
|
|
- eps -= dstsize;
|
|
|
- }
|
|
|
- }
|
|
|
- cvt->len_cvt = dstsize;
|
|
|
- if (cvt->filters[++cvt->filter_index]) {
|
|
|
- cvt->filters[cvt->filter_index] (cvt, format);
|
|
|
- }
|
|
|
-}
|
|
|
-
|
|
|
-static void SDLCALL
|
|
|
-SDL_Downsample_S8_6c(SDL_AudioCVT * cvt, SDL_AudioFormat format)
|
|
|
-{
|
|
|
-#if DEBUG_CONVERT
|
|
|
- fprintf(stderr, "Downsample arbitrary (x%f) AUDIO_S8, 6 channels.\n", cvt->rate_incr);
|
|
|
-#endif
|
|
|
-
|
|
|
- const int srcsize = cvt->len_cvt - 96;
|
|
|
- const int dstsize = (int) (((double)(cvt->len_cvt/6)) * cvt->rate_incr) * 6;
|
|
|
- register int eps = 0;
|
|
|
- Sint8 *dst = (Sint8 *) cvt->buf;
|
|
|
- const Sint8 *src = (Sint8 *) cvt->buf;
|
|
|
- const Sint8 *target = (const Sint8 *) (cvt->buf + dstsize);
|
|
|
- Sint8 sample0 = ((Sint8) src[0]);
|
|
|
- Sint8 sample1 = ((Sint8) src[1]);
|
|
|
- Sint8 sample2 = ((Sint8) src[2]);
|
|
|
- Sint8 sample3 = ((Sint8) src[3]);
|
|
|
- Sint8 sample4 = ((Sint8) src[4]);
|
|
|
- Sint8 sample5 = ((Sint8) src[5]);
|
|
|
- Sint8 last_sample0 = sample0;
|
|
|
- Sint8 last_sample1 = sample1;
|
|
|
- Sint8 last_sample2 = sample2;
|
|
|
- Sint8 last_sample3 = sample3;
|
|
|
- Sint8 last_sample4 = sample4;
|
|
|
- Sint8 last_sample5 = sample5;
|
|
|
- while (dst < target) {
|
|
|
- src += 6;
|
|
|
- eps += dstsize;
|
|
|
- if ((eps << 1) >= srcsize) {
|
|
|
- dst[0] = ((Sint8) sample0);
|
|
|
- dst[1] = ((Sint8) sample1);
|
|
|
- dst[2] = ((Sint8) sample2);
|
|
|
- dst[3] = ((Sint8) sample3);
|
|
|
- dst[4] = ((Sint8) sample4);
|
|
|
- dst[5] = ((Sint8) sample5);
|
|
|
- dst += 6;
|
|
|
- sample0 = (Sint8) ((((Sint16) ((Sint8) src[0])) + ((Sint16) last_sample0)) >> 1);
|
|
|
- sample1 = (Sint8) ((((Sint16) ((Sint8) src[1])) + ((Sint16) last_sample1)) >> 1);
|
|
|
- sample2 = (Sint8) ((((Sint16) ((Sint8) src[2])) + ((Sint16) last_sample2)) >> 1);
|
|
|
- sample3 = (Sint8) ((((Sint16) ((Sint8) src[3])) + ((Sint16) last_sample3)) >> 1);
|
|
|
- sample4 = (Sint8) ((((Sint16) ((Sint8) src[4])) + ((Sint16) last_sample4)) >> 1);
|
|
|
- sample5 = (Sint8) ((((Sint16) ((Sint8) src[5])) + ((Sint16) last_sample5)) >> 1);
|
|
|
- last_sample0 = sample0;
|
|
|
- last_sample1 = sample1;
|
|
|
- last_sample2 = sample2;
|
|
|
- last_sample3 = sample3;
|
|
|
- last_sample4 = sample4;
|
|
|
- last_sample5 = sample5;
|
|
|
- eps -= srcsize;
|
|
|
- }
|
|
|
- }
|
|
|
- cvt->len_cvt = dstsize;
|
|
|
- if (cvt->filters[++cvt->filter_index]) {
|
|
|
- cvt->filters[cvt->filter_index] (cvt, format);
|
|
|
- }
|
|
|
-}
|
|
|
-
|
|
|
-static void SDLCALL
|
|
|
-SDL_Upsample_S8_8c(SDL_AudioCVT * cvt, SDL_AudioFormat format)
|
|
|
-{
|
|
|
-#if DEBUG_CONVERT
|
|
|
- fprintf(stderr, "Upsample arbitrary (x%f) AUDIO_S8, 8 channels.\n", cvt->rate_incr);
|
|
|
-#endif
|
|
|
-
|
|
|
- const int srcsize = cvt->len_cvt - 128;
|
|
|
- const int dstsize = (int) (((double)(cvt->len_cvt/8)) * cvt->rate_incr) * 8;
|
|
|
- register int eps = 0;
|
|
|
- Sint8 *dst = ((Sint8 *) (cvt->buf + dstsize)) - 8;
|
|
|
- const Sint8 *src = ((Sint8 *) (cvt->buf + cvt->len_cvt)) - 8;
|
|
|
- const Sint8 *target = ((const Sint8 *) cvt->buf);
|
|
|
- Sint8 sample7 = ((Sint8) src[7]);
|
|
|
- Sint8 sample6 = ((Sint8) src[6]);
|
|
|
- Sint8 sample5 = ((Sint8) src[5]);
|
|
|
- Sint8 sample4 = ((Sint8) src[4]);
|
|
|
- Sint8 sample3 = ((Sint8) src[3]);
|
|
|
- Sint8 sample2 = ((Sint8) src[2]);
|
|
|
- Sint8 sample1 = ((Sint8) src[1]);
|
|
|
- Sint8 sample0 = ((Sint8) src[0]);
|
|
|
- Sint8 last_sample7 = sample7;
|
|
|
- Sint8 last_sample6 = sample6;
|
|
|
- Sint8 last_sample5 = sample5;
|
|
|
- Sint8 last_sample4 = sample4;
|
|
|
- Sint8 last_sample3 = sample3;
|
|
|
- Sint8 last_sample2 = sample2;
|
|
|
- Sint8 last_sample1 = sample1;
|
|
|
- Sint8 last_sample0 = sample0;
|
|
|
- while (dst >= target) {
|
|
|
- dst[7] = ((Sint8) sample7);
|
|
|
- dst[6] = ((Sint8) sample6);
|
|
|
- dst[5] = ((Sint8) sample5);
|
|
|
- dst[4] = ((Sint8) sample4);
|
|
|
- dst[3] = ((Sint8) sample3);
|
|
|
- dst[2] = ((Sint8) sample2);
|
|
|
- dst[1] = ((Sint8) sample1);
|
|
|
- dst[0] = ((Sint8) sample0);
|
|
|
- dst -= 8;
|
|
|
- eps += srcsize;
|
|
|
- if ((eps << 1) >= dstsize) {
|
|
|
- src -= 8;
|
|
|
- sample7 = (Sint8) ((((Sint16) ((Sint8) src[7])) + ((Sint16) last_sample7)) >> 1);
|
|
|
- sample6 = (Sint8) ((((Sint16) ((Sint8) src[6])) + ((Sint16) last_sample6)) >> 1);
|
|
|
- sample5 = (Sint8) ((((Sint16) ((Sint8) src[5])) + ((Sint16) last_sample5)) >> 1);
|
|
|
- sample4 = (Sint8) ((((Sint16) ((Sint8) src[4])) + ((Sint16) last_sample4)) >> 1);
|
|
|
- sample3 = (Sint8) ((((Sint16) ((Sint8) src[3])) + ((Sint16) last_sample3)) >> 1);
|
|
|
- sample2 = (Sint8) ((((Sint16) ((Sint8) src[2])) + ((Sint16) last_sample2)) >> 1);
|
|
|
- sample1 = (Sint8) ((((Sint16) ((Sint8) src[1])) + ((Sint16) last_sample1)) >> 1);
|
|
|
- sample0 = (Sint8) ((((Sint16) ((Sint8) src[0])) + ((Sint16) last_sample0)) >> 1);
|
|
|
- last_sample7 = sample7;
|
|
|
- last_sample6 = sample6;
|
|
|
- last_sample5 = sample5;
|
|
|
- last_sample4 = sample4;
|
|
|
- last_sample3 = sample3;
|
|
|
- last_sample2 = sample2;
|
|
|
- last_sample1 = sample1;
|
|
|
- last_sample0 = sample0;
|
|
|
- eps -= dstsize;
|
|
|
- }
|
|
|
- }
|
|
|
- cvt->len_cvt = dstsize;
|
|
|
- if (cvt->filters[++cvt->filter_index]) {
|
|
|
- cvt->filters[cvt->filter_index] (cvt, format);
|
|
|
- }
|
|
|
-}
|
|
|
-
|
|
|
-static void SDLCALL
|
|
|
-SDL_Downsample_S8_8c(SDL_AudioCVT * cvt, SDL_AudioFormat format)
|
|
|
-{
|
|
|
-#if DEBUG_CONVERT
|
|
|
- fprintf(stderr, "Downsample arbitrary (x%f) AUDIO_S8, 8 channels.\n", cvt->rate_incr);
|
|
|
-#endif
|
|
|
-
|
|
|
- const int srcsize = cvt->len_cvt - 128;
|
|
|
- const int dstsize = (int) (((double)(cvt->len_cvt/8)) * cvt->rate_incr) * 8;
|
|
|
- register int eps = 0;
|
|
|
- Sint8 *dst = (Sint8 *) cvt->buf;
|
|
|
- const Sint8 *src = (Sint8 *) cvt->buf;
|
|
|
- const Sint8 *target = (const Sint8 *) (cvt->buf + dstsize);
|
|
|
- Sint8 sample0 = ((Sint8) src[0]);
|
|
|
- Sint8 sample1 = ((Sint8) src[1]);
|
|
|
- Sint8 sample2 = ((Sint8) src[2]);
|
|
|
- Sint8 sample3 = ((Sint8) src[3]);
|
|
|
- Sint8 sample4 = ((Sint8) src[4]);
|
|
|
- Sint8 sample5 = ((Sint8) src[5]);
|
|
|
- Sint8 sample6 = ((Sint8) src[6]);
|
|
|
- Sint8 sample7 = ((Sint8) src[7]);
|
|
|
- Sint8 last_sample0 = sample0;
|
|
|
- Sint8 last_sample1 = sample1;
|
|
|
- Sint8 last_sample2 = sample2;
|
|
|
- Sint8 last_sample3 = sample3;
|
|
|
- Sint8 last_sample4 = sample4;
|
|
|
- Sint8 last_sample5 = sample5;
|
|
|
- Sint8 last_sample6 = sample6;
|
|
|
- Sint8 last_sample7 = sample7;
|
|
|
- while (dst < target) {
|
|
|
- src += 8;
|
|
|
- eps += dstsize;
|
|
|
- if ((eps << 1) >= srcsize) {
|
|
|
- dst[0] = ((Sint8) sample0);
|
|
|
- dst[1] = ((Sint8) sample1);
|
|
|
- dst[2] = ((Sint8) sample2);
|
|
|
- dst[3] = ((Sint8) sample3);
|
|
|
- dst[4] = ((Sint8) sample4);
|
|
|
- dst[5] = ((Sint8) sample5);
|
|
|
- dst[6] = ((Sint8) sample6);
|
|
|
- dst[7] = ((Sint8) sample7);
|
|
|
- dst += 8;
|
|
|
- sample0 = (Sint8) ((((Sint16) ((Sint8) src[0])) + ((Sint16) last_sample0)) >> 1);
|
|
|
- sample1 = (Sint8) ((((Sint16) ((Sint8) src[1])) + ((Sint16) last_sample1)) >> 1);
|
|
|
- sample2 = (Sint8) ((((Sint16) ((Sint8) src[2])) + ((Sint16) last_sample2)) >> 1);
|
|
|
- sample3 = (Sint8) ((((Sint16) ((Sint8) src[3])) + ((Sint16) last_sample3)) >> 1);
|
|
|
- sample4 = (Sint8) ((((Sint16) ((Sint8) src[4])) + ((Sint16) last_sample4)) >> 1);
|
|
|
- sample5 = (Sint8) ((((Sint16) ((Sint8) src[5])) + ((Sint16) last_sample5)) >> 1);
|
|
|
- sample6 = (Sint8) ((((Sint16) ((Sint8) src[6])) + ((Sint16) last_sample6)) >> 1);
|
|
|
- sample7 = (Sint8) ((((Sint16) ((Sint8) src[7])) + ((Sint16) last_sample7)) >> 1);
|
|
|
- last_sample0 = sample0;
|
|
|
- last_sample1 = sample1;
|
|
|
- last_sample2 = sample2;
|
|
|
- last_sample3 = sample3;
|
|
|
- last_sample4 = sample4;
|
|
|
- last_sample5 = sample5;
|
|
|
- last_sample6 = sample6;
|
|
|
- last_sample7 = sample7;
|
|
|
- eps -= srcsize;
|
|
|
- }
|
|
|
- }
|
|
|
- cvt->len_cvt = dstsize;
|
|
|
- if (cvt->filters[++cvt->filter_index]) {
|
|
|
- cvt->filters[cvt->filter_index] (cvt, format);
|
|
|
- }
|
|
|
-}
|
|
|
-
|
|
|
-static void SDLCALL
|
|
|
-SDL_Upsample_U16LSB_1c(SDL_AudioCVT * cvt, SDL_AudioFormat format)
|
|
|
-{
|
|
|
-#if DEBUG_CONVERT
|
|
|
- fprintf(stderr, "Upsample arbitrary (x%f) AUDIO_U16LSB, 1 channels.\n", cvt->rate_incr);
|
|
|
-#endif
|
|
|
-
|
|
|
- const int srcsize = cvt->len_cvt - 32;
|
|
|
- const int dstsize = (int) (((double)(cvt->len_cvt/2)) * cvt->rate_incr) * 2;
|
|
|
- register int eps = 0;
|
|
|
- Uint16 *dst = ((Uint16 *) (cvt->buf + dstsize)) - 1;
|
|
|
- const Uint16 *src = ((Uint16 *) (cvt->buf + cvt->len_cvt)) - 1;
|
|
|
- const Uint16 *target = ((const Uint16 *) cvt->buf);
|
|
|
- Uint16 sample0 = SDL_SwapLE16(src[0]);
|
|
|
- Uint16 last_sample0 = sample0;
|
|
|
- while (dst >= target) {
|
|
|
- dst[0] = SDL_SwapLE16(sample0);
|
|
|
- dst--;
|
|
|
- eps += srcsize;
|
|
|
- if ((eps << 1) >= dstsize) {
|
|
|
- src--;
|
|
|
- sample0 = (Uint16) ((((Sint32) SDL_SwapLE16(src[0])) + ((Sint32) last_sample0)) >> 1);
|
|
|
- last_sample0 = sample0;
|
|
|
- eps -= dstsize;
|
|
|
- }
|
|
|
- }
|
|
|
- cvt->len_cvt = dstsize;
|
|
|
- if (cvt->filters[++cvt->filter_index]) {
|
|
|
- cvt->filters[cvt->filter_index] (cvt, format);
|
|
|
- }
|
|
|
-}
|
|
|
-
|
|
|
-static void SDLCALL
|
|
|
-SDL_Downsample_U16LSB_1c(SDL_AudioCVT * cvt, SDL_AudioFormat format)
|
|
|
-{
|
|
|
-#if DEBUG_CONVERT
|
|
|
- fprintf(stderr, "Downsample arbitrary (x%f) AUDIO_U16LSB, 1 channels.\n", cvt->rate_incr);
|
|
|
-#endif
|
|
|
-
|
|
|
- const int srcsize = cvt->len_cvt - 32;
|
|
|
- const int dstsize = (int) (((double)(cvt->len_cvt/2)) * cvt->rate_incr) * 2;
|
|
|
- register int eps = 0;
|
|
|
- Uint16 *dst = (Uint16 *) cvt->buf;
|
|
|
- const Uint16 *src = (Uint16 *) cvt->buf;
|
|
|
- const Uint16 *target = (const Uint16 *) (cvt->buf + dstsize);
|
|
|
- Uint16 sample0 = SDL_SwapLE16(src[0]);
|
|
|
- Uint16 last_sample0 = sample0;
|
|
|
- while (dst < target) {
|
|
|
- src++;
|
|
|
- eps += dstsize;
|
|
|
- if ((eps << 1) >= srcsize) {
|
|
|
- dst[0] = SDL_SwapLE16(sample0);
|
|
|
- dst++;
|
|
|
- sample0 = (Uint16) ((((Sint32) SDL_SwapLE16(src[0])) + ((Sint32) last_sample0)) >> 1);
|
|
|
- last_sample0 = sample0;
|
|
|
- eps -= srcsize;
|
|
|
- }
|
|
|
- }
|
|
|
- cvt->len_cvt = dstsize;
|
|
|
- if (cvt->filters[++cvt->filter_index]) {
|
|
|
- cvt->filters[cvt->filter_index] (cvt, format);
|
|
|
- }
|
|
|
-}
|
|
|
-
|
|
|
-static void SDLCALL
|
|
|
-SDL_Upsample_U16LSB_2c(SDL_AudioCVT * cvt, SDL_AudioFormat format)
|
|
|
-{
|
|
|
-#if DEBUG_CONVERT
|
|
|
- fprintf(stderr, "Upsample arbitrary (x%f) AUDIO_U16LSB, 2 channels.\n", cvt->rate_incr);
|
|
|
-#endif
|
|
|
-
|
|
|
- const int srcsize = cvt->len_cvt - 64;
|
|
|
- const int dstsize = (int) (((double)(cvt->len_cvt/4)) * cvt->rate_incr) * 4;
|
|
|
- register int eps = 0;
|
|
|
- Uint16 *dst = ((Uint16 *) (cvt->buf + dstsize)) - 2;
|
|
|
- const Uint16 *src = ((Uint16 *) (cvt->buf + cvt->len_cvt)) - 2;
|
|
|
- const Uint16 *target = ((const Uint16 *) cvt->buf);
|
|
|
- Uint16 sample1 = SDL_SwapLE16(src[1]);
|
|
|
- Uint16 sample0 = SDL_SwapLE16(src[0]);
|
|
|
- Uint16 last_sample1 = sample1;
|
|
|
- Uint16 last_sample0 = sample0;
|
|
|
- while (dst >= target) {
|
|
|
- dst[1] = SDL_SwapLE16(sample1);
|
|
|
- dst[0] = SDL_SwapLE16(sample0);
|
|
|
- dst -= 2;
|
|
|
- eps += srcsize;
|
|
|
- if ((eps << 1) >= dstsize) {
|
|
|
- src -= 2;
|
|
|
- sample1 = (Uint16) ((((Sint32) SDL_SwapLE16(src[1])) + ((Sint32) last_sample1)) >> 1);
|
|
|
- sample0 = (Uint16) ((((Sint32) SDL_SwapLE16(src[0])) + ((Sint32) last_sample0)) >> 1);
|
|
|
- last_sample1 = sample1;
|
|
|
- last_sample0 = sample0;
|
|
|
- eps -= dstsize;
|
|
|
- }
|
|
|
- }
|
|
|
- cvt->len_cvt = dstsize;
|
|
|
- if (cvt->filters[++cvt->filter_index]) {
|
|
|
- cvt->filters[cvt->filter_index] (cvt, format);
|
|
|
- }
|
|
|
-}
|
|
|
-
|
|
|
-static void SDLCALL
|
|
|
-SDL_Downsample_U16LSB_2c(SDL_AudioCVT * cvt, SDL_AudioFormat format)
|
|
|
-{
|
|
|
-#if DEBUG_CONVERT
|
|
|
- fprintf(stderr, "Downsample arbitrary (x%f) AUDIO_U16LSB, 2 channels.\n", cvt->rate_incr);
|
|
|
-#endif
|
|
|
-
|
|
|
- const int srcsize = cvt->len_cvt - 64;
|
|
|
- const int dstsize = (int) (((double)(cvt->len_cvt/4)) * cvt->rate_incr) * 4;
|
|
|
- register int eps = 0;
|
|
|
- Uint16 *dst = (Uint16 *) cvt->buf;
|
|
|
- const Uint16 *src = (Uint16 *) cvt->buf;
|
|
|
- const Uint16 *target = (const Uint16 *) (cvt->buf + dstsize);
|
|
|
- Uint16 sample0 = SDL_SwapLE16(src[0]);
|
|
|
- Uint16 sample1 = SDL_SwapLE16(src[1]);
|
|
|
- Uint16 last_sample0 = sample0;
|
|
|
- Uint16 last_sample1 = sample1;
|
|
|
- while (dst < target) {
|
|
|
- src += 2;
|
|
|
- eps += dstsize;
|
|
|
- if ((eps << 1) >= srcsize) {
|
|
|
- dst[0] = SDL_SwapLE16(sample0);
|
|
|
- dst[1] = SDL_SwapLE16(sample1);
|
|
|
- dst += 2;
|
|
|
- sample0 = (Uint16) ((((Sint32) SDL_SwapLE16(src[0])) + ((Sint32) last_sample0)) >> 1);
|
|
|
- sample1 = (Uint16) ((((Sint32) SDL_SwapLE16(src[1])) + ((Sint32) last_sample1)) >> 1);
|
|
|
- last_sample0 = sample0;
|
|
|
- last_sample1 = sample1;
|
|
|
- eps -= srcsize;
|
|
|
- }
|
|
|
- }
|
|
|
- cvt->len_cvt = dstsize;
|
|
|
- if (cvt->filters[++cvt->filter_index]) {
|
|
|
- cvt->filters[cvt->filter_index] (cvt, format);
|
|
|
- }
|
|
|
-}
|
|
|
-
|
|
|
-static void SDLCALL
|
|
|
-SDL_Upsample_U16LSB_4c(SDL_AudioCVT * cvt, SDL_AudioFormat format)
|
|
|
-{
|
|
|
-#if DEBUG_CONVERT
|
|
|
- fprintf(stderr, "Upsample arbitrary (x%f) AUDIO_U16LSB, 4 channels.\n", cvt->rate_incr);
|
|
|
-#endif
|
|
|
-
|
|
|
- const int srcsize = cvt->len_cvt - 128;
|
|
|
- const int dstsize = (int) (((double)(cvt->len_cvt/8)) * cvt->rate_incr) * 8;
|
|
|
- register int eps = 0;
|
|
|
- Uint16 *dst = ((Uint16 *) (cvt->buf + dstsize)) - 4;
|
|
|
- const Uint16 *src = ((Uint16 *) (cvt->buf + cvt->len_cvt)) - 4;
|
|
|
- const Uint16 *target = ((const Uint16 *) cvt->buf);
|
|
|
- Uint16 sample3 = SDL_SwapLE16(src[3]);
|
|
|
- Uint16 sample2 = SDL_SwapLE16(src[2]);
|
|
|
- Uint16 sample1 = SDL_SwapLE16(src[1]);
|
|
|
- Uint16 sample0 = SDL_SwapLE16(src[0]);
|
|
|
- Uint16 last_sample3 = sample3;
|
|
|
- Uint16 last_sample2 = sample2;
|
|
|
- Uint16 last_sample1 = sample1;
|
|
|
- Uint16 last_sample0 = sample0;
|
|
|
- while (dst >= target) {
|
|
|
- dst[3] = SDL_SwapLE16(sample3);
|
|
|
- dst[2] = SDL_SwapLE16(sample2);
|
|
|
- dst[1] = SDL_SwapLE16(sample1);
|
|
|
- dst[0] = SDL_SwapLE16(sample0);
|
|
|
- dst -= 4;
|
|
|
- eps += srcsize;
|
|
|
- if ((eps << 1) >= dstsize) {
|
|
|
- src -= 4;
|
|
|
- sample3 = (Uint16) ((((Sint32) SDL_SwapLE16(src[3])) + ((Sint32) last_sample3)) >> 1);
|
|
|
- sample2 = (Uint16) ((((Sint32) SDL_SwapLE16(src[2])) + ((Sint32) last_sample2)) >> 1);
|
|
|
- sample1 = (Uint16) ((((Sint32) SDL_SwapLE16(src[1])) + ((Sint32) last_sample1)) >> 1);
|
|
|
- sample0 = (Uint16) ((((Sint32) SDL_SwapLE16(src[0])) + ((Sint32) last_sample0)) >> 1);
|
|
|
- last_sample3 = sample3;
|
|
|
- last_sample2 = sample2;
|
|
|
- last_sample1 = sample1;
|
|
|
- last_sample0 = sample0;
|
|
|
- eps -= dstsize;
|
|
|
- }
|
|
|
- }
|
|
|
- cvt->len_cvt = dstsize;
|
|
|
- if (cvt->filters[++cvt->filter_index]) {
|
|
|
- cvt->filters[cvt->filter_index] (cvt, format);
|
|
|
- }
|
|
|
-}
|
|
|
-
|
|
|
-static void SDLCALL
|
|
|
-SDL_Downsample_U16LSB_4c(SDL_AudioCVT * cvt, SDL_AudioFormat format)
|
|
|
-{
|
|
|
-#if DEBUG_CONVERT
|
|
|
- fprintf(stderr, "Downsample arbitrary (x%f) AUDIO_U16LSB, 4 channels.\n", cvt->rate_incr);
|
|
|
-#endif
|
|
|
-
|
|
|
- const int srcsize = cvt->len_cvt - 128;
|
|
|
- const int dstsize = (int) (((double)(cvt->len_cvt/8)) * cvt->rate_incr) * 8;
|
|
|
- register int eps = 0;
|
|
|
- Uint16 *dst = (Uint16 *) cvt->buf;
|
|
|
- const Uint16 *src = (Uint16 *) cvt->buf;
|
|
|
- const Uint16 *target = (const Uint16 *) (cvt->buf + dstsize);
|
|
|
- Uint16 sample0 = SDL_SwapLE16(src[0]);
|
|
|
- Uint16 sample1 = SDL_SwapLE16(src[1]);
|
|
|
- Uint16 sample2 = SDL_SwapLE16(src[2]);
|
|
|
- Uint16 sample3 = SDL_SwapLE16(src[3]);
|
|
|
- Uint16 last_sample0 = sample0;
|
|
|
- Uint16 last_sample1 = sample1;
|
|
|
- Uint16 last_sample2 = sample2;
|
|
|
- Uint16 last_sample3 = sample3;
|
|
|
- while (dst < target) {
|
|
|
- src += 4;
|
|
|
- eps += dstsize;
|
|
|
- if ((eps << 1) >= srcsize) {
|
|
|
- dst[0] = SDL_SwapLE16(sample0);
|
|
|
- dst[1] = SDL_SwapLE16(sample1);
|
|
|
- dst[2] = SDL_SwapLE16(sample2);
|
|
|
- dst[3] = SDL_SwapLE16(sample3);
|
|
|
- dst += 4;
|
|
|
- sample0 = (Uint16) ((((Sint32) SDL_SwapLE16(src[0])) + ((Sint32) last_sample0)) >> 1);
|
|
|
- sample1 = (Uint16) ((((Sint32) SDL_SwapLE16(src[1])) + ((Sint32) last_sample1)) >> 1);
|
|
|
- sample2 = (Uint16) ((((Sint32) SDL_SwapLE16(src[2])) + ((Sint32) last_sample2)) >> 1);
|
|
|
- sample3 = (Uint16) ((((Sint32) SDL_SwapLE16(src[3])) + ((Sint32) last_sample3)) >> 1);
|
|
|
- last_sample0 = sample0;
|
|
|
- last_sample1 = sample1;
|
|
|
- last_sample2 = sample2;
|
|
|
- last_sample3 = sample3;
|
|
|
- eps -= srcsize;
|
|
|
- }
|
|
|
- }
|
|
|
- cvt->len_cvt = dstsize;
|
|
|
- if (cvt->filters[++cvt->filter_index]) {
|
|
|
- cvt->filters[cvt->filter_index] (cvt, format);
|
|
|
- }
|
|
|
-}
|
|
|
-
|
|
|
-static void SDLCALL
|
|
|
-SDL_Upsample_U16LSB_6c(SDL_AudioCVT * cvt, SDL_AudioFormat format)
|
|
|
-{
|
|
|
-#if DEBUG_CONVERT
|
|
|
- fprintf(stderr, "Upsample arbitrary (x%f) AUDIO_U16LSB, 6 channels.\n", cvt->rate_incr);
|
|
|
-#endif
|
|
|
-
|
|
|
- const int srcsize = cvt->len_cvt - 192;
|
|
|
- const int dstsize = (int) (((double)(cvt->len_cvt/12)) * cvt->rate_incr) * 12;
|
|
|
- register int eps = 0;
|
|
|
- Uint16 *dst = ((Uint16 *) (cvt->buf + dstsize)) - 6;
|
|
|
- const Uint16 *src = ((Uint16 *) (cvt->buf + cvt->len_cvt)) - 6;
|
|
|
- const Uint16 *target = ((const Uint16 *) cvt->buf);
|
|
|
- Uint16 sample5 = SDL_SwapLE16(src[5]);
|
|
|
- Uint16 sample4 = SDL_SwapLE16(src[4]);
|
|
|
- Uint16 sample3 = SDL_SwapLE16(src[3]);
|
|
|
- Uint16 sample2 = SDL_SwapLE16(src[2]);
|
|
|
- Uint16 sample1 = SDL_SwapLE16(src[1]);
|
|
|
- Uint16 sample0 = SDL_SwapLE16(src[0]);
|
|
|
- Uint16 last_sample5 = sample5;
|
|
|
- Uint16 last_sample4 = sample4;
|
|
|
- Uint16 last_sample3 = sample3;
|
|
|
- Uint16 last_sample2 = sample2;
|
|
|
- Uint16 last_sample1 = sample1;
|
|
|
- Uint16 last_sample0 = sample0;
|
|
|
- while (dst >= target) {
|
|
|
- dst[5] = SDL_SwapLE16(sample5);
|
|
|
- dst[4] = SDL_SwapLE16(sample4);
|
|
|
- dst[3] = SDL_SwapLE16(sample3);
|
|
|
- dst[2] = SDL_SwapLE16(sample2);
|
|
|
- dst[1] = SDL_SwapLE16(sample1);
|
|
|
- dst[0] = SDL_SwapLE16(sample0);
|
|
|
- dst -= 6;
|
|
|
- eps += srcsize;
|
|
|
- if ((eps << 1) >= dstsize) {
|
|
|
- src -= 6;
|
|
|
- sample5 = (Uint16) ((((Sint32) SDL_SwapLE16(src[5])) + ((Sint32) last_sample5)) >> 1);
|
|
|
- sample4 = (Uint16) ((((Sint32) SDL_SwapLE16(src[4])) + ((Sint32) last_sample4)) >> 1);
|
|
|
- sample3 = (Uint16) ((((Sint32) SDL_SwapLE16(src[3])) + ((Sint32) last_sample3)) >> 1);
|
|
|
- sample2 = (Uint16) ((((Sint32) SDL_SwapLE16(src[2])) + ((Sint32) last_sample2)) >> 1);
|
|
|
- sample1 = (Uint16) ((((Sint32) SDL_SwapLE16(src[1])) + ((Sint32) last_sample1)) >> 1);
|
|
|
- sample0 = (Uint16) ((((Sint32) SDL_SwapLE16(src[0])) + ((Sint32) last_sample0)) >> 1);
|
|
|
- last_sample5 = sample5;
|
|
|
- last_sample4 = sample4;
|
|
|
- last_sample3 = sample3;
|
|
|
- last_sample2 = sample2;
|
|
|
- last_sample1 = sample1;
|
|
|
- last_sample0 = sample0;
|
|
|
- eps -= dstsize;
|
|
|
- }
|
|
|
- }
|
|
|
- cvt->len_cvt = dstsize;
|
|
|
- if (cvt->filters[++cvt->filter_index]) {
|
|
|
- cvt->filters[cvt->filter_index] (cvt, format);
|
|
|
- }
|
|
|
-}
|
|
|
-
|
|
|
-static void SDLCALL
|
|
|
-SDL_Downsample_U16LSB_6c(SDL_AudioCVT * cvt, SDL_AudioFormat format)
|
|
|
-{
|
|
|
-#if DEBUG_CONVERT
|
|
|
- fprintf(stderr, "Downsample arbitrary (x%f) AUDIO_U16LSB, 6 channels.\n", cvt->rate_incr);
|
|
|
-#endif
|
|
|
-
|
|
|
- const int srcsize = cvt->len_cvt - 192;
|
|
|
- const int dstsize = (int) (((double)(cvt->len_cvt/12)) * cvt->rate_incr) * 12;
|
|
|
- register int eps = 0;
|
|
|
- Uint16 *dst = (Uint16 *) cvt->buf;
|
|
|
- const Uint16 *src = (Uint16 *) cvt->buf;
|
|
|
- const Uint16 *target = (const Uint16 *) (cvt->buf + dstsize);
|
|
|
- Uint16 sample0 = SDL_SwapLE16(src[0]);
|
|
|
- Uint16 sample1 = SDL_SwapLE16(src[1]);
|
|
|
- Uint16 sample2 = SDL_SwapLE16(src[2]);
|
|
|
- Uint16 sample3 = SDL_SwapLE16(src[3]);
|
|
|
- Uint16 sample4 = SDL_SwapLE16(src[4]);
|
|
|
- Uint16 sample5 = SDL_SwapLE16(src[5]);
|
|
|
- Uint16 last_sample0 = sample0;
|
|
|
- Uint16 last_sample1 = sample1;
|
|
|
- Uint16 last_sample2 = sample2;
|
|
|
- Uint16 last_sample3 = sample3;
|
|
|
- Uint16 last_sample4 = sample4;
|
|
|
- Uint16 last_sample5 = sample5;
|
|
|
- while (dst < target) {
|
|
|
- src += 6;
|
|
|
- eps += dstsize;
|
|
|
- if ((eps << 1) >= srcsize) {
|
|
|
- dst[0] = SDL_SwapLE16(sample0);
|
|
|
- dst[1] = SDL_SwapLE16(sample1);
|
|
|
- dst[2] = SDL_SwapLE16(sample2);
|
|
|
- dst[3] = SDL_SwapLE16(sample3);
|
|
|
- dst[4] = SDL_SwapLE16(sample4);
|
|
|
- dst[5] = SDL_SwapLE16(sample5);
|
|
|
- dst += 6;
|
|
|
- sample0 = (Uint16) ((((Sint32) SDL_SwapLE16(src[0])) + ((Sint32) last_sample0)) >> 1);
|
|
|
- sample1 = (Uint16) ((((Sint32) SDL_SwapLE16(src[1])) + ((Sint32) last_sample1)) >> 1);
|
|
|
- sample2 = (Uint16) ((((Sint32) SDL_SwapLE16(src[2])) + ((Sint32) last_sample2)) >> 1);
|
|
|
- sample3 = (Uint16) ((((Sint32) SDL_SwapLE16(src[3])) + ((Sint32) last_sample3)) >> 1);
|
|
|
- sample4 = (Uint16) ((((Sint32) SDL_SwapLE16(src[4])) + ((Sint32) last_sample4)) >> 1);
|
|
|
- sample5 = (Uint16) ((((Sint32) SDL_SwapLE16(src[5])) + ((Sint32) last_sample5)) >> 1);
|
|
|
- last_sample0 = sample0;
|
|
|
- last_sample1 = sample1;
|
|
|
- last_sample2 = sample2;
|
|
|
- last_sample3 = sample3;
|
|
|
- last_sample4 = sample4;
|
|
|
- last_sample5 = sample5;
|
|
|
- eps -= srcsize;
|
|
|
- }
|
|
|
- }
|
|
|
- cvt->len_cvt = dstsize;
|
|
|
- if (cvt->filters[++cvt->filter_index]) {
|
|
|
- cvt->filters[cvt->filter_index] (cvt, format);
|
|
|
- }
|
|
|
-}
|
|
|
-
|
|
|
-static void SDLCALL
|
|
|
-SDL_Upsample_U16LSB_8c(SDL_AudioCVT * cvt, SDL_AudioFormat format)
|
|
|
-{
|
|
|
-#if DEBUG_CONVERT
|
|
|
- fprintf(stderr, "Upsample arbitrary (x%f) AUDIO_U16LSB, 8 channels.\n", cvt->rate_incr);
|
|
|
-#endif
|
|
|
-
|
|
|
- const int srcsize = cvt->len_cvt - 256;
|
|
|
- const int dstsize = (int) (((double)(cvt->len_cvt/16)) * cvt->rate_incr) * 16;
|
|
|
- register int eps = 0;
|
|
|
- Uint16 *dst = ((Uint16 *) (cvt->buf + dstsize)) - 8;
|
|
|
- const Uint16 *src = ((Uint16 *) (cvt->buf + cvt->len_cvt)) - 8;
|
|
|
- const Uint16 *target = ((const Uint16 *) cvt->buf);
|
|
|
- Uint16 sample7 = SDL_SwapLE16(src[7]);
|
|
|
- Uint16 sample6 = SDL_SwapLE16(src[6]);
|
|
|
- Uint16 sample5 = SDL_SwapLE16(src[5]);
|
|
|
- Uint16 sample4 = SDL_SwapLE16(src[4]);
|
|
|
- Uint16 sample3 = SDL_SwapLE16(src[3]);
|
|
|
- Uint16 sample2 = SDL_SwapLE16(src[2]);
|
|
|
- Uint16 sample1 = SDL_SwapLE16(src[1]);
|
|
|
- Uint16 sample0 = SDL_SwapLE16(src[0]);
|
|
|
- Uint16 last_sample7 = sample7;
|
|
|
- Uint16 last_sample6 = sample6;
|
|
|
- Uint16 last_sample5 = sample5;
|
|
|
- Uint16 last_sample4 = sample4;
|
|
|
- Uint16 last_sample3 = sample3;
|
|
|
- Uint16 last_sample2 = sample2;
|
|
|
- Uint16 last_sample1 = sample1;
|
|
|
- Uint16 last_sample0 = sample0;
|
|
|
- while (dst >= target) {
|
|
|
- dst[7] = SDL_SwapLE16(sample7);
|
|
|
- dst[6] = SDL_SwapLE16(sample6);
|
|
|
- dst[5] = SDL_SwapLE16(sample5);
|
|
|
- dst[4] = SDL_SwapLE16(sample4);
|
|
|
- dst[3] = SDL_SwapLE16(sample3);
|
|
|
- dst[2] = SDL_SwapLE16(sample2);
|
|
|
- dst[1] = SDL_SwapLE16(sample1);
|
|
|
- dst[0] = SDL_SwapLE16(sample0);
|
|
|
- dst -= 8;
|
|
|
- eps += srcsize;
|
|
|
- if ((eps << 1) >= dstsize) {
|
|
|
- src -= 8;
|
|
|
- sample7 = (Uint16) ((((Sint32) SDL_SwapLE16(src[7])) + ((Sint32) last_sample7)) >> 1);
|
|
|
- sample6 = (Uint16) ((((Sint32) SDL_SwapLE16(src[6])) + ((Sint32) last_sample6)) >> 1);
|
|
|
- sample5 = (Uint16) ((((Sint32) SDL_SwapLE16(src[5])) + ((Sint32) last_sample5)) >> 1);
|
|
|
- sample4 = (Uint16) ((((Sint32) SDL_SwapLE16(src[4])) + ((Sint32) last_sample4)) >> 1);
|
|
|
- sample3 = (Uint16) ((((Sint32) SDL_SwapLE16(src[3])) + ((Sint32) last_sample3)) >> 1);
|
|
|
- sample2 = (Uint16) ((((Sint32) SDL_SwapLE16(src[2])) + ((Sint32) last_sample2)) >> 1);
|
|
|
- sample1 = (Uint16) ((((Sint32) SDL_SwapLE16(src[1])) + ((Sint32) last_sample1)) >> 1);
|
|
|
- sample0 = (Uint16) ((((Sint32) SDL_SwapLE16(src[0])) + ((Sint32) last_sample0)) >> 1);
|
|
|
- last_sample7 = sample7;
|
|
|
- last_sample6 = sample6;
|
|
|
- last_sample5 = sample5;
|
|
|
- last_sample4 = sample4;
|
|
|
- last_sample3 = sample3;
|
|
|
- last_sample2 = sample2;
|
|
|
- last_sample1 = sample1;
|
|
|
- last_sample0 = sample0;
|
|
|
- eps -= dstsize;
|
|
|
- }
|
|
|
- }
|
|
|
- cvt->len_cvt = dstsize;
|
|
|
- if (cvt->filters[++cvt->filter_index]) {
|
|
|
- cvt->filters[cvt->filter_index] (cvt, format);
|
|
|
- }
|
|
|
-}
|
|
|
-
|
|
|
-static void SDLCALL
|
|
|
-SDL_Downsample_U16LSB_8c(SDL_AudioCVT * cvt, SDL_AudioFormat format)
|
|
|
-{
|
|
|
-#if DEBUG_CONVERT
|
|
|
- fprintf(stderr, "Downsample arbitrary (x%f) AUDIO_U16LSB, 8 channels.\n", cvt->rate_incr);
|
|
|
-#endif
|
|
|
-
|
|
|
- const int srcsize = cvt->len_cvt - 256;
|
|
|
- const int dstsize = (int) (((double)(cvt->len_cvt/16)) * cvt->rate_incr) * 16;
|
|
|
- register int eps = 0;
|
|
|
- Uint16 *dst = (Uint16 *) cvt->buf;
|
|
|
- const Uint16 *src = (Uint16 *) cvt->buf;
|
|
|
- const Uint16 *target = (const Uint16 *) (cvt->buf + dstsize);
|
|
|
- Uint16 sample0 = SDL_SwapLE16(src[0]);
|
|
|
- Uint16 sample1 = SDL_SwapLE16(src[1]);
|
|
|
- Uint16 sample2 = SDL_SwapLE16(src[2]);
|
|
|
- Uint16 sample3 = SDL_SwapLE16(src[3]);
|
|
|
- Uint16 sample4 = SDL_SwapLE16(src[4]);
|
|
|
- Uint16 sample5 = SDL_SwapLE16(src[5]);
|
|
|
- Uint16 sample6 = SDL_SwapLE16(src[6]);
|
|
|
- Uint16 sample7 = SDL_SwapLE16(src[7]);
|
|
|
- Uint16 last_sample0 = sample0;
|
|
|
- Uint16 last_sample1 = sample1;
|
|
|
- Uint16 last_sample2 = sample2;
|
|
|
- Uint16 last_sample3 = sample3;
|
|
|
- Uint16 last_sample4 = sample4;
|
|
|
- Uint16 last_sample5 = sample5;
|
|
|
- Uint16 last_sample6 = sample6;
|
|
|
- Uint16 last_sample7 = sample7;
|
|
|
- while (dst < target) {
|
|
|
- src += 8;
|
|
|
- eps += dstsize;
|
|
|
- if ((eps << 1) >= srcsize) {
|
|
|
- dst[0] = SDL_SwapLE16(sample0);
|
|
|
- dst[1] = SDL_SwapLE16(sample1);
|
|
|
- dst[2] = SDL_SwapLE16(sample2);
|
|
|
- dst[3] = SDL_SwapLE16(sample3);
|
|
|
- dst[4] = SDL_SwapLE16(sample4);
|
|
|
- dst[5] = SDL_SwapLE16(sample5);
|
|
|
- dst[6] = SDL_SwapLE16(sample6);
|
|
|
- dst[7] = SDL_SwapLE16(sample7);
|
|
|
- dst += 8;
|
|
|
- sample0 = (Uint16) ((((Sint32) SDL_SwapLE16(src[0])) + ((Sint32) last_sample0)) >> 1);
|
|
|
- sample1 = (Uint16) ((((Sint32) SDL_SwapLE16(src[1])) + ((Sint32) last_sample1)) >> 1);
|
|
|
- sample2 = (Uint16) ((((Sint32) SDL_SwapLE16(src[2])) + ((Sint32) last_sample2)) >> 1);
|
|
|
- sample3 = (Uint16) ((((Sint32) SDL_SwapLE16(src[3])) + ((Sint32) last_sample3)) >> 1);
|
|
|
- sample4 = (Uint16) ((((Sint32) SDL_SwapLE16(src[4])) + ((Sint32) last_sample4)) >> 1);
|
|
|
- sample5 = (Uint16) ((((Sint32) SDL_SwapLE16(src[5])) + ((Sint32) last_sample5)) >> 1);
|
|
|
- sample6 = (Uint16) ((((Sint32) SDL_SwapLE16(src[6])) + ((Sint32) last_sample6)) >> 1);
|
|
|
- sample7 = (Uint16) ((((Sint32) SDL_SwapLE16(src[7])) + ((Sint32) last_sample7)) >> 1);
|
|
|
- last_sample0 = sample0;
|
|
|
- last_sample1 = sample1;
|
|
|
- last_sample2 = sample2;
|
|
|
- last_sample3 = sample3;
|
|
|
- last_sample4 = sample4;
|
|
|
- last_sample5 = sample5;
|
|
|
- last_sample6 = sample6;
|
|
|
- last_sample7 = sample7;
|
|
|
- eps -= srcsize;
|
|
|
- }
|
|
|
- }
|
|
|
- cvt->len_cvt = dstsize;
|
|
|
- if (cvt->filters[++cvt->filter_index]) {
|
|
|
- cvt->filters[cvt->filter_index] (cvt, format);
|
|
|
- }
|
|
|
-}
|
|
|
-
|
|
|
-static void SDLCALL
|
|
|
-SDL_Upsample_S16LSB_1c(SDL_AudioCVT * cvt, SDL_AudioFormat format)
|
|
|
-{
|
|
|
-#if DEBUG_CONVERT
|
|
|
- fprintf(stderr, "Upsample arbitrary (x%f) AUDIO_S16LSB, 1 channels.\n", cvt->rate_incr);
|
|
|
-#endif
|
|
|
-
|
|
|
- const int srcsize = cvt->len_cvt - 32;
|
|
|
- const int dstsize = (int) (((double)(cvt->len_cvt/2)) * cvt->rate_incr) * 2;
|
|
|
- register int eps = 0;
|
|
|
- Sint16 *dst = ((Sint16 *) (cvt->buf + dstsize)) - 1;
|
|
|
- const Sint16 *src = ((Sint16 *) (cvt->buf + cvt->len_cvt)) - 1;
|
|
|
- const Sint16 *target = ((const Sint16 *) cvt->buf);
|
|
|
- Sint16 sample0 = ((Sint16) SDL_SwapLE16(src[0]));
|
|
|
- Sint16 last_sample0 = sample0;
|
|
|
- while (dst >= target) {
|
|
|
- dst[0] = ((Sint16) SDL_SwapLE16(sample0));
|
|
|
- dst--;
|
|
|
- eps += srcsize;
|
|
|
- if ((eps << 1) >= dstsize) {
|
|
|
- src--;
|
|
|
- sample0 = (Sint16) ((((Sint32) ((Sint16) SDL_SwapLE16(src[0]))) + ((Sint32) last_sample0)) >> 1);
|
|
|
- last_sample0 = sample0;
|
|
|
- eps -= dstsize;
|
|
|
- }
|
|
|
- }
|
|
|
- cvt->len_cvt = dstsize;
|
|
|
- if (cvt->filters[++cvt->filter_index]) {
|
|
|
- cvt->filters[cvt->filter_index] (cvt, format);
|
|
|
- }
|
|
|
-}
|
|
|
-
|
|
|
-static void SDLCALL
|
|
|
-SDL_Downsample_S16LSB_1c(SDL_AudioCVT * cvt, SDL_AudioFormat format)
|
|
|
-{
|
|
|
-#if DEBUG_CONVERT
|
|
|
- fprintf(stderr, "Downsample arbitrary (x%f) AUDIO_S16LSB, 1 channels.\n", cvt->rate_incr);
|
|
|
-#endif
|
|
|
-
|
|
|
- const int srcsize = cvt->len_cvt - 32;
|
|
|
- const int dstsize = (int) (((double)(cvt->len_cvt/2)) * cvt->rate_incr) * 2;
|
|
|
- register int eps = 0;
|
|
|
- Sint16 *dst = (Sint16 *) cvt->buf;
|
|
|
- const Sint16 *src = (Sint16 *) cvt->buf;
|
|
|
- const Sint16 *target = (const Sint16 *) (cvt->buf + dstsize);
|
|
|
- Sint16 sample0 = ((Sint16) SDL_SwapLE16(src[0]));
|
|
|
- Sint16 last_sample0 = sample0;
|
|
|
- while (dst < target) {
|
|
|
- src++;
|
|
|
- eps += dstsize;
|
|
|
- if ((eps << 1) >= srcsize) {
|
|
|
- dst[0] = ((Sint16) SDL_SwapLE16(sample0));
|
|
|
- dst++;
|
|
|
- sample0 = (Sint16) ((((Sint32) ((Sint16) SDL_SwapLE16(src[0]))) + ((Sint32) last_sample0)) >> 1);
|
|
|
- last_sample0 = sample0;
|
|
|
- eps -= srcsize;
|
|
|
- }
|
|
|
- }
|
|
|
- cvt->len_cvt = dstsize;
|
|
|
- if (cvt->filters[++cvt->filter_index]) {
|
|
|
- cvt->filters[cvt->filter_index] (cvt, format);
|
|
|
- }
|
|
|
-}
|
|
|
-
|
|
|
-static void SDLCALL
|
|
|
-SDL_Upsample_S16LSB_2c(SDL_AudioCVT * cvt, SDL_AudioFormat format)
|
|
|
-{
|
|
|
-#if DEBUG_CONVERT
|
|
|
- fprintf(stderr, "Upsample arbitrary (x%f) AUDIO_S16LSB, 2 channels.\n", cvt->rate_incr);
|
|
|
-#endif
|
|
|
-
|
|
|
- const int srcsize = cvt->len_cvt - 64;
|
|
|
- const int dstsize = (int) (((double)(cvt->len_cvt/4)) * cvt->rate_incr) * 4;
|
|
|
- register int eps = 0;
|
|
|
- Sint16 *dst = ((Sint16 *) (cvt->buf + dstsize)) - 2;
|
|
|
- const Sint16 *src = ((Sint16 *) (cvt->buf + cvt->len_cvt)) - 2;
|
|
|
- const Sint16 *target = ((const Sint16 *) cvt->buf);
|
|
|
- Sint16 sample1 = ((Sint16) SDL_SwapLE16(src[1]));
|
|
|
- Sint16 sample0 = ((Sint16) SDL_SwapLE16(src[0]));
|
|
|
- Sint16 last_sample1 = sample1;
|
|
|
- Sint16 last_sample0 = sample0;
|
|
|
- while (dst >= target) {
|
|
|
- dst[1] = ((Sint16) SDL_SwapLE16(sample1));
|
|
|
- dst[0] = ((Sint16) SDL_SwapLE16(sample0));
|
|
|
- dst -= 2;
|
|
|
- eps += srcsize;
|
|
|
- if ((eps << 1) >= dstsize) {
|
|
|
- src -= 2;
|
|
|
- sample1 = (Sint16) ((((Sint32) ((Sint16) SDL_SwapLE16(src[1]))) + ((Sint32) last_sample1)) >> 1);
|
|
|
- sample0 = (Sint16) ((((Sint32) ((Sint16) SDL_SwapLE16(src[0]))) + ((Sint32) last_sample0)) >> 1);
|
|
|
- last_sample1 = sample1;
|
|
|
- last_sample0 = sample0;
|
|
|
- eps -= dstsize;
|
|
|
- }
|
|
|
- }
|
|
|
- cvt->len_cvt = dstsize;
|
|
|
- if (cvt->filters[++cvt->filter_index]) {
|
|
|
- cvt->filters[cvt->filter_index] (cvt, format);
|
|
|
- }
|
|
|
-}
|
|
|
-
|
|
|
-static void SDLCALL
|
|
|
-SDL_Downsample_S16LSB_2c(SDL_AudioCVT * cvt, SDL_AudioFormat format)
|
|
|
-{
|
|
|
-#if DEBUG_CONVERT
|
|
|
- fprintf(stderr, "Downsample arbitrary (x%f) AUDIO_S16LSB, 2 channels.\n", cvt->rate_incr);
|
|
|
-#endif
|
|
|
-
|
|
|
- const int srcsize = cvt->len_cvt - 64;
|
|
|
- const int dstsize = (int) (((double)(cvt->len_cvt/4)) * cvt->rate_incr) * 4;
|
|
|
- register int eps = 0;
|
|
|
- Sint16 *dst = (Sint16 *) cvt->buf;
|
|
|
- const Sint16 *src = (Sint16 *) cvt->buf;
|
|
|
- const Sint16 *target = (const Sint16 *) (cvt->buf + dstsize);
|
|
|
- Sint16 sample0 = ((Sint16) SDL_SwapLE16(src[0]));
|
|
|
- Sint16 sample1 = ((Sint16) SDL_SwapLE16(src[1]));
|
|
|
- Sint16 last_sample0 = sample0;
|
|
|
- Sint16 last_sample1 = sample1;
|
|
|
- while (dst < target) {
|
|
|
- src += 2;
|
|
|
- eps += dstsize;
|
|
|
- if ((eps << 1) >= srcsize) {
|
|
|
- dst[0] = ((Sint16) SDL_SwapLE16(sample0));
|
|
|
- dst[1] = ((Sint16) SDL_SwapLE16(sample1));
|
|
|
- dst += 2;
|
|
|
- sample0 = (Sint16) ((((Sint32) ((Sint16) SDL_SwapLE16(src[0]))) + ((Sint32) last_sample0)) >> 1);
|
|
|
- sample1 = (Sint16) ((((Sint32) ((Sint16) SDL_SwapLE16(src[1]))) + ((Sint32) last_sample1)) >> 1);
|
|
|
- last_sample0 = sample0;
|
|
|
- last_sample1 = sample1;
|
|
|
- eps -= srcsize;
|
|
|
- }
|
|
|
- }
|
|
|
- cvt->len_cvt = dstsize;
|
|
|
- if (cvt->filters[++cvt->filter_index]) {
|
|
|
- cvt->filters[cvt->filter_index] (cvt, format);
|
|
|
- }
|
|
|
-}
|
|
|
-
|
|
|
-static void SDLCALL
|
|
|
-SDL_Upsample_S16LSB_4c(SDL_AudioCVT * cvt, SDL_AudioFormat format)
|
|
|
-{
|
|
|
-#if DEBUG_CONVERT
|
|
|
- fprintf(stderr, "Upsample arbitrary (x%f) AUDIO_S16LSB, 4 channels.\n", cvt->rate_incr);
|
|
|
-#endif
|
|
|
-
|
|
|
- const int srcsize = cvt->len_cvt - 128;
|
|
|
- const int dstsize = (int) (((double)(cvt->len_cvt/8)) * cvt->rate_incr) * 8;
|
|
|
- register int eps = 0;
|
|
|
- Sint16 *dst = ((Sint16 *) (cvt->buf + dstsize)) - 4;
|
|
|
- const Sint16 *src = ((Sint16 *) (cvt->buf + cvt->len_cvt)) - 4;
|
|
|
- const Sint16 *target = ((const Sint16 *) cvt->buf);
|
|
|
- Sint16 sample3 = ((Sint16) SDL_SwapLE16(src[3]));
|
|
|
- Sint16 sample2 = ((Sint16) SDL_SwapLE16(src[2]));
|
|
|
- Sint16 sample1 = ((Sint16) SDL_SwapLE16(src[1]));
|
|
|
- Sint16 sample0 = ((Sint16) SDL_SwapLE16(src[0]));
|
|
|
- Sint16 last_sample3 = sample3;
|
|
|
- Sint16 last_sample2 = sample2;
|
|
|
- Sint16 last_sample1 = sample1;
|
|
|
- Sint16 last_sample0 = sample0;
|
|
|
- while (dst >= target) {
|
|
|
- dst[3] = ((Sint16) SDL_SwapLE16(sample3));
|
|
|
- dst[2] = ((Sint16) SDL_SwapLE16(sample2));
|
|
|
- dst[1] = ((Sint16) SDL_SwapLE16(sample1));
|
|
|
- dst[0] = ((Sint16) SDL_SwapLE16(sample0));
|
|
|
- dst -= 4;
|
|
|
- eps += srcsize;
|
|
|
- if ((eps << 1) >= dstsize) {
|
|
|
- src -= 4;
|
|
|
- sample3 = (Sint16) ((((Sint32) ((Sint16) SDL_SwapLE16(src[3]))) + ((Sint32) last_sample3)) >> 1);
|
|
|
- sample2 = (Sint16) ((((Sint32) ((Sint16) SDL_SwapLE16(src[2]))) + ((Sint32) last_sample2)) >> 1);
|
|
|
- sample1 = (Sint16) ((((Sint32) ((Sint16) SDL_SwapLE16(src[1]))) + ((Sint32) last_sample1)) >> 1);
|
|
|
- sample0 = (Sint16) ((((Sint32) ((Sint16) SDL_SwapLE16(src[0]))) + ((Sint32) last_sample0)) >> 1);
|
|
|
- last_sample3 = sample3;
|
|
|
- last_sample2 = sample2;
|
|
|
- last_sample1 = sample1;
|
|
|
- last_sample0 = sample0;
|
|
|
- eps -= dstsize;
|
|
|
- }
|
|
|
- }
|
|
|
- cvt->len_cvt = dstsize;
|
|
|
- if (cvt->filters[++cvt->filter_index]) {
|
|
|
- cvt->filters[cvt->filter_index] (cvt, format);
|
|
|
- }
|
|
|
-}
|
|
|
-
|
|
|
-static void SDLCALL
|
|
|
-SDL_Downsample_S16LSB_4c(SDL_AudioCVT * cvt, SDL_AudioFormat format)
|
|
|
-{
|
|
|
-#if DEBUG_CONVERT
|
|
|
- fprintf(stderr, "Downsample arbitrary (x%f) AUDIO_S16LSB, 4 channels.\n", cvt->rate_incr);
|
|
|
-#endif
|
|
|
-
|
|
|
- const int srcsize = cvt->len_cvt - 128;
|
|
|
- const int dstsize = (int) (((double)(cvt->len_cvt/8)) * cvt->rate_incr) * 8;
|
|
|
- register int eps = 0;
|
|
|
- Sint16 *dst = (Sint16 *) cvt->buf;
|
|
|
- const Sint16 *src = (Sint16 *) cvt->buf;
|
|
|
- const Sint16 *target = (const Sint16 *) (cvt->buf + dstsize);
|
|
|
- Sint16 sample0 = ((Sint16) SDL_SwapLE16(src[0]));
|
|
|
- Sint16 sample1 = ((Sint16) SDL_SwapLE16(src[1]));
|
|
|
- Sint16 sample2 = ((Sint16) SDL_SwapLE16(src[2]));
|
|
|
- Sint16 sample3 = ((Sint16) SDL_SwapLE16(src[3]));
|
|
|
- Sint16 last_sample0 = sample0;
|
|
|
- Sint16 last_sample1 = sample1;
|
|
|
- Sint16 last_sample2 = sample2;
|
|
|
- Sint16 last_sample3 = sample3;
|
|
|
- while (dst < target) {
|
|
|
- src += 4;
|
|
|
- eps += dstsize;
|
|
|
- if ((eps << 1) >= srcsize) {
|
|
|
- dst[0] = ((Sint16) SDL_SwapLE16(sample0));
|
|
|
- dst[1] = ((Sint16) SDL_SwapLE16(sample1));
|
|
|
- dst[2] = ((Sint16) SDL_SwapLE16(sample2));
|
|
|
- dst[3] = ((Sint16) SDL_SwapLE16(sample3));
|
|
|
- dst += 4;
|
|
|
- sample0 = (Sint16) ((((Sint32) ((Sint16) SDL_SwapLE16(src[0]))) + ((Sint32) last_sample0)) >> 1);
|
|
|
- sample1 = (Sint16) ((((Sint32) ((Sint16) SDL_SwapLE16(src[1]))) + ((Sint32) last_sample1)) >> 1);
|
|
|
- sample2 = (Sint16) ((((Sint32) ((Sint16) SDL_SwapLE16(src[2]))) + ((Sint32) last_sample2)) >> 1);
|
|
|
- sample3 = (Sint16) ((((Sint32) ((Sint16) SDL_SwapLE16(src[3]))) + ((Sint32) last_sample3)) >> 1);
|
|
|
- last_sample0 = sample0;
|
|
|
- last_sample1 = sample1;
|
|
|
- last_sample2 = sample2;
|
|
|
- last_sample3 = sample3;
|
|
|
- eps -= srcsize;
|
|
|
- }
|
|
|
- }
|
|
|
- cvt->len_cvt = dstsize;
|
|
|
- if (cvt->filters[++cvt->filter_index]) {
|
|
|
- cvt->filters[cvt->filter_index] (cvt, format);
|
|
|
- }
|
|
|
-}
|
|
|
-
|
|
|
-static void SDLCALL
|
|
|
-SDL_Upsample_S16LSB_6c(SDL_AudioCVT * cvt, SDL_AudioFormat format)
|
|
|
-{
|
|
|
-#if DEBUG_CONVERT
|
|
|
- fprintf(stderr, "Upsample arbitrary (x%f) AUDIO_S16LSB, 6 channels.\n", cvt->rate_incr);
|
|
|
-#endif
|
|
|
-
|
|
|
- const int srcsize = cvt->len_cvt - 192;
|
|
|
- const int dstsize = (int) (((double)(cvt->len_cvt/12)) * cvt->rate_incr) * 12;
|
|
|
- register int eps = 0;
|
|
|
- Sint16 *dst = ((Sint16 *) (cvt->buf + dstsize)) - 6;
|
|
|
- const Sint16 *src = ((Sint16 *) (cvt->buf + cvt->len_cvt)) - 6;
|
|
|
- const Sint16 *target = ((const Sint16 *) cvt->buf);
|
|
|
- Sint16 sample5 = ((Sint16) SDL_SwapLE16(src[5]));
|
|
|
- Sint16 sample4 = ((Sint16) SDL_SwapLE16(src[4]));
|
|
|
- Sint16 sample3 = ((Sint16) SDL_SwapLE16(src[3]));
|
|
|
- Sint16 sample2 = ((Sint16) SDL_SwapLE16(src[2]));
|
|
|
- Sint16 sample1 = ((Sint16) SDL_SwapLE16(src[1]));
|
|
|
- Sint16 sample0 = ((Sint16) SDL_SwapLE16(src[0]));
|
|
|
- Sint16 last_sample5 = sample5;
|
|
|
- Sint16 last_sample4 = sample4;
|
|
|
- Sint16 last_sample3 = sample3;
|
|
|
- Sint16 last_sample2 = sample2;
|
|
|
- Sint16 last_sample1 = sample1;
|
|
|
- Sint16 last_sample0 = sample0;
|
|
|
- while (dst >= target) {
|
|
|
- dst[5] = ((Sint16) SDL_SwapLE16(sample5));
|
|
|
- dst[4] = ((Sint16) SDL_SwapLE16(sample4));
|
|
|
- dst[3] = ((Sint16) SDL_SwapLE16(sample3));
|
|
|
- dst[2] = ((Sint16) SDL_SwapLE16(sample2));
|
|
|
- dst[1] = ((Sint16) SDL_SwapLE16(sample1));
|
|
|
- dst[0] = ((Sint16) SDL_SwapLE16(sample0));
|
|
|
- dst -= 6;
|
|
|
- eps += srcsize;
|
|
|
- if ((eps << 1) >= dstsize) {
|
|
|
- src -= 6;
|
|
|
- sample5 = (Sint16) ((((Sint32) ((Sint16) SDL_SwapLE16(src[5]))) + ((Sint32) last_sample5)) >> 1);
|
|
|
- sample4 = (Sint16) ((((Sint32) ((Sint16) SDL_SwapLE16(src[4]))) + ((Sint32) last_sample4)) >> 1);
|
|
|
- sample3 = (Sint16) ((((Sint32) ((Sint16) SDL_SwapLE16(src[3]))) + ((Sint32) last_sample3)) >> 1);
|
|
|
- sample2 = (Sint16) ((((Sint32) ((Sint16) SDL_SwapLE16(src[2]))) + ((Sint32) last_sample2)) >> 1);
|
|
|
- sample1 = (Sint16) ((((Sint32) ((Sint16) SDL_SwapLE16(src[1]))) + ((Sint32) last_sample1)) >> 1);
|
|
|
- sample0 = (Sint16) ((((Sint32) ((Sint16) SDL_SwapLE16(src[0]))) + ((Sint32) last_sample0)) >> 1);
|
|
|
- last_sample5 = sample5;
|
|
|
- last_sample4 = sample4;
|
|
|
- last_sample3 = sample3;
|
|
|
- last_sample2 = sample2;
|
|
|
- last_sample1 = sample1;
|
|
|
- last_sample0 = sample0;
|
|
|
- eps -= dstsize;
|
|
|
- }
|
|
|
- }
|
|
|
- cvt->len_cvt = dstsize;
|
|
|
- if (cvt->filters[++cvt->filter_index]) {
|
|
|
- cvt->filters[cvt->filter_index] (cvt, format);
|
|
|
- }
|
|
|
-}
|
|
|
-
|
|
|
-static void SDLCALL
|
|
|
-SDL_Downsample_S16LSB_6c(SDL_AudioCVT * cvt, SDL_AudioFormat format)
|
|
|
-{
|
|
|
-#if DEBUG_CONVERT
|
|
|
- fprintf(stderr, "Downsample arbitrary (x%f) AUDIO_S16LSB, 6 channels.\n", cvt->rate_incr);
|
|
|
-#endif
|
|
|
-
|
|
|
- const int srcsize = cvt->len_cvt - 192;
|
|
|
- const int dstsize = (int) (((double)(cvt->len_cvt/12)) * cvt->rate_incr) * 12;
|
|
|
- register int eps = 0;
|
|
|
- Sint16 *dst = (Sint16 *) cvt->buf;
|
|
|
- const Sint16 *src = (Sint16 *) cvt->buf;
|
|
|
- const Sint16 *target = (const Sint16 *) (cvt->buf + dstsize);
|
|
|
- Sint16 sample0 = ((Sint16) SDL_SwapLE16(src[0]));
|
|
|
- Sint16 sample1 = ((Sint16) SDL_SwapLE16(src[1]));
|
|
|
- Sint16 sample2 = ((Sint16) SDL_SwapLE16(src[2]));
|
|
|
- Sint16 sample3 = ((Sint16) SDL_SwapLE16(src[3]));
|
|
|
- Sint16 sample4 = ((Sint16) SDL_SwapLE16(src[4]));
|
|
|
- Sint16 sample5 = ((Sint16) SDL_SwapLE16(src[5]));
|
|
|
- Sint16 last_sample0 = sample0;
|
|
|
- Sint16 last_sample1 = sample1;
|
|
|
- Sint16 last_sample2 = sample2;
|
|
|
- Sint16 last_sample3 = sample3;
|
|
|
- Sint16 last_sample4 = sample4;
|
|
|
- Sint16 last_sample5 = sample5;
|
|
|
- while (dst < target) {
|
|
|
- src += 6;
|
|
|
- eps += dstsize;
|
|
|
- if ((eps << 1) >= srcsize) {
|
|
|
- dst[0] = ((Sint16) SDL_SwapLE16(sample0));
|
|
|
- dst[1] = ((Sint16) SDL_SwapLE16(sample1));
|
|
|
- dst[2] = ((Sint16) SDL_SwapLE16(sample2));
|
|
|
- dst[3] = ((Sint16) SDL_SwapLE16(sample3));
|
|
|
- dst[4] = ((Sint16) SDL_SwapLE16(sample4));
|
|
|
- dst[5] = ((Sint16) SDL_SwapLE16(sample5));
|
|
|
- dst += 6;
|
|
|
- sample0 = (Sint16) ((((Sint32) ((Sint16) SDL_SwapLE16(src[0]))) + ((Sint32) last_sample0)) >> 1);
|
|
|
- sample1 = (Sint16) ((((Sint32) ((Sint16) SDL_SwapLE16(src[1]))) + ((Sint32) last_sample1)) >> 1);
|
|
|
- sample2 = (Sint16) ((((Sint32) ((Sint16) SDL_SwapLE16(src[2]))) + ((Sint32) last_sample2)) >> 1);
|
|
|
- sample3 = (Sint16) ((((Sint32) ((Sint16) SDL_SwapLE16(src[3]))) + ((Sint32) last_sample3)) >> 1);
|
|
|
- sample4 = (Sint16) ((((Sint32) ((Sint16) SDL_SwapLE16(src[4]))) + ((Sint32) last_sample4)) >> 1);
|
|
|
- sample5 = (Sint16) ((((Sint32) ((Sint16) SDL_SwapLE16(src[5]))) + ((Sint32) last_sample5)) >> 1);
|
|
|
- last_sample0 = sample0;
|
|
|
- last_sample1 = sample1;
|
|
|
- last_sample2 = sample2;
|
|
|
- last_sample3 = sample3;
|
|
|
- last_sample4 = sample4;
|
|
|
- last_sample5 = sample5;
|
|
|
- eps -= srcsize;
|
|
|
- }
|
|
|
- }
|
|
|
- cvt->len_cvt = dstsize;
|
|
|
- if (cvt->filters[++cvt->filter_index]) {
|
|
|
- cvt->filters[cvt->filter_index] (cvt, format);
|
|
|
- }
|
|
|
-}
|
|
|
-
|
|
|
-static void SDLCALL
|
|
|
-SDL_Upsample_S16LSB_8c(SDL_AudioCVT * cvt, SDL_AudioFormat format)
|
|
|
-{
|
|
|
-#if DEBUG_CONVERT
|
|
|
- fprintf(stderr, "Upsample arbitrary (x%f) AUDIO_S16LSB, 8 channels.\n", cvt->rate_incr);
|
|
|
-#endif
|
|
|
-
|
|
|
- const int srcsize = cvt->len_cvt - 256;
|
|
|
- const int dstsize = (int) (((double)(cvt->len_cvt/16)) * cvt->rate_incr) * 16;
|
|
|
- register int eps = 0;
|
|
|
- Sint16 *dst = ((Sint16 *) (cvt->buf + dstsize)) - 8;
|
|
|
- const Sint16 *src = ((Sint16 *) (cvt->buf + cvt->len_cvt)) - 8;
|
|
|
- const Sint16 *target = ((const Sint16 *) cvt->buf);
|
|
|
- Sint16 sample7 = ((Sint16) SDL_SwapLE16(src[7]));
|
|
|
- Sint16 sample6 = ((Sint16) SDL_SwapLE16(src[6]));
|
|
|
- Sint16 sample5 = ((Sint16) SDL_SwapLE16(src[5]));
|
|
|
- Sint16 sample4 = ((Sint16) SDL_SwapLE16(src[4]));
|
|
|
- Sint16 sample3 = ((Sint16) SDL_SwapLE16(src[3]));
|
|
|
- Sint16 sample2 = ((Sint16) SDL_SwapLE16(src[2]));
|
|
|
- Sint16 sample1 = ((Sint16) SDL_SwapLE16(src[1]));
|
|
|
- Sint16 sample0 = ((Sint16) SDL_SwapLE16(src[0]));
|
|
|
- Sint16 last_sample7 = sample7;
|
|
|
- Sint16 last_sample6 = sample6;
|
|
|
- Sint16 last_sample5 = sample5;
|
|
|
- Sint16 last_sample4 = sample4;
|
|
|
- Sint16 last_sample3 = sample3;
|
|
|
- Sint16 last_sample2 = sample2;
|
|
|
- Sint16 last_sample1 = sample1;
|
|
|
- Sint16 last_sample0 = sample0;
|
|
|
- while (dst >= target) {
|
|
|
- dst[7] = ((Sint16) SDL_SwapLE16(sample7));
|
|
|
- dst[6] = ((Sint16) SDL_SwapLE16(sample6));
|
|
|
- dst[5] = ((Sint16) SDL_SwapLE16(sample5));
|
|
|
- dst[4] = ((Sint16) SDL_SwapLE16(sample4));
|
|
|
- dst[3] = ((Sint16) SDL_SwapLE16(sample3));
|
|
|
- dst[2] = ((Sint16) SDL_SwapLE16(sample2));
|
|
|
- dst[1] = ((Sint16) SDL_SwapLE16(sample1));
|
|
|
- dst[0] = ((Sint16) SDL_SwapLE16(sample0));
|
|
|
- dst -= 8;
|
|
|
- eps += srcsize;
|
|
|
- if ((eps << 1) >= dstsize) {
|
|
|
- src -= 8;
|
|
|
- sample7 = (Sint16) ((((Sint32) ((Sint16) SDL_SwapLE16(src[7]))) + ((Sint32) last_sample7)) >> 1);
|
|
|
- sample6 = (Sint16) ((((Sint32) ((Sint16) SDL_SwapLE16(src[6]))) + ((Sint32) last_sample6)) >> 1);
|
|
|
- sample5 = (Sint16) ((((Sint32) ((Sint16) SDL_SwapLE16(src[5]))) + ((Sint32) last_sample5)) >> 1);
|
|
|
- sample4 = (Sint16) ((((Sint32) ((Sint16) SDL_SwapLE16(src[4]))) + ((Sint32) last_sample4)) >> 1);
|
|
|
- sample3 = (Sint16) ((((Sint32) ((Sint16) SDL_SwapLE16(src[3]))) + ((Sint32) last_sample3)) >> 1);
|
|
|
- sample2 = (Sint16) ((((Sint32) ((Sint16) SDL_SwapLE16(src[2]))) + ((Sint32) last_sample2)) >> 1);
|
|
|
- sample1 = (Sint16) ((((Sint32) ((Sint16) SDL_SwapLE16(src[1]))) + ((Sint32) last_sample1)) >> 1);
|
|
|
- sample0 = (Sint16) ((((Sint32) ((Sint16) SDL_SwapLE16(src[0]))) + ((Sint32) last_sample0)) >> 1);
|
|
|
- last_sample7 = sample7;
|
|
|
- last_sample6 = sample6;
|
|
|
- last_sample5 = sample5;
|
|
|
- last_sample4 = sample4;
|
|
|
- last_sample3 = sample3;
|
|
|
- last_sample2 = sample2;
|
|
|
- last_sample1 = sample1;
|
|
|
- last_sample0 = sample0;
|
|
|
- eps -= dstsize;
|
|
|
- }
|
|
|
- }
|
|
|
- cvt->len_cvt = dstsize;
|
|
|
- if (cvt->filters[++cvt->filter_index]) {
|
|
|
- cvt->filters[cvt->filter_index] (cvt, format);
|
|
|
- }
|
|
|
-}
|
|
|
-
|
|
|
-static void SDLCALL
|
|
|
-SDL_Downsample_S16LSB_8c(SDL_AudioCVT * cvt, SDL_AudioFormat format)
|
|
|
-{
|
|
|
-#if DEBUG_CONVERT
|
|
|
- fprintf(stderr, "Downsample arbitrary (x%f) AUDIO_S16LSB, 8 channels.\n", cvt->rate_incr);
|
|
|
-#endif
|
|
|
-
|
|
|
- const int srcsize = cvt->len_cvt - 256;
|
|
|
- const int dstsize = (int) (((double)(cvt->len_cvt/16)) * cvt->rate_incr) * 16;
|
|
|
- register int eps = 0;
|
|
|
- Sint16 *dst = (Sint16 *) cvt->buf;
|
|
|
- const Sint16 *src = (Sint16 *) cvt->buf;
|
|
|
- const Sint16 *target = (const Sint16 *) (cvt->buf + dstsize);
|
|
|
- Sint16 sample0 = ((Sint16) SDL_SwapLE16(src[0]));
|
|
|
- Sint16 sample1 = ((Sint16) SDL_SwapLE16(src[1]));
|
|
|
- Sint16 sample2 = ((Sint16) SDL_SwapLE16(src[2]));
|
|
|
- Sint16 sample3 = ((Sint16) SDL_SwapLE16(src[3]));
|
|
|
- Sint16 sample4 = ((Sint16) SDL_SwapLE16(src[4]));
|
|
|
- Sint16 sample5 = ((Sint16) SDL_SwapLE16(src[5]));
|
|
|
- Sint16 sample6 = ((Sint16) SDL_SwapLE16(src[6]));
|
|
|
- Sint16 sample7 = ((Sint16) SDL_SwapLE16(src[7]));
|
|
|
- Sint16 last_sample0 = sample0;
|
|
|
- Sint16 last_sample1 = sample1;
|
|
|
- Sint16 last_sample2 = sample2;
|
|
|
- Sint16 last_sample3 = sample3;
|
|
|
- Sint16 last_sample4 = sample4;
|
|
|
- Sint16 last_sample5 = sample5;
|
|
|
- Sint16 last_sample6 = sample6;
|
|
|
- Sint16 last_sample7 = sample7;
|
|
|
- while (dst < target) {
|
|
|
- src += 8;
|
|
|
- eps += dstsize;
|
|
|
- if ((eps << 1) >= srcsize) {
|
|
|
- dst[0] = ((Sint16) SDL_SwapLE16(sample0));
|
|
|
- dst[1] = ((Sint16) SDL_SwapLE16(sample1));
|
|
|
- dst[2] = ((Sint16) SDL_SwapLE16(sample2));
|
|
|
- dst[3] = ((Sint16) SDL_SwapLE16(sample3));
|
|
|
- dst[4] = ((Sint16) SDL_SwapLE16(sample4));
|
|
|
- dst[5] = ((Sint16) SDL_SwapLE16(sample5));
|
|
|
- dst[6] = ((Sint16) SDL_SwapLE16(sample6));
|
|
|
- dst[7] = ((Sint16) SDL_SwapLE16(sample7));
|
|
|
- dst += 8;
|
|
|
- sample0 = (Sint16) ((((Sint32) ((Sint16) SDL_SwapLE16(src[0]))) + ((Sint32) last_sample0)) >> 1);
|
|
|
- sample1 = (Sint16) ((((Sint32) ((Sint16) SDL_SwapLE16(src[1]))) + ((Sint32) last_sample1)) >> 1);
|
|
|
- sample2 = (Sint16) ((((Sint32) ((Sint16) SDL_SwapLE16(src[2]))) + ((Sint32) last_sample2)) >> 1);
|
|
|
- sample3 = (Sint16) ((((Sint32) ((Sint16) SDL_SwapLE16(src[3]))) + ((Sint32) last_sample3)) >> 1);
|
|
|
- sample4 = (Sint16) ((((Sint32) ((Sint16) SDL_SwapLE16(src[4]))) + ((Sint32) last_sample4)) >> 1);
|
|
|
- sample5 = (Sint16) ((((Sint32) ((Sint16) SDL_SwapLE16(src[5]))) + ((Sint32) last_sample5)) >> 1);
|
|
|
- sample6 = (Sint16) ((((Sint32) ((Sint16) SDL_SwapLE16(src[6]))) + ((Sint32) last_sample6)) >> 1);
|
|
|
- sample7 = (Sint16) ((((Sint32) ((Sint16) SDL_SwapLE16(src[7]))) + ((Sint32) last_sample7)) >> 1);
|
|
|
- last_sample0 = sample0;
|
|
|
- last_sample1 = sample1;
|
|
|
- last_sample2 = sample2;
|
|
|
- last_sample3 = sample3;
|
|
|
- last_sample4 = sample4;
|
|
|
- last_sample5 = sample5;
|
|
|
- last_sample6 = sample6;
|
|
|
- last_sample7 = sample7;
|
|
|
- eps -= srcsize;
|
|
|
- }
|
|
|
- }
|
|
|
- cvt->len_cvt = dstsize;
|
|
|
- if (cvt->filters[++cvt->filter_index]) {
|
|
|
- cvt->filters[cvt->filter_index] (cvt, format);
|
|
|
- }
|
|
|
-}
|
|
|
-
|
|
|
-static void SDLCALL
|
|
|
-SDL_Upsample_U16MSB_1c(SDL_AudioCVT * cvt, SDL_AudioFormat format)
|
|
|
-{
|
|
|
-#if DEBUG_CONVERT
|
|
|
- fprintf(stderr, "Upsample arbitrary (x%f) AUDIO_U16MSB, 1 channels.\n", cvt->rate_incr);
|
|
|
-#endif
|
|
|
-
|
|
|
- const int srcsize = cvt->len_cvt - 32;
|
|
|
- const int dstsize = (int) (((double)(cvt->len_cvt/2)) * cvt->rate_incr) * 2;
|
|
|
- register int eps = 0;
|
|
|
- Uint16 *dst = ((Uint16 *) (cvt->buf + dstsize)) - 1;
|
|
|
- const Uint16 *src = ((Uint16 *) (cvt->buf + cvt->len_cvt)) - 1;
|
|
|
- const Uint16 *target = ((const Uint16 *) cvt->buf);
|
|
|
- Uint16 sample0 = SDL_SwapBE16(src[0]);
|
|
|
- Uint16 last_sample0 = sample0;
|
|
|
- while (dst >= target) {
|
|
|
- dst[0] = SDL_SwapBE16(sample0);
|
|
|
- dst--;
|
|
|
- eps += srcsize;
|
|
|
- if ((eps << 1) >= dstsize) {
|
|
|
- src--;
|
|
|
- sample0 = (Uint16) ((((Sint32) SDL_SwapBE16(src[0])) + ((Sint32) last_sample0)) >> 1);
|
|
|
- last_sample0 = sample0;
|
|
|
- eps -= dstsize;
|
|
|
- }
|
|
|
- }
|
|
|
- cvt->len_cvt = dstsize;
|
|
|
- if (cvt->filters[++cvt->filter_index]) {
|
|
|
- cvt->filters[cvt->filter_index] (cvt, format);
|
|
|
- }
|
|
|
-}
|
|
|
-
|
|
|
-static void SDLCALL
|
|
|
-SDL_Downsample_U16MSB_1c(SDL_AudioCVT * cvt, SDL_AudioFormat format)
|
|
|
-{
|
|
|
-#if DEBUG_CONVERT
|
|
|
- fprintf(stderr, "Downsample arbitrary (x%f) AUDIO_U16MSB, 1 channels.\n", cvt->rate_incr);
|
|
|
-#endif
|
|
|
-
|
|
|
- const int srcsize = cvt->len_cvt - 32;
|
|
|
- const int dstsize = (int) (((double)(cvt->len_cvt/2)) * cvt->rate_incr) * 2;
|
|
|
- register int eps = 0;
|
|
|
- Uint16 *dst = (Uint16 *) cvt->buf;
|
|
|
- const Uint16 *src = (Uint16 *) cvt->buf;
|
|
|
- const Uint16 *target = (const Uint16 *) (cvt->buf + dstsize);
|
|
|
- Uint16 sample0 = SDL_SwapBE16(src[0]);
|
|
|
- Uint16 last_sample0 = sample0;
|
|
|
- while (dst < target) {
|
|
|
- src++;
|
|
|
- eps += dstsize;
|
|
|
- if ((eps << 1) >= srcsize) {
|
|
|
- dst[0] = SDL_SwapBE16(sample0);
|
|
|
- dst++;
|
|
|
- sample0 = (Uint16) ((((Sint32) SDL_SwapBE16(src[0])) + ((Sint32) last_sample0)) >> 1);
|
|
|
- last_sample0 = sample0;
|
|
|
- eps -= srcsize;
|
|
|
- }
|
|
|
- }
|
|
|
- cvt->len_cvt = dstsize;
|
|
|
- if (cvt->filters[++cvt->filter_index]) {
|
|
|
- cvt->filters[cvt->filter_index] (cvt, format);
|
|
|
- }
|
|
|
-}
|
|
|
-
|
|
|
-static void SDLCALL
|
|
|
-SDL_Upsample_U16MSB_2c(SDL_AudioCVT * cvt, SDL_AudioFormat format)
|
|
|
-{
|
|
|
-#if DEBUG_CONVERT
|
|
|
- fprintf(stderr, "Upsample arbitrary (x%f) AUDIO_U16MSB, 2 channels.\n", cvt->rate_incr);
|
|
|
-#endif
|
|
|
-
|
|
|
- const int srcsize = cvt->len_cvt - 64;
|
|
|
- const int dstsize = (int) (((double)(cvt->len_cvt/4)) * cvt->rate_incr) * 4;
|
|
|
- register int eps = 0;
|
|
|
- Uint16 *dst = ((Uint16 *) (cvt->buf + dstsize)) - 2;
|
|
|
- const Uint16 *src = ((Uint16 *) (cvt->buf + cvt->len_cvt)) - 2;
|
|
|
- const Uint16 *target = ((const Uint16 *) cvt->buf);
|
|
|
- Uint16 sample1 = SDL_SwapBE16(src[1]);
|
|
|
- Uint16 sample0 = SDL_SwapBE16(src[0]);
|
|
|
- Uint16 last_sample1 = sample1;
|
|
|
- Uint16 last_sample0 = sample0;
|
|
|
- while (dst >= target) {
|
|
|
- dst[1] = SDL_SwapBE16(sample1);
|
|
|
- dst[0] = SDL_SwapBE16(sample0);
|
|
|
- dst -= 2;
|
|
|
- eps += srcsize;
|
|
|
- if ((eps << 1) >= dstsize) {
|
|
|
- src -= 2;
|
|
|
- sample1 = (Uint16) ((((Sint32) SDL_SwapBE16(src[1])) + ((Sint32) last_sample1)) >> 1);
|
|
|
- sample0 = (Uint16) ((((Sint32) SDL_SwapBE16(src[0])) + ((Sint32) last_sample0)) >> 1);
|
|
|
- last_sample1 = sample1;
|
|
|
- last_sample0 = sample0;
|
|
|
- eps -= dstsize;
|
|
|
- }
|
|
|
- }
|
|
|
- cvt->len_cvt = dstsize;
|
|
|
- if (cvt->filters[++cvt->filter_index]) {
|
|
|
- cvt->filters[cvt->filter_index] (cvt, format);
|
|
|
- }
|
|
|
-}
|
|
|
-
|
|
|
-static void SDLCALL
|
|
|
-SDL_Downsample_U16MSB_2c(SDL_AudioCVT * cvt, SDL_AudioFormat format)
|
|
|
-{
|
|
|
-#if DEBUG_CONVERT
|
|
|
- fprintf(stderr, "Downsample arbitrary (x%f) AUDIO_U16MSB, 2 channels.\n", cvt->rate_incr);
|
|
|
-#endif
|
|
|
-
|
|
|
- const int srcsize = cvt->len_cvt - 64;
|
|
|
- const int dstsize = (int) (((double)(cvt->len_cvt/4)) * cvt->rate_incr) * 4;
|
|
|
- register int eps = 0;
|
|
|
- Uint16 *dst = (Uint16 *) cvt->buf;
|
|
|
- const Uint16 *src = (Uint16 *) cvt->buf;
|
|
|
- const Uint16 *target = (const Uint16 *) (cvt->buf + dstsize);
|
|
|
- Uint16 sample0 = SDL_SwapBE16(src[0]);
|
|
|
- Uint16 sample1 = SDL_SwapBE16(src[1]);
|
|
|
- Uint16 last_sample0 = sample0;
|
|
|
- Uint16 last_sample1 = sample1;
|
|
|
- while (dst < target) {
|
|
|
- src += 2;
|
|
|
- eps += dstsize;
|
|
|
- if ((eps << 1) >= srcsize) {
|
|
|
- dst[0] = SDL_SwapBE16(sample0);
|
|
|
- dst[1] = SDL_SwapBE16(sample1);
|
|
|
- dst += 2;
|
|
|
- sample0 = (Uint16) ((((Sint32) SDL_SwapBE16(src[0])) + ((Sint32) last_sample0)) >> 1);
|
|
|
- sample1 = (Uint16) ((((Sint32) SDL_SwapBE16(src[1])) + ((Sint32) last_sample1)) >> 1);
|
|
|
- last_sample0 = sample0;
|
|
|
- last_sample1 = sample1;
|
|
|
- eps -= srcsize;
|
|
|
- }
|
|
|
- }
|
|
|
- cvt->len_cvt = dstsize;
|
|
|
- if (cvt->filters[++cvt->filter_index]) {
|
|
|
- cvt->filters[cvt->filter_index] (cvt, format);
|
|
|
- }
|
|
|
-}
|
|
|
-
|
|
|
-static void SDLCALL
|
|
|
-SDL_Upsample_U16MSB_4c(SDL_AudioCVT * cvt, SDL_AudioFormat format)
|
|
|
-{
|
|
|
-#if DEBUG_CONVERT
|
|
|
- fprintf(stderr, "Upsample arbitrary (x%f) AUDIO_U16MSB, 4 channels.\n", cvt->rate_incr);
|
|
|
-#endif
|
|
|
-
|
|
|
- const int srcsize = cvt->len_cvt - 128;
|
|
|
- const int dstsize = (int) (((double)(cvt->len_cvt/8)) * cvt->rate_incr) * 8;
|
|
|
- register int eps = 0;
|
|
|
- Uint16 *dst = ((Uint16 *) (cvt->buf + dstsize)) - 4;
|
|
|
- const Uint16 *src = ((Uint16 *) (cvt->buf + cvt->len_cvt)) - 4;
|
|
|
- const Uint16 *target = ((const Uint16 *) cvt->buf);
|
|
|
- Uint16 sample3 = SDL_SwapBE16(src[3]);
|
|
|
- Uint16 sample2 = SDL_SwapBE16(src[2]);
|
|
|
- Uint16 sample1 = SDL_SwapBE16(src[1]);
|
|
|
- Uint16 sample0 = SDL_SwapBE16(src[0]);
|
|
|
- Uint16 last_sample3 = sample3;
|
|
|
- Uint16 last_sample2 = sample2;
|
|
|
- Uint16 last_sample1 = sample1;
|
|
|
- Uint16 last_sample0 = sample0;
|
|
|
- while (dst >= target) {
|
|
|
- dst[3] = SDL_SwapBE16(sample3);
|
|
|
- dst[2] = SDL_SwapBE16(sample2);
|
|
|
- dst[1] = SDL_SwapBE16(sample1);
|
|
|
- dst[0] = SDL_SwapBE16(sample0);
|
|
|
- dst -= 4;
|
|
|
- eps += srcsize;
|
|
|
- if ((eps << 1) >= dstsize) {
|
|
|
- src -= 4;
|
|
|
- sample3 = (Uint16) ((((Sint32) SDL_SwapBE16(src[3])) + ((Sint32) last_sample3)) >> 1);
|
|
|
- sample2 = (Uint16) ((((Sint32) SDL_SwapBE16(src[2])) + ((Sint32) last_sample2)) >> 1);
|
|
|
- sample1 = (Uint16) ((((Sint32) SDL_SwapBE16(src[1])) + ((Sint32) last_sample1)) >> 1);
|
|
|
- sample0 = (Uint16) ((((Sint32) SDL_SwapBE16(src[0])) + ((Sint32) last_sample0)) >> 1);
|
|
|
- last_sample3 = sample3;
|
|
|
- last_sample2 = sample2;
|
|
|
- last_sample1 = sample1;
|
|
|
- last_sample0 = sample0;
|
|
|
- eps -= dstsize;
|
|
|
- }
|
|
|
- }
|
|
|
- cvt->len_cvt = dstsize;
|
|
|
- if (cvt->filters[++cvt->filter_index]) {
|
|
|
- cvt->filters[cvt->filter_index] (cvt, format);
|
|
|
- }
|
|
|
-}
|
|
|
-
|
|
|
-static void SDLCALL
|
|
|
-SDL_Downsample_U16MSB_4c(SDL_AudioCVT * cvt, SDL_AudioFormat format)
|
|
|
-{
|
|
|
-#if DEBUG_CONVERT
|
|
|
- fprintf(stderr, "Downsample arbitrary (x%f) AUDIO_U16MSB, 4 channels.\n", cvt->rate_incr);
|
|
|
-#endif
|
|
|
-
|
|
|
- const int srcsize = cvt->len_cvt - 128;
|
|
|
- const int dstsize = (int) (((double)(cvt->len_cvt/8)) * cvt->rate_incr) * 8;
|
|
|
- register int eps = 0;
|
|
|
- Uint16 *dst = (Uint16 *) cvt->buf;
|
|
|
- const Uint16 *src = (Uint16 *) cvt->buf;
|
|
|
- const Uint16 *target = (const Uint16 *) (cvt->buf + dstsize);
|
|
|
- Uint16 sample0 = SDL_SwapBE16(src[0]);
|
|
|
- Uint16 sample1 = SDL_SwapBE16(src[1]);
|
|
|
- Uint16 sample2 = SDL_SwapBE16(src[2]);
|
|
|
- Uint16 sample3 = SDL_SwapBE16(src[3]);
|
|
|
- Uint16 last_sample0 = sample0;
|
|
|
- Uint16 last_sample1 = sample1;
|
|
|
- Uint16 last_sample2 = sample2;
|
|
|
- Uint16 last_sample3 = sample3;
|
|
|
- while (dst < target) {
|
|
|
- src += 4;
|
|
|
- eps += dstsize;
|
|
|
- if ((eps << 1) >= srcsize) {
|
|
|
- dst[0] = SDL_SwapBE16(sample0);
|
|
|
- dst[1] = SDL_SwapBE16(sample1);
|
|
|
- dst[2] = SDL_SwapBE16(sample2);
|
|
|
- dst[3] = SDL_SwapBE16(sample3);
|
|
|
- dst += 4;
|
|
|
- sample0 = (Uint16) ((((Sint32) SDL_SwapBE16(src[0])) + ((Sint32) last_sample0)) >> 1);
|
|
|
- sample1 = (Uint16) ((((Sint32) SDL_SwapBE16(src[1])) + ((Sint32) last_sample1)) >> 1);
|
|
|
- sample2 = (Uint16) ((((Sint32) SDL_SwapBE16(src[2])) + ((Sint32) last_sample2)) >> 1);
|
|
|
- sample3 = (Uint16) ((((Sint32) SDL_SwapBE16(src[3])) + ((Sint32) last_sample3)) >> 1);
|
|
|
- last_sample0 = sample0;
|
|
|
- last_sample1 = sample1;
|
|
|
- last_sample2 = sample2;
|
|
|
- last_sample3 = sample3;
|
|
|
- eps -= srcsize;
|
|
|
- }
|
|
|
- }
|
|
|
- cvt->len_cvt = dstsize;
|
|
|
- if (cvt->filters[++cvt->filter_index]) {
|
|
|
- cvt->filters[cvt->filter_index] (cvt, format);
|
|
|
- }
|
|
|
-}
|
|
|
-
|
|
|
-static void SDLCALL
|
|
|
-SDL_Upsample_U16MSB_6c(SDL_AudioCVT * cvt, SDL_AudioFormat format)
|
|
|
-{
|
|
|
-#if DEBUG_CONVERT
|
|
|
- fprintf(stderr, "Upsample arbitrary (x%f) AUDIO_U16MSB, 6 channels.\n", cvt->rate_incr);
|
|
|
-#endif
|
|
|
-
|
|
|
- const int srcsize = cvt->len_cvt - 192;
|
|
|
- const int dstsize = (int) (((double)(cvt->len_cvt/12)) * cvt->rate_incr) * 12;
|
|
|
- register int eps = 0;
|
|
|
- Uint16 *dst = ((Uint16 *) (cvt->buf + dstsize)) - 6;
|
|
|
- const Uint16 *src = ((Uint16 *) (cvt->buf + cvt->len_cvt)) - 6;
|
|
|
- const Uint16 *target = ((const Uint16 *) cvt->buf);
|
|
|
- Uint16 sample5 = SDL_SwapBE16(src[5]);
|
|
|
- Uint16 sample4 = SDL_SwapBE16(src[4]);
|
|
|
- Uint16 sample3 = SDL_SwapBE16(src[3]);
|
|
|
- Uint16 sample2 = SDL_SwapBE16(src[2]);
|
|
|
- Uint16 sample1 = SDL_SwapBE16(src[1]);
|
|
|
- Uint16 sample0 = SDL_SwapBE16(src[0]);
|
|
|
- Uint16 last_sample5 = sample5;
|
|
|
- Uint16 last_sample4 = sample4;
|
|
|
- Uint16 last_sample3 = sample3;
|
|
|
- Uint16 last_sample2 = sample2;
|
|
|
- Uint16 last_sample1 = sample1;
|
|
|
- Uint16 last_sample0 = sample0;
|
|
|
- while (dst >= target) {
|
|
|
- dst[5] = SDL_SwapBE16(sample5);
|
|
|
- dst[4] = SDL_SwapBE16(sample4);
|
|
|
- dst[3] = SDL_SwapBE16(sample3);
|
|
|
- dst[2] = SDL_SwapBE16(sample2);
|
|
|
- dst[1] = SDL_SwapBE16(sample1);
|
|
|
- dst[0] = SDL_SwapBE16(sample0);
|
|
|
- dst -= 6;
|
|
|
- eps += srcsize;
|
|
|
- if ((eps << 1) >= dstsize) {
|
|
|
- src -= 6;
|
|
|
- sample5 = (Uint16) ((((Sint32) SDL_SwapBE16(src[5])) + ((Sint32) last_sample5)) >> 1);
|
|
|
- sample4 = (Uint16) ((((Sint32) SDL_SwapBE16(src[4])) + ((Sint32) last_sample4)) >> 1);
|
|
|
- sample3 = (Uint16) ((((Sint32) SDL_SwapBE16(src[3])) + ((Sint32) last_sample3)) >> 1);
|
|
|
- sample2 = (Uint16) ((((Sint32) SDL_SwapBE16(src[2])) + ((Sint32) last_sample2)) >> 1);
|
|
|
- sample1 = (Uint16) ((((Sint32) SDL_SwapBE16(src[1])) + ((Sint32) last_sample1)) >> 1);
|
|
|
- sample0 = (Uint16) ((((Sint32) SDL_SwapBE16(src[0])) + ((Sint32) last_sample0)) >> 1);
|
|
|
- last_sample5 = sample5;
|
|
|
- last_sample4 = sample4;
|
|
|
- last_sample3 = sample3;
|
|
|
- last_sample2 = sample2;
|
|
|
- last_sample1 = sample1;
|
|
|
- last_sample0 = sample0;
|
|
|
- eps -= dstsize;
|
|
|
- }
|
|
|
- }
|
|
|
- cvt->len_cvt = dstsize;
|
|
|
- if (cvt->filters[++cvt->filter_index]) {
|
|
|
- cvt->filters[cvt->filter_index] (cvt, format);
|
|
|
- }
|
|
|
-}
|
|
|
-
|
|
|
-static void SDLCALL
|
|
|
-SDL_Downsample_U16MSB_6c(SDL_AudioCVT * cvt, SDL_AudioFormat format)
|
|
|
-{
|
|
|
-#if DEBUG_CONVERT
|
|
|
- fprintf(stderr, "Downsample arbitrary (x%f) AUDIO_U16MSB, 6 channels.\n", cvt->rate_incr);
|
|
|
-#endif
|
|
|
-
|
|
|
- const int srcsize = cvt->len_cvt - 192;
|
|
|
- const int dstsize = (int) (((double)(cvt->len_cvt/12)) * cvt->rate_incr) * 12;
|
|
|
- register int eps = 0;
|
|
|
- Uint16 *dst = (Uint16 *) cvt->buf;
|
|
|
- const Uint16 *src = (Uint16 *) cvt->buf;
|
|
|
- const Uint16 *target = (const Uint16 *) (cvt->buf + dstsize);
|
|
|
- Uint16 sample0 = SDL_SwapBE16(src[0]);
|
|
|
- Uint16 sample1 = SDL_SwapBE16(src[1]);
|
|
|
- Uint16 sample2 = SDL_SwapBE16(src[2]);
|
|
|
- Uint16 sample3 = SDL_SwapBE16(src[3]);
|
|
|
- Uint16 sample4 = SDL_SwapBE16(src[4]);
|
|
|
- Uint16 sample5 = SDL_SwapBE16(src[5]);
|
|
|
- Uint16 last_sample0 = sample0;
|
|
|
- Uint16 last_sample1 = sample1;
|
|
|
- Uint16 last_sample2 = sample2;
|
|
|
- Uint16 last_sample3 = sample3;
|
|
|
- Uint16 last_sample4 = sample4;
|
|
|
- Uint16 last_sample5 = sample5;
|
|
|
- while (dst < target) {
|
|
|
- src += 6;
|
|
|
- eps += dstsize;
|
|
|
- if ((eps << 1) >= srcsize) {
|
|
|
- dst[0] = SDL_SwapBE16(sample0);
|
|
|
- dst[1] = SDL_SwapBE16(sample1);
|
|
|
- dst[2] = SDL_SwapBE16(sample2);
|
|
|
- dst[3] = SDL_SwapBE16(sample3);
|
|
|
- dst[4] = SDL_SwapBE16(sample4);
|
|
|
- dst[5] = SDL_SwapBE16(sample5);
|
|
|
- dst += 6;
|
|
|
- sample0 = (Uint16) ((((Sint32) SDL_SwapBE16(src[0])) + ((Sint32) last_sample0)) >> 1);
|
|
|
- sample1 = (Uint16) ((((Sint32) SDL_SwapBE16(src[1])) + ((Sint32) last_sample1)) >> 1);
|
|
|
- sample2 = (Uint16) ((((Sint32) SDL_SwapBE16(src[2])) + ((Sint32) last_sample2)) >> 1);
|
|
|
- sample3 = (Uint16) ((((Sint32) SDL_SwapBE16(src[3])) + ((Sint32) last_sample3)) >> 1);
|
|
|
- sample4 = (Uint16) ((((Sint32) SDL_SwapBE16(src[4])) + ((Sint32) last_sample4)) >> 1);
|
|
|
- sample5 = (Uint16) ((((Sint32) SDL_SwapBE16(src[5])) + ((Sint32) last_sample5)) >> 1);
|
|
|
- last_sample0 = sample0;
|
|
|
- last_sample1 = sample1;
|
|
|
- last_sample2 = sample2;
|
|
|
- last_sample3 = sample3;
|
|
|
- last_sample4 = sample4;
|
|
|
- last_sample5 = sample5;
|
|
|
- eps -= srcsize;
|
|
|
- }
|
|
|
- }
|
|
|
- cvt->len_cvt = dstsize;
|
|
|
- if (cvt->filters[++cvt->filter_index]) {
|
|
|
- cvt->filters[cvt->filter_index] (cvt, format);
|
|
|
- }
|
|
|
-}
|
|
|
-
|
|
|
-static void SDLCALL
|
|
|
-SDL_Upsample_U16MSB_8c(SDL_AudioCVT * cvt, SDL_AudioFormat format)
|
|
|
-{
|
|
|
-#if DEBUG_CONVERT
|
|
|
- fprintf(stderr, "Upsample arbitrary (x%f) AUDIO_U16MSB, 8 channels.\n", cvt->rate_incr);
|
|
|
-#endif
|
|
|
-
|
|
|
- const int srcsize = cvt->len_cvt - 256;
|
|
|
- const int dstsize = (int) (((double)(cvt->len_cvt/16)) * cvt->rate_incr) * 16;
|
|
|
- register int eps = 0;
|
|
|
- Uint16 *dst = ((Uint16 *) (cvt->buf + dstsize)) - 8;
|
|
|
- const Uint16 *src = ((Uint16 *) (cvt->buf + cvt->len_cvt)) - 8;
|
|
|
- const Uint16 *target = ((const Uint16 *) cvt->buf);
|
|
|
- Uint16 sample7 = SDL_SwapBE16(src[7]);
|
|
|
- Uint16 sample6 = SDL_SwapBE16(src[6]);
|
|
|
- Uint16 sample5 = SDL_SwapBE16(src[5]);
|
|
|
- Uint16 sample4 = SDL_SwapBE16(src[4]);
|
|
|
- Uint16 sample3 = SDL_SwapBE16(src[3]);
|
|
|
- Uint16 sample2 = SDL_SwapBE16(src[2]);
|
|
|
- Uint16 sample1 = SDL_SwapBE16(src[1]);
|
|
|
- Uint16 sample0 = SDL_SwapBE16(src[0]);
|
|
|
- Uint16 last_sample7 = sample7;
|
|
|
- Uint16 last_sample6 = sample6;
|
|
|
- Uint16 last_sample5 = sample5;
|
|
|
- Uint16 last_sample4 = sample4;
|
|
|
- Uint16 last_sample3 = sample3;
|
|
|
- Uint16 last_sample2 = sample2;
|
|
|
- Uint16 last_sample1 = sample1;
|
|
|
- Uint16 last_sample0 = sample0;
|
|
|
- while (dst >= target) {
|
|
|
- dst[7] = SDL_SwapBE16(sample7);
|
|
|
- dst[6] = SDL_SwapBE16(sample6);
|
|
|
- dst[5] = SDL_SwapBE16(sample5);
|
|
|
- dst[4] = SDL_SwapBE16(sample4);
|
|
|
- dst[3] = SDL_SwapBE16(sample3);
|
|
|
- dst[2] = SDL_SwapBE16(sample2);
|
|
|
- dst[1] = SDL_SwapBE16(sample1);
|
|
|
- dst[0] = SDL_SwapBE16(sample0);
|
|
|
- dst -= 8;
|
|
|
- eps += srcsize;
|
|
|
- if ((eps << 1) >= dstsize) {
|
|
|
- src -= 8;
|
|
|
- sample7 = (Uint16) ((((Sint32) SDL_SwapBE16(src[7])) + ((Sint32) last_sample7)) >> 1);
|
|
|
- sample6 = (Uint16) ((((Sint32) SDL_SwapBE16(src[6])) + ((Sint32) last_sample6)) >> 1);
|
|
|
- sample5 = (Uint16) ((((Sint32) SDL_SwapBE16(src[5])) + ((Sint32) last_sample5)) >> 1);
|
|
|
- sample4 = (Uint16) ((((Sint32) SDL_SwapBE16(src[4])) + ((Sint32) last_sample4)) >> 1);
|
|
|
- sample3 = (Uint16) ((((Sint32) SDL_SwapBE16(src[3])) + ((Sint32) last_sample3)) >> 1);
|
|
|
- sample2 = (Uint16) ((((Sint32) SDL_SwapBE16(src[2])) + ((Sint32) last_sample2)) >> 1);
|
|
|
- sample1 = (Uint16) ((((Sint32) SDL_SwapBE16(src[1])) + ((Sint32) last_sample1)) >> 1);
|
|
|
- sample0 = (Uint16) ((((Sint32) SDL_SwapBE16(src[0])) + ((Sint32) last_sample0)) >> 1);
|
|
|
- last_sample7 = sample7;
|
|
|
- last_sample6 = sample6;
|
|
|
- last_sample5 = sample5;
|
|
|
- last_sample4 = sample4;
|
|
|
- last_sample3 = sample3;
|
|
|
- last_sample2 = sample2;
|
|
|
- last_sample1 = sample1;
|
|
|
- last_sample0 = sample0;
|
|
|
- eps -= dstsize;
|
|
|
- }
|
|
|
- }
|
|
|
- cvt->len_cvt = dstsize;
|
|
|
- if (cvt->filters[++cvt->filter_index]) {
|
|
|
- cvt->filters[cvt->filter_index] (cvt, format);
|
|
|
- }
|
|
|
-}
|
|
|
-
|
|
|
-static void SDLCALL
|
|
|
-SDL_Downsample_U16MSB_8c(SDL_AudioCVT * cvt, SDL_AudioFormat format)
|
|
|
-{
|
|
|
-#if DEBUG_CONVERT
|
|
|
- fprintf(stderr, "Downsample arbitrary (x%f) AUDIO_U16MSB, 8 channels.\n", cvt->rate_incr);
|
|
|
-#endif
|
|
|
-
|
|
|
- const int srcsize = cvt->len_cvt - 256;
|
|
|
- const int dstsize = (int) (((double)(cvt->len_cvt/16)) * cvt->rate_incr) * 16;
|
|
|
- register int eps = 0;
|
|
|
- Uint16 *dst = (Uint16 *) cvt->buf;
|
|
|
- const Uint16 *src = (Uint16 *) cvt->buf;
|
|
|
- const Uint16 *target = (const Uint16 *) (cvt->buf + dstsize);
|
|
|
- Uint16 sample0 = SDL_SwapBE16(src[0]);
|
|
|
- Uint16 sample1 = SDL_SwapBE16(src[1]);
|
|
|
- Uint16 sample2 = SDL_SwapBE16(src[2]);
|
|
|
- Uint16 sample3 = SDL_SwapBE16(src[3]);
|
|
|
- Uint16 sample4 = SDL_SwapBE16(src[4]);
|
|
|
- Uint16 sample5 = SDL_SwapBE16(src[5]);
|
|
|
- Uint16 sample6 = SDL_SwapBE16(src[6]);
|
|
|
- Uint16 sample7 = SDL_SwapBE16(src[7]);
|
|
|
- Uint16 last_sample0 = sample0;
|
|
|
- Uint16 last_sample1 = sample1;
|
|
|
- Uint16 last_sample2 = sample2;
|
|
|
- Uint16 last_sample3 = sample3;
|
|
|
- Uint16 last_sample4 = sample4;
|
|
|
- Uint16 last_sample5 = sample5;
|
|
|
- Uint16 last_sample6 = sample6;
|
|
|
- Uint16 last_sample7 = sample7;
|
|
|
- while (dst < target) {
|
|
|
- src += 8;
|
|
|
- eps += dstsize;
|
|
|
- if ((eps << 1) >= srcsize) {
|
|
|
- dst[0] = SDL_SwapBE16(sample0);
|
|
|
- dst[1] = SDL_SwapBE16(sample1);
|
|
|
- dst[2] = SDL_SwapBE16(sample2);
|
|
|
- dst[3] = SDL_SwapBE16(sample3);
|
|
|
- dst[4] = SDL_SwapBE16(sample4);
|
|
|
- dst[5] = SDL_SwapBE16(sample5);
|
|
|
- dst[6] = SDL_SwapBE16(sample6);
|
|
|
- dst[7] = SDL_SwapBE16(sample7);
|
|
|
- dst += 8;
|
|
|
- sample0 = (Uint16) ((((Sint32) SDL_SwapBE16(src[0])) + ((Sint32) last_sample0)) >> 1);
|
|
|
- sample1 = (Uint16) ((((Sint32) SDL_SwapBE16(src[1])) + ((Sint32) last_sample1)) >> 1);
|
|
|
- sample2 = (Uint16) ((((Sint32) SDL_SwapBE16(src[2])) + ((Sint32) last_sample2)) >> 1);
|
|
|
- sample3 = (Uint16) ((((Sint32) SDL_SwapBE16(src[3])) + ((Sint32) last_sample3)) >> 1);
|
|
|
- sample4 = (Uint16) ((((Sint32) SDL_SwapBE16(src[4])) + ((Sint32) last_sample4)) >> 1);
|
|
|
- sample5 = (Uint16) ((((Sint32) SDL_SwapBE16(src[5])) + ((Sint32) last_sample5)) >> 1);
|
|
|
- sample6 = (Uint16) ((((Sint32) SDL_SwapBE16(src[6])) + ((Sint32) last_sample6)) >> 1);
|
|
|
- sample7 = (Uint16) ((((Sint32) SDL_SwapBE16(src[7])) + ((Sint32) last_sample7)) >> 1);
|
|
|
- last_sample0 = sample0;
|
|
|
- last_sample1 = sample1;
|
|
|
- last_sample2 = sample2;
|
|
|
- last_sample3 = sample3;
|
|
|
- last_sample4 = sample4;
|
|
|
- last_sample5 = sample5;
|
|
|
- last_sample6 = sample6;
|
|
|
- last_sample7 = sample7;
|
|
|
- eps -= srcsize;
|
|
|
- }
|
|
|
- }
|
|
|
- cvt->len_cvt = dstsize;
|
|
|
- if (cvt->filters[++cvt->filter_index]) {
|
|
|
- cvt->filters[cvt->filter_index] (cvt, format);
|
|
|
- }
|
|
|
-}
|
|
|
-
|
|
|
-static void SDLCALL
|
|
|
-SDL_Upsample_S16MSB_1c(SDL_AudioCVT * cvt, SDL_AudioFormat format)
|
|
|
-{
|
|
|
-#if DEBUG_CONVERT
|
|
|
- fprintf(stderr, "Upsample arbitrary (x%f) AUDIO_S16MSB, 1 channels.\n", cvt->rate_incr);
|
|
|
-#endif
|
|
|
-
|
|
|
- const int srcsize = cvt->len_cvt - 32;
|
|
|
- const int dstsize = (int) (((double)(cvt->len_cvt/2)) * cvt->rate_incr) * 2;
|
|
|
- register int eps = 0;
|
|
|
- Sint16 *dst = ((Sint16 *) (cvt->buf + dstsize)) - 1;
|
|
|
- const Sint16 *src = ((Sint16 *) (cvt->buf + cvt->len_cvt)) - 1;
|
|
|
- const Sint16 *target = ((const Sint16 *) cvt->buf);
|
|
|
- Sint16 sample0 = ((Sint16) SDL_SwapBE16(src[0]));
|
|
|
- Sint16 last_sample0 = sample0;
|
|
|
- while (dst >= target) {
|
|
|
- dst[0] = ((Sint16) SDL_SwapBE16(sample0));
|
|
|
- dst--;
|
|
|
- eps += srcsize;
|
|
|
- if ((eps << 1) >= dstsize) {
|
|
|
- src--;
|
|
|
- sample0 = (Sint16) ((((Sint32) ((Sint16) SDL_SwapBE16(src[0]))) + ((Sint32) last_sample0)) >> 1);
|
|
|
- last_sample0 = sample0;
|
|
|
- eps -= dstsize;
|
|
|
- }
|
|
|
- }
|
|
|
- cvt->len_cvt = dstsize;
|
|
|
- if (cvt->filters[++cvt->filter_index]) {
|
|
|
- cvt->filters[cvt->filter_index] (cvt, format);
|
|
|
- }
|
|
|
-}
|
|
|
-
|
|
|
-static void SDLCALL
|
|
|
-SDL_Downsample_S16MSB_1c(SDL_AudioCVT * cvt, SDL_AudioFormat format)
|
|
|
-{
|
|
|
-#if DEBUG_CONVERT
|
|
|
- fprintf(stderr, "Downsample arbitrary (x%f) AUDIO_S16MSB, 1 channels.\n", cvt->rate_incr);
|
|
|
-#endif
|
|
|
-
|
|
|
- const int srcsize = cvt->len_cvt - 32;
|
|
|
- const int dstsize = (int) (((double)(cvt->len_cvt/2)) * cvt->rate_incr) * 2;
|
|
|
- register int eps = 0;
|
|
|
- Sint16 *dst = (Sint16 *) cvt->buf;
|
|
|
- const Sint16 *src = (Sint16 *) cvt->buf;
|
|
|
- const Sint16 *target = (const Sint16 *) (cvt->buf + dstsize);
|
|
|
- Sint16 sample0 = ((Sint16) SDL_SwapBE16(src[0]));
|
|
|
- Sint16 last_sample0 = sample0;
|
|
|
- while (dst < target) {
|
|
|
- src++;
|
|
|
- eps += dstsize;
|
|
|
- if ((eps << 1) >= srcsize) {
|
|
|
- dst[0] = ((Sint16) SDL_SwapBE16(sample0));
|
|
|
- dst++;
|
|
|
- sample0 = (Sint16) ((((Sint32) ((Sint16) SDL_SwapBE16(src[0]))) + ((Sint32) last_sample0)) >> 1);
|
|
|
- last_sample0 = sample0;
|
|
|
- eps -= srcsize;
|
|
|
- }
|
|
|
- }
|
|
|
- cvt->len_cvt = dstsize;
|
|
|
- if (cvt->filters[++cvt->filter_index]) {
|
|
|
- cvt->filters[cvt->filter_index] (cvt, format);
|
|
|
- }
|
|
|
-}
|
|
|
-
|
|
|
-static void SDLCALL
|
|
|
-SDL_Upsample_S16MSB_2c(SDL_AudioCVT * cvt, SDL_AudioFormat format)
|
|
|
-{
|
|
|
-#if DEBUG_CONVERT
|
|
|
- fprintf(stderr, "Upsample arbitrary (x%f) AUDIO_S16MSB, 2 channels.\n", cvt->rate_incr);
|
|
|
-#endif
|
|
|
-
|
|
|
- const int srcsize = cvt->len_cvt - 64;
|
|
|
- const int dstsize = (int) (((double)(cvt->len_cvt/4)) * cvt->rate_incr) * 4;
|
|
|
- register int eps = 0;
|
|
|
- Sint16 *dst = ((Sint16 *) (cvt->buf + dstsize)) - 2;
|
|
|
- const Sint16 *src = ((Sint16 *) (cvt->buf + cvt->len_cvt)) - 2;
|
|
|
- const Sint16 *target = ((const Sint16 *) cvt->buf);
|
|
|
- Sint16 sample1 = ((Sint16) SDL_SwapBE16(src[1]));
|
|
|
- Sint16 sample0 = ((Sint16) SDL_SwapBE16(src[0]));
|
|
|
- Sint16 last_sample1 = sample1;
|
|
|
- Sint16 last_sample0 = sample0;
|
|
|
- while (dst >= target) {
|
|
|
- dst[1] = ((Sint16) SDL_SwapBE16(sample1));
|
|
|
- dst[0] = ((Sint16) SDL_SwapBE16(sample0));
|
|
|
- dst -= 2;
|
|
|
- eps += srcsize;
|
|
|
- if ((eps << 1) >= dstsize) {
|
|
|
- src -= 2;
|
|
|
- sample1 = (Sint16) ((((Sint32) ((Sint16) SDL_SwapBE16(src[1]))) + ((Sint32) last_sample1)) >> 1);
|
|
|
- sample0 = (Sint16) ((((Sint32) ((Sint16) SDL_SwapBE16(src[0]))) + ((Sint32) last_sample0)) >> 1);
|
|
|
- last_sample1 = sample1;
|
|
|
- last_sample0 = sample0;
|
|
|
- eps -= dstsize;
|
|
|
- }
|
|
|
- }
|
|
|
- cvt->len_cvt = dstsize;
|
|
|
- if (cvt->filters[++cvt->filter_index]) {
|
|
|
- cvt->filters[cvt->filter_index] (cvt, format);
|
|
|
- }
|
|
|
-}
|
|
|
-
|
|
|
-static void SDLCALL
|
|
|
-SDL_Downsample_S16MSB_2c(SDL_AudioCVT * cvt, SDL_AudioFormat format)
|
|
|
-{
|
|
|
-#if DEBUG_CONVERT
|
|
|
- fprintf(stderr, "Downsample arbitrary (x%f) AUDIO_S16MSB, 2 channels.\n", cvt->rate_incr);
|
|
|
-#endif
|
|
|
-
|
|
|
- const int srcsize = cvt->len_cvt - 64;
|
|
|
- const int dstsize = (int) (((double)(cvt->len_cvt/4)) * cvt->rate_incr) * 4;
|
|
|
- register int eps = 0;
|
|
|
- Sint16 *dst = (Sint16 *) cvt->buf;
|
|
|
- const Sint16 *src = (Sint16 *) cvt->buf;
|
|
|
- const Sint16 *target = (const Sint16 *) (cvt->buf + dstsize);
|
|
|
- Sint16 sample0 = ((Sint16) SDL_SwapBE16(src[0]));
|
|
|
- Sint16 sample1 = ((Sint16) SDL_SwapBE16(src[1]));
|
|
|
- Sint16 last_sample0 = sample0;
|
|
|
- Sint16 last_sample1 = sample1;
|
|
|
- while (dst < target) {
|
|
|
- src += 2;
|
|
|
- eps += dstsize;
|
|
|
- if ((eps << 1) >= srcsize) {
|
|
|
- dst[0] = ((Sint16) SDL_SwapBE16(sample0));
|
|
|
- dst[1] = ((Sint16) SDL_SwapBE16(sample1));
|
|
|
- dst += 2;
|
|
|
- sample0 = (Sint16) ((((Sint32) ((Sint16) SDL_SwapBE16(src[0]))) + ((Sint32) last_sample0)) >> 1);
|
|
|
- sample1 = (Sint16) ((((Sint32) ((Sint16) SDL_SwapBE16(src[1]))) + ((Sint32) last_sample1)) >> 1);
|
|
|
- last_sample0 = sample0;
|
|
|
- last_sample1 = sample1;
|
|
|
- eps -= srcsize;
|
|
|
- }
|
|
|
- }
|
|
|
- cvt->len_cvt = dstsize;
|
|
|
- if (cvt->filters[++cvt->filter_index]) {
|
|
|
- cvt->filters[cvt->filter_index] (cvt, format);
|
|
|
- }
|
|
|
-}
|
|
|
-
|
|
|
-static void SDLCALL
|
|
|
-SDL_Upsample_S16MSB_4c(SDL_AudioCVT * cvt, SDL_AudioFormat format)
|
|
|
-{
|
|
|
-#if DEBUG_CONVERT
|
|
|
- fprintf(stderr, "Upsample arbitrary (x%f) AUDIO_S16MSB, 4 channels.\n", cvt->rate_incr);
|
|
|
-#endif
|
|
|
-
|
|
|
- const int srcsize = cvt->len_cvt - 128;
|
|
|
- const int dstsize = (int) (((double)(cvt->len_cvt/8)) * cvt->rate_incr) * 8;
|
|
|
- register int eps = 0;
|
|
|
- Sint16 *dst = ((Sint16 *) (cvt->buf + dstsize)) - 4;
|
|
|
- const Sint16 *src = ((Sint16 *) (cvt->buf + cvt->len_cvt)) - 4;
|
|
|
- const Sint16 *target = ((const Sint16 *) cvt->buf);
|
|
|
- Sint16 sample3 = ((Sint16) SDL_SwapBE16(src[3]));
|
|
|
- Sint16 sample2 = ((Sint16) SDL_SwapBE16(src[2]));
|
|
|
- Sint16 sample1 = ((Sint16) SDL_SwapBE16(src[1]));
|
|
|
- Sint16 sample0 = ((Sint16) SDL_SwapBE16(src[0]));
|
|
|
- Sint16 last_sample3 = sample3;
|
|
|
- Sint16 last_sample2 = sample2;
|
|
|
- Sint16 last_sample1 = sample1;
|
|
|
- Sint16 last_sample0 = sample0;
|
|
|
- while (dst >= target) {
|
|
|
- dst[3] = ((Sint16) SDL_SwapBE16(sample3));
|
|
|
- dst[2] = ((Sint16) SDL_SwapBE16(sample2));
|
|
|
- dst[1] = ((Sint16) SDL_SwapBE16(sample1));
|
|
|
- dst[0] = ((Sint16) SDL_SwapBE16(sample0));
|
|
|
- dst -= 4;
|
|
|
- eps += srcsize;
|
|
|
- if ((eps << 1) >= dstsize) {
|
|
|
- src -= 4;
|
|
|
- sample3 = (Sint16) ((((Sint32) ((Sint16) SDL_SwapBE16(src[3]))) + ((Sint32) last_sample3)) >> 1);
|
|
|
- sample2 = (Sint16) ((((Sint32) ((Sint16) SDL_SwapBE16(src[2]))) + ((Sint32) last_sample2)) >> 1);
|
|
|
- sample1 = (Sint16) ((((Sint32) ((Sint16) SDL_SwapBE16(src[1]))) + ((Sint32) last_sample1)) >> 1);
|
|
|
- sample0 = (Sint16) ((((Sint32) ((Sint16) SDL_SwapBE16(src[0]))) + ((Sint32) last_sample0)) >> 1);
|
|
|
- last_sample3 = sample3;
|
|
|
- last_sample2 = sample2;
|
|
|
- last_sample1 = sample1;
|
|
|
- last_sample0 = sample0;
|
|
|
- eps -= dstsize;
|
|
|
- }
|
|
|
- }
|
|
|
- cvt->len_cvt = dstsize;
|
|
|
- if (cvt->filters[++cvt->filter_index]) {
|
|
|
- cvt->filters[cvt->filter_index] (cvt, format);
|
|
|
- }
|
|
|
-}
|
|
|
-
|
|
|
-static void SDLCALL
|
|
|
-SDL_Downsample_S16MSB_4c(SDL_AudioCVT * cvt, SDL_AudioFormat format)
|
|
|
-{
|
|
|
-#if DEBUG_CONVERT
|
|
|
- fprintf(stderr, "Downsample arbitrary (x%f) AUDIO_S16MSB, 4 channels.\n", cvt->rate_incr);
|
|
|
-#endif
|
|
|
-
|
|
|
- const int srcsize = cvt->len_cvt - 128;
|
|
|
- const int dstsize = (int) (((double)(cvt->len_cvt/8)) * cvt->rate_incr) * 8;
|
|
|
- register int eps = 0;
|
|
|
- Sint16 *dst = (Sint16 *) cvt->buf;
|
|
|
- const Sint16 *src = (Sint16 *) cvt->buf;
|
|
|
- const Sint16 *target = (const Sint16 *) (cvt->buf + dstsize);
|
|
|
- Sint16 sample0 = ((Sint16) SDL_SwapBE16(src[0]));
|
|
|
- Sint16 sample1 = ((Sint16) SDL_SwapBE16(src[1]));
|
|
|
- Sint16 sample2 = ((Sint16) SDL_SwapBE16(src[2]));
|
|
|
- Sint16 sample3 = ((Sint16) SDL_SwapBE16(src[3]));
|
|
|
- Sint16 last_sample0 = sample0;
|
|
|
- Sint16 last_sample1 = sample1;
|
|
|
- Sint16 last_sample2 = sample2;
|
|
|
- Sint16 last_sample3 = sample3;
|
|
|
- while (dst < target) {
|
|
|
- src += 4;
|
|
|
- eps += dstsize;
|
|
|
- if ((eps << 1) >= srcsize) {
|
|
|
- dst[0] = ((Sint16) SDL_SwapBE16(sample0));
|
|
|
- dst[1] = ((Sint16) SDL_SwapBE16(sample1));
|
|
|
- dst[2] = ((Sint16) SDL_SwapBE16(sample2));
|
|
|
- dst[3] = ((Sint16) SDL_SwapBE16(sample3));
|
|
|
- dst += 4;
|
|
|
- sample0 = (Sint16) ((((Sint32) ((Sint16) SDL_SwapBE16(src[0]))) + ((Sint32) last_sample0)) >> 1);
|
|
|
- sample1 = (Sint16) ((((Sint32) ((Sint16) SDL_SwapBE16(src[1]))) + ((Sint32) last_sample1)) >> 1);
|
|
|
- sample2 = (Sint16) ((((Sint32) ((Sint16) SDL_SwapBE16(src[2]))) + ((Sint32) last_sample2)) >> 1);
|
|
|
- sample3 = (Sint16) ((((Sint32) ((Sint16) SDL_SwapBE16(src[3]))) + ((Sint32) last_sample3)) >> 1);
|
|
|
- last_sample0 = sample0;
|
|
|
- last_sample1 = sample1;
|
|
|
- last_sample2 = sample2;
|
|
|
- last_sample3 = sample3;
|
|
|
- eps -= srcsize;
|
|
|
- }
|
|
|
- }
|
|
|
- cvt->len_cvt = dstsize;
|
|
|
- if (cvt->filters[++cvt->filter_index]) {
|
|
|
- cvt->filters[cvt->filter_index] (cvt, format);
|
|
|
- }
|
|
|
-}
|
|
|
-
|
|
|
-static void SDLCALL
|
|
|
-SDL_Upsample_S16MSB_6c(SDL_AudioCVT * cvt, SDL_AudioFormat format)
|
|
|
-{
|
|
|
-#if DEBUG_CONVERT
|
|
|
- fprintf(stderr, "Upsample arbitrary (x%f) AUDIO_S16MSB, 6 channels.\n", cvt->rate_incr);
|
|
|
-#endif
|
|
|
-
|
|
|
- const int srcsize = cvt->len_cvt - 192;
|
|
|
- const int dstsize = (int) (((double)(cvt->len_cvt/12)) * cvt->rate_incr) * 12;
|
|
|
- register int eps = 0;
|
|
|
- Sint16 *dst = ((Sint16 *) (cvt->buf + dstsize)) - 6;
|
|
|
- const Sint16 *src = ((Sint16 *) (cvt->buf + cvt->len_cvt)) - 6;
|
|
|
- const Sint16 *target = ((const Sint16 *) cvt->buf);
|
|
|
- Sint16 sample5 = ((Sint16) SDL_SwapBE16(src[5]));
|
|
|
- Sint16 sample4 = ((Sint16) SDL_SwapBE16(src[4]));
|
|
|
- Sint16 sample3 = ((Sint16) SDL_SwapBE16(src[3]));
|
|
|
- Sint16 sample2 = ((Sint16) SDL_SwapBE16(src[2]));
|
|
|
- Sint16 sample1 = ((Sint16) SDL_SwapBE16(src[1]));
|
|
|
- Sint16 sample0 = ((Sint16) SDL_SwapBE16(src[0]));
|
|
|
- Sint16 last_sample5 = sample5;
|
|
|
- Sint16 last_sample4 = sample4;
|
|
|
- Sint16 last_sample3 = sample3;
|
|
|
- Sint16 last_sample2 = sample2;
|
|
|
- Sint16 last_sample1 = sample1;
|
|
|
- Sint16 last_sample0 = sample0;
|
|
|
- while (dst >= target) {
|
|
|
- dst[5] = ((Sint16) SDL_SwapBE16(sample5));
|
|
|
- dst[4] = ((Sint16) SDL_SwapBE16(sample4));
|
|
|
- dst[3] = ((Sint16) SDL_SwapBE16(sample3));
|
|
|
- dst[2] = ((Sint16) SDL_SwapBE16(sample2));
|
|
|
- dst[1] = ((Sint16) SDL_SwapBE16(sample1));
|
|
|
- dst[0] = ((Sint16) SDL_SwapBE16(sample0));
|
|
|
- dst -= 6;
|
|
|
- eps += srcsize;
|
|
|
- if ((eps << 1) >= dstsize) {
|
|
|
- src -= 6;
|
|
|
- sample5 = (Sint16) ((((Sint32) ((Sint16) SDL_SwapBE16(src[5]))) + ((Sint32) last_sample5)) >> 1);
|
|
|
- sample4 = (Sint16) ((((Sint32) ((Sint16) SDL_SwapBE16(src[4]))) + ((Sint32) last_sample4)) >> 1);
|
|
|
- sample3 = (Sint16) ((((Sint32) ((Sint16) SDL_SwapBE16(src[3]))) + ((Sint32) last_sample3)) >> 1);
|
|
|
- sample2 = (Sint16) ((((Sint32) ((Sint16) SDL_SwapBE16(src[2]))) + ((Sint32) last_sample2)) >> 1);
|
|
|
- sample1 = (Sint16) ((((Sint32) ((Sint16) SDL_SwapBE16(src[1]))) + ((Sint32) last_sample1)) >> 1);
|
|
|
- sample0 = (Sint16) ((((Sint32) ((Sint16) SDL_SwapBE16(src[0]))) + ((Sint32) last_sample0)) >> 1);
|
|
|
- last_sample5 = sample5;
|
|
|
- last_sample4 = sample4;
|
|
|
- last_sample3 = sample3;
|
|
|
- last_sample2 = sample2;
|
|
|
- last_sample1 = sample1;
|
|
|
- last_sample0 = sample0;
|
|
|
- eps -= dstsize;
|
|
|
- }
|
|
|
- }
|
|
|
- cvt->len_cvt = dstsize;
|
|
|
- if (cvt->filters[++cvt->filter_index]) {
|
|
|
- cvt->filters[cvt->filter_index] (cvt, format);
|
|
|
- }
|
|
|
-}
|
|
|
-
|
|
|
-static void SDLCALL
|
|
|
-SDL_Downsample_S16MSB_6c(SDL_AudioCVT * cvt, SDL_AudioFormat format)
|
|
|
-{
|
|
|
-#if DEBUG_CONVERT
|
|
|
- fprintf(stderr, "Downsample arbitrary (x%f) AUDIO_S16MSB, 6 channels.\n", cvt->rate_incr);
|
|
|
-#endif
|
|
|
-
|
|
|
- const int srcsize = cvt->len_cvt - 192;
|
|
|
- const int dstsize = (int) (((double)(cvt->len_cvt/12)) * cvt->rate_incr) * 12;
|
|
|
- register int eps = 0;
|
|
|
- Sint16 *dst = (Sint16 *) cvt->buf;
|
|
|
- const Sint16 *src = (Sint16 *) cvt->buf;
|
|
|
- const Sint16 *target = (const Sint16 *) (cvt->buf + dstsize);
|
|
|
- Sint16 sample0 = ((Sint16) SDL_SwapBE16(src[0]));
|
|
|
- Sint16 sample1 = ((Sint16) SDL_SwapBE16(src[1]));
|
|
|
- Sint16 sample2 = ((Sint16) SDL_SwapBE16(src[2]));
|
|
|
- Sint16 sample3 = ((Sint16) SDL_SwapBE16(src[3]));
|
|
|
- Sint16 sample4 = ((Sint16) SDL_SwapBE16(src[4]));
|
|
|
- Sint16 sample5 = ((Sint16) SDL_SwapBE16(src[5]));
|
|
|
- Sint16 last_sample0 = sample0;
|
|
|
- Sint16 last_sample1 = sample1;
|
|
|
- Sint16 last_sample2 = sample2;
|
|
|
- Sint16 last_sample3 = sample3;
|
|
|
- Sint16 last_sample4 = sample4;
|
|
|
- Sint16 last_sample5 = sample5;
|
|
|
- while (dst < target) {
|
|
|
- src += 6;
|
|
|
- eps += dstsize;
|
|
|
- if ((eps << 1) >= srcsize) {
|
|
|
- dst[0] = ((Sint16) SDL_SwapBE16(sample0));
|
|
|
- dst[1] = ((Sint16) SDL_SwapBE16(sample1));
|
|
|
- dst[2] = ((Sint16) SDL_SwapBE16(sample2));
|
|
|
- dst[3] = ((Sint16) SDL_SwapBE16(sample3));
|
|
|
- dst[4] = ((Sint16) SDL_SwapBE16(sample4));
|
|
|
- dst[5] = ((Sint16) SDL_SwapBE16(sample5));
|
|
|
- dst += 6;
|
|
|
- sample0 = (Sint16) ((((Sint32) ((Sint16) SDL_SwapBE16(src[0]))) + ((Sint32) last_sample0)) >> 1);
|
|
|
- sample1 = (Sint16) ((((Sint32) ((Sint16) SDL_SwapBE16(src[1]))) + ((Sint32) last_sample1)) >> 1);
|
|
|
- sample2 = (Sint16) ((((Sint32) ((Sint16) SDL_SwapBE16(src[2]))) + ((Sint32) last_sample2)) >> 1);
|
|
|
- sample3 = (Sint16) ((((Sint32) ((Sint16) SDL_SwapBE16(src[3]))) + ((Sint32) last_sample3)) >> 1);
|
|
|
- sample4 = (Sint16) ((((Sint32) ((Sint16) SDL_SwapBE16(src[4]))) + ((Sint32) last_sample4)) >> 1);
|
|
|
- sample5 = (Sint16) ((((Sint32) ((Sint16) SDL_SwapBE16(src[5]))) + ((Sint32) last_sample5)) >> 1);
|
|
|
- last_sample0 = sample0;
|
|
|
- last_sample1 = sample1;
|
|
|
- last_sample2 = sample2;
|
|
|
- last_sample3 = sample3;
|
|
|
- last_sample4 = sample4;
|
|
|
- last_sample5 = sample5;
|
|
|
- eps -= srcsize;
|
|
|
- }
|
|
|
- }
|
|
|
- cvt->len_cvt = dstsize;
|
|
|
- if (cvt->filters[++cvt->filter_index]) {
|
|
|
- cvt->filters[cvt->filter_index] (cvt, format);
|
|
|
- }
|
|
|
-}
|
|
|
-
|
|
|
-static void SDLCALL
|
|
|
-SDL_Upsample_S16MSB_8c(SDL_AudioCVT * cvt, SDL_AudioFormat format)
|
|
|
-{
|
|
|
-#if DEBUG_CONVERT
|
|
|
- fprintf(stderr, "Upsample arbitrary (x%f) AUDIO_S16MSB, 8 channels.\n", cvt->rate_incr);
|
|
|
-#endif
|
|
|
-
|
|
|
- const int srcsize = cvt->len_cvt - 256;
|
|
|
- const int dstsize = (int) (((double)(cvt->len_cvt/16)) * cvt->rate_incr) * 16;
|
|
|
- register int eps = 0;
|
|
|
- Sint16 *dst = ((Sint16 *) (cvt->buf + dstsize)) - 8;
|
|
|
- const Sint16 *src = ((Sint16 *) (cvt->buf + cvt->len_cvt)) - 8;
|
|
|
- const Sint16 *target = ((const Sint16 *) cvt->buf);
|
|
|
- Sint16 sample7 = ((Sint16) SDL_SwapBE16(src[7]));
|
|
|
- Sint16 sample6 = ((Sint16) SDL_SwapBE16(src[6]));
|
|
|
- Sint16 sample5 = ((Sint16) SDL_SwapBE16(src[5]));
|
|
|
- Sint16 sample4 = ((Sint16) SDL_SwapBE16(src[4]));
|
|
|
- Sint16 sample3 = ((Sint16) SDL_SwapBE16(src[3]));
|
|
|
- Sint16 sample2 = ((Sint16) SDL_SwapBE16(src[2]));
|
|
|
- Sint16 sample1 = ((Sint16) SDL_SwapBE16(src[1]));
|
|
|
- Sint16 sample0 = ((Sint16) SDL_SwapBE16(src[0]));
|
|
|
- Sint16 last_sample7 = sample7;
|
|
|
- Sint16 last_sample6 = sample6;
|
|
|
- Sint16 last_sample5 = sample5;
|
|
|
- Sint16 last_sample4 = sample4;
|
|
|
- Sint16 last_sample3 = sample3;
|
|
|
- Sint16 last_sample2 = sample2;
|
|
|
- Sint16 last_sample1 = sample1;
|
|
|
- Sint16 last_sample0 = sample0;
|
|
|
- while (dst >= target) {
|
|
|
- dst[7] = ((Sint16) SDL_SwapBE16(sample7));
|
|
|
- dst[6] = ((Sint16) SDL_SwapBE16(sample6));
|
|
|
- dst[5] = ((Sint16) SDL_SwapBE16(sample5));
|
|
|
- dst[4] = ((Sint16) SDL_SwapBE16(sample4));
|
|
|
- dst[3] = ((Sint16) SDL_SwapBE16(sample3));
|
|
|
- dst[2] = ((Sint16) SDL_SwapBE16(sample2));
|
|
|
- dst[1] = ((Sint16) SDL_SwapBE16(sample1));
|
|
|
- dst[0] = ((Sint16) SDL_SwapBE16(sample0));
|
|
|
- dst -= 8;
|
|
|
- eps += srcsize;
|
|
|
- if ((eps << 1) >= dstsize) {
|
|
|
- src -= 8;
|
|
|
- sample7 = (Sint16) ((((Sint32) ((Sint16) SDL_SwapBE16(src[7]))) + ((Sint32) last_sample7)) >> 1);
|
|
|
- sample6 = (Sint16) ((((Sint32) ((Sint16) SDL_SwapBE16(src[6]))) + ((Sint32) last_sample6)) >> 1);
|
|
|
- sample5 = (Sint16) ((((Sint32) ((Sint16) SDL_SwapBE16(src[5]))) + ((Sint32) last_sample5)) >> 1);
|
|
|
- sample4 = (Sint16) ((((Sint32) ((Sint16) SDL_SwapBE16(src[4]))) + ((Sint32) last_sample4)) >> 1);
|
|
|
- sample3 = (Sint16) ((((Sint32) ((Sint16) SDL_SwapBE16(src[3]))) + ((Sint32) last_sample3)) >> 1);
|
|
|
- sample2 = (Sint16) ((((Sint32) ((Sint16) SDL_SwapBE16(src[2]))) + ((Sint32) last_sample2)) >> 1);
|
|
|
- sample1 = (Sint16) ((((Sint32) ((Sint16) SDL_SwapBE16(src[1]))) + ((Sint32) last_sample1)) >> 1);
|
|
|
- sample0 = (Sint16) ((((Sint32) ((Sint16) SDL_SwapBE16(src[0]))) + ((Sint32) last_sample0)) >> 1);
|
|
|
- last_sample7 = sample7;
|
|
|
- last_sample6 = sample6;
|
|
|
- last_sample5 = sample5;
|
|
|
- last_sample4 = sample4;
|
|
|
- last_sample3 = sample3;
|
|
|
- last_sample2 = sample2;
|
|
|
- last_sample1 = sample1;
|
|
|
- last_sample0 = sample0;
|
|
|
- eps -= dstsize;
|
|
|
- }
|
|
|
- }
|
|
|
- cvt->len_cvt = dstsize;
|
|
|
- if (cvt->filters[++cvt->filter_index]) {
|
|
|
- cvt->filters[cvt->filter_index] (cvt, format);
|
|
|
- }
|
|
|
-}
|
|
|
-
|
|
|
-static void SDLCALL
|
|
|
-SDL_Downsample_S16MSB_8c(SDL_AudioCVT * cvt, SDL_AudioFormat format)
|
|
|
-{
|
|
|
-#if DEBUG_CONVERT
|
|
|
- fprintf(stderr, "Downsample arbitrary (x%f) AUDIO_S16MSB, 8 channels.\n", cvt->rate_incr);
|
|
|
-#endif
|
|
|
-
|
|
|
- const int srcsize = cvt->len_cvt - 256;
|
|
|
- const int dstsize = (int) (((double)(cvt->len_cvt/16)) * cvt->rate_incr) * 16;
|
|
|
- register int eps = 0;
|
|
|
- Sint16 *dst = (Sint16 *) cvt->buf;
|
|
|
- const Sint16 *src = (Sint16 *) cvt->buf;
|
|
|
- const Sint16 *target = (const Sint16 *) (cvt->buf + dstsize);
|
|
|
- Sint16 sample0 = ((Sint16) SDL_SwapBE16(src[0]));
|
|
|
- Sint16 sample1 = ((Sint16) SDL_SwapBE16(src[1]));
|
|
|
- Sint16 sample2 = ((Sint16) SDL_SwapBE16(src[2]));
|
|
|
- Sint16 sample3 = ((Sint16) SDL_SwapBE16(src[3]));
|
|
|
- Sint16 sample4 = ((Sint16) SDL_SwapBE16(src[4]));
|
|
|
- Sint16 sample5 = ((Sint16) SDL_SwapBE16(src[5]));
|
|
|
- Sint16 sample6 = ((Sint16) SDL_SwapBE16(src[6]));
|
|
|
- Sint16 sample7 = ((Sint16) SDL_SwapBE16(src[7]));
|
|
|
- Sint16 last_sample0 = sample0;
|
|
|
- Sint16 last_sample1 = sample1;
|
|
|
- Sint16 last_sample2 = sample2;
|
|
|
- Sint16 last_sample3 = sample3;
|
|
|
- Sint16 last_sample4 = sample4;
|
|
|
- Sint16 last_sample5 = sample5;
|
|
|
- Sint16 last_sample6 = sample6;
|
|
|
- Sint16 last_sample7 = sample7;
|
|
|
- while (dst < target) {
|
|
|
- src += 8;
|
|
|
- eps += dstsize;
|
|
|
- if ((eps << 1) >= srcsize) {
|
|
|
- dst[0] = ((Sint16) SDL_SwapBE16(sample0));
|
|
|
- dst[1] = ((Sint16) SDL_SwapBE16(sample1));
|
|
|
- dst[2] = ((Sint16) SDL_SwapBE16(sample2));
|
|
|
- dst[3] = ((Sint16) SDL_SwapBE16(sample3));
|
|
|
- dst[4] = ((Sint16) SDL_SwapBE16(sample4));
|
|
|
- dst[5] = ((Sint16) SDL_SwapBE16(sample5));
|
|
|
- dst[6] = ((Sint16) SDL_SwapBE16(sample6));
|
|
|
- dst[7] = ((Sint16) SDL_SwapBE16(sample7));
|
|
|
- dst += 8;
|
|
|
- sample0 = (Sint16) ((((Sint32) ((Sint16) SDL_SwapBE16(src[0]))) + ((Sint32) last_sample0)) >> 1);
|
|
|
- sample1 = (Sint16) ((((Sint32) ((Sint16) SDL_SwapBE16(src[1]))) + ((Sint32) last_sample1)) >> 1);
|
|
|
- sample2 = (Sint16) ((((Sint32) ((Sint16) SDL_SwapBE16(src[2]))) + ((Sint32) last_sample2)) >> 1);
|
|
|
- sample3 = (Sint16) ((((Sint32) ((Sint16) SDL_SwapBE16(src[3]))) + ((Sint32) last_sample3)) >> 1);
|
|
|
- sample4 = (Sint16) ((((Sint32) ((Sint16) SDL_SwapBE16(src[4]))) + ((Sint32) last_sample4)) >> 1);
|
|
|
- sample5 = (Sint16) ((((Sint32) ((Sint16) SDL_SwapBE16(src[5]))) + ((Sint32) last_sample5)) >> 1);
|
|
|
- sample6 = (Sint16) ((((Sint32) ((Sint16) SDL_SwapBE16(src[6]))) + ((Sint32) last_sample6)) >> 1);
|
|
|
- sample7 = (Sint16) ((((Sint32) ((Sint16) SDL_SwapBE16(src[7]))) + ((Sint32) last_sample7)) >> 1);
|
|
|
- last_sample0 = sample0;
|
|
|
- last_sample1 = sample1;
|
|
|
- last_sample2 = sample2;
|
|
|
- last_sample3 = sample3;
|
|
|
- last_sample4 = sample4;
|
|
|
- last_sample5 = sample5;
|
|
|
- last_sample6 = sample6;
|
|
|
- last_sample7 = sample7;
|
|
|
- eps -= srcsize;
|
|
|
- }
|
|
|
- }
|
|
|
- cvt->len_cvt = dstsize;
|
|
|
- if (cvt->filters[++cvt->filter_index]) {
|
|
|
- cvt->filters[cvt->filter_index] (cvt, format);
|
|
|
- }
|
|
|
-}
|
|
|
-
|
|
|
-static void SDLCALL
|
|
|
-SDL_Upsample_S32LSB_1c(SDL_AudioCVT * cvt, SDL_AudioFormat format)
|
|
|
-{
|
|
|
-#if DEBUG_CONVERT
|
|
|
- fprintf(stderr, "Upsample arbitrary (x%f) AUDIO_S32LSB, 1 channels.\n", cvt->rate_incr);
|
|
|
-#endif
|
|
|
-
|
|
|
- const int srcsize = cvt->len_cvt - 64;
|
|
|
- const int dstsize = (int) (((double)(cvt->len_cvt/4)) * cvt->rate_incr) * 4;
|
|
|
- register int eps = 0;
|
|
|
- Sint32 *dst = ((Sint32 *) (cvt->buf + dstsize)) - 1;
|
|
|
- const Sint32 *src = ((Sint32 *) (cvt->buf + cvt->len_cvt)) - 1;
|
|
|
- const Sint32 *target = ((const Sint32 *) cvt->buf);
|
|
|
- Sint32 sample0 = ((Sint32) SDL_SwapLE32(src[0]));
|
|
|
- Sint32 last_sample0 = sample0;
|
|
|
- while (dst >= target) {
|
|
|
- dst[0] = ((Sint32) SDL_SwapLE32(sample0));
|
|
|
- dst--;
|
|
|
- eps += srcsize;
|
|
|
- if ((eps << 1) >= dstsize) {
|
|
|
- src--;
|
|
|
- sample0 = (Sint32) ((((Sint64) ((Sint32) SDL_SwapLE32(src[0]))) + ((Sint64) last_sample0)) >> 1);
|
|
|
- last_sample0 = sample0;
|
|
|
- eps -= dstsize;
|
|
|
- }
|
|
|
- }
|
|
|
- cvt->len_cvt = dstsize;
|
|
|
- if (cvt->filters[++cvt->filter_index]) {
|
|
|
- cvt->filters[cvt->filter_index] (cvt, format);
|
|
|
- }
|
|
|
-}
|
|
|
-
|
|
|
-static void SDLCALL
|
|
|
-SDL_Downsample_S32LSB_1c(SDL_AudioCVT * cvt, SDL_AudioFormat format)
|
|
|
-{
|
|
|
-#if DEBUG_CONVERT
|
|
|
- fprintf(stderr, "Downsample arbitrary (x%f) AUDIO_S32LSB, 1 channels.\n", cvt->rate_incr);
|
|
|
-#endif
|
|
|
-
|
|
|
- const int srcsize = cvt->len_cvt - 64;
|
|
|
- const int dstsize = (int) (((double)(cvt->len_cvt/4)) * cvt->rate_incr) * 4;
|
|
|
- register int eps = 0;
|
|
|
- Sint32 *dst = (Sint32 *) cvt->buf;
|
|
|
- const Sint32 *src = (Sint32 *) cvt->buf;
|
|
|
- const Sint32 *target = (const Sint32 *) (cvt->buf + dstsize);
|
|
|
- Sint32 sample0 = ((Sint32) SDL_SwapLE32(src[0]));
|
|
|
- Sint32 last_sample0 = sample0;
|
|
|
- while (dst < target) {
|
|
|
- src++;
|
|
|
- eps += dstsize;
|
|
|
- if ((eps << 1) >= srcsize) {
|
|
|
- dst[0] = ((Sint32) SDL_SwapLE32(sample0));
|
|
|
- dst++;
|
|
|
- sample0 = (Sint32) ((((Sint64) ((Sint32) SDL_SwapLE32(src[0]))) + ((Sint64) last_sample0)) >> 1);
|
|
|
- last_sample0 = sample0;
|
|
|
- eps -= srcsize;
|
|
|
- }
|
|
|
- }
|
|
|
- cvt->len_cvt = dstsize;
|
|
|
- if (cvt->filters[++cvt->filter_index]) {
|
|
|
- cvt->filters[cvt->filter_index] (cvt, format);
|
|
|
- }
|
|
|
-}
|
|
|
-
|
|
|
-static void SDLCALL
|
|
|
-SDL_Upsample_S32LSB_2c(SDL_AudioCVT * cvt, SDL_AudioFormat format)
|
|
|
-{
|
|
|
-#if DEBUG_CONVERT
|
|
|
- fprintf(stderr, "Upsample arbitrary (x%f) AUDIO_S32LSB, 2 channels.\n", cvt->rate_incr);
|
|
|
-#endif
|
|
|
-
|
|
|
- const int srcsize = cvt->len_cvt - 128;
|
|
|
- const int dstsize = (int) (((double)(cvt->len_cvt/8)) * cvt->rate_incr) * 8;
|
|
|
- register int eps = 0;
|
|
|
- Sint32 *dst = ((Sint32 *) (cvt->buf + dstsize)) - 2;
|
|
|
- const Sint32 *src = ((Sint32 *) (cvt->buf + cvt->len_cvt)) - 2;
|
|
|
- const Sint32 *target = ((const Sint32 *) cvt->buf);
|
|
|
- Sint32 sample1 = ((Sint32) SDL_SwapLE32(src[1]));
|
|
|
- Sint32 sample0 = ((Sint32) SDL_SwapLE32(src[0]));
|
|
|
- Sint32 last_sample1 = sample1;
|
|
|
- Sint32 last_sample0 = sample0;
|
|
|
- while (dst >= target) {
|
|
|
- dst[1] = ((Sint32) SDL_SwapLE32(sample1));
|
|
|
- dst[0] = ((Sint32) SDL_SwapLE32(sample0));
|
|
|
- dst -= 2;
|
|
|
- eps += srcsize;
|
|
|
- if ((eps << 1) >= dstsize) {
|
|
|
- src -= 2;
|
|
|
- sample1 = (Sint32) ((((Sint64) ((Sint32) SDL_SwapLE32(src[1]))) + ((Sint64) last_sample1)) >> 1);
|
|
|
- sample0 = (Sint32) ((((Sint64) ((Sint32) SDL_SwapLE32(src[0]))) + ((Sint64) last_sample0)) >> 1);
|
|
|
- last_sample1 = sample1;
|
|
|
- last_sample0 = sample0;
|
|
|
- eps -= dstsize;
|
|
|
- }
|
|
|
- }
|
|
|
- cvt->len_cvt = dstsize;
|
|
|
- if (cvt->filters[++cvt->filter_index]) {
|
|
|
- cvt->filters[cvt->filter_index] (cvt, format);
|
|
|
- }
|
|
|
-}
|
|
|
-
|
|
|
-static void SDLCALL
|
|
|
-SDL_Downsample_S32LSB_2c(SDL_AudioCVT * cvt, SDL_AudioFormat format)
|
|
|
-{
|
|
|
-#if DEBUG_CONVERT
|
|
|
- fprintf(stderr, "Downsample arbitrary (x%f) AUDIO_S32LSB, 2 channels.\n", cvt->rate_incr);
|
|
|
-#endif
|
|
|
-
|
|
|
- const int srcsize = cvt->len_cvt - 128;
|
|
|
- const int dstsize = (int) (((double)(cvt->len_cvt/8)) * cvt->rate_incr) * 8;
|
|
|
- register int eps = 0;
|
|
|
- Sint32 *dst = (Sint32 *) cvt->buf;
|
|
|
- const Sint32 *src = (Sint32 *) cvt->buf;
|
|
|
- const Sint32 *target = (const Sint32 *) (cvt->buf + dstsize);
|
|
|
- Sint32 sample0 = ((Sint32) SDL_SwapLE32(src[0]));
|
|
|
- Sint32 sample1 = ((Sint32) SDL_SwapLE32(src[1]));
|
|
|
- Sint32 last_sample0 = sample0;
|
|
|
- Sint32 last_sample1 = sample1;
|
|
|
- while (dst < target) {
|
|
|
- src += 2;
|
|
|
- eps += dstsize;
|
|
|
- if ((eps << 1) >= srcsize) {
|
|
|
- dst[0] = ((Sint32) SDL_SwapLE32(sample0));
|
|
|
- dst[1] = ((Sint32) SDL_SwapLE32(sample1));
|
|
|
- dst += 2;
|
|
|
- sample0 = (Sint32) ((((Sint64) ((Sint32) SDL_SwapLE32(src[0]))) + ((Sint64) last_sample0)) >> 1);
|
|
|
- sample1 = (Sint32) ((((Sint64) ((Sint32) SDL_SwapLE32(src[1]))) + ((Sint64) last_sample1)) >> 1);
|
|
|
- last_sample0 = sample0;
|
|
|
- last_sample1 = sample1;
|
|
|
- eps -= srcsize;
|
|
|
- }
|
|
|
- }
|
|
|
- cvt->len_cvt = dstsize;
|
|
|
- if (cvt->filters[++cvt->filter_index]) {
|
|
|
- cvt->filters[cvt->filter_index] (cvt, format);
|
|
|
- }
|
|
|
-}
|
|
|
-
|
|
|
-static void SDLCALL
|
|
|
-SDL_Upsample_S32LSB_4c(SDL_AudioCVT * cvt, SDL_AudioFormat format)
|
|
|
-{
|
|
|
-#if DEBUG_CONVERT
|
|
|
- fprintf(stderr, "Upsample arbitrary (x%f) AUDIO_S32LSB, 4 channels.\n", cvt->rate_incr);
|
|
|
-#endif
|
|
|
-
|
|
|
- const int srcsize = cvt->len_cvt - 256;
|
|
|
- const int dstsize = (int) (((double)(cvt->len_cvt/16)) * cvt->rate_incr) * 16;
|
|
|
- register int eps = 0;
|
|
|
- Sint32 *dst = ((Sint32 *) (cvt->buf + dstsize)) - 4;
|
|
|
- const Sint32 *src = ((Sint32 *) (cvt->buf + cvt->len_cvt)) - 4;
|
|
|
- const Sint32 *target = ((const Sint32 *) cvt->buf);
|
|
|
- Sint32 sample3 = ((Sint32) SDL_SwapLE32(src[3]));
|
|
|
- Sint32 sample2 = ((Sint32) SDL_SwapLE32(src[2]));
|
|
|
- Sint32 sample1 = ((Sint32) SDL_SwapLE32(src[1]));
|
|
|
- Sint32 sample0 = ((Sint32) SDL_SwapLE32(src[0]));
|
|
|
- Sint32 last_sample3 = sample3;
|
|
|
- Sint32 last_sample2 = sample2;
|
|
|
- Sint32 last_sample1 = sample1;
|
|
|
- Sint32 last_sample0 = sample0;
|
|
|
- while (dst >= target) {
|
|
|
- dst[3] = ((Sint32) SDL_SwapLE32(sample3));
|
|
|
- dst[2] = ((Sint32) SDL_SwapLE32(sample2));
|
|
|
- dst[1] = ((Sint32) SDL_SwapLE32(sample1));
|
|
|
- dst[0] = ((Sint32) SDL_SwapLE32(sample0));
|
|
|
- dst -= 4;
|
|
|
- eps += srcsize;
|
|
|
- if ((eps << 1) >= dstsize) {
|
|
|
- src -= 4;
|
|
|
- sample3 = (Sint32) ((((Sint64) ((Sint32) SDL_SwapLE32(src[3]))) + ((Sint64) last_sample3)) >> 1);
|
|
|
- sample2 = (Sint32) ((((Sint64) ((Sint32) SDL_SwapLE32(src[2]))) + ((Sint64) last_sample2)) >> 1);
|
|
|
- sample1 = (Sint32) ((((Sint64) ((Sint32) SDL_SwapLE32(src[1]))) + ((Sint64) last_sample1)) >> 1);
|
|
|
- sample0 = (Sint32) ((((Sint64) ((Sint32) SDL_SwapLE32(src[0]))) + ((Sint64) last_sample0)) >> 1);
|
|
|
- last_sample3 = sample3;
|
|
|
- last_sample2 = sample2;
|
|
|
- last_sample1 = sample1;
|
|
|
- last_sample0 = sample0;
|
|
|
- eps -= dstsize;
|
|
|
- }
|
|
|
- }
|
|
|
- cvt->len_cvt = dstsize;
|
|
|
- if (cvt->filters[++cvt->filter_index]) {
|
|
|
- cvt->filters[cvt->filter_index] (cvt, format);
|
|
|
- }
|
|
|
-}
|
|
|
-
|
|
|
-static void SDLCALL
|
|
|
-SDL_Downsample_S32LSB_4c(SDL_AudioCVT * cvt, SDL_AudioFormat format)
|
|
|
-{
|
|
|
-#if DEBUG_CONVERT
|
|
|
- fprintf(stderr, "Downsample arbitrary (x%f) AUDIO_S32LSB, 4 channels.\n", cvt->rate_incr);
|
|
|
-#endif
|
|
|
-
|
|
|
- const int srcsize = cvt->len_cvt - 256;
|
|
|
- const int dstsize = (int) (((double)(cvt->len_cvt/16)) * cvt->rate_incr) * 16;
|
|
|
- register int eps = 0;
|
|
|
- Sint32 *dst = (Sint32 *) cvt->buf;
|
|
|
- const Sint32 *src = (Sint32 *) cvt->buf;
|
|
|
- const Sint32 *target = (const Sint32 *) (cvt->buf + dstsize);
|
|
|
- Sint32 sample0 = ((Sint32) SDL_SwapLE32(src[0]));
|
|
|
- Sint32 sample1 = ((Sint32) SDL_SwapLE32(src[1]));
|
|
|
- Sint32 sample2 = ((Sint32) SDL_SwapLE32(src[2]));
|
|
|
- Sint32 sample3 = ((Sint32) SDL_SwapLE32(src[3]));
|
|
|
- Sint32 last_sample0 = sample0;
|
|
|
- Sint32 last_sample1 = sample1;
|
|
|
- Sint32 last_sample2 = sample2;
|
|
|
- Sint32 last_sample3 = sample3;
|
|
|
- while (dst < target) {
|
|
|
- src += 4;
|
|
|
- eps += dstsize;
|
|
|
- if ((eps << 1) >= srcsize) {
|
|
|
- dst[0] = ((Sint32) SDL_SwapLE32(sample0));
|
|
|
- dst[1] = ((Sint32) SDL_SwapLE32(sample1));
|
|
|
- dst[2] = ((Sint32) SDL_SwapLE32(sample2));
|
|
|
- dst[3] = ((Sint32) SDL_SwapLE32(sample3));
|
|
|
- dst += 4;
|
|
|
- sample0 = (Sint32) ((((Sint64) ((Sint32) SDL_SwapLE32(src[0]))) + ((Sint64) last_sample0)) >> 1);
|
|
|
- sample1 = (Sint32) ((((Sint64) ((Sint32) SDL_SwapLE32(src[1]))) + ((Sint64) last_sample1)) >> 1);
|
|
|
- sample2 = (Sint32) ((((Sint64) ((Sint32) SDL_SwapLE32(src[2]))) + ((Sint64) last_sample2)) >> 1);
|
|
|
- sample3 = (Sint32) ((((Sint64) ((Sint32) SDL_SwapLE32(src[3]))) + ((Sint64) last_sample3)) >> 1);
|
|
|
- last_sample0 = sample0;
|
|
|
- last_sample1 = sample1;
|
|
|
- last_sample2 = sample2;
|
|
|
- last_sample3 = sample3;
|
|
|
- eps -= srcsize;
|
|
|
- }
|
|
|
- }
|
|
|
- cvt->len_cvt = dstsize;
|
|
|
- if (cvt->filters[++cvt->filter_index]) {
|
|
|
- cvt->filters[cvt->filter_index] (cvt, format);
|
|
|
- }
|
|
|
-}
|
|
|
-
|
|
|
-static void SDLCALL
|
|
|
-SDL_Upsample_S32LSB_6c(SDL_AudioCVT * cvt, SDL_AudioFormat format)
|
|
|
-{
|
|
|
-#if DEBUG_CONVERT
|
|
|
- fprintf(stderr, "Upsample arbitrary (x%f) AUDIO_S32LSB, 6 channels.\n", cvt->rate_incr);
|
|
|
-#endif
|
|
|
-
|
|
|
- const int srcsize = cvt->len_cvt - 384;
|
|
|
- const int dstsize = (int) (((double)(cvt->len_cvt/24)) * cvt->rate_incr) * 24;
|
|
|
- register int eps = 0;
|
|
|
- Sint32 *dst = ((Sint32 *) (cvt->buf + dstsize)) - 6;
|
|
|
- const Sint32 *src = ((Sint32 *) (cvt->buf + cvt->len_cvt)) - 6;
|
|
|
- const Sint32 *target = ((const Sint32 *) cvt->buf);
|
|
|
- Sint32 sample5 = ((Sint32) SDL_SwapLE32(src[5]));
|
|
|
- Sint32 sample4 = ((Sint32) SDL_SwapLE32(src[4]));
|
|
|
- Sint32 sample3 = ((Sint32) SDL_SwapLE32(src[3]));
|
|
|
- Sint32 sample2 = ((Sint32) SDL_SwapLE32(src[2]));
|
|
|
- Sint32 sample1 = ((Sint32) SDL_SwapLE32(src[1]));
|
|
|
- Sint32 sample0 = ((Sint32) SDL_SwapLE32(src[0]));
|
|
|
- Sint32 last_sample5 = sample5;
|
|
|
- Sint32 last_sample4 = sample4;
|
|
|
- Sint32 last_sample3 = sample3;
|
|
|
- Sint32 last_sample2 = sample2;
|
|
|
- Sint32 last_sample1 = sample1;
|
|
|
- Sint32 last_sample0 = sample0;
|
|
|
- while (dst >= target) {
|
|
|
- dst[5] = ((Sint32) SDL_SwapLE32(sample5));
|
|
|
- dst[4] = ((Sint32) SDL_SwapLE32(sample4));
|
|
|
- dst[3] = ((Sint32) SDL_SwapLE32(sample3));
|
|
|
- dst[2] = ((Sint32) SDL_SwapLE32(sample2));
|
|
|
- dst[1] = ((Sint32) SDL_SwapLE32(sample1));
|
|
|
- dst[0] = ((Sint32) SDL_SwapLE32(sample0));
|
|
|
- dst -= 6;
|
|
|
- eps += srcsize;
|
|
|
- if ((eps << 1) >= dstsize) {
|
|
|
- src -= 6;
|
|
|
- sample5 = (Sint32) ((((Sint64) ((Sint32) SDL_SwapLE32(src[5]))) + ((Sint64) last_sample5)) >> 1);
|
|
|
- sample4 = (Sint32) ((((Sint64) ((Sint32) SDL_SwapLE32(src[4]))) + ((Sint64) last_sample4)) >> 1);
|
|
|
- sample3 = (Sint32) ((((Sint64) ((Sint32) SDL_SwapLE32(src[3]))) + ((Sint64) last_sample3)) >> 1);
|
|
|
- sample2 = (Sint32) ((((Sint64) ((Sint32) SDL_SwapLE32(src[2]))) + ((Sint64) last_sample2)) >> 1);
|
|
|
- sample1 = (Sint32) ((((Sint64) ((Sint32) SDL_SwapLE32(src[1]))) + ((Sint64) last_sample1)) >> 1);
|
|
|
- sample0 = (Sint32) ((((Sint64) ((Sint32) SDL_SwapLE32(src[0]))) + ((Sint64) last_sample0)) >> 1);
|
|
|
- last_sample5 = sample5;
|
|
|
- last_sample4 = sample4;
|
|
|
- last_sample3 = sample3;
|
|
|
- last_sample2 = sample2;
|
|
|
- last_sample1 = sample1;
|
|
|
- last_sample0 = sample0;
|
|
|
- eps -= dstsize;
|
|
|
- }
|
|
|
- }
|
|
|
- cvt->len_cvt = dstsize;
|
|
|
- if (cvt->filters[++cvt->filter_index]) {
|
|
|
- cvt->filters[cvt->filter_index] (cvt, format);
|
|
|
- }
|
|
|
-}
|
|
|
-
|
|
|
-static void SDLCALL
|
|
|
-SDL_Downsample_S32LSB_6c(SDL_AudioCVT * cvt, SDL_AudioFormat format)
|
|
|
-{
|
|
|
-#if DEBUG_CONVERT
|
|
|
- fprintf(stderr, "Downsample arbitrary (x%f) AUDIO_S32LSB, 6 channels.\n", cvt->rate_incr);
|
|
|
-#endif
|
|
|
-
|
|
|
- const int srcsize = cvt->len_cvt - 384;
|
|
|
- const int dstsize = (int) (((double)(cvt->len_cvt/24)) * cvt->rate_incr) * 24;
|
|
|
- register int eps = 0;
|
|
|
- Sint32 *dst = (Sint32 *) cvt->buf;
|
|
|
- const Sint32 *src = (Sint32 *) cvt->buf;
|
|
|
- const Sint32 *target = (const Sint32 *) (cvt->buf + dstsize);
|
|
|
- Sint32 sample0 = ((Sint32) SDL_SwapLE32(src[0]));
|
|
|
- Sint32 sample1 = ((Sint32) SDL_SwapLE32(src[1]));
|
|
|
- Sint32 sample2 = ((Sint32) SDL_SwapLE32(src[2]));
|
|
|
- Sint32 sample3 = ((Sint32) SDL_SwapLE32(src[3]));
|
|
|
- Sint32 sample4 = ((Sint32) SDL_SwapLE32(src[4]));
|
|
|
- Sint32 sample5 = ((Sint32) SDL_SwapLE32(src[5]));
|
|
|
- Sint32 last_sample0 = sample0;
|
|
|
- Sint32 last_sample1 = sample1;
|
|
|
- Sint32 last_sample2 = sample2;
|
|
|
- Sint32 last_sample3 = sample3;
|
|
|
- Sint32 last_sample4 = sample4;
|
|
|
- Sint32 last_sample5 = sample5;
|
|
|
- while (dst < target) {
|
|
|
- src += 6;
|
|
|
- eps += dstsize;
|
|
|
- if ((eps << 1) >= srcsize) {
|
|
|
- dst[0] = ((Sint32) SDL_SwapLE32(sample0));
|
|
|
- dst[1] = ((Sint32) SDL_SwapLE32(sample1));
|
|
|
- dst[2] = ((Sint32) SDL_SwapLE32(sample2));
|
|
|
- dst[3] = ((Sint32) SDL_SwapLE32(sample3));
|
|
|
- dst[4] = ((Sint32) SDL_SwapLE32(sample4));
|
|
|
- dst[5] = ((Sint32) SDL_SwapLE32(sample5));
|
|
|
- dst += 6;
|
|
|
- sample0 = (Sint32) ((((Sint64) ((Sint32) SDL_SwapLE32(src[0]))) + ((Sint64) last_sample0)) >> 1);
|
|
|
- sample1 = (Sint32) ((((Sint64) ((Sint32) SDL_SwapLE32(src[1]))) + ((Sint64) last_sample1)) >> 1);
|
|
|
- sample2 = (Sint32) ((((Sint64) ((Sint32) SDL_SwapLE32(src[2]))) + ((Sint64) last_sample2)) >> 1);
|
|
|
- sample3 = (Sint32) ((((Sint64) ((Sint32) SDL_SwapLE32(src[3]))) + ((Sint64) last_sample3)) >> 1);
|
|
|
- sample4 = (Sint32) ((((Sint64) ((Sint32) SDL_SwapLE32(src[4]))) + ((Sint64) last_sample4)) >> 1);
|
|
|
- sample5 = (Sint32) ((((Sint64) ((Sint32) SDL_SwapLE32(src[5]))) + ((Sint64) last_sample5)) >> 1);
|
|
|
- last_sample0 = sample0;
|
|
|
- last_sample1 = sample1;
|
|
|
- last_sample2 = sample2;
|
|
|
- last_sample3 = sample3;
|
|
|
- last_sample4 = sample4;
|
|
|
- last_sample5 = sample5;
|
|
|
- eps -= srcsize;
|
|
|
- }
|
|
|
- }
|
|
|
- cvt->len_cvt = dstsize;
|
|
|
- if (cvt->filters[++cvt->filter_index]) {
|
|
|
- cvt->filters[cvt->filter_index] (cvt, format);
|
|
|
- }
|
|
|
-}
|
|
|
-
|
|
|
-static void SDLCALL
|
|
|
-SDL_Upsample_S32LSB_8c(SDL_AudioCVT * cvt, SDL_AudioFormat format)
|
|
|
-{
|
|
|
-#if DEBUG_CONVERT
|
|
|
- fprintf(stderr, "Upsample arbitrary (x%f) AUDIO_S32LSB, 8 channels.\n", cvt->rate_incr);
|
|
|
-#endif
|
|
|
-
|
|
|
- const int srcsize = cvt->len_cvt - 512;
|
|
|
- const int dstsize = (int) (((double)(cvt->len_cvt/32)) * cvt->rate_incr) * 32;
|
|
|
- register int eps = 0;
|
|
|
- Sint32 *dst = ((Sint32 *) (cvt->buf + dstsize)) - 8;
|
|
|
- const Sint32 *src = ((Sint32 *) (cvt->buf + cvt->len_cvt)) - 8;
|
|
|
- const Sint32 *target = ((const Sint32 *) cvt->buf);
|
|
|
- Sint32 sample7 = ((Sint32) SDL_SwapLE32(src[7]));
|
|
|
- Sint32 sample6 = ((Sint32) SDL_SwapLE32(src[6]));
|
|
|
- Sint32 sample5 = ((Sint32) SDL_SwapLE32(src[5]));
|
|
|
- Sint32 sample4 = ((Sint32) SDL_SwapLE32(src[4]));
|
|
|
- Sint32 sample3 = ((Sint32) SDL_SwapLE32(src[3]));
|
|
|
- Sint32 sample2 = ((Sint32) SDL_SwapLE32(src[2]));
|
|
|
- Sint32 sample1 = ((Sint32) SDL_SwapLE32(src[1]));
|
|
|
- Sint32 sample0 = ((Sint32) SDL_SwapLE32(src[0]));
|
|
|
- Sint32 last_sample7 = sample7;
|
|
|
- Sint32 last_sample6 = sample6;
|
|
|
- Sint32 last_sample5 = sample5;
|
|
|
- Sint32 last_sample4 = sample4;
|
|
|
- Sint32 last_sample3 = sample3;
|
|
|
- Sint32 last_sample2 = sample2;
|
|
|
- Sint32 last_sample1 = sample1;
|
|
|
- Sint32 last_sample0 = sample0;
|
|
|
- while (dst >= target) {
|
|
|
- dst[7] = ((Sint32) SDL_SwapLE32(sample7));
|
|
|
- dst[6] = ((Sint32) SDL_SwapLE32(sample6));
|
|
|
- dst[5] = ((Sint32) SDL_SwapLE32(sample5));
|
|
|
- dst[4] = ((Sint32) SDL_SwapLE32(sample4));
|
|
|
- dst[3] = ((Sint32) SDL_SwapLE32(sample3));
|
|
|
- dst[2] = ((Sint32) SDL_SwapLE32(sample2));
|
|
|
- dst[1] = ((Sint32) SDL_SwapLE32(sample1));
|
|
|
- dst[0] = ((Sint32) SDL_SwapLE32(sample0));
|
|
|
- dst -= 8;
|
|
|
- eps += srcsize;
|
|
|
- if ((eps << 1) >= dstsize) {
|
|
|
- src -= 8;
|
|
|
- sample7 = (Sint32) ((((Sint64) ((Sint32) SDL_SwapLE32(src[7]))) + ((Sint64) last_sample7)) >> 1);
|
|
|
- sample6 = (Sint32) ((((Sint64) ((Sint32) SDL_SwapLE32(src[6]))) + ((Sint64) last_sample6)) >> 1);
|
|
|
- sample5 = (Sint32) ((((Sint64) ((Sint32) SDL_SwapLE32(src[5]))) + ((Sint64) last_sample5)) >> 1);
|
|
|
- sample4 = (Sint32) ((((Sint64) ((Sint32) SDL_SwapLE32(src[4]))) + ((Sint64) last_sample4)) >> 1);
|
|
|
- sample3 = (Sint32) ((((Sint64) ((Sint32) SDL_SwapLE32(src[3]))) + ((Sint64) last_sample3)) >> 1);
|
|
|
- sample2 = (Sint32) ((((Sint64) ((Sint32) SDL_SwapLE32(src[2]))) + ((Sint64) last_sample2)) >> 1);
|
|
|
- sample1 = (Sint32) ((((Sint64) ((Sint32) SDL_SwapLE32(src[1]))) + ((Sint64) last_sample1)) >> 1);
|
|
|
- sample0 = (Sint32) ((((Sint64) ((Sint32) SDL_SwapLE32(src[0]))) + ((Sint64) last_sample0)) >> 1);
|
|
|
- last_sample7 = sample7;
|
|
|
- last_sample6 = sample6;
|
|
|
- last_sample5 = sample5;
|
|
|
- last_sample4 = sample4;
|
|
|
- last_sample3 = sample3;
|
|
|
- last_sample2 = sample2;
|
|
|
- last_sample1 = sample1;
|
|
|
- last_sample0 = sample0;
|
|
|
- eps -= dstsize;
|
|
|
- }
|
|
|
- }
|
|
|
- cvt->len_cvt = dstsize;
|
|
|
- if (cvt->filters[++cvt->filter_index]) {
|
|
|
- cvt->filters[cvt->filter_index] (cvt, format);
|
|
|
- }
|
|
|
-}
|
|
|
-
|
|
|
-static void SDLCALL
|
|
|
-SDL_Downsample_S32LSB_8c(SDL_AudioCVT * cvt, SDL_AudioFormat format)
|
|
|
-{
|
|
|
-#if DEBUG_CONVERT
|
|
|
- fprintf(stderr, "Downsample arbitrary (x%f) AUDIO_S32LSB, 8 channels.\n", cvt->rate_incr);
|
|
|
-#endif
|
|
|
-
|
|
|
- const int srcsize = cvt->len_cvt - 512;
|
|
|
- const int dstsize = (int) (((double)(cvt->len_cvt/32)) * cvt->rate_incr) * 32;
|
|
|
- register int eps = 0;
|
|
|
- Sint32 *dst = (Sint32 *) cvt->buf;
|
|
|
- const Sint32 *src = (Sint32 *) cvt->buf;
|
|
|
- const Sint32 *target = (const Sint32 *) (cvt->buf + dstsize);
|
|
|
- Sint32 sample0 = ((Sint32) SDL_SwapLE32(src[0]));
|
|
|
- Sint32 sample1 = ((Sint32) SDL_SwapLE32(src[1]));
|
|
|
- Sint32 sample2 = ((Sint32) SDL_SwapLE32(src[2]));
|
|
|
- Sint32 sample3 = ((Sint32) SDL_SwapLE32(src[3]));
|
|
|
- Sint32 sample4 = ((Sint32) SDL_SwapLE32(src[4]));
|
|
|
- Sint32 sample5 = ((Sint32) SDL_SwapLE32(src[5]));
|
|
|
- Sint32 sample6 = ((Sint32) SDL_SwapLE32(src[6]));
|
|
|
- Sint32 sample7 = ((Sint32) SDL_SwapLE32(src[7]));
|
|
|
- Sint32 last_sample0 = sample0;
|
|
|
- Sint32 last_sample1 = sample1;
|
|
|
- Sint32 last_sample2 = sample2;
|
|
|
- Sint32 last_sample3 = sample3;
|
|
|
- Sint32 last_sample4 = sample4;
|
|
|
- Sint32 last_sample5 = sample5;
|
|
|
- Sint32 last_sample6 = sample6;
|
|
|
- Sint32 last_sample7 = sample7;
|
|
|
- while (dst < target) {
|
|
|
- src += 8;
|
|
|
- eps += dstsize;
|
|
|
- if ((eps << 1) >= srcsize) {
|
|
|
- dst[0] = ((Sint32) SDL_SwapLE32(sample0));
|
|
|
- dst[1] = ((Sint32) SDL_SwapLE32(sample1));
|
|
|
- dst[2] = ((Sint32) SDL_SwapLE32(sample2));
|
|
|
- dst[3] = ((Sint32) SDL_SwapLE32(sample3));
|
|
|
- dst[4] = ((Sint32) SDL_SwapLE32(sample4));
|
|
|
- dst[5] = ((Sint32) SDL_SwapLE32(sample5));
|
|
|
- dst[6] = ((Sint32) SDL_SwapLE32(sample6));
|
|
|
- dst[7] = ((Sint32) SDL_SwapLE32(sample7));
|
|
|
- dst += 8;
|
|
|
- sample0 = (Sint32) ((((Sint64) ((Sint32) SDL_SwapLE32(src[0]))) + ((Sint64) last_sample0)) >> 1);
|
|
|
- sample1 = (Sint32) ((((Sint64) ((Sint32) SDL_SwapLE32(src[1]))) + ((Sint64) last_sample1)) >> 1);
|
|
|
- sample2 = (Sint32) ((((Sint64) ((Sint32) SDL_SwapLE32(src[2]))) + ((Sint64) last_sample2)) >> 1);
|
|
|
- sample3 = (Sint32) ((((Sint64) ((Sint32) SDL_SwapLE32(src[3]))) + ((Sint64) last_sample3)) >> 1);
|
|
|
- sample4 = (Sint32) ((((Sint64) ((Sint32) SDL_SwapLE32(src[4]))) + ((Sint64) last_sample4)) >> 1);
|
|
|
- sample5 = (Sint32) ((((Sint64) ((Sint32) SDL_SwapLE32(src[5]))) + ((Sint64) last_sample5)) >> 1);
|
|
|
- sample6 = (Sint32) ((((Sint64) ((Sint32) SDL_SwapLE32(src[6]))) + ((Sint64) last_sample6)) >> 1);
|
|
|
- sample7 = (Sint32) ((((Sint64) ((Sint32) SDL_SwapLE32(src[7]))) + ((Sint64) last_sample7)) >> 1);
|
|
|
- last_sample0 = sample0;
|
|
|
- last_sample1 = sample1;
|
|
|
- last_sample2 = sample2;
|
|
|
- last_sample3 = sample3;
|
|
|
- last_sample4 = sample4;
|
|
|
- last_sample5 = sample5;
|
|
|
- last_sample6 = sample6;
|
|
|
- last_sample7 = sample7;
|
|
|
- eps -= srcsize;
|
|
|
- }
|
|
|
- }
|
|
|
- cvt->len_cvt = dstsize;
|
|
|
- if (cvt->filters[++cvt->filter_index]) {
|
|
|
- cvt->filters[cvt->filter_index] (cvt, format);
|
|
|
- }
|
|
|
-}
|
|
|
-
|
|
|
-static void SDLCALL
|
|
|
-SDL_Upsample_S32MSB_1c(SDL_AudioCVT * cvt, SDL_AudioFormat format)
|
|
|
-{
|
|
|
-#if DEBUG_CONVERT
|
|
|
- fprintf(stderr, "Upsample arbitrary (x%f) AUDIO_S32MSB, 1 channels.\n", cvt->rate_incr);
|
|
|
-#endif
|
|
|
-
|
|
|
- const int srcsize = cvt->len_cvt - 64;
|
|
|
- const int dstsize = (int) (((double)(cvt->len_cvt/4)) * cvt->rate_incr) * 4;
|
|
|
- register int eps = 0;
|
|
|
- Sint32 *dst = ((Sint32 *) (cvt->buf + dstsize)) - 1;
|
|
|
- const Sint32 *src = ((Sint32 *) (cvt->buf + cvt->len_cvt)) - 1;
|
|
|
- const Sint32 *target = ((const Sint32 *) cvt->buf);
|
|
|
- Sint32 sample0 = ((Sint32) SDL_SwapBE32(src[0]));
|
|
|
- Sint32 last_sample0 = sample0;
|
|
|
- while (dst >= target) {
|
|
|
- dst[0] = ((Sint32) SDL_SwapBE32(sample0));
|
|
|
- dst--;
|
|
|
- eps += srcsize;
|
|
|
- if ((eps << 1) >= dstsize) {
|
|
|
- src--;
|
|
|
- sample0 = (Sint32) ((((Sint64) ((Sint32) SDL_SwapBE32(src[0]))) + ((Sint64) last_sample0)) >> 1);
|
|
|
- last_sample0 = sample0;
|
|
|
- eps -= dstsize;
|
|
|
- }
|
|
|
- }
|
|
|
- cvt->len_cvt = dstsize;
|
|
|
- if (cvt->filters[++cvt->filter_index]) {
|
|
|
- cvt->filters[cvt->filter_index] (cvt, format);
|
|
|
- }
|
|
|
-}
|
|
|
-
|
|
|
-static void SDLCALL
|
|
|
-SDL_Downsample_S32MSB_1c(SDL_AudioCVT * cvt, SDL_AudioFormat format)
|
|
|
-{
|
|
|
-#if DEBUG_CONVERT
|
|
|
- fprintf(stderr, "Downsample arbitrary (x%f) AUDIO_S32MSB, 1 channels.\n", cvt->rate_incr);
|
|
|
-#endif
|
|
|
-
|
|
|
- const int srcsize = cvt->len_cvt - 64;
|
|
|
- const int dstsize = (int) (((double)(cvt->len_cvt/4)) * cvt->rate_incr) * 4;
|
|
|
- register int eps = 0;
|
|
|
- Sint32 *dst = (Sint32 *) cvt->buf;
|
|
|
- const Sint32 *src = (Sint32 *) cvt->buf;
|
|
|
- const Sint32 *target = (const Sint32 *) (cvt->buf + dstsize);
|
|
|
- Sint32 sample0 = ((Sint32) SDL_SwapBE32(src[0]));
|
|
|
- Sint32 last_sample0 = sample0;
|
|
|
- while (dst < target) {
|
|
|
- src++;
|
|
|
- eps += dstsize;
|
|
|
- if ((eps << 1) >= srcsize) {
|
|
|
- dst[0] = ((Sint32) SDL_SwapBE32(sample0));
|
|
|
- dst++;
|
|
|
- sample0 = (Sint32) ((((Sint64) ((Sint32) SDL_SwapBE32(src[0]))) + ((Sint64) last_sample0)) >> 1);
|
|
|
- last_sample0 = sample0;
|
|
|
- eps -= srcsize;
|
|
|
- }
|
|
|
- }
|
|
|
- cvt->len_cvt = dstsize;
|
|
|
- if (cvt->filters[++cvt->filter_index]) {
|
|
|
- cvt->filters[cvt->filter_index] (cvt, format);
|
|
|
- }
|
|
|
-}
|
|
|
-
|
|
|
-static void SDLCALL
|
|
|
-SDL_Upsample_S32MSB_2c(SDL_AudioCVT * cvt, SDL_AudioFormat format)
|
|
|
-{
|
|
|
-#if DEBUG_CONVERT
|
|
|
- fprintf(stderr, "Upsample arbitrary (x%f) AUDIO_S32MSB, 2 channels.\n", cvt->rate_incr);
|
|
|
-#endif
|
|
|
-
|
|
|
- const int srcsize = cvt->len_cvt - 128;
|
|
|
- const int dstsize = (int) (((double)(cvt->len_cvt/8)) * cvt->rate_incr) * 8;
|
|
|
- register int eps = 0;
|
|
|
- Sint32 *dst = ((Sint32 *) (cvt->buf + dstsize)) - 2;
|
|
|
- const Sint32 *src = ((Sint32 *) (cvt->buf + cvt->len_cvt)) - 2;
|
|
|
- const Sint32 *target = ((const Sint32 *) cvt->buf);
|
|
|
- Sint32 sample1 = ((Sint32) SDL_SwapBE32(src[1]));
|
|
|
- Sint32 sample0 = ((Sint32) SDL_SwapBE32(src[0]));
|
|
|
- Sint32 last_sample1 = sample1;
|
|
|
- Sint32 last_sample0 = sample0;
|
|
|
- while (dst >= target) {
|
|
|
- dst[1] = ((Sint32) SDL_SwapBE32(sample1));
|
|
|
- dst[0] = ((Sint32) SDL_SwapBE32(sample0));
|
|
|
- dst -= 2;
|
|
|
- eps += srcsize;
|
|
|
- if ((eps << 1) >= dstsize) {
|
|
|
- src -= 2;
|
|
|
- sample1 = (Sint32) ((((Sint64) ((Sint32) SDL_SwapBE32(src[1]))) + ((Sint64) last_sample1)) >> 1);
|
|
|
- sample0 = (Sint32) ((((Sint64) ((Sint32) SDL_SwapBE32(src[0]))) + ((Sint64) last_sample0)) >> 1);
|
|
|
- last_sample1 = sample1;
|
|
|
- last_sample0 = sample0;
|
|
|
- eps -= dstsize;
|
|
|
- }
|
|
|
- }
|
|
|
- cvt->len_cvt = dstsize;
|
|
|
- if (cvt->filters[++cvt->filter_index]) {
|
|
|
- cvt->filters[cvt->filter_index] (cvt, format);
|
|
|
- }
|
|
|
-}
|
|
|
-
|
|
|
-static void SDLCALL
|
|
|
-SDL_Downsample_S32MSB_2c(SDL_AudioCVT * cvt, SDL_AudioFormat format)
|
|
|
-{
|
|
|
-#if DEBUG_CONVERT
|
|
|
- fprintf(stderr, "Downsample arbitrary (x%f) AUDIO_S32MSB, 2 channels.\n", cvt->rate_incr);
|
|
|
-#endif
|
|
|
-
|
|
|
- const int srcsize = cvt->len_cvt - 128;
|
|
|
- const int dstsize = (int) (((double)(cvt->len_cvt/8)) * cvt->rate_incr) * 8;
|
|
|
- register int eps = 0;
|
|
|
- Sint32 *dst = (Sint32 *) cvt->buf;
|
|
|
- const Sint32 *src = (Sint32 *) cvt->buf;
|
|
|
- const Sint32 *target = (const Sint32 *) (cvt->buf + dstsize);
|
|
|
- Sint32 sample0 = ((Sint32) SDL_SwapBE32(src[0]));
|
|
|
- Sint32 sample1 = ((Sint32) SDL_SwapBE32(src[1]));
|
|
|
- Sint32 last_sample0 = sample0;
|
|
|
- Sint32 last_sample1 = sample1;
|
|
|
- while (dst < target) {
|
|
|
- src += 2;
|
|
|
- eps += dstsize;
|
|
|
- if ((eps << 1) >= srcsize) {
|
|
|
- dst[0] = ((Sint32) SDL_SwapBE32(sample0));
|
|
|
- dst[1] = ((Sint32) SDL_SwapBE32(sample1));
|
|
|
- dst += 2;
|
|
|
- sample0 = (Sint32) ((((Sint64) ((Sint32) SDL_SwapBE32(src[0]))) + ((Sint64) last_sample0)) >> 1);
|
|
|
- sample1 = (Sint32) ((((Sint64) ((Sint32) SDL_SwapBE32(src[1]))) + ((Sint64) last_sample1)) >> 1);
|
|
|
- last_sample0 = sample0;
|
|
|
- last_sample1 = sample1;
|
|
|
- eps -= srcsize;
|
|
|
- }
|
|
|
- }
|
|
|
- cvt->len_cvt = dstsize;
|
|
|
- if (cvt->filters[++cvt->filter_index]) {
|
|
|
- cvt->filters[cvt->filter_index] (cvt, format);
|
|
|
- }
|
|
|
-}
|
|
|
-
|
|
|
-static void SDLCALL
|
|
|
-SDL_Upsample_S32MSB_4c(SDL_AudioCVT * cvt, SDL_AudioFormat format)
|
|
|
-{
|
|
|
-#if DEBUG_CONVERT
|
|
|
- fprintf(stderr, "Upsample arbitrary (x%f) AUDIO_S32MSB, 4 channels.\n", cvt->rate_incr);
|
|
|
-#endif
|
|
|
-
|
|
|
- const int srcsize = cvt->len_cvt - 256;
|
|
|
- const int dstsize = (int) (((double)(cvt->len_cvt/16)) * cvt->rate_incr) * 16;
|
|
|
- register int eps = 0;
|
|
|
- Sint32 *dst = ((Sint32 *) (cvt->buf + dstsize)) - 4;
|
|
|
- const Sint32 *src = ((Sint32 *) (cvt->buf + cvt->len_cvt)) - 4;
|
|
|
- const Sint32 *target = ((const Sint32 *) cvt->buf);
|
|
|
- Sint32 sample3 = ((Sint32) SDL_SwapBE32(src[3]));
|
|
|
- Sint32 sample2 = ((Sint32) SDL_SwapBE32(src[2]));
|
|
|
- Sint32 sample1 = ((Sint32) SDL_SwapBE32(src[1]));
|
|
|
- Sint32 sample0 = ((Sint32) SDL_SwapBE32(src[0]));
|
|
|
- Sint32 last_sample3 = sample3;
|
|
|
- Sint32 last_sample2 = sample2;
|
|
|
- Sint32 last_sample1 = sample1;
|
|
|
- Sint32 last_sample0 = sample0;
|
|
|
- while (dst >= target) {
|
|
|
- dst[3] = ((Sint32) SDL_SwapBE32(sample3));
|
|
|
- dst[2] = ((Sint32) SDL_SwapBE32(sample2));
|
|
|
- dst[1] = ((Sint32) SDL_SwapBE32(sample1));
|
|
|
- dst[0] = ((Sint32) SDL_SwapBE32(sample0));
|
|
|
- dst -= 4;
|
|
|
- eps += srcsize;
|
|
|
- if ((eps << 1) >= dstsize) {
|
|
|
- src -= 4;
|
|
|
- sample3 = (Sint32) ((((Sint64) ((Sint32) SDL_SwapBE32(src[3]))) + ((Sint64) last_sample3)) >> 1);
|
|
|
- sample2 = (Sint32) ((((Sint64) ((Sint32) SDL_SwapBE32(src[2]))) + ((Sint64) last_sample2)) >> 1);
|
|
|
- sample1 = (Sint32) ((((Sint64) ((Sint32) SDL_SwapBE32(src[1]))) + ((Sint64) last_sample1)) >> 1);
|
|
|
- sample0 = (Sint32) ((((Sint64) ((Sint32) SDL_SwapBE32(src[0]))) + ((Sint64) last_sample0)) >> 1);
|
|
|
- last_sample3 = sample3;
|
|
|
- last_sample2 = sample2;
|
|
|
- last_sample1 = sample1;
|
|
|
- last_sample0 = sample0;
|
|
|
- eps -= dstsize;
|
|
|
- }
|
|
|
- }
|
|
|
- cvt->len_cvt = dstsize;
|
|
|
- if (cvt->filters[++cvt->filter_index]) {
|
|
|
- cvt->filters[cvt->filter_index] (cvt, format);
|
|
|
- }
|
|
|
-}
|
|
|
-
|
|
|
-static void SDLCALL
|
|
|
-SDL_Downsample_S32MSB_4c(SDL_AudioCVT * cvt, SDL_AudioFormat format)
|
|
|
-{
|
|
|
-#if DEBUG_CONVERT
|
|
|
- fprintf(stderr, "Downsample arbitrary (x%f) AUDIO_S32MSB, 4 channels.\n", cvt->rate_incr);
|
|
|
-#endif
|
|
|
-
|
|
|
- const int srcsize = cvt->len_cvt - 256;
|
|
|
- const int dstsize = (int) (((double)(cvt->len_cvt/16)) * cvt->rate_incr) * 16;
|
|
|
- register int eps = 0;
|
|
|
- Sint32 *dst = (Sint32 *) cvt->buf;
|
|
|
- const Sint32 *src = (Sint32 *) cvt->buf;
|
|
|
- const Sint32 *target = (const Sint32 *) (cvt->buf + dstsize);
|
|
|
- Sint32 sample0 = ((Sint32) SDL_SwapBE32(src[0]));
|
|
|
- Sint32 sample1 = ((Sint32) SDL_SwapBE32(src[1]));
|
|
|
- Sint32 sample2 = ((Sint32) SDL_SwapBE32(src[2]));
|
|
|
- Sint32 sample3 = ((Sint32) SDL_SwapBE32(src[3]));
|
|
|
- Sint32 last_sample0 = sample0;
|
|
|
- Sint32 last_sample1 = sample1;
|
|
|
- Sint32 last_sample2 = sample2;
|
|
|
- Sint32 last_sample3 = sample3;
|
|
|
- while (dst < target) {
|
|
|
- src += 4;
|
|
|
- eps += dstsize;
|
|
|
- if ((eps << 1) >= srcsize) {
|
|
|
- dst[0] = ((Sint32) SDL_SwapBE32(sample0));
|
|
|
- dst[1] = ((Sint32) SDL_SwapBE32(sample1));
|
|
|
- dst[2] = ((Sint32) SDL_SwapBE32(sample2));
|
|
|
- dst[3] = ((Sint32) SDL_SwapBE32(sample3));
|
|
|
- dst += 4;
|
|
|
- sample0 = (Sint32) ((((Sint64) ((Sint32) SDL_SwapBE32(src[0]))) + ((Sint64) last_sample0)) >> 1);
|
|
|
- sample1 = (Sint32) ((((Sint64) ((Sint32) SDL_SwapBE32(src[1]))) + ((Sint64) last_sample1)) >> 1);
|
|
|
- sample2 = (Sint32) ((((Sint64) ((Sint32) SDL_SwapBE32(src[2]))) + ((Sint64) last_sample2)) >> 1);
|
|
|
- sample3 = (Sint32) ((((Sint64) ((Sint32) SDL_SwapBE32(src[3]))) + ((Sint64) last_sample3)) >> 1);
|
|
|
- last_sample0 = sample0;
|
|
|
- last_sample1 = sample1;
|
|
|
- last_sample2 = sample2;
|
|
|
- last_sample3 = sample3;
|
|
|
- eps -= srcsize;
|
|
|
- }
|
|
|
- }
|
|
|
- cvt->len_cvt = dstsize;
|
|
|
- if (cvt->filters[++cvt->filter_index]) {
|
|
|
- cvt->filters[cvt->filter_index] (cvt, format);
|
|
|
- }
|
|
|
-}
|
|
|
-
|
|
|
-static void SDLCALL
|
|
|
-SDL_Upsample_S32MSB_6c(SDL_AudioCVT * cvt, SDL_AudioFormat format)
|
|
|
-{
|
|
|
-#if DEBUG_CONVERT
|
|
|
- fprintf(stderr, "Upsample arbitrary (x%f) AUDIO_S32MSB, 6 channels.\n", cvt->rate_incr);
|
|
|
-#endif
|
|
|
-
|
|
|
- const int srcsize = cvt->len_cvt - 384;
|
|
|
- const int dstsize = (int) (((double)(cvt->len_cvt/24)) * cvt->rate_incr) * 24;
|
|
|
- register int eps = 0;
|
|
|
- Sint32 *dst = ((Sint32 *) (cvt->buf + dstsize)) - 6;
|
|
|
- const Sint32 *src = ((Sint32 *) (cvt->buf + cvt->len_cvt)) - 6;
|
|
|
- const Sint32 *target = ((const Sint32 *) cvt->buf);
|
|
|
- Sint32 sample5 = ((Sint32) SDL_SwapBE32(src[5]));
|
|
|
- Sint32 sample4 = ((Sint32) SDL_SwapBE32(src[4]));
|
|
|
- Sint32 sample3 = ((Sint32) SDL_SwapBE32(src[3]));
|
|
|
- Sint32 sample2 = ((Sint32) SDL_SwapBE32(src[2]));
|
|
|
- Sint32 sample1 = ((Sint32) SDL_SwapBE32(src[1]));
|
|
|
- Sint32 sample0 = ((Sint32) SDL_SwapBE32(src[0]));
|
|
|
- Sint32 last_sample5 = sample5;
|
|
|
- Sint32 last_sample4 = sample4;
|
|
|
- Sint32 last_sample3 = sample3;
|
|
|
- Sint32 last_sample2 = sample2;
|
|
|
- Sint32 last_sample1 = sample1;
|
|
|
- Sint32 last_sample0 = sample0;
|
|
|
- while (dst >= target) {
|
|
|
- dst[5] = ((Sint32) SDL_SwapBE32(sample5));
|
|
|
- dst[4] = ((Sint32) SDL_SwapBE32(sample4));
|
|
|
- dst[3] = ((Sint32) SDL_SwapBE32(sample3));
|
|
|
- dst[2] = ((Sint32) SDL_SwapBE32(sample2));
|
|
|
- dst[1] = ((Sint32) SDL_SwapBE32(sample1));
|
|
|
- dst[0] = ((Sint32) SDL_SwapBE32(sample0));
|
|
|
- dst -= 6;
|
|
|
- eps += srcsize;
|
|
|
- if ((eps << 1) >= dstsize) {
|
|
|
- src -= 6;
|
|
|
- sample5 = (Sint32) ((((Sint64) ((Sint32) SDL_SwapBE32(src[5]))) + ((Sint64) last_sample5)) >> 1);
|
|
|
- sample4 = (Sint32) ((((Sint64) ((Sint32) SDL_SwapBE32(src[4]))) + ((Sint64) last_sample4)) >> 1);
|
|
|
- sample3 = (Sint32) ((((Sint64) ((Sint32) SDL_SwapBE32(src[3]))) + ((Sint64) last_sample3)) >> 1);
|
|
|
- sample2 = (Sint32) ((((Sint64) ((Sint32) SDL_SwapBE32(src[2]))) + ((Sint64) last_sample2)) >> 1);
|
|
|
- sample1 = (Sint32) ((((Sint64) ((Sint32) SDL_SwapBE32(src[1]))) + ((Sint64) last_sample1)) >> 1);
|
|
|
- sample0 = (Sint32) ((((Sint64) ((Sint32) SDL_SwapBE32(src[0]))) + ((Sint64) last_sample0)) >> 1);
|
|
|
- last_sample5 = sample5;
|
|
|
- last_sample4 = sample4;
|
|
|
- last_sample3 = sample3;
|
|
|
- last_sample2 = sample2;
|
|
|
- last_sample1 = sample1;
|
|
|
- last_sample0 = sample0;
|
|
|
- eps -= dstsize;
|
|
|
- }
|
|
|
- }
|
|
|
- cvt->len_cvt = dstsize;
|
|
|
- if (cvt->filters[++cvt->filter_index]) {
|
|
|
- cvt->filters[cvt->filter_index] (cvt, format);
|
|
|
- }
|
|
|
-}
|
|
|
-
|
|
|
-static void SDLCALL
|
|
|
-SDL_Downsample_S32MSB_6c(SDL_AudioCVT * cvt, SDL_AudioFormat format)
|
|
|
-{
|
|
|
-#if DEBUG_CONVERT
|
|
|
- fprintf(stderr, "Downsample arbitrary (x%f) AUDIO_S32MSB, 6 channels.\n", cvt->rate_incr);
|
|
|
-#endif
|
|
|
-
|
|
|
- const int srcsize = cvt->len_cvt - 384;
|
|
|
- const int dstsize = (int) (((double)(cvt->len_cvt/24)) * cvt->rate_incr) * 24;
|
|
|
- register int eps = 0;
|
|
|
- Sint32 *dst = (Sint32 *) cvt->buf;
|
|
|
- const Sint32 *src = (Sint32 *) cvt->buf;
|
|
|
- const Sint32 *target = (const Sint32 *) (cvt->buf + dstsize);
|
|
|
- Sint32 sample0 = ((Sint32) SDL_SwapBE32(src[0]));
|
|
|
- Sint32 sample1 = ((Sint32) SDL_SwapBE32(src[1]));
|
|
|
- Sint32 sample2 = ((Sint32) SDL_SwapBE32(src[2]));
|
|
|
- Sint32 sample3 = ((Sint32) SDL_SwapBE32(src[3]));
|
|
|
- Sint32 sample4 = ((Sint32) SDL_SwapBE32(src[4]));
|
|
|
- Sint32 sample5 = ((Sint32) SDL_SwapBE32(src[5]));
|
|
|
- Sint32 last_sample0 = sample0;
|
|
|
- Sint32 last_sample1 = sample1;
|
|
|
- Sint32 last_sample2 = sample2;
|
|
|
- Sint32 last_sample3 = sample3;
|
|
|
- Sint32 last_sample4 = sample4;
|
|
|
- Sint32 last_sample5 = sample5;
|
|
|
- while (dst < target) {
|
|
|
- src += 6;
|
|
|
- eps += dstsize;
|
|
|
- if ((eps << 1) >= srcsize) {
|
|
|
- dst[0] = ((Sint32) SDL_SwapBE32(sample0));
|
|
|
- dst[1] = ((Sint32) SDL_SwapBE32(sample1));
|
|
|
- dst[2] = ((Sint32) SDL_SwapBE32(sample2));
|
|
|
- dst[3] = ((Sint32) SDL_SwapBE32(sample3));
|
|
|
- dst[4] = ((Sint32) SDL_SwapBE32(sample4));
|
|
|
- dst[5] = ((Sint32) SDL_SwapBE32(sample5));
|
|
|
- dst += 6;
|
|
|
- sample0 = (Sint32) ((((Sint64) ((Sint32) SDL_SwapBE32(src[0]))) + ((Sint64) last_sample0)) >> 1);
|
|
|
- sample1 = (Sint32) ((((Sint64) ((Sint32) SDL_SwapBE32(src[1]))) + ((Sint64) last_sample1)) >> 1);
|
|
|
- sample2 = (Sint32) ((((Sint64) ((Sint32) SDL_SwapBE32(src[2]))) + ((Sint64) last_sample2)) >> 1);
|
|
|
- sample3 = (Sint32) ((((Sint64) ((Sint32) SDL_SwapBE32(src[3]))) + ((Sint64) last_sample3)) >> 1);
|
|
|
- sample4 = (Sint32) ((((Sint64) ((Sint32) SDL_SwapBE32(src[4]))) + ((Sint64) last_sample4)) >> 1);
|
|
|
- sample5 = (Sint32) ((((Sint64) ((Sint32) SDL_SwapBE32(src[5]))) + ((Sint64) last_sample5)) >> 1);
|
|
|
- last_sample0 = sample0;
|
|
|
- last_sample1 = sample1;
|
|
|
- last_sample2 = sample2;
|
|
|
- last_sample3 = sample3;
|
|
|
- last_sample4 = sample4;
|
|
|
- last_sample5 = sample5;
|
|
|
- eps -= srcsize;
|
|
|
- }
|
|
|
- }
|
|
|
- cvt->len_cvt = dstsize;
|
|
|
- if (cvt->filters[++cvt->filter_index]) {
|
|
|
- cvt->filters[cvt->filter_index] (cvt, format);
|
|
|
- }
|
|
|
-}
|
|
|
-
|
|
|
-static void SDLCALL
|
|
|
-SDL_Upsample_S32MSB_8c(SDL_AudioCVT * cvt, SDL_AudioFormat format)
|
|
|
-{
|
|
|
-#if DEBUG_CONVERT
|
|
|
- fprintf(stderr, "Upsample arbitrary (x%f) AUDIO_S32MSB, 8 channels.\n", cvt->rate_incr);
|
|
|
-#endif
|
|
|
-
|
|
|
- const int srcsize = cvt->len_cvt - 512;
|
|
|
- const int dstsize = (int) (((double)(cvt->len_cvt/32)) * cvt->rate_incr) * 32;
|
|
|
- register int eps = 0;
|
|
|
- Sint32 *dst = ((Sint32 *) (cvt->buf + dstsize)) - 8;
|
|
|
- const Sint32 *src = ((Sint32 *) (cvt->buf + cvt->len_cvt)) - 8;
|
|
|
- const Sint32 *target = ((const Sint32 *) cvt->buf);
|
|
|
- Sint32 sample7 = ((Sint32) SDL_SwapBE32(src[7]));
|
|
|
- Sint32 sample6 = ((Sint32) SDL_SwapBE32(src[6]));
|
|
|
- Sint32 sample5 = ((Sint32) SDL_SwapBE32(src[5]));
|
|
|
- Sint32 sample4 = ((Sint32) SDL_SwapBE32(src[4]));
|
|
|
- Sint32 sample3 = ((Sint32) SDL_SwapBE32(src[3]));
|
|
|
- Sint32 sample2 = ((Sint32) SDL_SwapBE32(src[2]));
|
|
|
- Sint32 sample1 = ((Sint32) SDL_SwapBE32(src[1]));
|
|
|
- Sint32 sample0 = ((Sint32) SDL_SwapBE32(src[0]));
|
|
|
- Sint32 last_sample7 = sample7;
|
|
|
- Sint32 last_sample6 = sample6;
|
|
|
- Sint32 last_sample5 = sample5;
|
|
|
- Sint32 last_sample4 = sample4;
|
|
|
- Sint32 last_sample3 = sample3;
|
|
|
- Sint32 last_sample2 = sample2;
|
|
|
- Sint32 last_sample1 = sample1;
|
|
|
- Sint32 last_sample0 = sample0;
|
|
|
- while (dst >= target) {
|
|
|
- dst[7] = ((Sint32) SDL_SwapBE32(sample7));
|
|
|
- dst[6] = ((Sint32) SDL_SwapBE32(sample6));
|
|
|
- dst[5] = ((Sint32) SDL_SwapBE32(sample5));
|
|
|
- dst[4] = ((Sint32) SDL_SwapBE32(sample4));
|
|
|
- dst[3] = ((Sint32) SDL_SwapBE32(sample3));
|
|
|
- dst[2] = ((Sint32) SDL_SwapBE32(sample2));
|
|
|
- dst[1] = ((Sint32) SDL_SwapBE32(sample1));
|
|
|
- dst[0] = ((Sint32) SDL_SwapBE32(sample0));
|
|
|
- dst -= 8;
|
|
|
- eps += srcsize;
|
|
|
- if ((eps << 1) >= dstsize) {
|
|
|
- src -= 8;
|
|
|
- sample7 = (Sint32) ((((Sint64) ((Sint32) SDL_SwapBE32(src[7]))) + ((Sint64) last_sample7)) >> 1);
|
|
|
- sample6 = (Sint32) ((((Sint64) ((Sint32) SDL_SwapBE32(src[6]))) + ((Sint64) last_sample6)) >> 1);
|
|
|
- sample5 = (Sint32) ((((Sint64) ((Sint32) SDL_SwapBE32(src[5]))) + ((Sint64) last_sample5)) >> 1);
|
|
|
- sample4 = (Sint32) ((((Sint64) ((Sint32) SDL_SwapBE32(src[4]))) + ((Sint64) last_sample4)) >> 1);
|
|
|
- sample3 = (Sint32) ((((Sint64) ((Sint32) SDL_SwapBE32(src[3]))) + ((Sint64) last_sample3)) >> 1);
|
|
|
- sample2 = (Sint32) ((((Sint64) ((Sint32) SDL_SwapBE32(src[2]))) + ((Sint64) last_sample2)) >> 1);
|
|
|
- sample1 = (Sint32) ((((Sint64) ((Sint32) SDL_SwapBE32(src[1]))) + ((Sint64) last_sample1)) >> 1);
|
|
|
- sample0 = (Sint32) ((((Sint64) ((Sint32) SDL_SwapBE32(src[0]))) + ((Sint64) last_sample0)) >> 1);
|
|
|
- last_sample7 = sample7;
|
|
|
- last_sample6 = sample6;
|
|
|
- last_sample5 = sample5;
|
|
|
- last_sample4 = sample4;
|
|
|
- last_sample3 = sample3;
|
|
|
- last_sample2 = sample2;
|
|
|
- last_sample1 = sample1;
|
|
|
- last_sample0 = sample0;
|
|
|
- eps -= dstsize;
|
|
|
- }
|
|
|
- }
|
|
|
- cvt->len_cvt = dstsize;
|
|
|
- if (cvt->filters[++cvt->filter_index]) {
|
|
|
- cvt->filters[cvt->filter_index] (cvt, format);
|
|
|
- }
|
|
|
-}
|
|
|
-
|
|
|
-static void SDLCALL
|
|
|
-SDL_Downsample_S32MSB_8c(SDL_AudioCVT * cvt, SDL_AudioFormat format)
|
|
|
-{
|
|
|
-#if DEBUG_CONVERT
|
|
|
- fprintf(stderr, "Downsample arbitrary (x%f) AUDIO_S32MSB, 8 channels.\n", cvt->rate_incr);
|
|
|
-#endif
|
|
|
-
|
|
|
- const int srcsize = cvt->len_cvt - 512;
|
|
|
- const int dstsize = (int) (((double)(cvt->len_cvt/32)) * cvt->rate_incr) * 32;
|
|
|
- register int eps = 0;
|
|
|
- Sint32 *dst = (Sint32 *) cvt->buf;
|
|
|
- const Sint32 *src = (Sint32 *) cvt->buf;
|
|
|
- const Sint32 *target = (const Sint32 *) (cvt->buf + dstsize);
|
|
|
- Sint32 sample0 = ((Sint32) SDL_SwapBE32(src[0]));
|
|
|
- Sint32 sample1 = ((Sint32) SDL_SwapBE32(src[1]));
|
|
|
- Sint32 sample2 = ((Sint32) SDL_SwapBE32(src[2]));
|
|
|
- Sint32 sample3 = ((Sint32) SDL_SwapBE32(src[3]));
|
|
|
- Sint32 sample4 = ((Sint32) SDL_SwapBE32(src[4]));
|
|
|
- Sint32 sample5 = ((Sint32) SDL_SwapBE32(src[5]));
|
|
|
- Sint32 sample6 = ((Sint32) SDL_SwapBE32(src[6]));
|
|
|
- Sint32 sample7 = ((Sint32) SDL_SwapBE32(src[7]));
|
|
|
- Sint32 last_sample0 = sample0;
|
|
|
- Sint32 last_sample1 = sample1;
|
|
|
- Sint32 last_sample2 = sample2;
|
|
|
- Sint32 last_sample3 = sample3;
|
|
|
- Sint32 last_sample4 = sample4;
|
|
|
- Sint32 last_sample5 = sample5;
|
|
|
- Sint32 last_sample6 = sample6;
|
|
|
- Sint32 last_sample7 = sample7;
|
|
|
- while (dst < target) {
|
|
|
- src += 8;
|
|
|
- eps += dstsize;
|
|
|
- if ((eps << 1) >= srcsize) {
|
|
|
- dst[0] = ((Sint32) SDL_SwapBE32(sample0));
|
|
|
- dst[1] = ((Sint32) SDL_SwapBE32(sample1));
|
|
|
- dst[2] = ((Sint32) SDL_SwapBE32(sample2));
|
|
|
- dst[3] = ((Sint32) SDL_SwapBE32(sample3));
|
|
|
- dst[4] = ((Sint32) SDL_SwapBE32(sample4));
|
|
|
- dst[5] = ((Sint32) SDL_SwapBE32(sample5));
|
|
|
- dst[6] = ((Sint32) SDL_SwapBE32(sample6));
|
|
|
- dst[7] = ((Sint32) SDL_SwapBE32(sample7));
|
|
|
- dst += 8;
|
|
|
- sample0 = (Sint32) ((((Sint64) ((Sint32) SDL_SwapBE32(src[0]))) + ((Sint64) last_sample0)) >> 1);
|
|
|
- sample1 = (Sint32) ((((Sint64) ((Sint32) SDL_SwapBE32(src[1]))) + ((Sint64) last_sample1)) >> 1);
|
|
|
- sample2 = (Sint32) ((((Sint64) ((Sint32) SDL_SwapBE32(src[2]))) + ((Sint64) last_sample2)) >> 1);
|
|
|
- sample3 = (Sint32) ((((Sint64) ((Sint32) SDL_SwapBE32(src[3]))) + ((Sint64) last_sample3)) >> 1);
|
|
|
- sample4 = (Sint32) ((((Sint64) ((Sint32) SDL_SwapBE32(src[4]))) + ((Sint64) last_sample4)) >> 1);
|
|
|
- sample5 = (Sint32) ((((Sint64) ((Sint32) SDL_SwapBE32(src[5]))) + ((Sint64) last_sample5)) >> 1);
|
|
|
- sample6 = (Sint32) ((((Sint64) ((Sint32) SDL_SwapBE32(src[6]))) + ((Sint64) last_sample6)) >> 1);
|
|
|
- sample7 = (Sint32) ((((Sint64) ((Sint32) SDL_SwapBE32(src[7]))) + ((Sint64) last_sample7)) >> 1);
|
|
|
- last_sample0 = sample0;
|
|
|
- last_sample1 = sample1;
|
|
|
- last_sample2 = sample2;
|
|
|
- last_sample3 = sample3;
|
|
|
- last_sample4 = sample4;
|
|
|
- last_sample5 = sample5;
|
|
|
- last_sample6 = sample6;
|
|
|
- last_sample7 = sample7;
|
|
|
- eps -= srcsize;
|
|
|
- }
|
|
|
- }
|
|
|
- cvt->len_cvt = dstsize;
|
|
|
- if (cvt->filters[++cvt->filter_index]) {
|
|
|
- cvt->filters[cvt->filter_index] (cvt, format);
|
|
|
- }
|
|
|
-}
|
|
|
-
|
|
|
-static void SDLCALL
|
|
|
-SDL_Upsample_F32LSB_1c(SDL_AudioCVT * cvt, SDL_AudioFormat format)
|
|
|
-{
|
|
|
-#if DEBUG_CONVERT
|
|
|
- fprintf(stderr, "Upsample arbitrary (x%f) AUDIO_F32LSB, 1 channels.\n", cvt->rate_incr);
|
|
|
-#endif
|
|
|
-
|
|
|
- const int srcsize = cvt->len_cvt - 64;
|
|
|
- const int dstsize = (int) (((double)(cvt->len_cvt/4)) * cvt->rate_incr) * 4;
|
|
|
- register int eps = 0;
|
|
|
- float *dst = ((float *) (cvt->buf + dstsize)) - 1;
|
|
|
- const float *src = ((float *) (cvt->buf + cvt->len_cvt)) - 1;
|
|
|
- const float *target = ((const float *) cvt->buf);
|
|
|
- float sample0 = SDL_SwapFloatLE(src[0]);
|
|
|
- float last_sample0 = sample0;
|
|
|
- while (dst >= target) {
|
|
|
- dst[0] = SDL_SwapFloatLE(sample0);
|
|
|
- dst--;
|
|
|
- eps += srcsize;
|
|
|
- if ((eps << 1) >= dstsize) {
|
|
|
- src--;
|
|
|
- sample0 = (float) ((((double) SDL_SwapFloatLE(src[0])) + ((double) last_sample0)) * 0.5);
|
|
|
- last_sample0 = sample0;
|
|
|
- eps -= dstsize;
|
|
|
- }
|
|
|
- }
|
|
|
- cvt->len_cvt = dstsize;
|
|
|
- if (cvt->filters[++cvt->filter_index]) {
|
|
|
- cvt->filters[cvt->filter_index] (cvt, format);
|
|
|
- }
|
|
|
-}
|
|
|
-
|
|
|
-static void SDLCALL
|
|
|
-SDL_Downsample_F32LSB_1c(SDL_AudioCVT * cvt, SDL_AudioFormat format)
|
|
|
-{
|
|
|
-#if DEBUG_CONVERT
|
|
|
- fprintf(stderr, "Downsample arbitrary (x%f) AUDIO_F32LSB, 1 channels.\n", cvt->rate_incr);
|
|
|
-#endif
|
|
|
-
|
|
|
- const int srcsize = cvt->len_cvt - 64;
|
|
|
- const int dstsize = (int) (((double)(cvt->len_cvt/4)) * cvt->rate_incr) * 4;
|
|
|
- register int eps = 0;
|
|
|
- float *dst = (float *) cvt->buf;
|
|
|
- const float *src = (float *) cvt->buf;
|
|
|
- const float *target = (const float *) (cvt->buf + dstsize);
|
|
|
- float sample0 = SDL_SwapFloatLE(src[0]);
|
|
|
- float last_sample0 = sample0;
|
|
|
- while (dst < target) {
|
|
|
- src++;
|
|
|
- eps += dstsize;
|
|
|
- if ((eps << 1) >= srcsize) {
|
|
|
- dst[0] = SDL_SwapFloatLE(sample0);
|
|
|
- dst++;
|
|
|
- sample0 = (float) ((((double) SDL_SwapFloatLE(src[0])) + ((double) last_sample0)) * 0.5);
|
|
|
- last_sample0 = sample0;
|
|
|
- eps -= srcsize;
|
|
|
- }
|
|
|
- }
|
|
|
- cvt->len_cvt = dstsize;
|
|
|
- if (cvt->filters[++cvt->filter_index]) {
|
|
|
- cvt->filters[cvt->filter_index] (cvt, format);
|
|
|
- }
|
|
|
-}
|
|
|
-
|
|
|
-static void SDLCALL
|
|
|
-SDL_Upsample_F32LSB_2c(SDL_AudioCVT * cvt, SDL_AudioFormat format)
|
|
|
-{
|
|
|
-#if DEBUG_CONVERT
|
|
|
- fprintf(stderr, "Upsample arbitrary (x%f) AUDIO_F32LSB, 2 channels.\n", cvt->rate_incr);
|
|
|
-#endif
|
|
|
-
|
|
|
- const int srcsize = cvt->len_cvt - 128;
|
|
|
- const int dstsize = (int) (((double)(cvt->len_cvt/8)) * cvt->rate_incr) * 8;
|
|
|
- register int eps = 0;
|
|
|
- float *dst = ((float *) (cvt->buf + dstsize)) - 2;
|
|
|
- const float *src = ((float *) (cvt->buf + cvt->len_cvt)) - 2;
|
|
|
- const float *target = ((const float *) cvt->buf);
|
|
|
- float sample1 = SDL_SwapFloatLE(src[1]);
|
|
|
- float sample0 = SDL_SwapFloatLE(src[0]);
|
|
|
- float last_sample1 = sample1;
|
|
|
- float last_sample0 = sample0;
|
|
|
- while (dst >= target) {
|
|
|
- dst[1] = SDL_SwapFloatLE(sample1);
|
|
|
- dst[0] = SDL_SwapFloatLE(sample0);
|
|
|
- dst -= 2;
|
|
|
- eps += srcsize;
|
|
|
- if ((eps << 1) >= dstsize) {
|
|
|
- src -= 2;
|
|
|
- sample1 = (float) ((((double) SDL_SwapFloatLE(src[1])) + ((double) last_sample1)) * 0.5);
|
|
|
- sample0 = (float) ((((double) SDL_SwapFloatLE(src[0])) + ((double) last_sample0)) * 0.5);
|
|
|
- last_sample1 = sample1;
|
|
|
- last_sample0 = sample0;
|
|
|
- eps -= dstsize;
|
|
|
- }
|
|
|
- }
|
|
|
- cvt->len_cvt = dstsize;
|
|
|
- if (cvt->filters[++cvt->filter_index]) {
|
|
|
- cvt->filters[cvt->filter_index] (cvt, format);
|
|
|
- }
|
|
|
-}
|
|
|
-
|
|
|
-static void SDLCALL
|
|
|
-SDL_Downsample_F32LSB_2c(SDL_AudioCVT * cvt, SDL_AudioFormat format)
|
|
|
-{
|
|
|
-#if DEBUG_CONVERT
|
|
|
- fprintf(stderr, "Downsample arbitrary (x%f) AUDIO_F32LSB, 2 channels.\n", cvt->rate_incr);
|
|
|
-#endif
|
|
|
-
|
|
|
- const int srcsize = cvt->len_cvt - 128;
|
|
|
- const int dstsize = (int) (((double)(cvt->len_cvt/8)) * cvt->rate_incr) * 8;
|
|
|
- register int eps = 0;
|
|
|
- float *dst = (float *) cvt->buf;
|
|
|
- const float *src = (float *) cvt->buf;
|
|
|
- const float *target = (const float *) (cvt->buf + dstsize);
|
|
|
- float sample0 = SDL_SwapFloatLE(src[0]);
|
|
|
- float sample1 = SDL_SwapFloatLE(src[1]);
|
|
|
- float last_sample0 = sample0;
|
|
|
- float last_sample1 = sample1;
|
|
|
- while (dst < target) {
|
|
|
- src += 2;
|
|
|
- eps += dstsize;
|
|
|
- if ((eps << 1) >= srcsize) {
|
|
|
- dst[0] = SDL_SwapFloatLE(sample0);
|
|
|
- dst[1] = SDL_SwapFloatLE(sample1);
|
|
|
- dst += 2;
|
|
|
- sample0 = (float) ((((double) SDL_SwapFloatLE(src[0])) + ((double) last_sample0)) * 0.5);
|
|
|
- sample1 = (float) ((((double) SDL_SwapFloatLE(src[1])) + ((double) last_sample1)) * 0.5);
|
|
|
- last_sample0 = sample0;
|
|
|
- last_sample1 = sample1;
|
|
|
- eps -= srcsize;
|
|
|
- }
|
|
|
- }
|
|
|
- cvt->len_cvt = dstsize;
|
|
|
- if (cvt->filters[++cvt->filter_index]) {
|
|
|
- cvt->filters[cvt->filter_index] (cvt, format);
|
|
|
- }
|
|
|
-}
|
|
|
-
|
|
|
-static void SDLCALL
|
|
|
-SDL_Upsample_F32LSB_4c(SDL_AudioCVT * cvt, SDL_AudioFormat format)
|
|
|
-{
|
|
|
-#if DEBUG_CONVERT
|
|
|
- fprintf(stderr, "Upsample arbitrary (x%f) AUDIO_F32LSB, 4 channels.\n", cvt->rate_incr);
|
|
|
-#endif
|
|
|
-
|
|
|
- const int srcsize = cvt->len_cvt - 256;
|
|
|
- const int dstsize = (int) (((double)(cvt->len_cvt/16)) * cvt->rate_incr) * 16;
|
|
|
- register int eps = 0;
|
|
|
- float *dst = ((float *) (cvt->buf + dstsize)) - 4;
|
|
|
- const float *src = ((float *) (cvt->buf + cvt->len_cvt)) - 4;
|
|
|
- const float *target = ((const float *) cvt->buf);
|
|
|
- float sample3 = SDL_SwapFloatLE(src[3]);
|
|
|
- float sample2 = SDL_SwapFloatLE(src[2]);
|
|
|
- float sample1 = SDL_SwapFloatLE(src[1]);
|
|
|
- float sample0 = SDL_SwapFloatLE(src[0]);
|
|
|
- float last_sample3 = sample3;
|
|
|
- float last_sample2 = sample2;
|
|
|
- float last_sample1 = sample1;
|
|
|
- float last_sample0 = sample0;
|
|
|
- while (dst >= target) {
|
|
|
- dst[3] = SDL_SwapFloatLE(sample3);
|
|
|
- dst[2] = SDL_SwapFloatLE(sample2);
|
|
|
- dst[1] = SDL_SwapFloatLE(sample1);
|
|
|
- dst[0] = SDL_SwapFloatLE(sample0);
|
|
|
- dst -= 4;
|
|
|
- eps += srcsize;
|
|
|
- if ((eps << 1) >= dstsize) {
|
|
|
- src -= 4;
|
|
|
- sample3 = (float) ((((double) SDL_SwapFloatLE(src[3])) + ((double) last_sample3)) * 0.5);
|
|
|
- sample2 = (float) ((((double) SDL_SwapFloatLE(src[2])) + ((double) last_sample2)) * 0.5);
|
|
|
- sample1 = (float) ((((double) SDL_SwapFloatLE(src[1])) + ((double) last_sample1)) * 0.5);
|
|
|
- sample0 = (float) ((((double) SDL_SwapFloatLE(src[0])) + ((double) last_sample0)) * 0.5);
|
|
|
- last_sample3 = sample3;
|
|
|
- last_sample2 = sample2;
|
|
|
- last_sample1 = sample1;
|
|
|
- last_sample0 = sample0;
|
|
|
- eps -= dstsize;
|
|
|
- }
|
|
|
- }
|
|
|
- cvt->len_cvt = dstsize;
|
|
|
- if (cvt->filters[++cvt->filter_index]) {
|
|
|
- cvt->filters[cvt->filter_index] (cvt, format);
|
|
|
- }
|
|
|
-}
|
|
|
-
|
|
|
-static void SDLCALL
|
|
|
-SDL_Downsample_F32LSB_4c(SDL_AudioCVT * cvt, SDL_AudioFormat format)
|
|
|
-{
|
|
|
-#if DEBUG_CONVERT
|
|
|
- fprintf(stderr, "Downsample arbitrary (x%f) AUDIO_F32LSB, 4 channels.\n", cvt->rate_incr);
|
|
|
-#endif
|
|
|
-
|
|
|
- const int srcsize = cvt->len_cvt - 256;
|
|
|
- const int dstsize = (int) (((double)(cvt->len_cvt/16)) * cvt->rate_incr) * 16;
|
|
|
- register int eps = 0;
|
|
|
- float *dst = (float *) cvt->buf;
|
|
|
- const float *src = (float *) cvt->buf;
|
|
|
- const float *target = (const float *) (cvt->buf + dstsize);
|
|
|
- float sample0 = SDL_SwapFloatLE(src[0]);
|
|
|
- float sample1 = SDL_SwapFloatLE(src[1]);
|
|
|
- float sample2 = SDL_SwapFloatLE(src[2]);
|
|
|
- float sample3 = SDL_SwapFloatLE(src[3]);
|
|
|
- float last_sample0 = sample0;
|
|
|
- float last_sample1 = sample1;
|
|
|
- float last_sample2 = sample2;
|
|
|
- float last_sample3 = sample3;
|
|
|
- while (dst < target) {
|
|
|
- src += 4;
|
|
|
- eps += dstsize;
|
|
|
- if ((eps << 1) >= srcsize) {
|
|
|
- dst[0] = SDL_SwapFloatLE(sample0);
|
|
|
- dst[1] = SDL_SwapFloatLE(sample1);
|
|
|
- dst[2] = SDL_SwapFloatLE(sample2);
|
|
|
- dst[3] = SDL_SwapFloatLE(sample3);
|
|
|
- dst += 4;
|
|
|
- sample0 = (float) ((((double) SDL_SwapFloatLE(src[0])) + ((double) last_sample0)) * 0.5);
|
|
|
- sample1 = (float) ((((double) SDL_SwapFloatLE(src[1])) + ((double) last_sample1)) * 0.5);
|
|
|
- sample2 = (float) ((((double) SDL_SwapFloatLE(src[2])) + ((double) last_sample2)) * 0.5);
|
|
|
- sample3 = (float) ((((double) SDL_SwapFloatLE(src[3])) + ((double) last_sample3)) * 0.5);
|
|
|
- last_sample0 = sample0;
|
|
|
- last_sample1 = sample1;
|
|
|
- last_sample2 = sample2;
|
|
|
- last_sample3 = sample3;
|
|
|
- eps -= srcsize;
|
|
|
- }
|
|
|
- }
|
|
|
- cvt->len_cvt = dstsize;
|
|
|
- if (cvt->filters[++cvt->filter_index]) {
|
|
|
- cvt->filters[cvt->filter_index] (cvt, format);
|
|
|
- }
|
|
|
-}
|
|
|
-
|
|
|
-static void SDLCALL
|
|
|
-SDL_Upsample_F32LSB_6c(SDL_AudioCVT * cvt, SDL_AudioFormat format)
|
|
|
-{
|
|
|
-#if DEBUG_CONVERT
|
|
|
- fprintf(stderr, "Upsample arbitrary (x%f) AUDIO_F32LSB, 6 channels.\n", cvt->rate_incr);
|
|
|
-#endif
|
|
|
-
|
|
|
- const int srcsize = cvt->len_cvt - 384;
|
|
|
- const int dstsize = (int) (((double)(cvt->len_cvt/24)) * cvt->rate_incr) * 24;
|
|
|
- register int eps = 0;
|
|
|
- float *dst = ((float *) (cvt->buf + dstsize)) - 6;
|
|
|
- const float *src = ((float *) (cvt->buf + cvt->len_cvt)) - 6;
|
|
|
- const float *target = ((const float *) cvt->buf);
|
|
|
- float sample5 = SDL_SwapFloatLE(src[5]);
|
|
|
- float sample4 = SDL_SwapFloatLE(src[4]);
|
|
|
- float sample3 = SDL_SwapFloatLE(src[3]);
|
|
|
- float sample2 = SDL_SwapFloatLE(src[2]);
|
|
|
- float sample1 = SDL_SwapFloatLE(src[1]);
|
|
|
- float sample0 = SDL_SwapFloatLE(src[0]);
|
|
|
- float last_sample5 = sample5;
|
|
|
- float last_sample4 = sample4;
|
|
|
- float last_sample3 = sample3;
|
|
|
- float last_sample2 = sample2;
|
|
|
- float last_sample1 = sample1;
|
|
|
- float last_sample0 = sample0;
|
|
|
- while (dst >= target) {
|
|
|
- dst[5] = SDL_SwapFloatLE(sample5);
|
|
|
- dst[4] = SDL_SwapFloatLE(sample4);
|
|
|
- dst[3] = SDL_SwapFloatLE(sample3);
|
|
|
- dst[2] = SDL_SwapFloatLE(sample2);
|
|
|
- dst[1] = SDL_SwapFloatLE(sample1);
|
|
|
- dst[0] = SDL_SwapFloatLE(sample0);
|
|
|
- dst -= 6;
|
|
|
- eps += srcsize;
|
|
|
- if ((eps << 1) >= dstsize) {
|
|
|
- src -= 6;
|
|
|
- sample5 = (float) ((((double) SDL_SwapFloatLE(src[5])) + ((double) last_sample5)) * 0.5);
|
|
|
- sample4 = (float) ((((double) SDL_SwapFloatLE(src[4])) + ((double) last_sample4)) * 0.5);
|
|
|
- sample3 = (float) ((((double) SDL_SwapFloatLE(src[3])) + ((double) last_sample3)) * 0.5);
|
|
|
- sample2 = (float) ((((double) SDL_SwapFloatLE(src[2])) + ((double) last_sample2)) * 0.5);
|
|
|
- sample1 = (float) ((((double) SDL_SwapFloatLE(src[1])) + ((double) last_sample1)) * 0.5);
|
|
|
- sample0 = (float) ((((double) SDL_SwapFloatLE(src[0])) + ((double) last_sample0)) * 0.5);
|
|
|
- last_sample5 = sample5;
|
|
|
- last_sample4 = sample4;
|
|
|
- last_sample3 = sample3;
|
|
|
- last_sample2 = sample2;
|
|
|
- last_sample1 = sample1;
|
|
|
- last_sample0 = sample0;
|
|
|
- eps -= dstsize;
|
|
|
- }
|
|
|
- }
|
|
|
- cvt->len_cvt = dstsize;
|
|
|
- if (cvt->filters[++cvt->filter_index]) {
|
|
|
- cvt->filters[cvt->filter_index] (cvt, format);
|
|
|
- }
|
|
|
-}
|
|
|
-
|
|
|
-static void SDLCALL
|
|
|
-SDL_Downsample_F32LSB_6c(SDL_AudioCVT * cvt, SDL_AudioFormat format)
|
|
|
-{
|
|
|
-#if DEBUG_CONVERT
|
|
|
- fprintf(stderr, "Downsample arbitrary (x%f) AUDIO_F32LSB, 6 channels.\n", cvt->rate_incr);
|
|
|
-#endif
|
|
|
-
|
|
|
- const int srcsize = cvt->len_cvt - 384;
|
|
|
- const int dstsize = (int) (((double)(cvt->len_cvt/24)) * cvt->rate_incr) * 24;
|
|
|
- register int eps = 0;
|
|
|
- float *dst = (float *) cvt->buf;
|
|
|
- const float *src = (float *) cvt->buf;
|
|
|
- const float *target = (const float *) (cvt->buf + dstsize);
|
|
|
- float sample0 = SDL_SwapFloatLE(src[0]);
|
|
|
- float sample1 = SDL_SwapFloatLE(src[1]);
|
|
|
- float sample2 = SDL_SwapFloatLE(src[2]);
|
|
|
- float sample3 = SDL_SwapFloatLE(src[3]);
|
|
|
- float sample4 = SDL_SwapFloatLE(src[4]);
|
|
|
- float sample5 = SDL_SwapFloatLE(src[5]);
|
|
|
- float last_sample0 = sample0;
|
|
|
- float last_sample1 = sample1;
|
|
|
- float last_sample2 = sample2;
|
|
|
- float last_sample3 = sample3;
|
|
|
- float last_sample4 = sample4;
|
|
|
- float last_sample5 = sample5;
|
|
|
- while (dst < target) {
|
|
|
- src += 6;
|
|
|
- eps += dstsize;
|
|
|
- if ((eps << 1) >= srcsize) {
|
|
|
- dst[0] = SDL_SwapFloatLE(sample0);
|
|
|
- dst[1] = SDL_SwapFloatLE(sample1);
|
|
|
- dst[2] = SDL_SwapFloatLE(sample2);
|
|
|
- dst[3] = SDL_SwapFloatLE(sample3);
|
|
|
- dst[4] = SDL_SwapFloatLE(sample4);
|
|
|
- dst[5] = SDL_SwapFloatLE(sample5);
|
|
|
- dst += 6;
|
|
|
- sample0 = (float) ((((double) SDL_SwapFloatLE(src[0])) + ((double) last_sample0)) * 0.5);
|
|
|
- sample1 = (float) ((((double) SDL_SwapFloatLE(src[1])) + ((double) last_sample1)) * 0.5);
|
|
|
- sample2 = (float) ((((double) SDL_SwapFloatLE(src[2])) + ((double) last_sample2)) * 0.5);
|
|
|
- sample3 = (float) ((((double) SDL_SwapFloatLE(src[3])) + ((double) last_sample3)) * 0.5);
|
|
|
- sample4 = (float) ((((double) SDL_SwapFloatLE(src[4])) + ((double) last_sample4)) * 0.5);
|
|
|
- sample5 = (float) ((((double) SDL_SwapFloatLE(src[5])) + ((double) last_sample5)) * 0.5);
|
|
|
- last_sample0 = sample0;
|
|
|
- last_sample1 = sample1;
|
|
|
- last_sample2 = sample2;
|
|
|
- last_sample3 = sample3;
|
|
|
- last_sample4 = sample4;
|
|
|
- last_sample5 = sample5;
|
|
|
- eps -= srcsize;
|
|
|
- }
|
|
|
- }
|
|
|
- cvt->len_cvt = dstsize;
|
|
|
- if (cvt->filters[++cvt->filter_index]) {
|
|
|
- cvt->filters[cvt->filter_index] (cvt, format);
|
|
|
- }
|
|
|
-}
|
|
|
-
|
|
|
-static void SDLCALL
|
|
|
-SDL_Upsample_F32LSB_8c(SDL_AudioCVT * cvt, SDL_AudioFormat format)
|
|
|
-{
|
|
|
-#if DEBUG_CONVERT
|
|
|
- fprintf(stderr, "Upsample arbitrary (x%f) AUDIO_F32LSB, 8 channels.\n", cvt->rate_incr);
|
|
|
-#endif
|
|
|
-
|
|
|
- const int srcsize = cvt->len_cvt - 512;
|
|
|
- const int dstsize = (int) (((double)(cvt->len_cvt/32)) * cvt->rate_incr) * 32;
|
|
|
- register int eps = 0;
|
|
|
- float *dst = ((float *) (cvt->buf + dstsize)) - 8;
|
|
|
- const float *src = ((float *) (cvt->buf + cvt->len_cvt)) - 8;
|
|
|
- const float *target = ((const float *) cvt->buf);
|
|
|
- float sample7 = SDL_SwapFloatLE(src[7]);
|
|
|
- float sample6 = SDL_SwapFloatLE(src[6]);
|
|
|
- float sample5 = SDL_SwapFloatLE(src[5]);
|
|
|
- float sample4 = SDL_SwapFloatLE(src[4]);
|
|
|
- float sample3 = SDL_SwapFloatLE(src[3]);
|
|
|
- float sample2 = SDL_SwapFloatLE(src[2]);
|
|
|
- float sample1 = SDL_SwapFloatLE(src[1]);
|
|
|
- float sample0 = SDL_SwapFloatLE(src[0]);
|
|
|
- float last_sample7 = sample7;
|
|
|
- float last_sample6 = sample6;
|
|
|
- float last_sample5 = sample5;
|
|
|
- float last_sample4 = sample4;
|
|
|
- float last_sample3 = sample3;
|
|
|
- float last_sample2 = sample2;
|
|
|
- float last_sample1 = sample1;
|
|
|
- float last_sample0 = sample0;
|
|
|
- while (dst >= target) {
|
|
|
- dst[7] = SDL_SwapFloatLE(sample7);
|
|
|
- dst[6] = SDL_SwapFloatLE(sample6);
|
|
|
- dst[5] = SDL_SwapFloatLE(sample5);
|
|
|
- dst[4] = SDL_SwapFloatLE(sample4);
|
|
|
- dst[3] = SDL_SwapFloatLE(sample3);
|
|
|
- dst[2] = SDL_SwapFloatLE(sample2);
|
|
|
- dst[1] = SDL_SwapFloatLE(sample1);
|
|
|
- dst[0] = SDL_SwapFloatLE(sample0);
|
|
|
- dst -= 8;
|
|
|
- eps += srcsize;
|
|
|
- if ((eps << 1) >= dstsize) {
|
|
|
- src -= 8;
|
|
|
- sample7 = (float) ((((double) SDL_SwapFloatLE(src[7])) + ((double) last_sample7)) * 0.5);
|
|
|
- sample6 = (float) ((((double) SDL_SwapFloatLE(src[6])) + ((double) last_sample6)) * 0.5);
|
|
|
- sample5 = (float) ((((double) SDL_SwapFloatLE(src[5])) + ((double) last_sample5)) * 0.5);
|
|
|
- sample4 = (float) ((((double) SDL_SwapFloatLE(src[4])) + ((double) last_sample4)) * 0.5);
|
|
|
- sample3 = (float) ((((double) SDL_SwapFloatLE(src[3])) + ((double) last_sample3)) * 0.5);
|
|
|
- sample2 = (float) ((((double) SDL_SwapFloatLE(src[2])) + ((double) last_sample2)) * 0.5);
|
|
|
- sample1 = (float) ((((double) SDL_SwapFloatLE(src[1])) + ((double) last_sample1)) * 0.5);
|
|
|
- sample0 = (float) ((((double) SDL_SwapFloatLE(src[0])) + ((double) last_sample0)) * 0.5);
|
|
|
- last_sample7 = sample7;
|
|
|
- last_sample6 = sample6;
|
|
|
- last_sample5 = sample5;
|
|
|
- last_sample4 = sample4;
|
|
|
- last_sample3 = sample3;
|
|
|
- last_sample2 = sample2;
|
|
|
- last_sample1 = sample1;
|
|
|
- last_sample0 = sample0;
|
|
|
- eps -= dstsize;
|
|
|
- }
|
|
|
- }
|
|
|
- cvt->len_cvt = dstsize;
|
|
|
- if (cvt->filters[++cvt->filter_index]) {
|
|
|
- cvt->filters[cvt->filter_index] (cvt, format);
|
|
|
- }
|
|
|
-}
|
|
|
-
|
|
|
-static void SDLCALL
|
|
|
-SDL_Downsample_F32LSB_8c(SDL_AudioCVT * cvt, SDL_AudioFormat format)
|
|
|
-{
|
|
|
-#if DEBUG_CONVERT
|
|
|
- fprintf(stderr, "Downsample arbitrary (x%f) AUDIO_F32LSB, 8 channels.\n", cvt->rate_incr);
|
|
|
-#endif
|
|
|
-
|
|
|
- const int srcsize = cvt->len_cvt - 512;
|
|
|
- const int dstsize = (int) (((double)(cvt->len_cvt/32)) * cvt->rate_incr) * 32;
|
|
|
- register int eps = 0;
|
|
|
- float *dst = (float *) cvt->buf;
|
|
|
- const float *src = (float *) cvt->buf;
|
|
|
- const float *target = (const float *) (cvt->buf + dstsize);
|
|
|
- float sample0 = SDL_SwapFloatLE(src[0]);
|
|
|
- float sample1 = SDL_SwapFloatLE(src[1]);
|
|
|
- float sample2 = SDL_SwapFloatLE(src[2]);
|
|
|
- float sample3 = SDL_SwapFloatLE(src[3]);
|
|
|
- float sample4 = SDL_SwapFloatLE(src[4]);
|
|
|
- float sample5 = SDL_SwapFloatLE(src[5]);
|
|
|
- float sample6 = SDL_SwapFloatLE(src[6]);
|
|
|
- float sample7 = SDL_SwapFloatLE(src[7]);
|
|
|
- float last_sample0 = sample0;
|
|
|
- float last_sample1 = sample1;
|
|
|
- float last_sample2 = sample2;
|
|
|
- float last_sample3 = sample3;
|
|
|
- float last_sample4 = sample4;
|
|
|
- float last_sample5 = sample5;
|
|
|
- float last_sample6 = sample6;
|
|
|
- float last_sample7 = sample7;
|
|
|
- while (dst < target) {
|
|
|
- src += 8;
|
|
|
- eps += dstsize;
|
|
|
- if ((eps << 1) >= srcsize) {
|
|
|
- dst[0] = SDL_SwapFloatLE(sample0);
|
|
|
- dst[1] = SDL_SwapFloatLE(sample1);
|
|
|
- dst[2] = SDL_SwapFloatLE(sample2);
|
|
|
- dst[3] = SDL_SwapFloatLE(sample3);
|
|
|
- dst[4] = SDL_SwapFloatLE(sample4);
|
|
|
- dst[5] = SDL_SwapFloatLE(sample5);
|
|
|
- dst[6] = SDL_SwapFloatLE(sample6);
|
|
|
- dst[7] = SDL_SwapFloatLE(sample7);
|
|
|
- dst += 8;
|
|
|
- sample0 = (float) ((((double) SDL_SwapFloatLE(src[0])) + ((double) last_sample0)) * 0.5);
|
|
|
- sample1 = (float) ((((double) SDL_SwapFloatLE(src[1])) + ((double) last_sample1)) * 0.5);
|
|
|
- sample2 = (float) ((((double) SDL_SwapFloatLE(src[2])) + ((double) last_sample2)) * 0.5);
|
|
|
- sample3 = (float) ((((double) SDL_SwapFloatLE(src[3])) + ((double) last_sample3)) * 0.5);
|
|
|
- sample4 = (float) ((((double) SDL_SwapFloatLE(src[4])) + ((double) last_sample4)) * 0.5);
|
|
|
- sample5 = (float) ((((double) SDL_SwapFloatLE(src[5])) + ((double) last_sample5)) * 0.5);
|
|
|
- sample6 = (float) ((((double) SDL_SwapFloatLE(src[6])) + ((double) last_sample6)) * 0.5);
|
|
|
- sample7 = (float) ((((double) SDL_SwapFloatLE(src[7])) + ((double) last_sample7)) * 0.5);
|
|
|
- last_sample0 = sample0;
|
|
|
- last_sample1 = sample1;
|
|
|
- last_sample2 = sample2;
|
|
|
- last_sample3 = sample3;
|
|
|
- last_sample4 = sample4;
|
|
|
- last_sample5 = sample5;
|
|
|
- last_sample6 = sample6;
|
|
|
- last_sample7 = sample7;
|
|
|
- eps -= srcsize;
|
|
|
- }
|
|
|
- }
|
|
|
- cvt->len_cvt = dstsize;
|
|
|
- if (cvt->filters[++cvt->filter_index]) {
|
|
|
- cvt->filters[cvt->filter_index] (cvt, format);
|
|
|
- }
|
|
|
-}
|
|
|
-
|
|
|
-static void SDLCALL
|
|
|
-SDL_Upsample_F32MSB_1c(SDL_AudioCVT * cvt, SDL_AudioFormat format)
|
|
|
-{
|
|
|
-#if DEBUG_CONVERT
|
|
|
- fprintf(stderr, "Upsample arbitrary (x%f) AUDIO_F32MSB, 1 channels.\n", cvt->rate_incr);
|
|
|
-#endif
|
|
|
-
|
|
|
- const int srcsize = cvt->len_cvt - 64;
|
|
|
- const int dstsize = (int) (((double)(cvt->len_cvt/4)) * cvt->rate_incr) * 4;
|
|
|
- register int eps = 0;
|
|
|
- float *dst = ((float *) (cvt->buf + dstsize)) - 1;
|
|
|
- const float *src = ((float *) (cvt->buf + cvt->len_cvt)) - 1;
|
|
|
- const float *target = ((const float *) cvt->buf);
|
|
|
- float sample0 = SDL_SwapFloatBE(src[0]);
|
|
|
- float last_sample0 = sample0;
|
|
|
- while (dst >= target) {
|
|
|
- dst[0] = SDL_SwapFloatBE(sample0);
|
|
|
- dst--;
|
|
|
- eps += srcsize;
|
|
|
- if ((eps << 1) >= dstsize) {
|
|
|
- src--;
|
|
|
- sample0 = (float) ((((double) SDL_SwapFloatBE(src[0])) + ((double) last_sample0)) * 0.5);
|
|
|
- last_sample0 = sample0;
|
|
|
- eps -= dstsize;
|
|
|
- }
|
|
|
- }
|
|
|
- cvt->len_cvt = dstsize;
|
|
|
- if (cvt->filters[++cvt->filter_index]) {
|
|
|
- cvt->filters[cvt->filter_index] (cvt, format);
|
|
|
- }
|
|
|
-}
|
|
|
-
|
|
|
-static void SDLCALL
|
|
|
-SDL_Downsample_F32MSB_1c(SDL_AudioCVT * cvt, SDL_AudioFormat format)
|
|
|
-{
|
|
|
-#if DEBUG_CONVERT
|
|
|
- fprintf(stderr, "Downsample arbitrary (x%f) AUDIO_F32MSB, 1 channels.\n", cvt->rate_incr);
|
|
|
-#endif
|
|
|
-
|
|
|
- const int srcsize = cvt->len_cvt - 64;
|
|
|
- const int dstsize = (int) (((double)(cvt->len_cvt/4)) * cvt->rate_incr) * 4;
|
|
|
- register int eps = 0;
|
|
|
- float *dst = (float *) cvt->buf;
|
|
|
- const float *src = (float *) cvt->buf;
|
|
|
- const float *target = (const float *) (cvt->buf + dstsize);
|
|
|
- float sample0 = SDL_SwapFloatBE(src[0]);
|
|
|
- float last_sample0 = sample0;
|
|
|
- while (dst < target) {
|
|
|
- src++;
|
|
|
- eps += dstsize;
|
|
|
- if ((eps << 1) >= srcsize) {
|
|
|
- dst[0] = SDL_SwapFloatBE(sample0);
|
|
|
- dst++;
|
|
|
- sample0 = (float) ((((double) SDL_SwapFloatBE(src[0])) + ((double) last_sample0)) * 0.5);
|
|
|
- last_sample0 = sample0;
|
|
|
- eps -= srcsize;
|
|
|
- }
|
|
|
- }
|
|
|
- cvt->len_cvt = dstsize;
|
|
|
- if (cvt->filters[++cvt->filter_index]) {
|
|
|
- cvt->filters[cvt->filter_index] (cvt, format);
|
|
|
- }
|
|
|
-}
|
|
|
-
|
|
|
-static void SDLCALL
|
|
|
-SDL_Upsample_F32MSB_2c(SDL_AudioCVT * cvt, SDL_AudioFormat format)
|
|
|
-{
|
|
|
-#if DEBUG_CONVERT
|
|
|
- fprintf(stderr, "Upsample arbitrary (x%f) AUDIO_F32MSB, 2 channels.\n", cvt->rate_incr);
|
|
|
-#endif
|
|
|
-
|
|
|
- const int srcsize = cvt->len_cvt - 128;
|
|
|
- const int dstsize = (int) (((double)(cvt->len_cvt/8)) * cvt->rate_incr) * 8;
|
|
|
- register int eps = 0;
|
|
|
- float *dst = ((float *) (cvt->buf + dstsize)) - 2;
|
|
|
- const float *src = ((float *) (cvt->buf + cvt->len_cvt)) - 2;
|
|
|
- const float *target = ((const float *) cvt->buf);
|
|
|
- float sample1 = SDL_SwapFloatBE(src[1]);
|
|
|
- float sample0 = SDL_SwapFloatBE(src[0]);
|
|
|
- float last_sample1 = sample1;
|
|
|
- float last_sample0 = sample0;
|
|
|
- while (dst >= target) {
|
|
|
- dst[1] = SDL_SwapFloatBE(sample1);
|
|
|
- dst[0] = SDL_SwapFloatBE(sample0);
|
|
|
- dst -= 2;
|
|
|
- eps += srcsize;
|
|
|
- if ((eps << 1) >= dstsize) {
|
|
|
- src -= 2;
|
|
|
- sample1 = (float) ((((double) SDL_SwapFloatBE(src[1])) + ((double) last_sample1)) * 0.5);
|
|
|
- sample0 = (float) ((((double) SDL_SwapFloatBE(src[0])) + ((double) last_sample0)) * 0.5);
|
|
|
- last_sample1 = sample1;
|
|
|
- last_sample0 = sample0;
|
|
|
- eps -= dstsize;
|
|
|
- }
|
|
|
- }
|
|
|
- cvt->len_cvt = dstsize;
|
|
|
- if (cvt->filters[++cvt->filter_index]) {
|
|
|
- cvt->filters[cvt->filter_index] (cvt, format);
|
|
|
- }
|
|
|
-}
|
|
|
-
|
|
|
-static void SDLCALL
|
|
|
-SDL_Downsample_F32MSB_2c(SDL_AudioCVT * cvt, SDL_AudioFormat format)
|
|
|
-{
|
|
|
-#if DEBUG_CONVERT
|
|
|
- fprintf(stderr, "Downsample arbitrary (x%f) AUDIO_F32MSB, 2 channels.\n", cvt->rate_incr);
|
|
|
-#endif
|
|
|
-
|
|
|
- const int srcsize = cvt->len_cvt - 128;
|
|
|
- const int dstsize = (int) (((double)(cvt->len_cvt/8)) * cvt->rate_incr) * 8;
|
|
|
- register int eps = 0;
|
|
|
- float *dst = (float *) cvt->buf;
|
|
|
- const float *src = (float *) cvt->buf;
|
|
|
- const float *target = (const float *) (cvt->buf + dstsize);
|
|
|
- float sample0 = SDL_SwapFloatBE(src[0]);
|
|
|
- float sample1 = SDL_SwapFloatBE(src[1]);
|
|
|
- float last_sample0 = sample0;
|
|
|
- float last_sample1 = sample1;
|
|
|
- while (dst < target) {
|
|
|
- src += 2;
|
|
|
- eps += dstsize;
|
|
|
- if ((eps << 1) >= srcsize) {
|
|
|
- dst[0] = SDL_SwapFloatBE(sample0);
|
|
|
- dst[1] = SDL_SwapFloatBE(sample1);
|
|
|
- dst += 2;
|
|
|
- sample0 = (float) ((((double) SDL_SwapFloatBE(src[0])) + ((double) last_sample0)) * 0.5);
|
|
|
- sample1 = (float) ((((double) SDL_SwapFloatBE(src[1])) + ((double) last_sample1)) * 0.5);
|
|
|
- last_sample0 = sample0;
|
|
|
- last_sample1 = sample1;
|
|
|
- eps -= srcsize;
|
|
|
- }
|
|
|
- }
|
|
|
- cvt->len_cvt = dstsize;
|
|
|
- if (cvt->filters[++cvt->filter_index]) {
|
|
|
- cvt->filters[cvt->filter_index] (cvt, format);
|
|
|
- }
|
|
|
-}
|
|
|
-
|
|
|
-static void SDLCALL
|
|
|
-SDL_Upsample_F32MSB_4c(SDL_AudioCVT * cvt, SDL_AudioFormat format)
|
|
|
-{
|
|
|
-#if DEBUG_CONVERT
|
|
|
- fprintf(stderr, "Upsample arbitrary (x%f) AUDIO_F32MSB, 4 channels.\n", cvt->rate_incr);
|
|
|
-#endif
|
|
|
-
|
|
|
- const int srcsize = cvt->len_cvt - 256;
|
|
|
- const int dstsize = (int) (((double)(cvt->len_cvt/16)) * cvt->rate_incr) * 16;
|
|
|
- register int eps = 0;
|
|
|
- float *dst = ((float *) (cvt->buf + dstsize)) - 4;
|
|
|
- const float *src = ((float *) (cvt->buf + cvt->len_cvt)) - 4;
|
|
|
- const float *target = ((const float *) cvt->buf);
|
|
|
- float sample3 = SDL_SwapFloatBE(src[3]);
|
|
|
- float sample2 = SDL_SwapFloatBE(src[2]);
|
|
|
- float sample1 = SDL_SwapFloatBE(src[1]);
|
|
|
- float sample0 = SDL_SwapFloatBE(src[0]);
|
|
|
- float last_sample3 = sample3;
|
|
|
- float last_sample2 = sample2;
|
|
|
- float last_sample1 = sample1;
|
|
|
- float last_sample0 = sample0;
|
|
|
- while (dst >= target) {
|
|
|
- dst[3] = SDL_SwapFloatBE(sample3);
|
|
|
- dst[2] = SDL_SwapFloatBE(sample2);
|
|
|
- dst[1] = SDL_SwapFloatBE(sample1);
|
|
|
- dst[0] = SDL_SwapFloatBE(sample0);
|
|
|
- dst -= 4;
|
|
|
- eps += srcsize;
|
|
|
- if ((eps << 1) >= dstsize) {
|
|
|
- src -= 4;
|
|
|
- sample3 = (float) ((((double) SDL_SwapFloatBE(src[3])) + ((double) last_sample3)) * 0.5);
|
|
|
- sample2 = (float) ((((double) SDL_SwapFloatBE(src[2])) + ((double) last_sample2)) * 0.5);
|
|
|
- sample1 = (float) ((((double) SDL_SwapFloatBE(src[1])) + ((double) last_sample1)) * 0.5);
|
|
|
- sample0 = (float) ((((double) SDL_SwapFloatBE(src[0])) + ((double) last_sample0)) * 0.5);
|
|
|
- last_sample3 = sample3;
|
|
|
- last_sample2 = sample2;
|
|
|
- last_sample1 = sample1;
|
|
|
- last_sample0 = sample0;
|
|
|
- eps -= dstsize;
|
|
|
- }
|
|
|
- }
|
|
|
- cvt->len_cvt = dstsize;
|
|
|
- if (cvt->filters[++cvt->filter_index]) {
|
|
|
- cvt->filters[cvt->filter_index] (cvt, format);
|
|
|
- }
|
|
|
-}
|
|
|
-
|
|
|
-static void SDLCALL
|
|
|
-SDL_Downsample_F32MSB_4c(SDL_AudioCVT * cvt, SDL_AudioFormat format)
|
|
|
-{
|
|
|
-#if DEBUG_CONVERT
|
|
|
- fprintf(stderr, "Downsample arbitrary (x%f) AUDIO_F32MSB, 4 channels.\n", cvt->rate_incr);
|
|
|
-#endif
|
|
|
-
|
|
|
- const int srcsize = cvt->len_cvt - 256;
|
|
|
- const int dstsize = (int) (((double)(cvt->len_cvt/16)) * cvt->rate_incr) * 16;
|
|
|
- register int eps = 0;
|
|
|
- float *dst = (float *) cvt->buf;
|
|
|
- const float *src = (float *) cvt->buf;
|
|
|
- const float *target = (const float *) (cvt->buf + dstsize);
|
|
|
- float sample0 = SDL_SwapFloatBE(src[0]);
|
|
|
- float sample1 = SDL_SwapFloatBE(src[1]);
|
|
|
- float sample2 = SDL_SwapFloatBE(src[2]);
|
|
|
- float sample3 = SDL_SwapFloatBE(src[3]);
|
|
|
- float last_sample0 = sample0;
|
|
|
- float last_sample1 = sample1;
|
|
|
- float last_sample2 = sample2;
|
|
|
- float last_sample3 = sample3;
|
|
|
- while (dst < target) {
|
|
|
- src += 4;
|
|
|
- eps += dstsize;
|
|
|
- if ((eps << 1) >= srcsize) {
|
|
|
- dst[0] = SDL_SwapFloatBE(sample0);
|
|
|
- dst[1] = SDL_SwapFloatBE(sample1);
|
|
|
- dst[2] = SDL_SwapFloatBE(sample2);
|
|
|
- dst[3] = SDL_SwapFloatBE(sample3);
|
|
|
- dst += 4;
|
|
|
- sample0 = (float) ((((double) SDL_SwapFloatBE(src[0])) + ((double) last_sample0)) * 0.5);
|
|
|
- sample1 = (float) ((((double) SDL_SwapFloatBE(src[1])) + ((double) last_sample1)) * 0.5);
|
|
|
- sample2 = (float) ((((double) SDL_SwapFloatBE(src[2])) + ((double) last_sample2)) * 0.5);
|
|
|
- sample3 = (float) ((((double) SDL_SwapFloatBE(src[3])) + ((double) last_sample3)) * 0.5);
|
|
|
- last_sample0 = sample0;
|
|
|
- last_sample1 = sample1;
|
|
|
- last_sample2 = sample2;
|
|
|
- last_sample3 = sample3;
|
|
|
- eps -= srcsize;
|
|
|
- }
|
|
|
- }
|
|
|
- cvt->len_cvt = dstsize;
|
|
|
- if (cvt->filters[++cvt->filter_index]) {
|
|
|
- cvt->filters[cvt->filter_index] (cvt, format);
|
|
|
- }
|
|
|
-}
|
|
|
-
|
|
|
-static void SDLCALL
|
|
|
-SDL_Upsample_F32MSB_6c(SDL_AudioCVT * cvt, SDL_AudioFormat format)
|
|
|
-{
|
|
|
-#if DEBUG_CONVERT
|
|
|
- fprintf(stderr, "Upsample arbitrary (x%f) AUDIO_F32MSB, 6 channels.\n", cvt->rate_incr);
|
|
|
-#endif
|
|
|
-
|
|
|
- const int srcsize = cvt->len_cvt - 384;
|
|
|
- const int dstsize = (int) (((double)(cvt->len_cvt/24)) * cvt->rate_incr) * 24;
|
|
|
- register int eps = 0;
|
|
|
- float *dst = ((float *) (cvt->buf + dstsize)) - 6;
|
|
|
- const float *src = ((float *) (cvt->buf + cvt->len_cvt)) - 6;
|
|
|
- const float *target = ((const float *) cvt->buf);
|
|
|
- float sample5 = SDL_SwapFloatBE(src[5]);
|
|
|
- float sample4 = SDL_SwapFloatBE(src[4]);
|
|
|
- float sample3 = SDL_SwapFloatBE(src[3]);
|
|
|
- float sample2 = SDL_SwapFloatBE(src[2]);
|
|
|
- float sample1 = SDL_SwapFloatBE(src[1]);
|
|
|
- float sample0 = SDL_SwapFloatBE(src[0]);
|
|
|
- float last_sample5 = sample5;
|
|
|
- float last_sample4 = sample4;
|
|
|
- float last_sample3 = sample3;
|
|
|
- float last_sample2 = sample2;
|
|
|
- float last_sample1 = sample1;
|
|
|
- float last_sample0 = sample0;
|
|
|
- while (dst >= target) {
|
|
|
- dst[5] = SDL_SwapFloatBE(sample5);
|
|
|
- dst[4] = SDL_SwapFloatBE(sample4);
|
|
|
- dst[3] = SDL_SwapFloatBE(sample3);
|
|
|
- dst[2] = SDL_SwapFloatBE(sample2);
|
|
|
- dst[1] = SDL_SwapFloatBE(sample1);
|
|
|
- dst[0] = SDL_SwapFloatBE(sample0);
|
|
|
- dst -= 6;
|
|
|
- eps += srcsize;
|
|
|
- if ((eps << 1) >= dstsize) {
|
|
|
- src -= 6;
|
|
|
- sample5 = (float) ((((double) SDL_SwapFloatBE(src[5])) + ((double) last_sample5)) * 0.5);
|
|
|
- sample4 = (float) ((((double) SDL_SwapFloatBE(src[4])) + ((double) last_sample4)) * 0.5);
|
|
|
- sample3 = (float) ((((double) SDL_SwapFloatBE(src[3])) + ((double) last_sample3)) * 0.5);
|
|
|
- sample2 = (float) ((((double) SDL_SwapFloatBE(src[2])) + ((double) last_sample2)) * 0.5);
|
|
|
- sample1 = (float) ((((double) SDL_SwapFloatBE(src[1])) + ((double) last_sample1)) * 0.5);
|
|
|
- sample0 = (float) ((((double) SDL_SwapFloatBE(src[0])) + ((double) last_sample0)) * 0.5);
|
|
|
- last_sample5 = sample5;
|
|
|
- last_sample4 = sample4;
|
|
|
- last_sample3 = sample3;
|
|
|
- last_sample2 = sample2;
|
|
|
- last_sample1 = sample1;
|
|
|
- last_sample0 = sample0;
|
|
|
- eps -= dstsize;
|
|
|
- }
|
|
|
- }
|
|
|
- cvt->len_cvt = dstsize;
|
|
|
- if (cvt->filters[++cvt->filter_index]) {
|
|
|
- cvt->filters[cvt->filter_index] (cvt, format);
|
|
|
- }
|
|
|
-}
|
|
|
-
|
|
|
-static void SDLCALL
|
|
|
-SDL_Downsample_F32MSB_6c(SDL_AudioCVT * cvt, SDL_AudioFormat format)
|
|
|
-{
|
|
|
-#if DEBUG_CONVERT
|
|
|
- fprintf(stderr, "Downsample arbitrary (x%f) AUDIO_F32MSB, 6 channels.\n", cvt->rate_incr);
|
|
|
-#endif
|
|
|
-
|
|
|
- const int srcsize = cvt->len_cvt - 384;
|
|
|
- const int dstsize = (int) (((double)(cvt->len_cvt/24)) * cvt->rate_incr) * 24;
|
|
|
- register int eps = 0;
|
|
|
- float *dst = (float *) cvt->buf;
|
|
|
- const float *src = (float *) cvt->buf;
|
|
|
- const float *target = (const float *) (cvt->buf + dstsize);
|
|
|
- float sample0 = SDL_SwapFloatBE(src[0]);
|
|
|
- float sample1 = SDL_SwapFloatBE(src[1]);
|
|
|
- float sample2 = SDL_SwapFloatBE(src[2]);
|
|
|
- float sample3 = SDL_SwapFloatBE(src[3]);
|
|
|
- float sample4 = SDL_SwapFloatBE(src[4]);
|
|
|
- float sample5 = SDL_SwapFloatBE(src[5]);
|
|
|
- float last_sample0 = sample0;
|
|
|
- float last_sample1 = sample1;
|
|
|
- float last_sample2 = sample2;
|
|
|
- float last_sample3 = sample3;
|
|
|
- float last_sample4 = sample4;
|
|
|
- float last_sample5 = sample5;
|
|
|
- while (dst < target) {
|
|
|
- src += 6;
|
|
|
- eps += dstsize;
|
|
|
- if ((eps << 1) >= srcsize) {
|
|
|
- dst[0] = SDL_SwapFloatBE(sample0);
|
|
|
- dst[1] = SDL_SwapFloatBE(sample1);
|
|
|
- dst[2] = SDL_SwapFloatBE(sample2);
|
|
|
- dst[3] = SDL_SwapFloatBE(sample3);
|
|
|
- dst[4] = SDL_SwapFloatBE(sample4);
|
|
|
- dst[5] = SDL_SwapFloatBE(sample5);
|
|
|
- dst += 6;
|
|
|
- sample0 = (float) ((((double) SDL_SwapFloatBE(src[0])) + ((double) last_sample0)) * 0.5);
|
|
|
- sample1 = (float) ((((double) SDL_SwapFloatBE(src[1])) + ((double) last_sample1)) * 0.5);
|
|
|
- sample2 = (float) ((((double) SDL_SwapFloatBE(src[2])) + ((double) last_sample2)) * 0.5);
|
|
|
- sample3 = (float) ((((double) SDL_SwapFloatBE(src[3])) + ((double) last_sample3)) * 0.5);
|
|
|
- sample4 = (float) ((((double) SDL_SwapFloatBE(src[4])) + ((double) last_sample4)) * 0.5);
|
|
|
- sample5 = (float) ((((double) SDL_SwapFloatBE(src[5])) + ((double) last_sample5)) * 0.5);
|
|
|
- last_sample0 = sample0;
|
|
|
- last_sample1 = sample1;
|
|
|
- last_sample2 = sample2;
|
|
|
- last_sample3 = sample3;
|
|
|
- last_sample4 = sample4;
|
|
|
- last_sample5 = sample5;
|
|
|
- eps -= srcsize;
|
|
|
- }
|
|
|
- }
|
|
|
- cvt->len_cvt = dstsize;
|
|
|
- if (cvt->filters[++cvt->filter_index]) {
|
|
|
- cvt->filters[cvt->filter_index] (cvt, format);
|
|
|
- }
|
|
|
-}
|
|
|
-
|
|
|
-static void SDLCALL
|
|
|
-SDL_Upsample_F32MSB_8c(SDL_AudioCVT * cvt, SDL_AudioFormat format)
|
|
|
-{
|
|
|
-#if DEBUG_CONVERT
|
|
|
- fprintf(stderr, "Upsample arbitrary (x%f) AUDIO_F32MSB, 8 channels.\n", cvt->rate_incr);
|
|
|
-#endif
|
|
|
-
|
|
|
- const int srcsize = cvt->len_cvt - 512;
|
|
|
- const int dstsize = (int) (((double)(cvt->len_cvt/32)) * cvt->rate_incr) * 32;
|
|
|
- register int eps = 0;
|
|
|
- float *dst = ((float *) (cvt->buf + dstsize)) - 8;
|
|
|
- const float *src = ((float *) (cvt->buf + cvt->len_cvt)) - 8;
|
|
|
- const float *target = ((const float *) cvt->buf);
|
|
|
- float sample7 = SDL_SwapFloatBE(src[7]);
|
|
|
- float sample6 = SDL_SwapFloatBE(src[6]);
|
|
|
- float sample5 = SDL_SwapFloatBE(src[5]);
|
|
|
- float sample4 = SDL_SwapFloatBE(src[4]);
|
|
|
- float sample3 = SDL_SwapFloatBE(src[3]);
|
|
|
- float sample2 = SDL_SwapFloatBE(src[2]);
|
|
|
- float sample1 = SDL_SwapFloatBE(src[1]);
|
|
|
- float sample0 = SDL_SwapFloatBE(src[0]);
|
|
|
- float last_sample7 = sample7;
|
|
|
- float last_sample6 = sample6;
|
|
|
- float last_sample5 = sample5;
|
|
|
- float last_sample4 = sample4;
|
|
|
- float last_sample3 = sample3;
|
|
|
- float last_sample2 = sample2;
|
|
|
- float last_sample1 = sample1;
|
|
|
- float last_sample0 = sample0;
|
|
|
- while (dst >= target) {
|
|
|
- dst[7] = SDL_SwapFloatBE(sample7);
|
|
|
- dst[6] = SDL_SwapFloatBE(sample6);
|
|
|
- dst[5] = SDL_SwapFloatBE(sample5);
|
|
|
- dst[4] = SDL_SwapFloatBE(sample4);
|
|
|
- dst[3] = SDL_SwapFloatBE(sample3);
|
|
|
- dst[2] = SDL_SwapFloatBE(sample2);
|
|
|
- dst[1] = SDL_SwapFloatBE(sample1);
|
|
|
- dst[0] = SDL_SwapFloatBE(sample0);
|
|
|
- dst -= 8;
|
|
|
- eps += srcsize;
|
|
|
- if ((eps << 1) >= dstsize) {
|
|
|
- src -= 8;
|
|
|
- sample7 = (float) ((((double) SDL_SwapFloatBE(src[7])) + ((double) last_sample7)) * 0.5);
|
|
|
- sample6 = (float) ((((double) SDL_SwapFloatBE(src[6])) + ((double) last_sample6)) * 0.5);
|
|
|
- sample5 = (float) ((((double) SDL_SwapFloatBE(src[5])) + ((double) last_sample5)) * 0.5);
|
|
|
- sample4 = (float) ((((double) SDL_SwapFloatBE(src[4])) + ((double) last_sample4)) * 0.5);
|
|
|
- sample3 = (float) ((((double) SDL_SwapFloatBE(src[3])) + ((double) last_sample3)) * 0.5);
|
|
|
- sample2 = (float) ((((double) SDL_SwapFloatBE(src[2])) + ((double) last_sample2)) * 0.5);
|
|
|
- sample1 = (float) ((((double) SDL_SwapFloatBE(src[1])) + ((double) last_sample1)) * 0.5);
|
|
|
- sample0 = (float) ((((double) SDL_SwapFloatBE(src[0])) + ((double) last_sample0)) * 0.5);
|
|
|
- last_sample7 = sample7;
|
|
|
- last_sample6 = sample6;
|
|
|
- last_sample5 = sample5;
|
|
|
- last_sample4 = sample4;
|
|
|
- last_sample3 = sample3;
|
|
|
- last_sample2 = sample2;
|
|
|
- last_sample1 = sample1;
|
|
|
- last_sample0 = sample0;
|
|
|
- eps -= dstsize;
|
|
|
- }
|
|
|
- }
|
|
|
- cvt->len_cvt = dstsize;
|
|
|
- if (cvt->filters[++cvt->filter_index]) {
|
|
|
- cvt->filters[cvt->filter_index] (cvt, format);
|
|
|
- }
|
|
|
-}
|
|
|
-
|
|
|
-static void SDLCALL
|
|
|
-SDL_Downsample_F32MSB_8c(SDL_AudioCVT * cvt, SDL_AudioFormat format)
|
|
|
-{
|
|
|
-#if DEBUG_CONVERT
|
|
|
- fprintf(stderr, "Downsample arbitrary (x%f) AUDIO_F32MSB, 8 channels.\n", cvt->rate_incr);
|
|
|
-#endif
|
|
|
-
|
|
|
- const int srcsize = cvt->len_cvt - 512;
|
|
|
- const int dstsize = (int) (((double)(cvt->len_cvt/32)) * cvt->rate_incr) * 32;
|
|
|
- register int eps = 0;
|
|
|
- float *dst = (float *) cvt->buf;
|
|
|
- const float *src = (float *) cvt->buf;
|
|
|
- const float *target = (const float *) (cvt->buf + dstsize);
|
|
|
- float sample0 = SDL_SwapFloatBE(src[0]);
|
|
|
- float sample1 = SDL_SwapFloatBE(src[1]);
|
|
|
- float sample2 = SDL_SwapFloatBE(src[2]);
|
|
|
- float sample3 = SDL_SwapFloatBE(src[3]);
|
|
|
- float sample4 = SDL_SwapFloatBE(src[4]);
|
|
|
- float sample5 = SDL_SwapFloatBE(src[5]);
|
|
|
- float sample6 = SDL_SwapFloatBE(src[6]);
|
|
|
- float sample7 = SDL_SwapFloatBE(src[7]);
|
|
|
- float last_sample0 = sample0;
|
|
|
- float last_sample1 = sample1;
|
|
|
- float last_sample2 = sample2;
|
|
|
- float last_sample3 = sample3;
|
|
|
- float last_sample4 = sample4;
|
|
|
- float last_sample5 = sample5;
|
|
|
- float last_sample6 = sample6;
|
|
|
- float last_sample7 = sample7;
|
|
|
- while (dst < target) {
|
|
|
- src += 8;
|
|
|
- eps += dstsize;
|
|
|
- if ((eps << 1) >= srcsize) {
|
|
|
- dst[0] = SDL_SwapFloatBE(sample0);
|
|
|
- dst[1] = SDL_SwapFloatBE(sample1);
|
|
|
- dst[2] = SDL_SwapFloatBE(sample2);
|
|
|
- dst[3] = SDL_SwapFloatBE(sample3);
|
|
|
- dst[4] = SDL_SwapFloatBE(sample4);
|
|
|
- dst[5] = SDL_SwapFloatBE(sample5);
|
|
|
- dst[6] = SDL_SwapFloatBE(sample6);
|
|
|
- dst[7] = SDL_SwapFloatBE(sample7);
|
|
|
- dst += 8;
|
|
|
- sample0 = (float) ((((double) SDL_SwapFloatBE(src[0])) + ((double) last_sample0)) * 0.5);
|
|
|
- sample1 = (float) ((((double) SDL_SwapFloatBE(src[1])) + ((double) last_sample1)) * 0.5);
|
|
|
- sample2 = (float) ((((double) SDL_SwapFloatBE(src[2])) + ((double) last_sample2)) * 0.5);
|
|
|
- sample3 = (float) ((((double) SDL_SwapFloatBE(src[3])) + ((double) last_sample3)) * 0.5);
|
|
|
- sample4 = (float) ((((double) SDL_SwapFloatBE(src[4])) + ((double) last_sample4)) * 0.5);
|
|
|
- sample5 = (float) ((((double) SDL_SwapFloatBE(src[5])) + ((double) last_sample5)) * 0.5);
|
|
|
- sample6 = (float) ((((double) SDL_SwapFloatBE(src[6])) + ((double) last_sample6)) * 0.5);
|
|
|
- sample7 = (float) ((((double) SDL_SwapFloatBE(src[7])) + ((double) last_sample7)) * 0.5);
|
|
|
- last_sample0 = sample0;
|
|
|
- last_sample1 = sample1;
|
|
|
- last_sample2 = sample2;
|
|
|
- last_sample3 = sample3;
|
|
|
- last_sample4 = sample4;
|
|
|
- last_sample5 = sample5;
|
|
|
- last_sample6 = sample6;
|
|
|
- last_sample7 = sample7;
|
|
|
- eps -= srcsize;
|
|
|
- }
|
|
|
- }
|
|
|
- cvt->len_cvt = dstsize;
|
|
|
- if (cvt->filters[++cvt->filter_index]) {
|
|
|
- cvt->filters[cvt->filter_index] (cvt, format);
|
|
|
- }
|
|
|
-}
|
|
|
-
|
|
|
-
|
|
|
-#if !LESS_RESAMPLERS
|
|
|
-
|
|
|
-static void SDLCALL
|
|
|
-SDL_Upsample_U8_1c_x2(SDL_AudioCVT * cvt, SDL_AudioFormat format)
|
|
|
-{
|
|
|
-#if DEBUG_CONVERT
|
|
|
- fprintf(stderr, "Upsample (x2) AUDIO_U8, 1 channels.\n");
|
|
|
-#endif
|
|
|
-
|
|
|
- const int dstsize = cvt->len_cvt * 2;
|
|
|
- Uint8 *dst = ((Uint8 *) (cvt->buf + dstsize)) - 1 * 2;
|
|
|
- const Uint8 *src = ((Uint8 *) (cvt->buf + cvt->len_cvt)) - 1;
|
|
|
- const Uint8 *target = ((const Uint8 *) cvt->buf);
|
|
|
- Sint16 last_sample0 = (Sint16) src[0];
|
|
|
- while (dst >= target) {
|
|
|
- const Sint16 sample0 = (Sint16) src[0];
|
|
|
- src--;
|
|
|
- dst[1] = (Uint8) ((sample0 + last_sample0) >> 1);
|
|
|
- dst[0] = (Uint8) sample0;
|
|
|
- last_sample0 = sample0;
|
|
|
- dst -= 2;
|
|
|
- }
|
|
|
-
|
|
|
- cvt->len_cvt = dstsize;
|
|
|
- if (cvt->filters[++cvt->filter_index]) {
|
|
|
- cvt->filters[cvt->filter_index] (cvt, format);
|
|
|
- }
|
|
|
-}
|
|
|
-
|
|
|
-static void SDLCALL
|
|
|
-SDL_Downsample_U8_1c_x2(SDL_AudioCVT * cvt, SDL_AudioFormat format)
|
|
|
-{
|
|
|
-#if DEBUG_CONVERT
|
|
|
- fprintf(stderr, "Downsample (x2) AUDIO_U8, 1 channels.\n");
|
|
|
-#endif
|
|
|
-
|
|
|
- const int dstsize = cvt->len_cvt / 2;
|
|
|
- Uint8 *dst = (Uint8 *) cvt->buf;
|
|
|
- const Uint8 *src = (Uint8 *) cvt->buf;
|
|
|
- const Uint8 *target = (const Uint8 *) (cvt->buf + dstsize);
|
|
|
- Sint16 last_sample0 = (Sint16) src[0];
|
|
|
- while (dst < target) {
|
|
|
- const Sint16 sample0 = (Sint16) src[0];
|
|
|
- src += 2;
|
|
|
- dst[0] = (Uint8) ((sample0 + last_sample0) >> 1);
|
|
|
- last_sample0 = sample0;
|
|
|
- dst++;
|
|
|
- }
|
|
|
-
|
|
|
- cvt->len_cvt = dstsize;
|
|
|
- if (cvt->filters[++cvt->filter_index]) {
|
|
|
- cvt->filters[cvt->filter_index] (cvt, format);
|
|
|
- }
|
|
|
-}
|
|
|
-
|
|
|
-static void SDLCALL
|
|
|
-SDL_Upsample_U8_1c_x4(SDL_AudioCVT * cvt, SDL_AudioFormat format)
|
|
|
-{
|
|
|
-#if DEBUG_CONVERT
|
|
|
- fprintf(stderr, "Upsample (x4) AUDIO_U8, 1 channels.\n");
|
|
|
-#endif
|
|
|
-
|
|
|
- const int dstsize = cvt->len_cvt * 4;
|
|
|
- Uint8 *dst = ((Uint8 *) (cvt->buf + dstsize)) - 1 * 4;
|
|
|
- const Uint8 *src = ((Uint8 *) (cvt->buf + cvt->len_cvt)) - 1;
|
|
|
- const Uint8 *target = ((const Uint8 *) cvt->buf);
|
|
|
- Sint16 last_sample0 = (Sint16) src[0];
|
|
|
- while (dst >= target) {
|
|
|
- const Sint16 sample0 = (Sint16) src[0];
|
|
|
- src--;
|
|
|
- dst[3] = (Uint8) ((sample0 + (3 * last_sample0)) >> 2);
|
|
|
- dst[2] = (Uint8) ((sample0 + last_sample0) >> 1);
|
|
|
- dst[1] = (Uint8) (((3 * sample0) + last_sample0) >> 2);
|
|
|
- dst[0] = (Uint8) sample0;
|
|
|
- last_sample0 = sample0;
|
|
|
- dst -= 4;
|
|
|
- }
|
|
|
-
|
|
|
- cvt->len_cvt = dstsize;
|
|
|
- if (cvt->filters[++cvt->filter_index]) {
|
|
|
- cvt->filters[cvt->filter_index] (cvt, format);
|
|
|
- }
|
|
|
-}
|
|
|
-
|
|
|
-static void SDLCALL
|
|
|
-SDL_Downsample_U8_1c_x4(SDL_AudioCVT * cvt, SDL_AudioFormat format)
|
|
|
-{
|
|
|
-#if DEBUG_CONVERT
|
|
|
- fprintf(stderr, "Downsample (x4) AUDIO_U8, 1 channels.\n");
|
|
|
-#endif
|
|
|
-
|
|
|
- const int dstsize = cvt->len_cvt / 4;
|
|
|
- Uint8 *dst = (Uint8 *) cvt->buf;
|
|
|
- const Uint8 *src = (Uint8 *) cvt->buf;
|
|
|
- const Uint8 *target = (const Uint8 *) (cvt->buf + dstsize);
|
|
|
- Sint16 last_sample0 = (Sint16) src[0];
|
|
|
- while (dst < target) {
|
|
|
- const Sint16 sample0 = (Sint16) src[0];
|
|
|
- src += 4;
|
|
|
- dst[0] = (Uint8) ((sample0 + last_sample0) >> 1);
|
|
|
- last_sample0 = sample0;
|
|
|
- dst++;
|
|
|
- }
|
|
|
-
|
|
|
- cvt->len_cvt = dstsize;
|
|
|
- if (cvt->filters[++cvt->filter_index]) {
|
|
|
- cvt->filters[cvt->filter_index] (cvt, format);
|
|
|
- }
|
|
|
-}
|
|
|
-
|
|
|
-static void SDLCALL
|
|
|
-SDL_Upsample_U8_2c_x2(SDL_AudioCVT * cvt, SDL_AudioFormat format)
|
|
|
-{
|
|
|
-#if DEBUG_CONVERT
|
|
|
- fprintf(stderr, "Upsample (x2) AUDIO_U8, 2 channels.\n");
|
|
|
-#endif
|
|
|
-
|
|
|
- const int dstsize = cvt->len_cvt * 2;
|
|
|
- Uint8 *dst = ((Uint8 *) (cvt->buf + dstsize)) - 2 * 2;
|
|
|
- const Uint8 *src = ((Uint8 *) (cvt->buf + cvt->len_cvt)) - 2;
|
|
|
- const Uint8 *target = ((const Uint8 *) cvt->buf);
|
|
|
- Sint16 last_sample1 = (Sint16) src[1];
|
|
|
- Sint16 last_sample0 = (Sint16) src[0];
|
|
|
- while (dst >= target) {
|
|
|
- const Sint16 sample1 = (Sint16) src[1];
|
|
|
- const Sint16 sample0 = (Sint16) src[0];
|
|
|
- src -= 2;
|
|
|
- dst[3] = (Uint8) ((sample1 + last_sample1) >> 1);
|
|
|
- dst[2] = (Uint8) ((sample0 + last_sample0) >> 1);
|
|
|
- dst[1] = (Uint8) sample1;
|
|
|
- dst[0] = (Uint8) sample0;
|
|
|
- last_sample1 = sample1;
|
|
|
- last_sample0 = sample0;
|
|
|
- dst -= 4;
|
|
|
- }
|
|
|
-
|
|
|
- cvt->len_cvt = dstsize;
|
|
|
- if (cvt->filters[++cvt->filter_index]) {
|
|
|
- cvt->filters[cvt->filter_index] (cvt, format);
|
|
|
- }
|
|
|
-}
|
|
|
-
|
|
|
-static void SDLCALL
|
|
|
-SDL_Downsample_U8_2c_x2(SDL_AudioCVT * cvt, SDL_AudioFormat format)
|
|
|
-{
|
|
|
-#if DEBUG_CONVERT
|
|
|
- fprintf(stderr, "Downsample (x2) AUDIO_U8, 2 channels.\n");
|
|
|
-#endif
|
|
|
-
|
|
|
- const int dstsize = cvt->len_cvt / 2;
|
|
|
- Uint8 *dst = (Uint8 *) cvt->buf;
|
|
|
- const Uint8 *src = (Uint8 *) cvt->buf;
|
|
|
- const Uint8 *target = (const Uint8 *) (cvt->buf + dstsize);
|
|
|
- Sint16 last_sample0 = (Sint16) src[0];
|
|
|
- Sint16 last_sample1 = (Sint16) src[1];
|
|
|
- while (dst < target) {
|
|
|
- const Sint16 sample0 = (Sint16) src[0];
|
|
|
- const Sint16 sample1 = (Sint16) src[1];
|
|
|
- src += 4;
|
|
|
- dst[0] = (Uint8) ((sample0 + last_sample0) >> 1);
|
|
|
- dst[1] = (Uint8) ((sample1 + last_sample1) >> 1);
|
|
|
- last_sample0 = sample0;
|
|
|
- last_sample1 = sample1;
|
|
|
- dst += 2;
|
|
|
- }
|
|
|
-
|
|
|
- cvt->len_cvt = dstsize;
|
|
|
- if (cvt->filters[++cvt->filter_index]) {
|
|
|
- cvt->filters[cvt->filter_index] (cvt, format);
|
|
|
- }
|
|
|
-}
|
|
|
-
|
|
|
-static void SDLCALL
|
|
|
-SDL_Upsample_U8_2c_x4(SDL_AudioCVT * cvt, SDL_AudioFormat format)
|
|
|
-{
|
|
|
-#if DEBUG_CONVERT
|
|
|
- fprintf(stderr, "Upsample (x4) AUDIO_U8, 2 channels.\n");
|
|
|
-#endif
|
|
|
-
|
|
|
- const int dstsize = cvt->len_cvt * 4;
|
|
|
- Uint8 *dst = ((Uint8 *) (cvt->buf + dstsize)) - 2 * 4;
|
|
|
- const Uint8 *src = ((Uint8 *) (cvt->buf + cvt->len_cvt)) - 2;
|
|
|
- const Uint8 *target = ((const Uint8 *) cvt->buf);
|
|
|
- Sint16 last_sample1 = (Sint16) src[1];
|
|
|
- Sint16 last_sample0 = (Sint16) src[0];
|
|
|
- while (dst >= target) {
|
|
|
- const Sint16 sample1 = (Sint16) src[1];
|
|
|
- const Sint16 sample0 = (Sint16) src[0];
|
|
|
- src -= 2;
|
|
|
- dst[7] = (Uint8) ((sample1 + (3 * last_sample1)) >> 2);
|
|
|
- dst[6] = (Uint8) ((sample0 + (3 * last_sample0)) >> 2);
|
|
|
- dst[5] = (Uint8) ((sample1 + last_sample1) >> 1);
|
|
|
- dst[4] = (Uint8) ((sample0 + last_sample0) >> 1);
|
|
|
- dst[3] = (Uint8) (((3 * sample1) + last_sample1) >> 2);
|
|
|
- dst[2] = (Uint8) (((3 * sample0) + last_sample0) >> 2);
|
|
|
- dst[1] = (Uint8) sample1;
|
|
|
- dst[0] = (Uint8) sample0;
|
|
|
- last_sample1 = sample1;
|
|
|
- last_sample0 = sample0;
|
|
|
- dst -= 8;
|
|
|
- }
|
|
|
-
|
|
|
- cvt->len_cvt = dstsize;
|
|
|
- if (cvt->filters[++cvt->filter_index]) {
|
|
|
- cvt->filters[cvt->filter_index] (cvt, format);
|
|
|
- }
|
|
|
-}
|
|
|
-
|
|
|
-static void SDLCALL
|
|
|
-SDL_Downsample_U8_2c_x4(SDL_AudioCVT * cvt, SDL_AudioFormat format)
|
|
|
-{
|
|
|
-#if DEBUG_CONVERT
|
|
|
- fprintf(stderr, "Downsample (x4) AUDIO_U8, 2 channels.\n");
|
|
|
-#endif
|
|
|
-
|
|
|
- const int dstsize = cvt->len_cvt / 4;
|
|
|
- Uint8 *dst = (Uint8 *) cvt->buf;
|
|
|
- const Uint8 *src = (Uint8 *) cvt->buf;
|
|
|
- const Uint8 *target = (const Uint8 *) (cvt->buf + dstsize);
|
|
|
- Sint16 last_sample0 = (Sint16) src[0];
|
|
|
- Sint16 last_sample1 = (Sint16) src[1];
|
|
|
- while (dst < target) {
|
|
|
- const Sint16 sample0 = (Sint16) src[0];
|
|
|
- const Sint16 sample1 = (Sint16) src[1];
|
|
|
- src += 8;
|
|
|
- dst[0] = (Uint8) ((sample0 + last_sample0) >> 1);
|
|
|
- dst[1] = (Uint8) ((sample1 + last_sample1) >> 1);
|
|
|
- last_sample0 = sample0;
|
|
|
- last_sample1 = sample1;
|
|
|
- dst += 2;
|
|
|
- }
|
|
|
-
|
|
|
- cvt->len_cvt = dstsize;
|
|
|
- if (cvt->filters[++cvt->filter_index]) {
|
|
|
- cvt->filters[cvt->filter_index] (cvt, format);
|
|
|
- }
|
|
|
-}
|
|
|
-
|
|
|
-static void SDLCALL
|
|
|
-SDL_Upsample_U8_4c_x2(SDL_AudioCVT * cvt, SDL_AudioFormat format)
|
|
|
-{
|
|
|
-#if DEBUG_CONVERT
|
|
|
- fprintf(stderr, "Upsample (x2) AUDIO_U8, 4 channels.\n");
|
|
|
-#endif
|
|
|
-
|
|
|
- const int dstsize = cvt->len_cvt * 2;
|
|
|
- Uint8 *dst = ((Uint8 *) (cvt->buf + dstsize)) - 4 * 2;
|
|
|
- const Uint8 *src = ((Uint8 *) (cvt->buf + cvt->len_cvt)) - 4;
|
|
|
- const Uint8 *target = ((const Uint8 *) cvt->buf);
|
|
|
- Sint16 last_sample3 = (Sint16) src[3];
|
|
|
- Sint16 last_sample2 = (Sint16) src[2];
|
|
|
- Sint16 last_sample1 = (Sint16) src[1];
|
|
|
- Sint16 last_sample0 = (Sint16) src[0];
|
|
|
- while (dst >= target) {
|
|
|
- const Sint16 sample3 = (Sint16) src[3];
|
|
|
- const Sint16 sample2 = (Sint16) src[2];
|
|
|
- const Sint16 sample1 = (Sint16) src[1];
|
|
|
- const Sint16 sample0 = (Sint16) src[0];
|
|
|
- src -= 4;
|
|
|
- dst[7] = (Uint8) ((sample3 + last_sample3) >> 1);
|
|
|
- dst[6] = (Uint8) ((sample2 + last_sample2) >> 1);
|
|
|
- dst[5] = (Uint8) ((sample1 + last_sample1) >> 1);
|
|
|
- dst[4] = (Uint8) ((sample0 + last_sample0) >> 1);
|
|
|
- dst[3] = (Uint8) sample3;
|
|
|
- dst[2] = (Uint8) sample2;
|
|
|
- dst[1] = (Uint8) sample1;
|
|
|
- dst[0] = (Uint8) sample0;
|
|
|
- last_sample3 = sample3;
|
|
|
- last_sample2 = sample2;
|
|
|
- last_sample1 = sample1;
|
|
|
- last_sample0 = sample0;
|
|
|
- dst -= 8;
|
|
|
- }
|
|
|
-
|
|
|
- cvt->len_cvt = dstsize;
|
|
|
- if (cvt->filters[++cvt->filter_index]) {
|
|
|
- cvt->filters[cvt->filter_index] (cvt, format);
|
|
|
- }
|
|
|
-}
|
|
|
-
|
|
|
-static void SDLCALL
|
|
|
-SDL_Downsample_U8_4c_x2(SDL_AudioCVT * cvt, SDL_AudioFormat format)
|
|
|
-{
|
|
|
-#if DEBUG_CONVERT
|
|
|
- fprintf(stderr, "Downsample (x2) AUDIO_U8, 4 channels.\n");
|
|
|
-#endif
|
|
|
-
|
|
|
- const int dstsize = cvt->len_cvt / 2;
|
|
|
- Uint8 *dst = (Uint8 *) cvt->buf;
|
|
|
- const Uint8 *src = (Uint8 *) cvt->buf;
|
|
|
- const Uint8 *target = (const Uint8 *) (cvt->buf + dstsize);
|
|
|
- Sint16 last_sample0 = (Sint16) src[0];
|
|
|
- Sint16 last_sample1 = (Sint16) src[1];
|
|
|
- Sint16 last_sample2 = (Sint16) src[2];
|
|
|
- Sint16 last_sample3 = (Sint16) src[3];
|
|
|
- while (dst < target) {
|
|
|
- const Sint16 sample0 = (Sint16) src[0];
|
|
|
- const Sint16 sample1 = (Sint16) src[1];
|
|
|
- const Sint16 sample2 = (Sint16) src[2];
|
|
|
- const Sint16 sample3 = (Sint16) src[3];
|
|
|
- src += 8;
|
|
|
- dst[0] = (Uint8) ((sample0 + last_sample0) >> 1);
|
|
|
- dst[1] = (Uint8) ((sample1 + last_sample1) >> 1);
|
|
|
- dst[2] = (Uint8) ((sample2 + last_sample2) >> 1);
|
|
|
- dst[3] = (Uint8) ((sample3 + last_sample3) >> 1);
|
|
|
- last_sample0 = sample0;
|
|
|
- last_sample1 = sample1;
|
|
|
- last_sample2 = sample2;
|
|
|
- last_sample3 = sample3;
|
|
|
- dst += 4;
|
|
|
- }
|
|
|
-
|
|
|
- cvt->len_cvt = dstsize;
|
|
|
- if (cvt->filters[++cvt->filter_index]) {
|
|
|
- cvt->filters[cvt->filter_index] (cvt, format);
|
|
|
- }
|
|
|
-}
|
|
|
-
|
|
|
-static void SDLCALL
|
|
|
-SDL_Upsample_U8_4c_x4(SDL_AudioCVT * cvt, SDL_AudioFormat format)
|
|
|
-{
|
|
|
-#if DEBUG_CONVERT
|
|
|
- fprintf(stderr, "Upsample (x4) AUDIO_U8, 4 channels.\n");
|
|
|
-#endif
|
|
|
-
|
|
|
- const int dstsize = cvt->len_cvt * 4;
|
|
|
- Uint8 *dst = ((Uint8 *) (cvt->buf + dstsize)) - 4 * 4;
|
|
|
- const Uint8 *src = ((Uint8 *) (cvt->buf + cvt->len_cvt)) - 4;
|
|
|
- const Uint8 *target = ((const Uint8 *) cvt->buf);
|
|
|
- Sint16 last_sample3 = (Sint16) src[3];
|
|
|
- Sint16 last_sample2 = (Sint16) src[2];
|
|
|
- Sint16 last_sample1 = (Sint16) src[1];
|
|
|
- Sint16 last_sample0 = (Sint16) src[0];
|
|
|
- while (dst >= target) {
|
|
|
- const Sint16 sample3 = (Sint16) src[3];
|
|
|
- const Sint16 sample2 = (Sint16) src[2];
|
|
|
- const Sint16 sample1 = (Sint16) src[1];
|
|
|
- const Sint16 sample0 = (Sint16) src[0];
|
|
|
- src -= 4;
|
|
|
- dst[15] = (Uint8) ((sample3 + (3 * last_sample3)) >> 2);
|
|
|
- dst[14] = (Uint8) ((sample2 + (3 * last_sample2)) >> 2);
|
|
|
- dst[13] = (Uint8) ((sample1 + (3 * last_sample1)) >> 2);
|
|
|
- dst[12] = (Uint8) ((sample0 + (3 * last_sample0)) >> 2);
|
|
|
- dst[11] = (Uint8) ((sample3 + last_sample3) >> 1);
|
|
|
- dst[10] = (Uint8) ((sample2 + last_sample2) >> 1);
|
|
|
- dst[9] = (Uint8) ((sample1 + last_sample1) >> 1);
|
|
|
- dst[8] = (Uint8) ((sample0 + last_sample0) >> 1);
|
|
|
- dst[7] = (Uint8) (((3 * sample3) + last_sample3) >> 2);
|
|
|
- dst[6] = (Uint8) (((3 * sample2) + last_sample2) >> 2);
|
|
|
- dst[5] = (Uint8) (((3 * sample1) + last_sample1) >> 2);
|
|
|
- dst[4] = (Uint8) (((3 * sample0) + last_sample0) >> 2);
|
|
|
- dst[3] = (Uint8) sample3;
|
|
|
- dst[2] = (Uint8) sample2;
|
|
|
- dst[1] = (Uint8) sample1;
|
|
|
- dst[0] = (Uint8) sample0;
|
|
|
- last_sample3 = sample3;
|
|
|
- last_sample2 = sample2;
|
|
|
- last_sample1 = sample1;
|
|
|
- last_sample0 = sample0;
|
|
|
- dst -= 16;
|
|
|
- }
|
|
|
-
|
|
|
- cvt->len_cvt = dstsize;
|
|
|
- if (cvt->filters[++cvt->filter_index]) {
|
|
|
- cvt->filters[cvt->filter_index] (cvt, format);
|
|
|
- }
|
|
|
-}
|
|
|
-
|
|
|
-static void SDLCALL
|
|
|
-SDL_Downsample_U8_4c_x4(SDL_AudioCVT * cvt, SDL_AudioFormat format)
|
|
|
-{
|
|
|
-#if DEBUG_CONVERT
|
|
|
- fprintf(stderr, "Downsample (x4) AUDIO_U8, 4 channels.\n");
|
|
|
-#endif
|
|
|
-
|
|
|
- const int dstsize = cvt->len_cvt / 4;
|
|
|
- Uint8 *dst = (Uint8 *) cvt->buf;
|
|
|
- const Uint8 *src = (Uint8 *) cvt->buf;
|
|
|
- const Uint8 *target = (const Uint8 *) (cvt->buf + dstsize);
|
|
|
- Sint16 last_sample0 = (Sint16) src[0];
|
|
|
- Sint16 last_sample1 = (Sint16) src[1];
|
|
|
- Sint16 last_sample2 = (Sint16) src[2];
|
|
|
- Sint16 last_sample3 = (Sint16) src[3];
|
|
|
- while (dst < target) {
|
|
|
- const Sint16 sample0 = (Sint16) src[0];
|
|
|
- const Sint16 sample1 = (Sint16) src[1];
|
|
|
- const Sint16 sample2 = (Sint16) src[2];
|
|
|
- const Sint16 sample3 = (Sint16) src[3];
|
|
|
- src += 16;
|
|
|
- dst[0] = (Uint8) ((sample0 + last_sample0) >> 1);
|
|
|
- dst[1] = (Uint8) ((sample1 + last_sample1) >> 1);
|
|
|
- dst[2] = (Uint8) ((sample2 + last_sample2) >> 1);
|
|
|
- dst[3] = (Uint8) ((sample3 + last_sample3) >> 1);
|
|
|
- last_sample0 = sample0;
|
|
|
- last_sample1 = sample1;
|
|
|
- last_sample2 = sample2;
|
|
|
- last_sample3 = sample3;
|
|
|
- dst += 4;
|
|
|
- }
|
|
|
-
|
|
|
- cvt->len_cvt = dstsize;
|
|
|
- if (cvt->filters[++cvt->filter_index]) {
|
|
|
- cvt->filters[cvt->filter_index] (cvt, format);
|
|
|
- }
|
|
|
-}
|
|
|
-
|
|
|
-static void SDLCALL
|
|
|
-SDL_Upsample_U8_6c_x2(SDL_AudioCVT * cvt, SDL_AudioFormat format)
|
|
|
-{
|
|
|
-#if DEBUG_CONVERT
|
|
|
- fprintf(stderr, "Upsample (x2) AUDIO_U8, 6 channels.\n");
|
|
|
-#endif
|
|
|
-
|
|
|
- const int dstsize = cvt->len_cvt * 2;
|
|
|
- Uint8 *dst = ((Uint8 *) (cvt->buf + dstsize)) - 6 * 2;
|
|
|
- const Uint8 *src = ((Uint8 *) (cvt->buf + cvt->len_cvt)) - 6;
|
|
|
- const Uint8 *target = ((const Uint8 *) cvt->buf);
|
|
|
- Sint16 last_sample5 = (Sint16) src[5];
|
|
|
- Sint16 last_sample4 = (Sint16) src[4];
|
|
|
- Sint16 last_sample3 = (Sint16) src[3];
|
|
|
- Sint16 last_sample2 = (Sint16) src[2];
|
|
|
- Sint16 last_sample1 = (Sint16) src[1];
|
|
|
- Sint16 last_sample0 = (Sint16) src[0];
|
|
|
- while (dst >= target) {
|
|
|
- const Sint16 sample5 = (Sint16) src[5];
|
|
|
- const Sint16 sample4 = (Sint16) src[4];
|
|
|
- const Sint16 sample3 = (Sint16) src[3];
|
|
|
- const Sint16 sample2 = (Sint16) src[2];
|
|
|
- const Sint16 sample1 = (Sint16) src[1];
|
|
|
- const Sint16 sample0 = (Sint16) src[0];
|
|
|
- src -= 6;
|
|
|
- dst[11] = (Uint8) ((sample5 + last_sample5) >> 1);
|
|
|
- dst[10] = (Uint8) ((sample4 + last_sample4) >> 1);
|
|
|
- dst[9] = (Uint8) ((sample3 + last_sample3) >> 1);
|
|
|
- dst[8] = (Uint8) ((sample2 + last_sample2) >> 1);
|
|
|
- dst[7] = (Uint8) ((sample1 + last_sample1) >> 1);
|
|
|
- dst[6] = (Uint8) ((sample0 + last_sample0) >> 1);
|
|
|
- dst[5] = (Uint8) sample5;
|
|
|
- dst[4] = (Uint8) sample4;
|
|
|
- dst[3] = (Uint8) sample3;
|
|
|
- dst[2] = (Uint8) sample2;
|
|
|
- dst[1] = (Uint8) sample1;
|
|
|
- dst[0] = (Uint8) sample0;
|
|
|
- last_sample5 = sample5;
|
|
|
- last_sample4 = sample4;
|
|
|
- last_sample3 = sample3;
|
|
|
- last_sample2 = sample2;
|
|
|
- last_sample1 = sample1;
|
|
|
- last_sample0 = sample0;
|
|
|
- dst -= 12;
|
|
|
- }
|
|
|
-
|
|
|
- cvt->len_cvt = dstsize;
|
|
|
- if (cvt->filters[++cvt->filter_index]) {
|
|
|
- cvt->filters[cvt->filter_index] (cvt, format);
|
|
|
- }
|
|
|
-}
|
|
|
-
|
|
|
-static void SDLCALL
|
|
|
-SDL_Downsample_U8_6c_x2(SDL_AudioCVT * cvt, SDL_AudioFormat format)
|
|
|
-{
|
|
|
-#if DEBUG_CONVERT
|
|
|
- fprintf(stderr, "Downsample (x2) AUDIO_U8, 6 channels.\n");
|
|
|
-#endif
|
|
|
-
|
|
|
- const int dstsize = cvt->len_cvt / 2;
|
|
|
- Uint8 *dst = (Uint8 *) cvt->buf;
|
|
|
- const Uint8 *src = (Uint8 *) cvt->buf;
|
|
|
- const Uint8 *target = (const Uint8 *) (cvt->buf + dstsize);
|
|
|
- Sint16 last_sample0 = (Sint16) src[0];
|
|
|
- Sint16 last_sample1 = (Sint16) src[1];
|
|
|
- Sint16 last_sample2 = (Sint16) src[2];
|
|
|
- Sint16 last_sample3 = (Sint16) src[3];
|
|
|
- Sint16 last_sample4 = (Sint16) src[4];
|
|
|
- Sint16 last_sample5 = (Sint16) src[5];
|
|
|
- while (dst < target) {
|
|
|
- const Sint16 sample0 = (Sint16) src[0];
|
|
|
- const Sint16 sample1 = (Sint16) src[1];
|
|
|
- const Sint16 sample2 = (Sint16) src[2];
|
|
|
- const Sint16 sample3 = (Sint16) src[3];
|
|
|
- const Sint16 sample4 = (Sint16) src[4];
|
|
|
- const Sint16 sample5 = (Sint16) src[5];
|
|
|
- src += 12;
|
|
|
- dst[0] = (Uint8) ((sample0 + last_sample0) >> 1);
|
|
|
- dst[1] = (Uint8) ((sample1 + last_sample1) >> 1);
|
|
|
- dst[2] = (Uint8) ((sample2 + last_sample2) >> 1);
|
|
|
- dst[3] = (Uint8) ((sample3 + last_sample3) >> 1);
|
|
|
- dst[4] = (Uint8) ((sample4 + last_sample4) >> 1);
|
|
|
- dst[5] = (Uint8) ((sample5 + last_sample5) >> 1);
|
|
|
- last_sample0 = sample0;
|
|
|
- last_sample1 = sample1;
|
|
|
- last_sample2 = sample2;
|
|
|
- last_sample3 = sample3;
|
|
|
- last_sample4 = sample4;
|
|
|
- last_sample5 = sample5;
|
|
|
- dst += 6;
|
|
|
- }
|
|
|
-
|
|
|
- cvt->len_cvt = dstsize;
|
|
|
- if (cvt->filters[++cvt->filter_index]) {
|
|
|
- cvt->filters[cvt->filter_index] (cvt, format);
|
|
|
- }
|
|
|
-}
|
|
|
-
|
|
|
-static void SDLCALL
|
|
|
-SDL_Upsample_U8_6c_x4(SDL_AudioCVT * cvt, SDL_AudioFormat format)
|
|
|
-{
|
|
|
-#if DEBUG_CONVERT
|
|
|
- fprintf(stderr, "Upsample (x4) AUDIO_U8, 6 channels.\n");
|
|
|
-#endif
|
|
|
-
|
|
|
- const int dstsize = cvt->len_cvt * 4;
|
|
|
- Uint8 *dst = ((Uint8 *) (cvt->buf + dstsize)) - 6 * 4;
|
|
|
- const Uint8 *src = ((Uint8 *) (cvt->buf + cvt->len_cvt)) - 6;
|
|
|
- const Uint8 *target = ((const Uint8 *) cvt->buf);
|
|
|
- Sint16 last_sample5 = (Sint16) src[5];
|
|
|
- Sint16 last_sample4 = (Sint16) src[4];
|
|
|
- Sint16 last_sample3 = (Sint16) src[3];
|
|
|
- Sint16 last_sample2 = (Sint16) src[2];
|
|
|
- Sint16 last_sample1 = (Sint16) src[1];
|
|
|
- Sint16 last_sample0 = (Sint16) src[0];
|
|
|
- while (dst >= target) {
|
|
|
- const Sint16 sample5 = (Sint16) src[5];
|
|
|
- const Sint16 sample4 = (Sint16) src[4];
|
|
|
- const Sint16 sample3 = (Sint16) src[3];
|
|
|
- const Sint16 sample2 = (Sint16) src[2];
|
|
|
- const Sint16 sample1 = (Sint16) src[1];
|
|
|
- const Sint16 sample0 = (Sint16) src[0];
|
|
|
- src -= 6;
|
|
|
- dst[23] = (Uint8) ((sample5 + (3 * last_sample5)) >> 2);
|
|
|
- dst[22] = (Uint8) ((sample4 + (3 * last_sample4)) >> 2);
|
|
|
- dst[21] = (Uint8) ((sample3 + (3 * last_sample3)) >> 2);
|
|
|
- dst[20] = (Uint8) ((sample2 + (3 * last_sample2)) >> 2);
|
|
|
- dst[19] = (Uint8) ((sample1 + (3 * last_sample1)) >> 2);
|
|
|
- dst[18] = (Uint8) ((sample0 + (3 * last_sample0)) >> 2);
|
|
|
- dst[17] = (Uint8) ((sample5 + last_sample5) >> 1);
|
|
|
- dst[16] = (Uint8) ((sample4 + last_sample4) >> 1);
|
|
|
- dst[15] = (Uint8) ((sample3 + last_sample3) >> 1);
|
|
|
- dst[14] = (Uint8) ((sample2 + last_sample2) >> 1);
|
|
|
- dst[13] = (Uint8) ((sample1 + last_sample1) >> 1);
|
|
|
- dst[12] = (Uint8) ((sample0 + last_sample0) >> 1);
|
|
|
- dst[11] = (Uint8) (((3 * sample5) + last_sample5) >> 2);
|
|
|
- dst[10] = (Uint8) (((3 * sample4) + last_sample4) >> 2);
|
|
|
- dst[9] = (Uint8) (((3 * sample3) + last_sample3) >> 2);
|
|
|
- dst[8] = (Uint8) (((3 * sample2) + last_sample2) >> 2);
|
|
|
- dst[7] = (Uint8) (((3 * sample1) + last_sample1) >> 2);
|
|
|
- dst[6] = (Uint8) (((3 * sample0) + last_sample0) >> 2);
|
|
|
- dst[5] = (Uint8) sample5;
|
|
|
- dst[4] = (Uint8) sample4;
|
|
|
- dst[3] = (Uint8) sample3;
|
|
|
- dst[2] = (Uint8) sample2;
|
|
|
- dst[1] = (Uint8) sample1;
|
|
|
- dst[0] = (Uint8) sample0;
|
|
|
- last_sample5 = sample5;
|
|
|
- last_sample4 = sample4;
|
|
|
- last_sample3 = sample3;
|
|
|
- last_sample2 = sample2;
|
|
|
- last_sample1 = sample1;
|
|
|
- last_sample0 = sample0;
|
|
|
- dst -= 24;
|
|
|
- }
|
|
|
-
|
|
|
- cvt->len_cvt = dstsize;
|
|
|
- if (cvt->filters[++cvt->filter_index]) {
|
|
|
- cvt->filters[cvt->filter_index] (cvt, format);
|
|
|
- }
|
|
|
-}
|
|
|
-
|
|
|
-static void SDLCALL
|
|
|
-SDL_Downsample_U8_6c_x4(SDL_AudioCVT * cvt, SDL_AudioFormat format)
|
|
|
-{
|
|
|
-#if DEBUG_CONVERT
|
|
|
- fprintf(stderr, "Downsample (x4) AUDIO_U8, 6 channels.\n");
|
|
|
-#endif
|
|
|
-
|
|
|
- const int dstsize = cvt->len_cvt / 4;
|
|
|
- Uint8 *dst = (Uint8 *) cvt->buf;
|
|
|
- const Uint8 *src = (Uint8 *) cvt->buf;
|
|
|
- const Uint8 *target = (const Uint8 *) (cvt->buf + dstsize);
|
|
|
- Sint16 last_sample0 = (Sint16) src[0];
|
|
|
- Sint16 last_sample1 = (Sint16) src[1];
|
|
|
- Sint16 last_sample2 = (Sint16) src[2];
|
|
|
- Sint16 last_sample3 = (Sint16) src[3];
|
|
|
- Sint16 last_sample4 = (Sint16) src[4];
|
|
|
- Sint16 last_sample5 = (Sint16) src[5];
|
|
|
- while (dst < target) {
|
|
|
- const Sint16 sample0 = (Sint16) src[0];
|
|
|
- const Sint16 sample1 = (Sint16) src[1];
|
|
|
- const Sint16 sample2 = (Sint16) src[2];
|
|
|
- const Sint16 sample3 = (Sint16) src[3];
|
|
|
- const Sint16 sample4 = (Sint16) src[4];
|
|
|
- const Sint16 sample5 = (Sint16) src[5];
|
|
|
- src += 24;
|
|
|
- dst[0] = (Uint8) ((sample0 + last_sample0) >> 1);
|
|
|
- dst[1] = (Uint8) ((sample1 + last_sample1) >> 1);
|
|
|
- dst[2] = (Uint8) ((sample2 + last_sample2) >> 1);
|
|
|
- dst[3] = (Uint8) ((sample3 + last_sample3) >> 1);
|
|
|
- dst[4] = (Uint8) ((sample4 + last_sample4) >> 1);
|
|
|
- dst[5] = (Uint8) ((sample5 + last_sample5) >> 1);
|
|
|
- last_sample0 = sample0;
|
|
|
- last_sample1 = sample1;
|
|
|
- last_sample2 = sample2;
|
|
|
- last_sample3 = sample3;
|
|
|
- last_sample4 = sample4;
|
|
|
- last_sample5 = sample5;
|
|
|
- dst += 6;
|
|
|
- }
|
|
|
-
|
|
|
- cvt->len_cvt = dstsize;
|
|
|
- if (cvt->filters[++cvt->filter_index]) {
|
|
|
- cvt->filters[cvt->filter_index] (cvt, format);
|
|
|
- }
|
|
|
-}
|
|
|
-
|
|
|
-static void SDLCALL
|
|
|
-SDL_Upsample_U8_8c_x2(SDL_AudioCVT * cvt, SDL_AudioFormat format)
|
|
|
-{
|
|
|
-#if DEBUG_CONVERT
|
|
|
- fprintf(stderr, "Upsample (x2) AUDIO_U8, 8 channels.\n");
|
|
|
-#endif
|
|
|
-
|
|
|
- const int dstsize = cvt->len_cvt * 2;
|
|
|
- Uint8 *dst = ((Uint8 *) (cvt->buf + dstsize)) - 8 * 2;
|
|
|
- const Uint8 *src = ((Uint8 *) (cvt->buf + cvt->len_cvt)) - 8;
|
|
|
- const Uint8 *target = ((const Uint8 *) cvt->buf);
|
|
|
- Sint16 last_sample7 = (Sint16) src[7];
|
|
|
- Sint16 last_sample6 = (Sint16) src[6];
|
|
|
- Sint16 last_sample5 = (Sint16) src[5];
|
|
|
- Sint16 last_sample4 = (Sint16) src[4];
|
|
|
- Sint16 last_sample3 = (Sint16) src[3];
|
|
|
- Sint16 last_sample2 = (Sint16) src[2];
|
|
|
- Sint16 last_sample1 = (Sint16) src[1];
|
|
|
- Sint16 last_sample0 = (Sint16) src[0];
|
|
|
- while (dst >= target) {
|
|
|
- const Sint16 sample7 = (Sint16) src[7];
|
|
|
- const Sint16 sample6 = (Sint16) src[6];
|
|
|
- const Sint16 sample5 = (Sint16) src[5];
|
|
|
- const Sint16 sample4 = (Sint16) src[4];
|
|
|
- const Sint16 sample3 = (Sint16) src[3];
|
|
|
- const Sint16 sample2 = (Sint16) src[2];
|
|
|
- const Sint16 sample1 = (Sint16) src[1];
|
|
|
- const Sint16 sample0 = (Sint16) src[0];
|
|
|
- src -= 8;
|
|
|
- dst[15] = (Uint8) ((sample7 + last_sample7) >> 1);
|
|
|
- dst[14] = (Uint8) ((sample6 + last_sample6) >> 1);
|
|
|
- dst[13] = (Uint8) ((sample5 + last_sample5) >> 1);
|
|
|
- dst[12] = (Uint8) ((sample4 + last_sample4) >> 1);
|
|
|
- dst[11] = (Uint8) ((sample3 + last_sample3) >> 1);
|
|
|
- dst[10] = (Uint8) ((sample2 + last_sample2) >> 1);
|
|
|
- dst[9] = (Uint8) ((sample1 + last_sample1) >> 1);
|
|
|
- dst[8] = (Uint8) ((sample0 + last_sample0) >> 1);
|
|
|
- dst[7] = (Uint8) sample7;
|
|
|
- dst[6] = (Uint8) sample6;
|
|
|
- dst[5] = (Uint8) sample5;
|
|
|
- dst[4] = (Uint8) sample4;
|
|
|
- dst[3] = (Uint8) sample3;
|
|
|
- dst[2] = (Uint8) sample2;
|
|
|
- dst[1] = (Uint8) sample1;
|
|
|
- dst[0] = (Uint8) sample0;
|
|
|
- last_sample7 = sample7;
|
|
|
- last_sample6 = sample6;
|
|
|
- last_sample5 = sample5;
|
|
|
- last_sample4 = sample4;
|
|
|
- last_sample3 = sample3;
|
|
|
- last_sample2 = sample2;
|
|
|
- last_sample1 = sample1;
|
|
|
- last_sample0 = sample0;
|
|
|
- dst -= 16;
|
|
|
- }
|
|
|
-
|
|
|
- cvt->len_cvt = dstsize;
|
|
|
- if (cvt->filters[++cvt->filter_index]) {
|
|
|
- cvt->filters[cvt->filter_index] (cvt, format);
|
|
|
- }
|
|
|
-}
|
|
|
-
|
|
|
-static void SDLCALL
|
|
|
-SDL_Downsample_U8_8c_x2(SDL_AudioCVT * cvt, SDL_AudioFormat format)
|
|
|
-{
|
|
|
-#if DEBUG_CONVERT
|
|
|
- fprintf(stderr, "Downsample (x2) AUDIO_U8, 8 channels.\n");
|
|
|
-#endif
|
|
|
-
|
|
|
- const int dstsize = cvt->len_cvt / 2;
|
|
|
- Uint8 *dst = (Uint8 *) cvt->buf;
|
|
|
- const Uint8 *src = (Uint8 *) cvt->buf;
|
|
|
- const Uint8 *target = (const Uint8 *) (cvt->buf + dstsize);
|
|
|
- Sint16 last_sample0 = (Sint16) src[0];
|
|
|
- Sint16 last_sample1 = (Sint16) src[1];
|
|
|
- Sint16 last_sample2 = (Sint16) src[2];
|
|
|
- Sint16 last_sample3 = (Sint16) src[3];
|
|
|
- Sint16 last_sample4 = (Sint16) src[4];
|
|
|
- Sint16 last_sample5 = (Sint16) src[5];
|
|
|
- Sint16 last_sample6 = (Sint16) src[6];
|
|
|
- Sint16 last_sample7 = (Sint16) src[7];
|
|
|
- while (dst < target) {
|
|
|
- const Sint16 sample0 = (Sint16) src[0];
|
|
|
- const Sint16 sample1 = (Sint16) src[1];
|
|
|
- const Sint16 sample2 = (Sint16) src[2];
|
|
|
- const Sint16 sample3 = (Sint16) src[3];
|
|
|
- const Sint16 sample4 = (Sint16) src[4];
|
|
|
- const Sint16 sample5 = (Sint16) src[5];
|
|
|
- const Sint16 sample6 = (Sint16) src[6];
|
|
|
- const Sint16 sample7 = (Sint16) src[7];
|
|
|
- src += 16;
|
|
|
- dst[0] = (Uint8) ((sample0 + last_sample0) >> 1);
|
|
|
- dst[1] = (Uint8) ((sample1 + last_sample1) >> 1);
|
|
|
- dst[2] = (Uint8) ((sample2 + last_sample2) >> 1);
|
|
|
- dst[3] = (Uint8) ((sample3 + last_sample3) >> 1);
|
|
|
- dst[4] = (Uint8) ((sample4 + last_sample4) >> 1);
|
|
|
- dst[5] = (Uint8) ((sample5 + last_sample5) >> 1);
|
|
|
- dst[6] = (Uint8) ((sample6 + last_sample6) >> 1);
|
|
|
- dst[7] = (Uint8) ((sample7 + last_sample7) >> 1);
|
|
|
- last_sample0 = sample0;
|
|
|
- last_sample1 = sample1;
|
|
|
- last_sample2 = sample2;
|
|
|
- last_sample3 = sample3;
|
|
|
- last_sample4 = sample4;
|
|
|
- last_sample5 = sample5;
|
|
|
- last_sample6 = sample6;
|
|
|
- last_sample7 = sample7;
|
|
|
- dst += 8;
|
|
|
- }
|
|
|
-
|
|
|
- cvt->len_cvt = dstsize;
|
|
|
- if (cvt->filters[++cvt->filter_index]) {
|
|
|
- cvt->filters[cvt->filter_index] (cvt, format);
|
|
|
- }
|
|
|
-}
|
|
|
-
|
|
|
-static void SDLCALL
|
|
|
-SDL_Upsample_U8_8c_x4(SDL_AudioCVT * cvt, SDL_AudioFormat format)
|
|
|
-{
|
|
|
-#if DEBUG_CONVERT
|
|
|
- fprintf(stderr, "Upsample (x4) AUDIO_U8, 8 channels.\n");
|
|
|
-#endif
|
|
|
-
|
|
|
- const int dstsize = cvt->len_cvt * 4;
|
|
|
- Uint8 *dst = ((Uint8 *) (cvt->buf + dstsize)) - 8 * 4;
|
|
|
- const Uint8 *src = ((Uint8 *) (cvt->buf + cvt->len_cvt)) - 8;
|
|
|
- const Uint8 *target = ((const Uint8 *) cvt->buf);
|
|
|
- Sint16 last_sample7 = (Sint16) src[7];
|
|
|
- Sint16 last_sample6 = (Sint16) src[6];
|
|
|
- Sint16 last_sample5 = (Sint16) src[5];
|
|
|
- Sint16 last_sample4 = (Sint16) src[4];
|
|
|
- Sint16 last_sample3 = (Sint16) src[3];
|
|
|
- Sint16 last_sample2 = (Sint16) src[2];
|
|
|
- Sint16 last_sample1 = (Sint16) src[1];
|
|
|
- Sint16 last_sample0 = (Sint16) src[0];
|
|
|
- while (dst >= target) {
|
|
|
- const Sint16 sample7 = (Sint16) src[7];
|
|
|
- const Sint16 sample6 = (Sint16) src[6];
|
|
|
- const Sint16 sample5 = (Sint16) src[5];
|
|
|
- const Sint16 sample4 = (Sint16) src[4];
|
|
|
- const Sint16 sample3 = (Sint16) src[3];
|
|
|
- const Sint16 sample2 = (Sint16) src[2];
|
|
|
- const Sint16 sample1 = (Sint16) src[1];
|
|
|
- const Sint16 sample0 = (Sint16) src[0];
|
|
|
- src -= 8;
|
|
|
- dst[31] = (Uint8) ((sample7 + (3 * last_sample7)) >> 2);
|
|
|
- dst[30] = (Uint8) ((sample6 + (3 * last_sample6)) >> 2);
|
|
|
- dst[29] = (Uint8) ((sample5 + (3 * last_sample5)) >> 2);
|
|
|
- dst[28] = (Uint8) ((sample4 + (3 * last_sample4)) >> 2);
|
|
|
- dst[27] = (Uint8) ((sample3 + (3 * last_sample3)) >> 2);
|
|
|
- dst[26] = (Uint8) ((sample2 + (3 * last_sample2)) >> 2);
|
|
|
- dst[25] = (Uint8) ((sample1 + (3 * last_sample1)) >> 2);
|
|
|
- dst[24] = (Uint8) ((sample0 + (3 * last_sample0)) >> 2);
|
|
|
- dst[23] = (Uint8) ((sample7 + last_sample7) >> 1);
|
|
|
- dst[22] = (Uint8) ((sample6 + last_sample6) >> 1);
|
|
|
- dst[21] = (Uint8) ((sample5 + last_sample5) >> 1);
|
|
|
- dst[20] = (Uint8) ((sample4 + last_sample4) >> 1);
|
|
|
- dst[19] = (Uint8) ((sample3 + last_sample3) >> 1);
|
|
|
- dst[18] = (Uint8) ((sample2 + last_sample2) >> 1);
|
|
|
- dst[17] = (Uint8) ((sample1 + last_sample1) >> 1);
|
|
|
- dst[16] = (Uint8) ((sample0 + last_sample0) >> 1);
|
|
|
- dst[15] = (Uint8) (((3 * sample7) + last_sample7) >> 2);
|
|
|
- dst[14] = (Uint8) (((3 * sample6) + last_sample6) >> 2);
|
|
|
- dst[13] = (Uint8) (((3 * sample5) + last_sample5) >> 2);
|
|
|
- dst[12] = (Uint8) (((3 * sample4) + last_sample4) >> 2);
|
|
|
- dst[11] = (Uint8) (((3 * sample3) + last_sample3) >> 2);
|
|
|
- dst[10] = (Uint8) (((3 * sample2) + last_sample2) >> 2);
|
|
|
- dst[9] = (Uint8) (((3 * sample1) + last_sample1) >> 2);
|
|
|
- dst[8] = (Uint8) (((3 * sample0) + last_sample0) >> 2);
|
|
|
- dst[7] = (Uint8) sample7;
|
|
|
- dst[6] = (Uint8) sample6;
|
|
|
- dst[5] = (Uint8) sample5;
|
|
|
- dst[4] = (Uint8) sample4;
|
|
|
- dst[3] = (Uint8) sample3;
|
|
|
- dst[2] = (Uint8) sample2;
|
|
|
- dst[1] = (Uint8) sample1;
|
|
|
- dst[0] = (Uint8) sample0;
|
|
|
- last_sample7 = sample7;
|
|
|
- last_sample6 = sample6;
|
|
|
- last_sample5 = sample5;
|
|
|
- last_sample4 = sample4;
|
|
|
- last_sample3 = sample3;
|
|
|
- last_sample2 = sample2;
|
|
|
- last_sample1 = sample1;
|
|
|
- last_sample0 = sample0;
|
|
|
- dst -= 32;
|
|
|
- }
|
|
|
-
|
|
|
- cvt->len_cvt = dstsize;
|
|
|
- if (cvt->filters[++cvt->filter_index]) {
|
|
|
- cvt->filters[cvt->filter_index] (cvt, format);
|
|
|
- }
|
|
|
-}
|
|
|
-
|
|
|
-static void SDLCALL
|
|
|
-SDL_Downsample_U8_8c_x4(SDL_AudioCVT * cvt, SDL_AudioFormat format)
|
|
|
-{
|
|
|
-#if DEBUG_CONVERT
|
|
|
- fprintf(stderr, "Downsample (x4) AUDIO_U8, 8 channels.\n");
|
|
|
-#endif
|
|
|
-
|
|
|
- const int dstsize = cvt->len_cvt / 4;
|
|
|
- Uint8 *dst = (Uint8 *) cvt->buf;
|
|
|
- const Uint8 *src = (Uint8 *) cvt->buf;
|
|
|
- const Uint8 *target = (const Uint8 *) (cvt->buf + dstsize);
|
|
|
- Sint16 last_sample0 = (Sint16) src[0];
|
|
|
- Sint16 last_sample1 = (Sint16) src[1];
|
|
|
- Sint16 last_sample2 = (Sint16) src[2];
|
|
|
- Sint16 last_sample3 = (Sint16) src[3];
|
|
|
- Sint16 last_sample4 = (Sint16) src[4];
|
|
|
- Sint16 last_sample5 = (Sint16) src[5];
|
|
|
- Sint16 last_sample6 = (Sint16) src[6];
|
|
|
- Sint16 last_sample7 = (Sint16) src[7];
|
|
|
- while (dst < target) {
|
|
|
- const Sint16 sample0 = (Sint16) src[0];
|
|
|
- const Sint16 sample1 = (Sint16) src[1];
|
|
|
- const Sint16 sample2 = (Sint16) src[2];
|
|
|
- const Sint16 sample3 = (Sint16) src[3];
|
|
|
- const Sint16 sample4 = (Sint16) src[4];
|
|
|
- const Sint16 sample5 = (Sint16) src[5];
|
|
|
- const Sint16 sample6 = (Sint16) src[6];
|
|
|
- const Sint16 sample7 = (Sint16) src[7];
|
|
|
- src += 32;
|
|
|
- dst[0] = (Uint8) ((sample0 + last_sample0) >> 1);
|
|
|
- dst[1] = (Uint8) ((sample1 + last_sample1) >> 1);
|
|
|
- dst[2] = (Uint8) ((sample2 + last_sample2) >> 1);
|
|
|
- dst[3] = (Uint8) ((sample3 + last_sample3) >> 1);
|
|
|
- dst[4] = (Uint8) ((sample4 + last_sample4) >> 1);
|
|
|
- dst[5] = (Uint8) ((sample5 + last_sample5) >> 1);
|
|
|
- dst[6] = (Uint8) ((sample6 + last_sample6) >> 1);
|
|
|
- dst[7] = (Uint8) ((sample7 + last_sample7) >> 1);
|
|
|
- last_sample0 = sample0;
|
|
|
- last_sample1 = sample1;
|
|
|
- last_sample2 = sample2;
|
|
|
- last_sample3 = sample3;
|
|
|
- last_sample4 = sample4;
|
|
|
- last_sample5 = sample5;
|
|
|
- last_sample6 = sample6;
|
|
|
- last_sample7 = sample7;
|
|
|
- dst += 8;
|
|
|
- }
|
|
|
-
|
|
|
- cvt->len_cvt = dstsize;
|
|
|
- if (cvt->filters[++cvt->filter_index]) {
|
|
|
- cvt->filters[cvt->filter_index] (cvt, format);
|
|
|
- }
|
|
|
-}
|
|
|
-
|
|
|
-static void SDLCALL
|
|
|
-SDL_Upsample_S8_1c_x2(SDL_AudioCVT * cvt, SDL_AudioFormat format)
|
|
|
-{
|
|
|
-#if DEBUG_CONVERT
|
|
|
- fprintf(stderr, "Upsample (x2) AUDIO_S8, 1 channels.\n");
|
|
|
-#endif
|
|
|
-
|
|
|
- const int dstsize = cvt->len_cvt * 2;
|
|
|
- Sint8 *dst = ((Sint8 *) (cvt->buf + dstsize)) - 1 * 2;
|
|
|
- const Sint8 *src = ((Sint8 *) (cvt->buf + cvt->len_cvt)) - 1;
|
|
|
- const Sint8 *target = ((const Sint8 *) cvt->buf);
|
|
|
- Sint16 last_sample0 = (Sint16) ((Sint8) src[0]);
|
|
|
- while (dst >= target) {
|
|
|
- const Sint16 sample0 = (Sint16) ((Sint8) src[0]);
|
|
|
- src--;
|
|
|
- dst[1] = (Sint8) ((sample0 + last_sample0) >> 1);
|
|
|
- dst[0] = (Sint8) sample0;
|
|
|
- last_sample0 = sample0;
|
|
|
- dst -= 2;
|
|
|
- }
|
|
|
-
|
|
|
- cvt->len_cvt = dstsize;
|
|
|
- if (cvt->filters[++cvt->filter_index]) {
|
|
|
- cvt->filters[cvt->filter_index] (cvt, format);
|
|
|
- }
|
|
|
-}
|
|
|
-
|
|
|
-static void SDLCALL
|
|
|
-SDL_Downsample_S8_1c_x2(SDL_AudioCVT * cvt, SDL_AudioFormat format)
|
|
|
-{
|
|
|
-#if DEBUG_CONVERT
|
|
|
- fprintf(stderr, "Downsample (x2) AUDIO_S8, 1 channels.\n");
|
|
|
-#endif
|
|
|
-
|
|
|
- const int dstsize = cvt->len_cvt / 2;
|
|
|
- Sint8 *dst = (Sint8 *) cvt->buf;
|
|
|
- const Sint8 *src = (Sint8 *) cvt->buf;
|
|
|
- const Sint8 *target = (const Sint8 *) (cvt->buf + dstsize);
|
|
|
- Sint16 last_sample0 = (Sint16) ((Sint8) src[0]);
|
|
|
- while (dst < target) {
|
|
|
- const Sint16 sample0 = (Sint16) ((Sint8) src[0]);
|
|
|
- src += 2;
|
|
|
- dst[0] = (Sint8) ((sample0 + last_sample0) >> 1);
|
|
|
- last_sample0 = sample0;
|
|
|
- dst++;
|
|
|
- }
|
|
|
-
|
|
|
- cvt->len_cvt = dstsize;
|
|
|
- if (cvt->filters[++cvt->filter_index]) {
|
|
|
- cvt->filters[cvt->filter_index] (cvt, format);
|
|
|
- }
|
|
|
-}
|
|
|
-
|
|
|
-static void SDLCALL
|
|
|
-SDL_Upsample_S8_1c_x4(SDL_AudioCVT * cvt, SDL_AudioFormat format)
|
|
|
-{
|
|
|
-#if DEBUG_CONVERT
|
|
|
- fprintf(stderr, "Upsample (x4) AUDIO_S8, 1 channels.\n");
|
|
|
-#endif
|
|
|
-
|
|
|
- const int dstsize = cvt->len_cvt * 4;
|
|
|
- Sint8 *dst = ((Sint8 *) (cvt->buf + dstsize)) - 1 * 4;
|
|
|
- const Sint8 *src = ((Sint8 *) (cvt->buf + cvt->len_cvt)) - 1;
|
|
|
- const Sint8 *target = ((const Sint8 *) cvt->buf);
|
|
|
- Sint16 last_sample0 = (Sint16) ((Sint8) src[0]);
|
|
|
- while (dst >= target) {
|
|
|
- const Sint16 sample0 = (Sint16) ((Sint8) src[0]);
|
|
|
- src--;
|
|
|
- dst[3] = (Sint8) ((sample0 + (3 * last_sample0)) >> 2);
|
|
|
- dst[2] = (Sint8) ((sample0 + last_sample0) >> 1);
|
|
|
- dst[1] = (Sint8) (((3 * sample0) + last_sample0) >> 2);
|
|
|
- dst[0] = (Sint8) sample0;
|
|
|
- last_sample0 = sample0;
|
|
|
- dst -= 4;
|
|
|
- }
|
|
|
-
|
|
|
- cvt->len_cvt = dstsize;
|
|
|
- if (cvt->filters[++cvt->filter_index]) {
|
|
|
- cvt->filters[cvt->filter_index] (cvt, format);
|
|
|
- }
|
|
|
-}
|
|
|
-
|
|
|
-static void SDLCALL
|
|
|
-SDL_Downsample_S8_1c_x4(SDL_AudioCVT * cvt, SDL_AudioFormat format)
|
|
|
-{
|
|
|
-#if DEBUG_CONVERT
|
|
|
- fprintf(stderr, "Downsample (x4) AUDIO_S8, 1 channels.\n");
|
|
|
-#endif
|
|
|
-
|
|
|
- const int dstsize = cvt->len_cvt / 4;
|
|
|
- Sint8 *dst = (Sint8 *) cvt->buf;
|
|
|
- const Sint8 *src = (Sint8 *) cvt->buf;
|
|
|
- const Sint8 *target = (const Sint8 *) (cvt->buf + dstsize);
|
|
|
- Sint16 last_sample0 = (Sint16) ((Sint8) src[0]);
|
|
|
- while (dst < target) {
|
|
|
- const Sint16 sample0 = (Sint16) ((Sint8) src[0]);
|
|
|
- src += 4;
|
|
|
- dst[0] = (Sint8) ((sample0 + last_sample0) >> 1);
|
|
|
- last_sample0 = sample0;
|
|
|
- dst++;
|
|
|
- }
|
|
|
-
|
|
|
- cvt->len_cvt = dstsize;
|
|
|
- if (cvt->filters[++cvt->filter_index]) {
|
|
|
- cvt->filters[cvt->filter_index] (cvt, format);
|
|
|
- }
|
|
|
-}
|
|
|
-
|
|
|
-static void SDLCALL
|
|
|
-SDL_Upsample_S8_2c_x2(SDL_AudioCVT * cvt, SDL_AudioFormat format)
|
|
|
-{
|
|
|
-#if DEBUG_CONVERT
|
|
|
- fprintf(stderr, "Upsample (x2) AUDIO_S8, 2 channels.\n");
|
|
|
-#endif
|
|
|
-
|
|
|
- const int dstsize = cvt->len_cvt * 2;
|
|
|
- Sint8 *dst = ((Sint8 *) (cvt->buf + dstsize)) - 2 * 2;
|
|
|
- const Sint8 *src = ((Sint8 *) (cvt->buf + cvt->len_cvt)) - 2;
|
|
|
- const Sint8 *target = ((const Sint8 *) cvt->buf);
|
|
|
- Sint16 last_sample1 = (Sint16) ((Sint8) src[1]);
|
|
|
- Sint16 last_sample0 = (Sint16) ((Sint8) src[0]);
|
|
|
- while (dst >= target) {
|
|
|
- const Sint16 sample1 = (Sint16) ((Sint8) src[1]);
|
|
|
- const Sint16 sample0 = (Sint16) ((Sint8) src[0]);
|
|
|
- src -= 2;
|
|
|
- dst[3] = (Sint8) ((sample1 + last_sample1) >> 1);
|
|
|
- dst[2] = (Sint8) ((sample0 + last_sample0) >> 1);
|
|
|
- dst[1] = (Sint8) sample1;
|
|
|
- dst[0] = (Sint8) sample0;
|
|
|
- last_sample1 = sample1;
|
|
|
- last_sample0 = sample0;
|
|
|
- dst -= 4;
|
|
|
- }
|
|
|
-
|
|
|
- cvt->len_cvt = dstsize;
|
|
|
- if (cvt->filters[++cvt->filter_index]) {
|
|
|
- cvt->filters[cvt->filter_index] (cvt, format);
|
|
|
- }
|
|
|
-}
|
|
|
-
|
|
|
-static void SDLCALL
|
|
|
-SDL_Downsample_S8_2c_x2(SDL_AudioCVT * cvt, SDL_AudioFormat format)
|
|
|
-{
|
|
|
-#if DEBUG_CONVERT
|
|
|
- fprintf(stderr, "Downsample (x2) AUDIO_S8, 2 channels.\n");
|
|
|
-#endif
|
|
|
-
|
|
|
- const int dstsize = cvt->len_cvt / 2;
|
|
|
- Sint8 *dst = (Sint8 *) cvt->buf;
|
|
|
- const Sint8 *src = (Sint8 *) cvt->buf;
|
|
|
- const Sint8 *target = (const Sint8 *) (cvt->buf + dstsize);
|
|
|
- Sint16 last_sample0 = (Sint16) ((Sint8) src[0]);
|
|
|
- Sint16 last_sample1 = (Sint16) ((Sint8) src[1]);
|
|
|
- while (dst < target) {
|
|
|
- const Sint16 sample0 = (Sint16) ((Sint8) src[0]);
|
|
|
- const Sint16 sample1 = (Sint16) ((Sint8) src[1]);
|
|
|
- src += 4;
|
|
|
- dst[0] = (Sint8) ((sample0 + last_sample0) >> 1);
|
|
|
- dst[1] = (Sint8) ((sample1 + last_sample1) >> 1);
|
|
|
- last_sample0 = sample0;
|
|
|
- last_sample1 = sample1;
|
|
|
- dst += 2;
|
|
|
- }
|
|
|
-
|
|
|
- cvt->len_cvt = dstsize;
|
|
|
- if (cvt->filters[++cvt->filter_index]) {
|
|
|
- cvt->filters[cvt->filter_index] (cvt, format);
|
|
|
- }
|
|
|
-}
|
|
|
-
|
|
|
-static void SDLCALL
|
|
|
-SDL_Upsample_S8_2c_x4(SDL_AudioCVT * cvt, SDL_AudioFormat format)
|
|
|
-{
|
|
|
-#if DEBUG_CONVERT
|
|
|
- fprintf(stderr, "Upsample (x4) AUDIO_S8, 2 channels.\n");
|
|
|
-#endif
|
|
|
-
|
|
|
- const int dstsize = cvt->len_cvt * 4;
|
|
|
- Sint8 *dst = ((Sint8 *) (cvt->buf + dstsize)) - 2 * 4;
|
|
|
- const Sint8 *src = ((Sint8 *) (cvt->buf + cvt->len_cvt)) - 2;
|
|
|
- const Sint8 *target = ((const Sint8 *) cvt->buf);
|
|
|
- Sint16 last_sample1 = (Sint16) ((Sint8) src[1]);
|
|
|
- Sint16 last_sample0 = (Sint16) ((Sint8) src[0]);
|
|
|
- while (dst >= target) {
|
|
|
- const Sint16 sample1 = (Sint16) ((Sint8) src[1]);
|
|
|
- const Sint16 sample0 = (Sint16) ((Sint8) src[0]);
|
|
|
- src -= 2;
|
|
|
- dst[7] = (Sint8) ((sample1 + (3 * last_sample1)) >> 2);
|
|
|
- dst[6] = (Sint8) ((sample0 + (3 * last_sample0)) >> 2);
|
|
|
- dst[5] = (Sint8) ((sample1 + last_sample1) >> 1);
|
|
|
- dst[4] = (Sint8) ((sample0 + last_sample0) >> 1);
|
|
|
- dst[3] = (Sint8) (((3 * sample1) + last_sample1) >> 2);
|
|
|
- dst[2] = (Sint8) (((3 * sample0) + last_sample0) >> 2);
|
|
|
- dst[1] = (Sint8) sample1;
|
|
|
- dst[0] = (Sint8) sample0;
|
|
|
- last_sample1 = sample1;
|
|
|
- last_sample0 = sample0;
|
|
|
- dst -= 8;
|
|
|
- }
|
|
|
-
|
|
|
- cvt->len_cvt = dstsize;
|
|
|
- if (cvt->filters[++cvt->filter_index]) {
|
|
|
- cvt->filters[cvt->filter_index] (cvt, format);
|
|
|
- }
|
|
|
-}
|
|
|
-
|
|
|
-static void SDLCALL
|
|
|
-SDL_Downsample_S8_2c_x4(SDL_AudioCVT * cvt, SDL_AudioFormat format)
|
|
|
-{
|
|
|
-#if DEBUG_CONVERT
|
|
|
- fprintf(stderr, "Downsample (x4) AUDIO_S8, 2 channels.\n");
|
|
|
-#endif
|
|
|
-
|
|
|
- const int dstsize = cvt->len_cvt / 4;
|
|
|
- Sint8 *dst = (Sint8 *) cvt->buf;
|
|
|
- const Sint8 *src = (Sint8 *) cvt->buf;
|
|
|
- const Sint8 *target = (const Sint8 *) (cvt->buf + dstsize);
|
|
|
- Sint16 last_sample0 = (Sint16) ((Sint8) src[0]);
|
|
|
- Sint16 last_sample1 = (Sint16) ((Sint8) src[1]);
|
|
|
- while (dst < target) {
|
|
|
- const Sint16 sample0 = (Sint16) ((Sint8) src[0]);
|
|
|
- const Sint16 sample1 = (Sint16) ((Sint8) src[1]);
|
|
|
- src += 8;
|
|
|
- dst[0] = (Sint8) ((sample0 + last_sample0) >> 1);
|
|
|
- dst[1] = (Sint8) ((sample1 + last_sample1) >> 1);
|
|
|
- last_sample0 = sample0;
|
|
|
- last_sample1 = sample1;
|
|
|
- dst += 2;
|
|
|
- }
|
|
|
-
|
|
|
- cvt->len_cvt = dstsize;
|
|
|
- if (cvt->filters[++cvt->filter_index]) {
|
|
|
- cvt->filters[cvt->filter_index] (cvt, format);
|
|
|
- }
|
|
|
-}
|
|
|
-
|
|
|
-static void SDLCALL
|
|
|
-SDL_Upsample_S8_4c_x2(SDL_AudioCVT * cvt, SDL_AudioFormat format)
|
|
|
-{
|
|
|
-#if DEBUG_CONVERT
|
|
|
- fprintf(stderr, "Upsample (x2) AUDIO_S8, 4 channels.\n");
|
|
|
-#endif
|
|
|
-
|
|
|
- const int dstsize = cvt->len_cvt * 2;
|
|
|
- Sint8 *dst = ((Sint8 *) (cvt->buf + dstsize)) - 4 * 2;
|
|
|
- const Sint8 *src = ((Sint8 *) (cvt->buf + cvt->len_cvt)) - 4;
|
|
|
- const Sint8 *target = ((const Sint8 *) cvt->buf);
|
|
|
- Sint16 last_sample3 = (Sint16) ((Sint8) src[3]);
|
|
|
- Sint16 last_sample2 = (Sint16) ((Sint8) src[2]);
|
|
|
- Sint16 last_sample1 = (Sint16) ((Sint8) src[1]);
|
|
|
- Sint16 last_sample0 = (Sint16) ((Sint8) src[0]);
|
|
|
- while (dst >= target) {
|
|
|
- const Sint16 sample3 = (Sint16) ((Sint8) src[3]);
|
|
|
- const Sint16 sample2 = (Sint16) ((Sint8) src[2]);
|
|
|
- const Sint16 sample1 = (Sint16) ((Sint8) src[1]);
|
|
|
- const Sint16 sample0 = (Sint16) ((Sint8) src[0]);
|
|
|
- src -= 4;
|
|
|
- dst[7] = (Sint8) ((sample3 + last_sample3) >> 1);
|
|
|
- dst[6] = (Sint8) ((sample2 + last_sample2) >> 1);
|
|
|
- dst[5] = (Sint8) ((sample1 + last_sample1) >> 1);
|
|
|
- dst[4] = (Sint8) ((sample0 + last_sample0) >> 1);
|
|
|
- dst[3] = (Sint8) sample3;
|
|
|
- dst[2] = (Sint8) sample2;
|
|
|
- dst[1] = (Sint8) sample1;
|
|
|
- dst[0] = (Sint8) sample0;
|
|
|
- last_sample3 = sample3;
|
|
|
- last_sample2 = sample2;
|
|
|
- last_sample1 = sample1;
|
|
|
- last_sample0 = sample0;
|
|
|
- dst -= 8;
|
|
|
- }
|
|
|
-
|
|
|
- cvt->len_cvt = dstsize;
|
|
|
- if (cvt->filters[++cvt->filter_index]) {
|
|
|
- cvt->filters[cvt->filter_index] (cvt, format);
|
|
|
- }
|
|
|
-}
|
|
|
-
|
|
|
-static void SDLCALL
|
|
|
-SDL_Downsample_S8_4c_x2(SDL_AudioCVT * cvt, SDL_AudioFormat format)
|
|
|
-{
|
|
|
-#if DEBUG_CONVERT
|
|
|
- fprintf(stderr, "Downsample (x2) AUDIO_S8, 4 channels.\n");
|
|
|
-#endif
|
|
|
-
|
|
|
- const int dstsize = cvt->len_cvt / 2;
|
|
|
- Sint8 *dst = (Sint8 *) cvt->buf;
|
|
|
- const Sint8 *src = (Sint8 *) cvt->buf;
|
|
|
- const Sint8 *target = (const Sint8 *) (cvt->buf + dstsize);
|
|
|
- Sint16 last_sample0 = (Sint16) ((Sint8) src[0]);
|
|
|
- Sint16 last_sample1 = (Sint16) ((Sint8) src[1]);
|
|
|
- Sint16 last_sample2 = (Sint16) ((Sint8) src[2]);
|
|
|
- Sint16 last_sample3 = (Sint16) ((Sint8) src[3]);
|
|
|
- while (dst < target) {
|
|
|
- const Sint16 sample0 = (Sint16) ((Sint8) src[0]);
|
|
|
- const Sint16 sample1 = (Sint16) ((Sint8) src[1]);
|
|
|
- const Sint16 sample2 = (Sint16) ((Sint8) src[2]);
|
|
|
- const Sint16 sample3 = (Sint16) ((Sint8) src[3]);
|
|
|
- src += 8;
|
|
|
- dst[0] = (Sint8) ((sample0 + last_sample0) >> 1);
|
|
|
- dst[1] = (Sint8) ((sample1 + last_sample1) >> 1);
|
|
|
- dst[2] = (Sint8) ((sample2 + last_sample2) >> 1);
|
|
|
- dst[3] = (Sint8) ((sample3 + last_sample3) >> 1);
|
|
|
- last_sample0 = sample0;
|
|
|
- last_sample1 = sample1;
|
|
|
- last_sample2 = sample2;
|
|
|
- last_sample3 = sample3;
|
|
|
- dst += 4;
|
|
|
- }
|
|
|
-
|
|
|
- cvt->len_cvt = dstsize;
|
|
|
- if (cvt->filters[++cvt->filter_index]) {
|
|
|
- cvt->filters[cvt->filter_index] (cvt, format);
|
|
|
- }
|
|
|
-}
|
|
|
-
|
|
|
-static void SDLCALL
|
|
|
-SDL_Upsample_S8_4c_x4(SDL_AudioCVT * cvt, SDL_AudioFormat format)
|
|
|
-{
|
|
|
-#if DEBUG_CONVERT
|
|
|
- fprintf(stderr, "Upsample (x4) AUDIO_S8, 4 channels.\n");
|
|
|
-#endif
|
|
|
-
|
|
|
- const int dstsize = cvt->len_cvt * 4;
|
|
|
- Sint8 *dst = ((Sint8 *) (cvt->buf + dstsize)) - 4 * 4;
|
|
|
- const Sint8 *src = ((Sint8 *) (cvt->buf + cvt->len_cvt)) - 4;
|
|
|
- const Sint8 *target = ((const Sint8 *) cvt->buf);
|
|
|
- Sint16 last_sample3 = (Sint16) ((Sint8) src[3]);
|
|
|
- Sint16 last_sample2 = (Sint16) ((Sint8) src[2]);
|
|
|
- Sint16 last_sample1 = (Sint16) ((Sint8) src[1]);
|
|
|
- Sint16 last_sample0 = (Sint16) ((Sint8) src[0]);
|
|
|
- while (dst >= target) {
|
|
|
- const Sint16 sample3 = (Sint16) ((Sint8) src[3]);
|
|
|
- const Sint16 sample2 = (Sint16) ((Sint8) src[2]);
|
|
|
- const Sint16 sample1 = (Sint16) ((Sint8) src[1]);
|
|
|
- const Sint16 sample0 = (Sint16) ((Sint8) src[0]);
|
|
|
- src -= 4;
|
|
|
- dst[15] = (Sint8) ((sample3 + (3 * last_sample3)) >> 2);
|
|
|
- dst[14] = (Sint8) ((sample2 + (3 * last_sample2)) >> 2);
|
|
|
- dst[13] = (Sint8) ((sample1 + (3 * last_sample1)) >> 2);
|
|
|
- dst[12] = (Sint8) ((sample0 + (3 * last_sample0)) >> 2);
|
|
|
- dst[11] = (Sint8) ((sample3 + last_sample3) >> 1);
|
|
|
- dst[10] = (Sint8) ((sample2 + last_sample2) >> 1);
|
|
|
- dst[9] = (Sint8) ((sample1 + last_sample1) >> 1);
|
|
|
- dst[8] = (Sint8) ((sample0 + last_sample0) >> 1);
|
|
|
- dst[7] = (Sint8) (((3 * sample3) + last_sample3) >> 2);
|
|
|
- dst[6] = (Sint8) (((3 * sample2) + last_sample2) >> 2);
|
|
|
- dst[5] = (Sint8) (((3 * sample1) + last_sample1) >> 2);
|
|
|
- dst[4] = (Sint8) (((3 * sample0) + last_sample0) >> 2);
|
|
|
- dst[3] = (Sint8) sample3;
|
|
|
- dst[2] = (Sint8) sample2;
|
|
|
- dst[1] = (Sint8) sample1;
|
|
|
- dst[0] = (Sint8) sample0;
|
|
|
- last_sample3 = sample3;
|
|
|
- last_sample2 = sample2;
|
|
|
- last_sample1 = sample1;
|
|
|
- last_sample0 = sample0;
|
|
|
- dst -= 16;
|
|
|
- }
|
|
|
-
|
|
|
- cvt->len_cvt = dstsize;
|
|
|
- if (cvt->filters[++cvt->filter_index]) {
|
|
|
- cvt->filters[cvt->filter_index] (cvt, format);
|
|
|
- }
|
|
|
-}
|
|
|
-
|
|
|
-static void SDLCALL
|
|
|
-SDL_Downsample_S8_4c_x4(SDL_AudioCVT * cvt, SDL_AudioFormat format)
|
|
|
-{
|
|
|
-#if DEBUG_CONVERT
|
|
|
- fprintf(stderr, "Downsample (x4) AUDIO_S8, 4 channels.\n");
|
|
|
-#endif
|
|
|
-
|
|
|
- const int dstsize = cvt->len_cvt / 4;
|
|
|
- Sint8 *dst = (Sint8 *) cvt->buf;
|
|
|
- const Sint8 *src = (Sint8 *) cvt->buf;
|
|
|
- const Sint8 *target = (const Sint8 *) (cvt->buf + dstsize);
|
|
|
- Sint16 last_sample0 = (Sint16) ((Sint8) src[0]);
|
|
|
- Sint16 last_sample1 = (Sint16) ((Sint8) src[1]);
|
|
|
- Sint16 last_sample2 = (Sint16) ((Sint8) src[2]);
|
|
|
- Sint16 last_sample3 = (Sint16) ((Sint8) src[3]);
|
|
|
- while (dst < target) {
|
|
|
- const Sint16 sample0 = (Sint16) ((Sint8) src[0]);
|
|
|
- const Sint16 sample1 = (Sint16) ((Sint8) src[1]);
|
|
|
- const Sint16 sample2 = (Sint16) ((Sint8) src[2]);
|
|
|
- const Sint16 sample3 = (Sint16) ((Sint8) src[3]);
|
|
|
- src += 16;
|
|
|
- dst[0] = (Sint8) ((sample0 + last_sample0) >> 1);
|
|
|
- dst[1] = (Sint8) ((sample1 + last_sample1) >> 1);
|
|
|
- dst[2] = (Sint8) ((sample2 + last_sample2) >> 1);
|
|
|
- dst[3] = (Sint8) ((sample3 + last_sample3) >> 1);
|
|
|
- last_sample0 = sample0;
|
|
|
- last_sample1 = sample1;
|
|
|
- last_sample2 = sample2;
|
|
|
- last_sample3 = sample3;
|
|
|
- dst += 4;
|
|
|
- }
|
|
|
-
|
|
|
- cvt->len_cvt = dstsize;
|
|
|
- if (cvt->filters[++cvt->filter_index]) {
|
|
|
- cvt->filters[cvt->filter_index] (cvt, format);
|
|
|
- }
|
|
|
-}
|
|
|
-
|
|
|
-static void SDLCALL
|
|
|
-SDL_Upsample_S8_6c_x2(SDL_AudioCVT * cvt, SDL_AudioFormat format)
|
|
|
-{
|
|
|
-#if DEBUG_CONVERT
|
|
|
- fprintf(stderr, "Upsample (x2) AUDIO_S8, 6 channels.\n");
|
|
|
-#endif
|
|
|
-
|
|
|
- const int dstsize = cvt->len_cvt * 2;
|
|
|
- Sint8 *dst = ((Sint8 *) (cvt->buf + dstsize)) - 6 * 2;
|
|
|
- const Sint8 *src = ((Sint8 *) (cvt->buf + cvt->len_cvt)) - 6;
|
|
|
- const Sint8 *target = ((const Sint8 *) cvt->buf);
|
|
|
- Sint16 last_sample5 = (Sint16) ((Sint8) src[5]);
|
|
|
- Sint16 last_sample4 = (Sint16) ((Sint8) src[4]);
|
|
|
- Sint16 last_sample3 = (Sint16) ((Sint8) src[3]);
|
|
|
- Sint16 last_sample2 = (Sint16) ((Sint8) src[2]);
|
|
|
- Sint16 last_sample1 = (Sint16) ((Sint8) src[1]);
|
|
|
- Sint16 last_sample0 = (Sint16) ((Sint8) src[0]);
|
|
|
- while (dst >= target) {
|
|
|
- const Sint16 sample5 = (Sint16) ((Sint8) src[5]);
|
|
|
- const Sint16 sample4 = (Sint16) ((Sint8) src[4]);
|
|
|
- const Sint16 sample3 = (Sint16) ((Sint8) src[3]);
|
|
|
- const Sint16 sample2 = (Sint16) ((Sint8) src[2]);
|
|
|
- const Sint16 sample1 = (Sint16) ((Sint8) src[1]);
|
|
|
- const Sint16 sample0 = (Sint16) ((Sint8) src[0]);
|
|
|
- src -= 6;
|
|
|
- dst[11] = (Sint8) ((sample5 + last_sample5) >> 1);
|
|
|
- dst[10] = (Sint8) ((sample4 + last_sample4) >> 1);
|
|
|
- dst[9] = (Sint8) ((sample3 + last_sample3) >> 1);
|
|
|
- dst[8] = (Sint8) ((sample2 + last_sample2) >> 1);
|
|
|
- dst[7] = (Sint8) ((sample1 + last_sample1) >> 1);
|
|
|
- dst[6] = (Sint8) ((sample0 + last_sample0) >> 1);
|
|
|
- dst[5] = (Sint8) sample5;
|
|
|
- dst[4] = (Sint8) sample4;
|
|
|
- dst[3] = (Sint8) sample3;
|
|
|
- dst[2] = (Sint8) sample2;
|
|
|
- dst[1] = (Sint8) sample1;
|
|
|
- dst[0] = (Sint8) sample0;
|
|
|
- last_sample5 = sample5;
|
|
|
- last_sample4 = sample4;
|
|
|
- last_sample3 = sample3;
|
|
|
- last_sample2 = sample2;
|
|
|
- last_sample1 = sample1;
|
|
|
- last_sample0 = sample0;
|
|
|
- dst -= 12;
|
|
|
- }
|
|
|
-
|
|
|
- cvt->len_cvt = dstsize;
|
|
|
- if (cvt->filters[++cvt->filter_index]) {
|
|
|
- cvt->filters[cvt->filter_index] (cvt, format);
|
|
|
- }
|
|
|
-}
|
|
|
-
|
|
|
-static void SDLCALL
|
|
|
-SDL_Downsample_S8_6c_x2(SDL_AudioCVT * cvt, SDL_AudioFormat format)
|
|
|
-{
|
|
|
-#if DEBUG_CONVERT
|
|
|
- fprintf(stderr, "Downsample (x2) AUDIO_S8, 6 channels.\n");
|
|
|
-#endif
|
|
|
-
|
|
|
- const int dstsize = cvt->len_cvt / 2;
|
|
|
- Sint8 *dst = (Sint8 *) cvt->buf;
|
|
|
- const Sint8 *src = (Sint8 *) cvt->buf;
|
|
|
- const Sint8 *target = (const Sint8 *) (cvt->buf + dstsize);
|
|
|
- Sint16 last_sample0 = (Sint16) ((Sint8) src[0]);
|
|
|
- Sint16 last_sample1 = (Sint16) ((Sint8) src[1]);
|
|
|
- Sint16 last_sample2 = (Sint16) ((Sint8) src[2]);
|
|
|
- Sint16 last_sample3 = (Sint16) ((Sint8) src[3]);
|
|
|
- Sint16 last_sample4 = (Sint16) ((Sint8) src[4]);
|
|
|
- Sint16 last_sample5 = (Sint16) ((Sint8) src[5]);
|
|
|
- while (dst < target) {
|
|
|
- const Sint16 sample0 = (Sint16) ((Sint8) src[0]);
|
|
|
- const Sint16 sample1 = (Sint16) ((Sint8) src[1]);
|
|
|
- const Sint16 sample2 = (Sint16) ((Sint8) src[2]);
|
|
|
- const Sint16 sample3 = (Sint16) ((Sint8) src[3]);
|
|
|
- const Sint16 sample4 = (Sint16) ((Sint8) src[4]);
|
|
|
- const Sint16 sample5 = (Sint16) ((Sint8) src[5]);
|
|
|
- src += 12;
|
|
|
- dst[0] = (Sint8) ((sample0 + last_sample0) >> 1);
|
|
|
- dst[1] = (Sint8) ((sample1 + last_sample1) >> 1);
|
|
|
- dst[2] = (Sint8) ((sample2 + last_sample2) >> 1);
|
|
|
- dst[3] = (Sint8) ((sample3 + last_sample3) >> 1);
|
|
|
- dst[4] = (Sint8) ((sample4 + last_sample4) >> 1);
|
|
|
- dst[5] = (Sint8) ((sample5 + last_sample5) >> 1);
|
|
|
- last_sample0 = sample0;
|
|
|
- last_sample1 = sample1;
|
|
|
- last_sample2 = sample2;
|
|
|
- last_sample3 = sample3;
|
|
|
- last_sample4 = sample4;
|
|
|
- last_sample5 = sample5;
|
|
|
- dst += 6;
|
|
|
- }
|
|
|
-
|
|
|
- cvt->len_cvt = dstsize;
|
|
|
- if (cvt->filters[++cvt->filter_index]) {
|
|
|
- cvt->filters[cvt->filter_index] (cvt, format);
|
|
|
- }
|
|
|
-}
|
|
|
-
|
|
|
-static void SDLCALL
|
|
|
-SDL_Upsample_S8_6c_x4(SDL_AudioCVT * cvt, SDL_AudioFormat format)
|
|
|
-{
|
|
|
-#if DEBUG_CONVERT
|
|
|
- fprintf(stderr, "Upsample (x4) AUDIO_S8, 6 channels.\n");
|
|
|
-#endif
|
|
|
-
|
|
|
- const int dstsize = cvt->len_cvt * 4;
|
|
|
- Sint8 *dst = ((Sint8 *) (cvt->buf + dstsize)) - 6 * 4;
|
|
|
- const Sint8 *src = ((Sint8 *) (cvt->buf + cvt->len_cvt)) - 6;
|
|
|
- const Sint8 *target = ((const Sint8 *) cvt->buf);
|
|
|
- Sint16 last_sample5 = (Sint16) ((Sint8) src[5]);
|
|
|
- Sint16 last_sample4 = (Sint16) ((Sint8) src[4]);
|
|
|
- Sint16 last_sample3 = (Sint16) ((Sint8) src[3]);
|
|
|
- Sint16 last_sample2 = (Sint16) ((Sint8) src[2]);
|
|
|
- Sint16 last_sample1 = (Sint16) ((Sint8) src[1]);
|
|
|
- Sint16 last_sample0 = (Sint16) ((Sint8) src[0]);
|
|
|
- while (dst >= target) {
|
|
|
- const Sint16 sample5 = (Sint16) ((Sint8) src[5]);
|
|
|
- const Sint16 sample4 = (Sint16) ((Sint8) src[4]);
|
|
|
- const Sint16 sample3 = (Sint16) ((Sint8) src[3]);
|
|
|
- const Sint16 sample2 = (Sint16) ((Sint8) src[2]);
|
|
|
- const Sint16 sample1 = (Sint16) ((Sint8) src[1]);
|
|
|
- const Sint16 sample0 = (Sint16) ((Sint8) src[0]);
|
|
|
- src -= 6;
|
|
|
- dst[23] = (Sint8) ((sample5 + (3 * last_sample5)) >> 2);
|
|
|
- dst[22] = (Sint8) ((sample4 + (3 * last_sample4)) >> 2);
|
|
|
- dst[21] = (Sint8) ((sample3 + (3 * last_sample3)) >> 2);
|
|
|
- dst[20] = (Sint8) ((sample2 + (3 * last_sample2)) >> 2);
|
|
|
- dst[19] = (Sint8) ((sample1 + (3 * last_sample1)) >> 2);
|
|
|
- dst[18] = (Sint8) ((sample0 + (3 * last_sample0)) >> 2);
|
|
|
- dst[17] = (Sint8) ((sample5 + last_sample5) >> 1);
|
|
|
- dst[16] = (Sint8) ((sample4 + last_sample4) >> 1);
|
|
|
- dst[15] = (Sint8) ((sample3 + last_sample3) >> 1);
|
|
|
- dst[14] = (Sint8) ((sample2 + last_sample2) >> 1);
|
|
|
- dst[13] = (Sint8) ((sample1 + last_sample1) >> 1);
|
|
|
- dst[12] = (Sint8) ((sample0 + last_sample0) >> 1);
|
|
|
- dst[11] = (Sint8) (((3 * sample5) + last_sample5) >> 2);
|
|
|
- dst[10] = (Sint8) (((3 * sample4) + last_sample4) >> 2);
|
|
|
- dst[9] = (Sint8) (((3 * sample3) + last_sample3) >> 2);
|
|
|
- dst[8] = (Sint8) (((3 * sample2) + last_sample2) >> 2);
|
|
|
- dst[7] = (Sint8) (((3 * sample1) + last_sample1) >> 2);
|
|
|
- dst[6] = (Sint8) (((3 * sample0) + last_sample0) >> 2);
|
|
|
- dst[5] = (Sint8) sample5;
|
|
|
- dst[4] = (Sint8) sample4;
|
|
|
- dst[3] = (Sint8) sample3;
|
|
|
- dst[2] = (Sint8) sample2;
|
|
|
- dst[1] = (Sint8) sample1;
|
|
|
- dst[0] = (Sint8) sample0;
|
|
|
- last_sample5 = sample5;
|
|
|
- last_sample4 = sample4;
|
|
|
- last_sample3 = sample3;
|
|
|
- last_sample2 = sample2;
|
|
|
- last_sample1 = sample1;
|
|
|
- last_sample0 = sample0;
|
|
|
- dst -= 24;
|
|
|
- }
|
|
|
-
|
|
|
- cvt->len_cvt = dstsize;
|
|
|
- if (cvt->filters[++cvt->filter_index]) {
|
|
|
- cvt->filters[cvt->filter_index] (cvt, format);
|
|
|
- }
|
|
|
-}
|
|
|
-
|
|
|
-static void SDLCALL
|
|
|
-SDL_Downsample_S8_6c_x4(SDL_AudioCVT * cvt, SDL_AudioFormat format)
|
|
|
-{
|
|
|
-#if DEBUG_CONVERT
|
|
|
- fprintf(stderr, "Downsample (x4) AUDIO_S8, 6 channels.\n");
|
|
|
-#endif
|
|
|
-
|
|
|
- const int dstsize = cvt->len_cvt / 4;
|
|
|
- Sint8 *dst = (Sint8 *) cvt->buf;
|
|
|
- const Sint8 *src = (Sint8 *) cvt->buf;
|
|
|
- const Sint8 *target = (const Sint8 *) (cvt->buf + dstsize);
|
|
|
- Sint16 last_sample0 = (Sint16) ((Sint8) src[0]);
|
|
|
- Sint16 last_sample1 = (Sint16) ((Sint8) src[1]);
|
|
|
- Sint16 last_sample2 = (Sint16) ((Sint8) src[2]);
|
|
|
- Sint16 last_sample3 = (Sint16) ((Sint8) src[3]);
|
|
|
- Sint16 last_sample4 = (Sint16) ((Sint8) src[4]);
|
|
|
- Sint16 last_sample5 = (Sint16) ((Sint8) src[5]);
|
|
|
- while (dst < target) {
|
|
|
- const Sint16 sample0 = (Sint16) ((Sint8) src[0]);
|
|
|
- const Sint16 sample1 = (Sint16) ((Sint8) src[1]);
|
|
|
- const Sint16 sample2 = (Sint16) ((Sint8) src[2]);
|
|
|
- const Sint16 sample3 = (Sint16) ((Sint8) src[3]);
|
|
|
- const Sint16 sample4 = (Sint16) ((Sint8) src[4]);
|
|
|
- const Sint16 sample5 = (Sint16) ((Sint8) src[5]);
|
|
|
- src += 24;
|
|
|
- dst[0] = (Sint8) ((sample0 + last_sample0) >> 1);
|
|
|
- dst[1] = (Sint8) ((sample1 + last_sample1) >> 1);
|
|
|
- dst[2] = (Sint8) ((sample2 + last_sample2) >> 1);
|
|
|
- dst[3] = (Sint8) ((sample3 + last_sample3) >> 1);
|
|
|
- dst[4] = (Sint8) ((sample4 + last_sample4) >> 1);
|
|
|
- dst[5] = (Sint8) ((sample5 + last_sample5) >> 1);
|
|
|
- last_sample0 = sample0;
|
|
|
- last_sample1 = sample1;
|
|
|
- last_sample2 = sample2;
|
|
|
- last_sample3 = sample3;
|
|
|
- last_sample4 = sample4;
|
|
|
- last_sample5 = sample5;
|
|
|
- dst += 6;
|
|
|
- }
|
|
|
-
|
|
|
- cvt->len_cvt = dstsize;
|
|
|
- if (cvt->filters[++cvt->filter_index]) {
|
|
|
- cvt->filters[cvt->filter_index] (cvt, format);
|
|
|
- }
|
|
|
-}
|
|
|
-
|
|
|
-static void SDLCALL
|
|
|
-SDL_Upsample_S8_8c_x2(SDL_AudioCVT * cvt, SDL_AudioFormat format)
|
|
|
-{
|
|
|
-#if DEBUG_CONVERT
|
|
|
- fprintf(stderr, "Upsample (x2) AUDIO_S8, 8 channels.\n");
|
|
|
-#endif
|
|
|
-
|
|
|
- const int dstsize = cvt->len_cvt * 2;
|
|
|
- Sint8 *dst = ((Sint8 *) (cvt->buf + dstsize)) - 8 * 2;
|
|
|
- const Sint8 *src = ((Sint8 *) (cvt->buf + cvt->len_cvt)) - 8;
|
|
|
- const Sint8 *target = ((const Sint8 *) cvt->buf);
|
|
|
- Sint16 last_sample7 = (Sint16) ((Sint8) src[7]);
|
|
|
- Sint16 last_sample6 = (Sint16) ((Sint8) src[6]);
|
|
|
- Sint16 last_sample5 = (Sint16) ((Sint8) src[5]);
|
|
|
- Sint16 last_sample4 = (Sint16) ((Sint8) src[4]);
|
|
|
- Sint16 last_sample3 = (Sint16) ((Sint8) src[3]);
|
|
|
- Sint16 last_sample2 = (Sint16) ((Sint8) src[2]);
|
|
|
- Sint16 last_sample1 = (Sint16) ((Sint8) src[1]);
|
|
|
- Sint16 last_sample0 = (Sint16) ((Sint8) src[0]);
|
|
|
- while (dst >= target) {
|
|
|
- const Sint16 sample7 = (Sint16) ((Sint8) src[7]);
|
|
|
- const Sint16 sample6 = (Sint16) ((Sint8) src[6]);
|
|
|
- const Sint16 sample5 = (Sint16) ((Sint8) src[5]);
|
|
|
- const Sint16 sample4 = (Sint16) ((Sint8) src[4]);
|
|
|
- const Sint16 sample3 = (Sint16) ((Sint8) src[3]);
|
|
|
- const Sint16 sample2 = (Sint16) ((Sint8) src[2]);
|
|
|
- const Sint16 sample1 = (Sint16) ((Sint8) src[1]);
|
|
|
- const Sint16 sample0 = (Sint16) ((Sint8) src[0]);
|
|
|
- src -= 8;
|
|
|
- dst[15] = (Sint8) ((sample7 + last_sample7) >> 1);
|
|
|
- dst[14] = (Sint8) ((sample6 + last_sample6) >> 1);
|
|
|
- dst[13] = (Sint8) ((sample5 + last_sample5) >> 1);
|
|
|
- dst[12] = (Sint8) ((sample4 + last_sample4) >> 1);
|
|
|
- dst[11] = (Sint8) ((sample3 + last_sample3) >> 1);
|
|
|
- dst[10] = (Sint8) ((sample2 + last_sample2) >> 1);
|
|
|
- dst[9] = (Sint8) ((sample1 + last_sample1) >> 1);
|
|
|
- dst[8] = (Sint8) ((sample0 + last_sample0) >> 1);
|
|
|
- dst[7] = (Sint8) sample7;
|
|
|
- dst[6] = (Sint8) sample6;
|
|
|
- dst[5] = (Sint8) sample5;
|
|
|
- dst[4] = (Sint8) sample4;
|
|
|
- dst[3] = (Sint8) sample3;
|
|
|
- dst[2] = (Sint8) sample2;
|
|
|
- dst[1] = (Sint8) sample1;
|
|
|
- dst[0] = (Sint8) sample0;
|
|
|
- last_sample7 = sample7;
|
|
|
- last_sample6 = sample6;
|
|
|
- last_sample5 = sample5;
|
|
|
- last_sample4 = sample4;
|
|
|
- last_sample3 = sample3;
|
|
|
- last_sample2 = sample2;
|
|
|
- last_sample1 = sample1;
|
|
|
- last_sample0 = sample0;
|
|
|
- dst -= 16;
|
|
|
- }
|
|
|
-
|
|
|
- cvt->len_cvt = dstsize;
|
|
|
- if (cvt->filters[++cvt->filter_index]) {
|
|
|
- cvt->filters[cvt->filter_index] (cvt, format);
|
|
|
- }
|
|
|
-}
|
|
|
-
|
|
|
-static void SDLCALL
|
|
|
-SDL_Downsample_S8_8c_x2(SDL_AudioCVT * cvt, SDL_AudioFormat format)
|
|
|
-{
|
|
|
-#if DEBUG_CONVERT
|
|
|
- fprintf(stderr, "Downsample (x2) AUDIO_S8, 8 channels.\n");
|
|
|
-#endif
|
|
|
-
|
|
|
- const int dstsize = cvt->len_cvt / 2;
|
|
|
- Sint8 *dst = (Sint8 *) cvt->buf;
|
|
|
- const Sint8 *src = (Sint8 *) cvt->buf;
|
|
|
- const Sint8 *target = (const Sint8 *) (cvt->buf + dstsize);
|
|
|
- Sint16 last_sample0 = (Sint16) ((Sint8) src[0]);
|
|
|
- Sint16 last_sample1 = (Sint16) ((Sint8) src[1]);
|
|
|
- Sint16 last_sample2 = (Sint16) ((Sint8) src[2]);
|
|
|
- Sint16 last_sample3 = (Sint16) ((Sint8) src[3]);
|
|
|
- Sint16 last_sample4 = (Sint16) ((Sint8) src[4]);
|
|
|
- Sint16 last_sample5 = (Sint16) ((Sint8) src[5]);
|
|
|
- Sint16 last_sample6 = (Sint16) ((Sint8) src[6]);
|
|
|
- Sint16 last_sample7 = (Sint16) ((Sint8) src[7]);
|
|
|
- while (dst < target) {
|
|
|
- const Sint16 sample0 = (Sint16) ((Sint8) src[0]);
|
|
|
- const Sint16 sample1 = (Sint16) ((Sint8) src[1]);
|
|
|
- const Sint16 sample2 = (Sint16) ((Sint8) src[2]);
|
|
|
- const Sint16 sample3 = (Sint16) ((Sint8) src[3]);
|
|
|
- const Sint16 sample4 = (Sint16) ((Sint8) src[4]);
|
|
|
- const Sint16 sample5 = (Sint16) ((Sint8) src[5]);
|
|
|
- const Sint16 sample6 = (Sint16) ((Sint8) src[6]);
|
|
|
- const Sint16 sample7 = (Sint16) ((Sint8) src[7]);
|
|
|
- src += 16;
|
|
|
- dst[0] = (Sint8) ((sample0 + last_sample0) >> 1);
|
|
|
- dst[1] = (Sint8) ((sample1 + last_sample1) >> 1);
|
|
|
- dst[2] = (Sint8) ((sample2 + last_sample2) >> 1);
|
|
|
- dst[3] = (Sint8) ((sample3 + last_sample3) >> 1);
|
|
|
- dst[4] = (Sint8) ((sample4 + last_sample4) >> 1);
|
|
|
- dst[5] = (Sint8) ((sample5 + last_sample5) >> 1);
|
|
|
- dst[6] = (Sint8) ((sample6 + last_sample6) >> 1);
|
|
|
- dst[7] = (Sint8) ((sample7 + last_sample7) >> 1);
|
|
|
- last_sample0 = sample0;
|
|
|
- last_sample1 = sample1;
|
|
|
- last_sample2 = sample2;
|
|
|
- last_sample3 = sample3;
|
|
|
- last_sample4 = sample4;
|
|
|
- last_sample5 = sample5;
|
|
|
- last_sample6 = sample6;
|
|
|
- last_sample7 = sample7;
|
|
|
- dst += 8;
|
|
|
- }
|
|
|
-
|
|
|
- cvt->len_cvt = dstsize;
|
|
|
- if (cvt->filters[++cvt->filter_index]) {
|
|
|
- cvt->filters[cvt->filter_index] (cvt, format);
|
|
|
- }
|
|
|
-}
|
|
|
-
|
|
|
-static void SDLCALL
|
|
|
-SDL_Upsample_S8_8c_x4(SDL_AudioCVT * cvt, SDL_AudioFormat format)
|
|
|
-{
|
|
|
-#if DEBUG_CONVERT
|
|
|
- fprintf(stderr, "Upsample (x4) AUDIO_S8, 8 channels.\n");
|
|
|
-#endif
|
|
|
-
|
|
|
- const int dstsize = cvt->len_cvt * 4;
|
|
|
- Sint8 *dst = ((Sint8 *) (cvt->buf + dstsize)) - 8 * 4;
|
|
|
- const Sint8 *src = ((Sint8 *) (cvt->buf + cvt->len_cvt)) - 8;
|
|
|
- const Sint8 *target = ((const Sint8 *) cvt->buf);
|
|
|
- Sint16 last_sample7 = (Sint16) ((Sint8) src[7]);
|
|
|
- Sint16 last_sample6 = (Sint16) ((Sint8) src[6]);
|
|
|
- Sint16 last_sample5 = (Sint16) ((Sint8) src[5]);
|
|
|
- Sint16 last_sample4 = (Sint16) ((Sint8) src[4]);
|
|
|
- Sint16 last_sample3 = (Sint16) ((Sint8) src[3]);
|
|
|
- Sint16 last_sample2 = (Sint16) ((Sint8) src[2]);
|
|
|
- Sint16 last_sample1 = (Sint16) ((Sint8) src[1]);
|
|
|
- Sint16 last_sample0 = (Sint16) ((Sint8) src[0]);
|
|
|
- while (dst >= target) {
|
|
|
- const Sint16 sample7 = (Sint16) ((Sint8) src[7]);
|
|
|
- const Sint16 sample6 = (Sint16) ((Sint8) src[6]);
|
|
|
- const Sint16 sample5 = (Sint16) ((Sint8) src[5]);
|
|
|
- const Sint16 sample4 = (Sint16) ((Sint8) src[4]);
|
|
|
- const Sint16 sample3 = (Sint16) ((Sint8) src[3]);
|
|
|
- const Sint16 sample2 = (Sint16) ((Sint8) src[2]);
|
|
|
- const Sint16 sample1 = (Sint16) ((Sint8) src[1]);
|
|
|
- const Sint16 sample0 = (Sint16) ((Sint8) src[0]);
|
|
|
- src -= 8;
|
|
|
- dst[31] = (Sint8) ((sample7 + (3 * last_sample7)) >> 2);
|
|
|
- dst[30] = (Sint8) ((sample6 + (3 * last_sample6)) >> 2);
|
|
|
- dst[29] = (Sint8) ((sample5 + (3 * last_sample5)) >> 2);
|
|
|
- dst[28] = (Sint8) ((sample4 + (3 * last_sample4)) >> 2);
|
|
|
- dst[27] = (Sint8) ((sample3 + (3 * last_sample3)) >> 2);
|
|
|
- dst[26] = (Sint8) ((sample2 + (3 * last_sample2)) >> 2);
|
|
|
- dst[25] = (Sint8) ((sample1 + (3 * last_sample1)) >> 2);
|
|
|
- dst[24] = (Sint8) ((sample0 + (3 * last_sample0)) >> 2);
|
|
|
- dst[23] = (Sint8) ((sample7 + last_sample7) >> 1);
|
|
|
- dst[22] = (Sint8) ((sample6 + last_sample6) >> 1);
|
|
|
- dst[21] = (Sint8) ((sample5 + last_sample5) >> 1);
|
|
|
- dst[20] = (Sint8) ((sample4 + last_sample4) >> 1);
|
|
|
- dst[19] = (Sint8) ((sample3 + last_sample3) >> 1);
|
|
|
- dst[18] = (Sint8) ((sample2 + last_sample2) >> 1);
|
|
|
- dst[17] = (Sint8) ((sample1 + last_sample1) >> 1);
|
|
|
- dst[16] = (Sint8) ((sample0 + last_sample0) >> 1);
|
|
|
- dst[15] = (Sint8) (((3 * sample7) + last_sample7) >> 2);
|
|
|
- dst[14] = (Sint8) (((3 * sample6) + last_sample6) >> 2);
|
|
|
- dst[13] = (Sint8) (((3 * sample5) + last_sample5) >> 2);
|
|
|
- dst[12] = (Sint8) (((3 * sample4) + last_sample4) >> 2);
|
|
|
- dst[11] = (Sint8) (((3 * sample3) + last_sample3) >> 2);
|
|
|
- dst[10] = (Sint8) (((3 * sample2) + last_sample2) >> 2);
|
|
|
- dst[9] = (Sint8) (((3 * sample1) + last_sample1) >> 2);
|
|
|
- dst[8] = (Sint8) (((3 * sample0) + last_sample0) >> 2);
|
|
|
- dst[7] = (Sint8) sample7;
|
|
|
- dst[6] = (Sint8) sample6;
|
|
|
- dst[5] = (Sint8) sample5;
|
|
|
- dst[4] = (Sint8) sample4;
|
|
|
- dst[3] = (Sint8) sample3;
|
|
|
- dst[2] = (Sint8) sample2;
|
|
|
- dst[1] = (Sint8) sample1;
|
|
|
- dst[0] = (Sint8) sample0;
|
|
|
- last_sample7 = sample7;
|
|
|
- last_sample6 = sample6;
|
|
|
- last_sample5 = sample5;
|
|
|
- last_sample4 = sample4;
|
|
|
- last_sample3 = sample3;
|
|
|
- last_sample2 = sample2;
|
|
|
- last_sample1 = sample1;
|
|
|
- last_sample0 = sample0;
|
|
|
- dst -= 32;
|
|
|
- }
|
|
|
-
|
|
|
- cvt->len_cvt = dstsize;
|
|
|
- if (cvt->filters[++cvt->filter_index]) {
|
|
|
- cvt->filters[cvt->filter_index] (cvt, format);
|
|
|
- }
|
|
|
-}
|
|
|
-
|
|
|
-static void SDLCALL
|
|
|
-SDL_Downsample_S8_8c_x4(SDL_AudioCVT * cvt, SDL_AudioFormat format)
|
|
|
-{
|
|
|
-#if DEBUG_CONVERT
|
|
|
- fprintf(stderr, "Downsample (x4) AUDIO_S8, 8 channels.\n");
|
|
|
-#endif
|
|
|
-
|
|
|
- const int dstsize = cvt->len_cvt / 4;
|
|
|
- Sint8 *dst = (Sint8 *) cvt->buf;
|
|
|
- const Sint8 *src = (Sint8 *) cvt->buf;
|
|
|
- const Sint8 *target = (const Sint8 *) (cvt->buf + dstsize);
|
|
|
- Sint16 last_sample0 = (Sint16) ((Sint8) src[0]);
|
|
|
- Sint16 last_sample1 = (Sint16) ((Sint8) src[1]);
|
|
|
- Sint16 last_sample2 = (Sint16) ((Sint8) src[2]);
|
|
|
- Sint16 last_sample3 = (Sint16) ((Sint8) src[3]);
|
|
|
- Sint16 last_sample4 = (Sint16) ((Sint8) src[4]);
|
|
|
- Sint16 last_sample5 = (Sint16) ((Sint8) src[5]);
|
|
|
- Sint16 last_sample6 = (Sint16) ((Sint8) src[6]);
|
|
|
- Sint16 last_sample7 = (Sint16) ((Sint8) src[7]);
|
|
|
- while (dst < target) {
|
|
|
- const Sint16 sample0 = (Sint16) ((Sint8) src[0]);
|
|
|
- const Sint16 sample1 = (Sint16) ((Sint8) src[1]);
|
|
|
- const Sint16 sample2 = (Sint16) ((Sint8) src[2]);
|
|
|
- const Sint16 sample3 = (Sint16) ((Sint8) src[3]);
|
|
|
- const Sint16 sample4 = (Sint16) ((Sint8) src[4]);
|
|
|
- const Sint16 sample5 = (Sint16) ((Sint8) src[5]);
|
|
|
- const Sint16 sample6 = (Sint16) ((Sint8) src[6]);
|
|
|
- const Sint16 sample7 = (Sint16) ((Sint8) src[7]);
|
|
|
- src += 32;
|
|
|
- dst[0] = (Sint8) ((sample0 + last_sample0) >> 1);
|
|
|
- dst[1] = (Sint8) ((sample1 + last_sample1) >> 1);
|
|
|
- dst[2] = (Sint8) ((sample2 + last_sample2) >> 1);
|
|
|
- dst[3] = (Sint8) ((sample3 + last_sample3) >> 1);
|
|
|
- dst[4] = (Sint8) ((sample4 + last_sample4) >> 1);
|
|
|
- dst[5] = (Sint8) ((sample5 + last_sample5) >> 1);
|
|
|
- dst[6] = (Sint8) ((sample6 + last_sample6) >> 1);
|
|
|
- dst[7] = (Sint8) ((sample7 + last_sample7) >> 1);
|
|
|
- last_sample0 = sample0;
|
|
|
- last_sample1 = sample1;
|
|
|
- last_sample2 = sample2;
|
|
|
- last_sample3 = sample3;
|
|
|
- last_sample4 = sample4;
|
|
|
- last_sample5 = sample5;
|
|
|
- last_sample6 = sample6;
|
|
|
- last_sample7 = sample7;
|
|
|
- dst += 8;
|
|
|
- }
|
|
|
-
|
|
|
- cvt->len_cvt = dstsize;
|
|
|
- if (cvt->filters[++cvt->filter_index]) {
|
|
|
- cvt->filters[cvt->filter_index] (cvt, format);
|
|
|
- }
|
|
|
-}
|
|
|
-
|
|
|
-static void SDLCALL
|
|
|
-SDL_Upsample_U16LSB_1c_x2(SDL_AudioCVT * cvt, SDL_AudioFormat format)
|
|
|
-{
|
|
|
-#if DEBUG_CONVERT
|
|
|
- fprintf(stderr, "Upsample (x2) AUDIO_U16LSB, 1 channels.\n");
|
|
|
-#endif
|
|
|
-
|
|
|
- const int dstsize = cvt->len_cvt * 2;
|
|
|
- Uint16 *dst = ((Uint16 *) (cvt->buf + dstsize)) - 1 * 2;
|
|
|
- const Uint16 *src = ((Uint16 *) (cvt->buf + cvt->len_cvt)) - 1;
|
|
|
- const Uint16 *target = ((const Uint16 *) cvt->buf);
|
|
|
- Sint32 last_sample0 = (Sint32) SDL_SwapLE16(src[0]);
|
|
|
- while (dst >= target) {
|
|
|
- const Sint32 sample0 = (Sint32) SDL_SwapLE16(src[0]);
|
|
|
- src--;
|
|
|
- dst[1] = (Uint16) ((sample0 + last_sample0) >> 1);
|
|
|
- dst[0] = (Uint16) sample0;
|
|
|
- last_sample0 = sample0;
|
|
|
- dst -= 2;
|
|
|
- }
|
|
|
-
|
|
|
- cvt->len_cvt = dstsize;
|
|
|
- if (cvt->filters[++cvt->filter_index]) {
|
|
|
- cvt->filters[cvt->filter_index] (cvt, format);
|
|
|
- }
|
|
|
-}
|
|
|
-
|
|
|
-static void SDLCALL
|
|
|
-SDL_Downsample_U16LSB_1c_x2(SDL_AudioCVT * cvt, SDL_AudioFormat format)
|
|
|
-{
|
|
|
-#if DEBUG_CONVERT
|
|
|
- fprintf(stderr, "Downsample (x2) AUDIO_U16LSB, 1 channels.\n");
|
|
|
-#endif
|
|
|
-
|
|
|
- const int dstsize = cvt->len_cvt / 2;
|
|
|
- Uint16 *dst = (Uint16 *) cvt->buf;
|
|
|
- const Uint16 *src = (Uint16 *) cvt->buf;
|
|
|
- const Uint16 *target = (const Uint16 *) (cvt->buf + dstsize);
|
|
|
- Sint32 last_sample0 = (Sint32) SDL_SwapLE16(src[0]);
|
|
|
- while (dst < target) {
|
|
|
- const Sint32 sample0 = (Sint32) SDL_SwapLE16(src[0]);
|
|
|
- src += 2;
|
|
|
- dst[0] = (Uint16) ((sample0 + last_sample0) >> 1);
|
|
|
- last_sample0 = sample0;
|
|
|
- dst++;
|
|
|
- }
|
|
|
-
|
|
|
- cvt->len_cvt = dstsize;
|
|
|
- if (cvt->filters[++cvt->filter_index]) {
|
|
|
- cvt->filters[cvt->filter_index] (cvt, format);
|
|
|
- }
|
|
|
-}
|
|
|
-
|
|
|
-static void SDLCALL
|
|
|
-SDL_Upsample_U16LSB_1c_x4(SDL_AudioCVT * cvt, SDL_AudioFormat format)
|
|
|
-{
|
|
|
-#if DEBUG_CONVERT
|
|
|
- fprintf(stderr, "Upsample (x4) AUDIO_U16LSB, 1 channels.\n");
|
|
|
-#endif
|
|
|
-
|
|
|
- const int dstsize = cvt->len_cvt * 4;
|
|
|
- Uint16 *dst = ((Uint16 *) (cvt->buf + dstsize)) - 1 * 4;
|
|
|
- const Uint16 *src = ((Uint16 *) (cvt->buf + cvt->len_cvt)) - 1;
|
|
|
- const Uint16 *target = ((const Uint16 *) cvt->buf);
|
|
|
- Sint32 last_sample0 = (Sint32) SDL_SwapLE16(src[0]);
|
|
|
- while (dst >= target) {
|
|
|
- const Sint32 sample0 = (Sint32) SDL_SwapLE16(src[0]);
|
|
|
- src--;
|
|
|
- dst[3] = (Uint16) ((sample0 + (3 * last_sample0)) >> 2);
|
|
|
- dst[2] = (Uint16) ((sample0 + last_sample0) >> 1);
|
|
|
- dst[1] = (Uint16) (((3 * sample0) + last_sample0) >> 2);
|
|
|
- dst[0] = (Uint16) sample0;
|
|
|
- last_sample0 = sample0;
|
|
|
- dst -= 4;
|
|
|
- }
|
|
|
-
|
|
|
- cvt->len_cvt = dstsize;
|
|
|
- if (cvt->filters[++cvt->filter_index]) {
|
|
|
- cvt->filters[cvt->filter_index] (cvt, format);
|
|
|
- }
|
|
|
-}
|
|
|
-
|
|
|
-static void SDLCALL
|
|
|
-SDL_Downsample_U16LSB_1c_x4(SDL_AudioCVT * cvt, SDL_AudioFormat format)
|
|
|
-{
|
|
|
-#if DEBUG_CONVERT
|
|
|
- fprintf(stderr, "Downsample (x4) AUDIO_U16LSB, 1 channels.\n");
|
|
|
-#endif
|
|
|
-
|
|
|
- const int dstsize = cvt->len_cvt / 4;
|
|
|
- Uint16 *dst = (Uint16 *) cvt->buf;
|
|
|
- const Uint16 *src = (Uint16 *) cvt->buf;
|
|
|
- const Uint16 *target = (const Uint16 *) (cvt->buf + dstsize);
|
|
|
- Sint32 last_sample0 = (Sint32) SDL_SwapLE16(src[0]);
|
|
|
- while (dst < target) {
|
|
|
- const Sint32 sample0 = (Sint32) SDL_SwapLE16(src[0]);
|
|
|
- src += 4;
|
|
|
- dst[0] = (Uint16) ((sample0 + last_sample0) >> 1);
|
|
|
- last_sample0 = sample0;
|
|
|
- dst++;
|
|
|
- }
|
|
|
-
|
|
|
- cvt->len_cvt = dstsize;
|
|
|
- if (cvt->filters[++cvt->filter_index]) {
|
|
|
- cvt->filters[cvt->filter_index] (cvt, format);
|
|
|
- }
|
|
|
-}
|
|
|
-
|
|
|
-static void SDLCALL
|
|
|
-SDL_Upsample_U16LSB_2c_x2(SDL_AudioCVT * cvt, SDL_AudioFormat format)
|
|
|
-{
|
|
|
-#if DEBUG_CONVERT
|
|
|
- fprintf(stderr, "Upsample (x2) AUDIO_U16LSB, 2 channels.\n");
|
|
|
-#endif
|
|
|
-
|
|
|
- const int dstsize = cvt->len_cvt * 2;
|
|
|
- Uint16 *dst = ((Uint16 *) (cvt->buf + dstsize)) - 2 * 2;
|
|
|
- const Uint16 *src = ((Uint16 *) (cvt->buf + cvt->len_cvt)) - 2;
|
|
|
- const Uint16 *target = ((const Uint16 *) cvt->buf);
|
|
|
- Sint32 last_sample1 = (Sint32) SDL_SwapLE16(src[1]);
|
|
|
- Sint32 last_sample0 = (Sint32) SDL_SwapLE16(src[0]);
|
|
|
- while (dst >= target) {
|
|
|
- const Sint32 sample1 = (Sint32) SDL_SwapLE16(src[1]);
|
|
|
- const Sint32 sample0 = (Sint32) SDL_SwapLE16(src[0]);
|
|
|
- src -= 2;
|
|
|
- dst[3] = (Uint16) ((sample1 + last_sample1) >> 1);
|
|
|
- dst[2] = (Uint16) ((sample0 + last_sample0) >> 1);
|
|
|
- dst[1] = (Uint16) sample1;
|
|
|
- dst[0] = (Uint16) sample0;
|
|
|
- last_sample1 = sample1;
|
|
|
- last_sample0 = sample0;
|
|
|
- dst -= 4;
|
|
|
- }
|
|
|
-
|
|
|
- cvt->len_cvt = dstsize;
|
|
|
- if (cvt->filters[++cvt->filter_index]) {
|
|
|
- cvt->filters[cvt->filter_index] (cvt, format);
|
|
|
- }
|
|
|
-}
|
|
|
-
|
|
|
-static void SDLCALL
|
|
|
-SDL_Downsample_U16LSB_2c_x2(SDL_AudioCVT * cvt, SDL_AudioFormat format)
|
|
|
-{
|
|
|
-#if DEBUG_CONVERT
|
|
|
- fprintf(stderr, "Downsample (x2) AUDIO_U16LSB, 2 channels.\n");
|
|
|
-#endif
|
|
|
-
|
|
|
- const int dstsize = cvt->len_cvt / 2;
|
|
|
- Uint16 *dst = (Uint16 *) cvt->buf;
|
|
|
- const Uint16 *src = (Uint16 *) cvt->buf;
|
|
|
- const Uint16 *target = (const Uint16 *) (cvt->buf + dstsize);
|
|
|
- Sint32 last_sample0 = (Sint32) SDL_SwapLE16(src[0]);
|
|
|
- Sint32 last_sample1 = (Sint32) SDL_SwapLE16(src[1]);
|
|
|
- while (dst < target) {
|
|
|
- const Sint32 sample0 = (Sint32) SDL_SwapLE16(src[0]);
|
|
|
- const Sint32 sample1 = (Sint32) SDL_SwapLE16(src[1]);
|
|
|
- src += 4;
|
|
|
- dst[0] = (Uint16) ((sample0 + last_sample0) >> 1);
|
|
|
- dst[1] = (Uint16) ((sample1 + last_sample1) >> 1);
|
|
|
- last_sample0 = sample0;
|
|
|
- last_sample1 = sample1;
|
|
|
- dst += 2;
|
|
|
- }
|
|
|
-
|
|
|
- cvt->len_cvt = dstsize;
|
|
|
- if (cvt->filters[++cvt->filter_index]) {
|
|
|
- cvt->filters[cvt->filter_index] (cvt, format);
|
|
|
- }
|
|
|
-}
|
|
|
-
|
|
|
-static void SDLCALL
|
|
|
-SDL_Upsample_U16LSB_2c_x4(SDL_AudioCVT * cvt, SDL_AudioFormat format)
|
|
|
-{
|
|
|
-#if DEBUG_CONVERT
|
|
|
- fprintf(stderr, "Upsample (x4) AUDIO_U16LSB, 2 channels.\n");
|
|
|
-#endif
|
|
|
-
|
|
|
- const int dstsize = cvt->len_cvt * 4;
|
|
|
- Uint16 *dst = ((Uint16 *) (cvt->buf + dstsize)) - 2 * 4;
|
|
|
- const Uint16 *src = ((Uint16 *) (cvt->buf + cvt->len_cvt)) - 2;
|
|
|
- const Uint16 *target = ((const Uint16 *) cvt->buf);
|
|
|
- Sint32 last_sample1 = (Sint32) SDL_SwapLE16(src[1]);
|
|
|
- Sint32 last_sample0 = (Sint32) SDL_SwapLE16(src[0]);
|
|
|
- while (dst >= target) {
|
|
|
- const Sint32 sample1 = (Sint32) SDL_SwapLE16(src[1]);
|
|
|
- const Sint32 sample0 = (Sint32) SDL_SwapLE16(src[0]);
|
|
|
- src -= 2;
|
|
|
- dst[7] = (Uint16) ((sample1 + (3 * last_sample1)) >> 2);
|
|
|
- dst[6] = (Uint16) ((sample0 + (3 * last_sample0)) >> 2);
|
|
|
- dst[5] = (Uint16) ((sample1 + last_sample1) >> 1);
|
|
|
- dst[4] = (Uint16) ((sample0 + last_sample0) >> 1);
|
|
|
- dst[3] = (Uint16) (((3 * sample1) + last_sample1) >> 2);
|
|
|
- dst[2] = (Uint16) (((3 * sample0) + last_sample0) >> 2);
|
|
|
- dst[1] = (Uint16) sample1;
|
|
|
- dst[0] = (Uint16) sample0;
|
|
|
- last_sample1 = sample1;
|
|
|
- last_sample0 = sample0;
|
|
|
- dst -= 8;
|
|
|
- }
|
|
|
-
|
|
|
- cvt->len_cvt = dstsize;
|
|
|
- if (cvt->filters[++cvt->filter_index]) {
|
|
|
- cvt->filters[cvt->filter_index] (cvt, format);
|
|
|
- }
|
|
|
-}
|
|
|
-
|
|
|
-static void SDLCALL
|
|
|
-SDL_Downsample_U16LSB_2c_x4(SDL_AudioCVT * cvt, SDL_AudioFormat format)
|
|
|
-{
|
|
|
-#if DEBUG_CONVERT
|
|
|
- fprintf(stderr, "Downsample (x4) AUDIO_U16LSB, 2 channels.\n");
|
|
|
-#endif
|
|
|
-
|
|
|
- const int dstsize = cvt->len_cvt / 4;
|
|
|
- Uint16 *dst = (Uint16 *) cvt->buf;
|
|
|
- const Uint16 *src = (Uint16 *) cvt->buf;
|
|
|
- const Uint16 *target = (const Uint16 *) (cvt->buf + dstsize);
|
|
|
- Sint32 last_sample0 = (Sint32) SDL_SwapLE16(src[0]);
|
|
|
- Sint32 last_sample1 = (Sint32) SDL_SwapLE16(src[1]);
|
|
|
- while (dst < target) {
|
|
|
- const Sint32 sample0 = (Sint32) SDL_SwapLE16(src[0]);
|
|
|
- const Sint32 sample1 = (Sint32) SDL_SwapLE16(src[1]);
|
|
|
- src += 8;
|
|
|
- dst[0] = (Uint16) ((sample0 + last_sample0) >> 1);
|
|
|
- dst[1] = (Uint16) ((sample1 + last_sample1) >> 1);
|
|
|
- last_sample0 = sample0;
|
|
|
- last_sample1 = sample1;
|
|
|
- dst += 2;
|
|
|
- }
|
|
|
-
|
|
|
- cvt->len_cvt = dstsize;
|
|
|
- if (cvt->filters[++cvt->filter_index]) {
|
|
|
- cvt->filters[cvt->filter_index] (cvt, format);
|
|
|
- }
|
|
|
-}
|
|
|
-
|
|
|
-static void SDLCALL
|
|
|
-SDL_Upsample_U16LSB_4c_x2(SDL_AudioCVT * cvt, SDL_AudioFormat format)
|
|
|
-{
|
|
|
-#if DEBUG_CONVERT
|
|
|
- fprintf(stderr, "Upsample (x2) AUDIO_U16LSB, 4 channels.\n");
|
|
|
-#endif
|
|
|
-
|
|
|
- const int dstsize = cvt->len_cvt * 2;
|
|
|
- Uint16 *dst = ((Uint16 *) (cvt->buf + dstsize)) - 4 * 2;
|
|
|
- const Uint16 *src = ((Uint16 *) (cvt->buf + cvt->len_cvt)) - 4;
|
|
|
- const Uint16 *target = ((const Uint16 *) cvt->buf);
|
|
|
- Sint32 last_sample3 = (Sint32) SDL_SwapLE16(src[3]);
|
|
|
- Sint32 last_sample2 = (Sint32) SDL_SwapLE16(src[2]);
|
|
|
- Sint32 last_sample1 = (Sint32) SDL_SwapLE16(src[1]);
|
|
|
- Sint32 last_sample0 = (Sint32) SDL_SwapLE16(src[0]);
|
|
|
- while (dst >= target) {
|
|
|
- const Sint32 sample3 = (Sint32) SDL_SwapLE16(src[3]);
|
|
|
- const Sint32 sample2 = (Sint32) SDL_SwapLE16(src[2]);
|
|
|
- const Sint32 sample1 = (Sint32) SDL_SwapLE16(src[1]);
|
|
|
- const Sint32 sample0 = (Sint32) SDL_SwapLE16(src[0]);
|
|
|
- src -= 4;
|
|
|
- dst[7] = (Uint16) ((sample3 + last_sample3) >> 1);
|
|
|
- dst[6] = (Uint16) ((sample2 + last_sample2) >> 1);
|
|
|
- dst[5] = (Uint16) ((sample1 + last_sample1) >> 1);
|
|
|
- dst[4] = (Uint16) ((sample0 + last_sample0) >> 1);
|
|
|
- dst[3] = (Uint16) sample3;
|
|
|
- dst[2] = (Uint16) sample2;
|
|
|
- dst[1] = (Uint16) sample1;
|
|
|
- dst[0] = (Uint16) sample0;
|
|
|
- last_sample3 = sample3;
|
|
|
- last_sample2 = sample2;
|
|
|
- last_sample1 = sample1;
|
|
|
- last_sample0 = sample0;
|
|
|
- dst -= 8;
|
|
|
- }
|
|
|
-
|
|
|
- cvt->len_cvt = dstsize;
|
|
|
- if (cvt->filters[++cvt->filter_index]) {
|
|
|
- cvt->filters[cvt->filter_index] (cvt, format);
|
|
|
- }
|
|
|
-}
|
|
|
-
|
|
|
-static void SDLCALL
|
|
|
-SDL_Downsample_U16LSB_4c_x2(SDL_AudioCVT * cvt, SDL_AudioFormat format)
|
|
|
-{
|
|
|
-#if DEBUG_CONVERT
|
|
|
- fprintf(stderr, "Downsample (x2) AUDIO_U16LSB, 4 channels.\n");
|
|
|
-#endif
|
|
|
-
|
|
|
- const int dstsize = cvt->len_cvt / 2;
|
|
|
- Uint16 *dst = (Uint16 *) cvt->buf;
|
|
|
- const Uint16 *src = (Uint16 *) cvt->buf;
|
|
|
- const Uint16 *target = (const Uint16 *) (cvt->buf + dstsize);
|
|
|
- Sint32 last_sample0 = (Sint32) SDL_SwapLE16(src[0]);
|
|
|
- Sint32 last_sample1 = (Sint32) SDL_SwapLE16(src[1]);
|
|
|
- Sint32 last_sample2 = (Sint32) SDL_SwapLE16(src[2]);
|
|
|
- Sint32 last_sample3 = (Sint32) SDL_SwapLE16(src[3]);
|
|
|
- while (dst < target) {
|
|
|
- const Sint32 sample0 = (Sint32) SDL_SwapLE16(src[0]);
|
|
|
- const Sint32 sample1 = (Sint32) SDL_SwapLE16(src[1]);
|
|
|
- const Sint32 sample2 = (Sint32) SDL_SwapLE16(src[2]);
|
|
|
- const Sint32 sample3 = (Sint32) SDL_SwapLE16(src[3]);
|
|
|
- src += 8;
|
|
|
- dst[0] = (Uint16) ((sample0 + last_sample0) >> 1);
|
|
|
- dst[1] = (Uint16) ((sample1 + last_sample1) >> 1);
|
|
|
- dst[2] = (Uint16) ((sample2 + last_sample2) >> 1);
|
|
|
- dst[3] = (Uint16) ((sample3 + last_sample3) >> 1);
|
|
|
- last_sample0 = sample0;
|
|
|
- last_sample1 = sample1;
|
|
|
- last_sample2 = sample2;
|
|
|
- last_sample3 = sample3;
|
|
|
- dst += 4;
|
|
|
- }
|
|
|
-
|
|
|
- cvt->len_cvt = dstsize;
|
|
|
- if (cvt->filters[++cvt->filter_index]) {
|
|
|
- cvt->filters[cvt->filter_index] (cvt, format);
|
|
|
- }
|
|
|
-}
|
|
|
-
|
|
|
-static void SDLCALL
|
|
|
-SDL_Upsample_U16LSB_4c_x4(SDL_AudioCVT * cvt, SDL_AudioFormat format)
|
|
|
-{
|
|
|
-#if DEBUG_CONVERT
|
|
|
- fprintf(stderr, "Upsample (x4) AUDIO_U16LSB, 4 channels.\n");
|
|
|
-#endif
|
|
|
-
|
|
|
- const int dstsize = cvt->len_cvt * 4;
|
|
|
- Uint16 *dst = ((Uint16 *) (cvt->buf + dstsize)) - 4 * 4;
|
|
|
- const Uint16 *src = ((Uint16 *) (cvt->buf + cvt->len_cvt)) - 4;
|
|
|
- const Uint16 *target = ((const Uint16 *) cvt->buf);
|
|
|
- Sint32 last_sample3 = (Sint32) SDL_SwapLE16(src[3]);
|
|
|
- Sint32 last_sample2 = (Sint32) SDL_SwapLE16(src[2]);
|
|
|
- Sint32 last_sample1 = (Sint32) SDL_SwapLE16(src[1]);
|
|
|
- Sint32 last_sample0 = (Sint32) SDL_SwapLE16(src[0]);
|
|
|
- while (dst >= target) {
|
|
|
- const Sint32 sample3 = (Sint32) SDL_SwapLE16(src[3]);
|
|
|
- const Sint32 sample2 = (Sint32) SDL_SwapLE16(src[2]);
|
|
|
- const Sint32 sample1 = (Sint32) SDL_SwapLE16(src[1]);
|
|
|
- const Sint32 sample0 = (Sint32) SDL_SwapLE16(src[0]);
|
|
|
- src -= 4;
|
|
|
- dst[15] = (Uint16) ((sample3 + (3 * last_sample3)) >> 2);
|
|
|
- dst[14] = (Uint16) ((sample2 + (3 * last_sample2)) >> 2);
|
|
|
- dst[13] = (Uint16) ((sample1 + (3 * last_sample1)) >> 2);
|
|
|
- dst[12] = (Uint16) ((sample0 + (3 * last_sample0)) >> 2);
|
|
|
- dst[11] = (Uint16) ((sample3 + last_sample3) >> 1);
|
|
|
- dst[10] = (Uint16) ((sample2 + last_sample2) >> 1);
|
|
|
- dst[9] = (Uint16) ((sample1 + last_sample1) >> 1);
|
|
|
- dst[8] = (Uint16) ((sample0 + last_sample0) >> 1);
|
|
|
- dst[7] = (Uint16) (((3 * sample3) + last_sample3) >> 2);
|
|
|
- dst[6] = (Uint16) (((3 * sample2) + last_sample2) >> 2);
|
|
|
- dst[5] = (Uint16) (((3 * sample1) + last_sample1) >> 2);
|
|
|
- dst[4] = (Uint16) (((3 * sample0) + last_sample0) >> 2);
|
|
|
- dst[3] = (Uint16) sample3;
|
|
|
- dst[2] = (Uint16) sample2;
|
|
|
- dst[1] = (Uint16) sample1;
|
|
|
- dst[0] = (Uint16) sample0;
|
|
|
- last_sample3 = sample3;
|
|
|
- last_sample2 = sample2;
|
|
|
- last_sample1 = sample1;
|
|
|
- last_sample0 = sample0;
|
|
|
- dst -= 16;
|
|
|
- }
|
|
|
-
|
|
|
- cvt->len_cvt = dstsize;
|
|
|
- if (cvt->filters[++cvt->filter_index]) {
|
|
|
- cvt->filters[cvt->filter_index] (cvt, format);
|
|
|
- }
|
|
|
-}
|
|
|
-
|
|
|
-static void SDLCALL
|
|
|
-SDL_Downsample_U16LSB_4c_x4(SDL_AudioCVT * cvt, SDL_AudioFormat format)
|
|
|
-{
|
|
|
-#if DEBUG_CONVERT
|
|
|
- fprintf(stderr, "Downsample (x4) AUDIO_U16LSB, 4 channels.\n");
|
|
|
-#endif
|
|
|
-
|
|
|
- const int dstsize = cvt->len_cvt / 4;
|
|
|
- Uint16 *dst = (Uint16 *) cvt->buf;
|
|
|
- const Uint16 *src = (Uint16 *) cvt->buf;
|
|
|
- const Uint16 *target = (const Uint16 *) (cvt->buf + dstsize);
|
|
|
- Sint32 last_sample0 = (Sint32) SDL_SwapLE16(src[0]);
|
|
|
- Sint32 last_sample1 = (Sint32) SDL_SwapLE16(src[1]);
|
|
|
- Sint32 last_sample2 = (Sint32) SDL_SwapLE16(src[2]);
|
|
|
- Sint32 last_sample3 = (Sint32) SDL_SwapLE16(src[3]);
|
|
|
- while (dst < target) {
|
|
|
- const Sint32 sample0 = (Sint32) SDL_SwapLE16(src[0]);
|
|
|
- const Sint32 sample1 = (Sint32) SDL_SwapLE16(src[1]);
|
|
|
- const Sint32 sample2 = (Sint32) SDL_SwapLE16(src[2]);
|
|
|
- const Sint32 sample3 = (Sint32) SDL_SwapLE16(src[3]);
|
|
|
- src += 16;
|
|
|
- dst[0] = (Uint16) ((sample0 + last_sample0) >> 1);
|
|
|
- dst[1] = (Uint16) ((sample1 + last_sample1) >> 1);
|
|
|
- dst[2] = (Uint16) ((sample2 + last_sample2) >> 1);
|
|
|
- dst[3] = (Uint16) ((sample3 + last_sample3) >> 1);
|
|
|
- last_sample0 = sample0;
|
|
|
- last_sample1 = sample1;
|
|
|
- last_sample2 = sample2;
|
|
|
- last_sample3 = sample3;
|
|
|
- dst += 4;
|
|
|
- }
|
|
|
-
|
|
|
- cvt->len_cvt = dstsize;
|
|
|
- if (cvt->filters[++cvt->filter_index]) {
|
|
|
- cvt->filters[cvt->filter_index] (cvt, format);
|
|
|
- }
|
|
|
-}
|
|
|
-
|
|
|
-static void SDLCALL
|
|
|
-SDL_Upsample_U16LSB_6c_x2(SDL_AudioCVT * cvt, SDL_AudioFormat format)
|
|
|
-{
|
|
|
-#if DEBUG_CONVERT
|
|
|
- fprintf(stderr, "Upsample (x2) AUDIO_U16LSB, 6 channels.\n");
|
|
|
-#endif
|
|
|
-
|
|
|
- const int dstsize = cvt->len_cvt * 2;
|
|
|
- Uint16 *dst = ((Uint16 *) (cvt->buf + dstsize)) - 6 * 2;
|
|
|
- const Uint16 *src = ((Uint16 *) (cvt->buf + cvt->len_cvt)) - 6;
|
|
|
- const Uint16 *target = ((const Uint16 *) cvt->buf);
|
|
|
- Sint32 last_sample5 = (Sint32) SDL_SwapLE16(src[5]);
|
|
|
- Sint32 last_sample4 = (Sint32) SDL_SwapLE16(src[4]);
|
|
|
- Sint32 last_sample3 = (Sint32) SDL_SwapLE16(src[3]);
|
|
|
- Sint32 last_sample2 = (Sint32) SDL_SwapLE16(src[2]);
|
|
|
- Sint32 last_sample1 = (Sint32) SDL_SwapLE16(src[1]);
|
|
|
- Sint32 last_sample0 = (Sint32) SDL_SwapLE16(src[0]);
|
|
|
- while (dst >= target) {
|
|
|
- const Sint32 sample5 = (Sint32) SDL_SwapLE16(src[5]);
|
|
|
- const Sint32 sample4 = (Sint32) SDL_SwapLE16(src[4]);
|
|
|
- const Sint32 sample3 = (Sint32) SDL_SwapLE16(src[3]);
|
|
|
- const Sint32 sample2 = (Sint32) SDL_SwapLE16(src[2]);
|
|
|
- const Sint32 sample1 = (Sint32) SDL_SwapLE16(src[1]);
|
|
|
- const Sint32 sample0 = (Sint32) SDL_SwapLE16(src[0]);
|
|
|
- src -= 6;
|
|
|
- dst[11] = (Uint16) ((sample5 + last_sample5) >> 1);
|
|
|
- dst[10] = (Uint16) ((sample4 + last_sample4) >> 1);
|
|
|
- dst[9] = (Uint16) ((sample3 + last_sample3) >> 1);
|
|
|
- dst[8] = (Uint16) ((sample2 + last_sample2) >> 1);
|
|
|
- dst[7] = (Uint16) ((sample1 + last_sample1) >> 1);
|
|
|
- dst[6] = (Uint16) ((sample0 + last_sample0) >> 1);
|
|
|
- dst[5] = (Uint16) sample5;
|
|
|
- dst[4] = (Uint16) sample4;
|
|
|
- dst[3] = (Uint16) sample3;
|
|
|
- dst[2] = (Uint16) sample2;
|
|
|
- dst[1] = (Uint16) sample1;
|
|
|
- dst[0] = (Uint16) sample0;
|
|
|
- last_sample5 = sample5;
|
|
|
- last_sample4 = sample4;
|
|
|
- last_sample3 = sample3;
|
|
|
- last_sample2 = sample2;
|
|
|
- last_sample1 = sample1;
|
|
|
- last_sample0 = sample0;
|
|
|
- dst -= 12;
|
|
|
- }
|
|
|
-
|
|
|
- cvt->len_cvt = dstsize;
|
|
|
- if (cvt->filters[++cvt->filter_index]) {
|
|
|
- cvt->filters[cvt->filter_index] (cvt, format);
|
|
|
- }
|
|
|
-}
|
|
|
-
|
|
|
-static void SDLCALL
|
|
|
-SDL_Downsample_U16LSB_6c_x2(SDL_AudioCVT * cvt, SDL_AudioFormat format)
|
|
|
-{
|
|
|
-#if DEBUG_CONVERT
|
|
|
- fprintf(stderr, "Downsample (x2) AUDIO_U16LSB, 6 channels.\n");
|
|
|
-#endif
|
|
|
-
|
|
|
- const int dstsize = cvt->len_cvt / 2;
|
|
|
- Uint16 *dst = (Uint16 *) cvt->buf;
|
|
|
- const Uint16 *src = (Uint16 *) cvt->buf;
|
|
|
- const Uint16 *target = (const Uint16 *) (cvt->buf + dstsize);
|
|
|
- Sint32 last_sample0 = (Sint32) SDL_SwapLE16(src[0]);
|
|
|
- Sint32 last_sample1 = (Sint32) SDL_SwapLE16(src[1]);
|
|
|
- Sint32 last_sample2 = (Sint32) SDL_SwapLE16(src[2]);
|
|
|
- Sint32 last_sample3 = (Sint32) SDL_SwapLE16(src[3]);
|
|
|
- Sint32 last_sample4 = (Sint32) SDL_SwapLE16(src[4]);
|
|
|
- Sint32 last_sample5 = (Sint32) SDL_SwapLE16(src[5]);
|
|
|
- while (dst < target) {
|
|
|
- const Sint32 sample0 = (Sint32) SDL_SwapLE16(src[0]);
|
|
|
- const Sint32 sample1 = (Sint32) SDL_SwapLE16(src[1]);
|
|
|
- const Sint32 sample2 = (Sint32) SDL_SwapLE16(src[2]);
|
|
|
- const Sint32 sample3 = (Sint32) SDL_SwapLE16(src[3]);
|
|
|
- const Sint32 sample4 = (Sint32) SDL_SwapLE16(src[4]);
|
|
|
- const Sint32 sample5 = (Sint32) SDL_SwapLE16(src[5]);
|
|
|
- src += 12;
|
|
|
- dst[0] = (Uint16) ((sample0 + last_sample0) >> 1);
|
|
|
- dst[1] = (Uint16) ((sample1 + last_sample1) >> 1);
|
|
|
- dst[2] = (Uint16) ((sample2 + last_sample2) >> 1);
|
|
|
- dst[3] = (Uint16) ((sample3 + last_sample3) >> 1);
|
|
|
- dst[4] = (Uint16) ((sample4 + last_sample4) >> 1);
|
|
|
- dst[5] = (Uint16) ((sample5 + last_sample5) >> 1);
|
|
|
- last_sample0 = sample0;
|
|
|
- last_sample1 = sample1;
|
|
|
- last_sample2 = sample2;
|
|
|
- last_sample3 = sample3;
|
|
|
- last_sample4 = sample4;
|
|
|
- last_sample5 = sample5;
|
|
|
- dst += 6;
|
|
|
- }
|
|
|
-
|
|
|
- cvt->len_cvt = dstsize;
|
|
|
- if (cvt->filters[++cvt->filter_index]) {
|
|
|
- cvt->filters[cvt->filter_index] (cvt, format);
|
|
|
- }
|
|
|
-}
|
|
|
-
|
|
|
-static void SDLCALL
|
|
|
-SDL_Upsample_U16LSB_6c_x4(SDL_AudioCVT * cvt, SDL_AudioFormat format)
|
|
|
-{
|
|
|
-#if DEBUG_CONVERT
|
|
|
- fprintf(stderr, "Upsample (x4) AUDIO_U16LSB, 6 channels.\n");
|
|
|
-#endif
|
|
|
-
|
|
|
- const int dstsize = cvt->len_cvt * 4;
|
|
|
- Uint16 *dst = ((Uint16 *) (cvt->buf + dstsize)) - 6 * 4;
|
|
|
- const Uint16 *src = ((Uint16 *) (cvt->buf + cvt->len_cvt)) - 6;
|
|
|
- const Uint16 *target = ((const Uint16 *) cvt->buf);
|
|
|
- Sint32 last_sample5 = (Sint32) SDL_SwapLE16(src[5]);
|
|
|
- Sint32 last_sample4 = (Sint32) SDL_SwapLE16(src[4]);
|
|
|
- Sint32 last_sample3 = (Sint32) SDL_SwapLE16(src[3]);
|
|
|
- Sint32 last_sample2 = (Sint32) SDL_SwapLE16(src[2]);
|
|
|
- Sint32 last_sample1 = (Sint32) SDL_SwapLE16(src[1]);
|
|
|
- Sint32 last_sample0 = (Sint32) SDL_SwapLE16(src[0]);
|
|
|
- while (dst >= target) {
|
|
|
- const Sint32 sample5 = (Sint32) SDL_SwapLE16(src[5]);
|
|
|
- const Sint32 sample4 = (Sint32) SDL_SwapLE16(src[4]);
|
|
|
- const Sint32 sample3 = (Sint32) SDL_SwapLE16(src[3]);
|
|
|
- const Sint32 sample2 = (Sint32) SDL_SwapLE16(src[2]);
|
|
|
- const Sint32 sample1 = (Sint32) SDL_SwapLE16(src[1]);
|
|
|
- const Sint32 sample0 = (Sint32) SDL_SwapLE16(src[0]);
|
|
|
- src -= 6;
|
|
|
- dst[23] = (Uint16) ((sample5 + (3 * last_sample5)) >> 2);
|
|
|
- dst[22] = (Uint16) ((sample4 + (3 * last_sample4)) >> 2);
|
|
|
- dst[21] = (Uint16) ((sample3 + (3 * last_sample3)) >> 2);
|
|
|
- dst[20] = (Uint16) ((sample2 + (3 * last_sample2)) >> 2);
|
|
|
- dst[19] = (Uint16) ((sample1 + (3 * last_sample1)) >> 2);
|
|
|
- dst[18] = (Uint16) ((sample0 + (3 * last_sample0)) >> 2);
|
|
|
- dst[17] = (Uint16) ((sample5 + last_sample5) >> 1);
|
|
|
- dst[16] = (Uint16) ((sample4 + last_sample4) >> 1);
|
|
|
- dst[15] = (Uint16) ((sample3 + last_sample3) >> 1);
|
|
|
- dst[14] = (Uint16) ((sample2 + last_sample2) >> 1);
|
|
|
- dst[13] = (Uint16) ((sample1 + last_sample1) >> 1);
|
|
|
- dst[12] = (Uint16) ((sample0 + last_sample0) >> 1);
|
|
|
- dst[11] = (Uint16) (((3 * sample5) + last_sample5) >> 2);
|
|
|
- dst[10] = (Uint16) (((3 * sample4) + last_sample4) >> 2);
|
|
|
- dst[9] = (Uint16) (((3 * sample3) + last_sample3) >> 2);
|
|
|
- dst[8] = (Uint16) (((3 * sample2) + last_sample2) >> 2);
|
|
|
- dst[7] = (Uint16) (((3 * sample1) + last_sample1) >> 2);
|
|
|
- dst[6] = (Uint16) (((3 * sample0) + last_sample0) >> 2);
|
|
|
- dst[5] = (Uint16) sample5;
|
|
|
- dst[4] = (Uint16) sample4;
|
|
|
- dst[3] = (Uint16) sample3;
|
|
|
- dst[2] = (Uint16) sample2;
|
|
|
- dst[1] = (Uint16) sample1;
|
|
|
- dst[0] = (Uint16) sample0;
|
|
|
- last_sample5 = sample5;
|
|
|
- last_sample4 = sample4;
|
|
|
- last_sample3 = sample3;
|
|
|
- last_sample2 = sample2;
|
|
|
- last_sample1 = sample1;
|
|
|
- last_sample0 = sample0;
|
|
|
- dst -= 24;
|
|
|
- }
|
|
|
-
|
|
|
- cvt->len_cvt = dstsize;
|
|
|
- if (cvt->filters[++cvt->filter_index]) {
|
|
|
- cvt->filters[cvt->filter_index] (cvt, format);
|
|
|
- }
|
|
|
-}
|
|
|
-
|
|
|
-static void SDLCALL
|
|
|
-SDL_Downsample_U16LSB_6c_x4(SDL_AudioCVT * cvt, SDL_AudioFormat format)
|
|
|
-{
|
|
|
-#if DEBUG_CONVERT
|
|
|
- fprintf(stderr, "Downsample (x4) AUDIO_U16LSB, 6 channels.\n");
|
|
|
-#endif
|
|
|
-
|
|
|
- const int dstsize = cvt->len_cvt / 4;
|
|
|
- Uint16 *dst = (Uint16 *) cvt->buf;
|
|
|
- const Uint16 *src = (Uint16 *) cvt->buf;
|
|
|
- const Uint16 *target = (const Uint16 *) (cvt->buf + dstsize);
|
|
|
- Sint32 last_sample0 = (Sint32) SDL_SwapLE16(src[0]);
|
|
|
- Sint32 last_sample1 = (Sint32) SDL_SwapLE16(src[1]);
|
|
|
- Sint32 last_sample2 = (Sint32) SDL_SwapLE16(src[2]);
|
|
|
- Sint32 last_sample3 = (Sint32) SDL_SwapLE16(src[3]);
|
|
|
- Sint32 last_sample4 = (Sint32) SDL_SwapLE16(src[4]);
|
|
|
- Sint32 last_sample5 = (Sint32) SDL_SwapLE16(src[5]);
|
|
|
- while (dst < target) {
|
|
|
- const Sint32 sample0 = (Sint32) SDL_SwapLE16(src[0]);
|
|
|
- const Sint32 sample1 = (Sint32) SDL_SwapLE16(src[1]);
|
|
|
- const Sint32 sample2 = (Sint32) SDL_SwapLE16(src[2]);
|
|
|
- const Sint32 sample3 = (Sint32) SDL_SwapLE16(src[3]);
|
|
|
- const Sint32 sample4 = (Sint32) SDL_SwapLE16(src[4]);
|
|
|
- const Sint32 sample5 = (Sint32) SDL_SwapLE16(src[5]);
|
|
|
- src += 24;
|
|
|
- dst[0] = (Uint16) ((sample0 + last_sample0) >> 1);
|
|
|
- dst[1] = (Uint16) ((sample1 + last_sample1) >> 1);
|
|
|
- dst[2] = (Uint16) ((sample2 + last_sample2) >> 1);
|
|
|
- dst[3] = (Uint16) ((sample3 + last_sample3) >> 1);
|
|
|
- dst[4] = (Uint16) ((sample4 + last_sample4) >> 1);
|
|
|
- dst[5] = (Uint16) ((sample5 + last_sample5) >> 1);
|
|
|
- last_sample0 = sample0;
|
|
|
- last_sample1 = sample1;
|
|
|
- last_sample2 = sample2;
|
|
|
- last_sample3 = sample3;
|
|
|
- last_sample4 = sample4;
|
|
|
- last_sample5 = sample5;
|
|
|
- dst += 6;
|
|
|
- }
|
|
|
-
|
|
|
- cvt->len_cvt = dstsize;
|
|
|
- if (cvt->filters[++cvt->filter_index]) {
|
|
|
- cvt->filters[cvt->filter_index] (cvt, format);
|
|
|
- }
|
|
|
-}
|
|
|
-
|
|
|
-static void SDLCALL
|
|
|
-SDL_Upsample_U16LSB_8c_x2(SDL_AudioCVT * cvt, SDL_AudioFormat format)
|
|
|
-{
|
|
|
-#if DEBUG_CONVERT
|
|
|
- fprintf(stderr, "Upsample (x2) AUDIO_U16LSB, 8 channels.\n");
|
|
|
-#endif
|
|
|
-
|
|
|
- const int dstsize = cvt->len_cvt * 2;
|
|
|
- Uint16 *dst = ((Uint16 *) (cvt->buf + dstsize)) - 8 * 2;
|
|
|
- const Uint16 *src = ((Uint16 *) (cvt->buf + cvt->len_cvt)) - 8;
|
|
|
- const Uint16 *target = ((const Uint16 *) cvt->buf);
|
|
|
- Sint32 last_sample7 = (Sint32) SDL_SwapLE16(src[7]);
|
|
|
- Sint32 last_sample6 = (Sint32) SDL_SwapLE16(src[6]);
|
|
|
- Sint32 last_sample5 = (Sint32) SDL_SwapLE16(src[5]);
|
|
|
- Sint32 last_sample4 = (Sint32) SDL_SwapLE16(src[4]);
|
|
|
- Sint32 last_sample3 = (Sint32) SDL_SwapLE16(src[3]);
|
|
|
- Sint32 last_sample2 = (Sint32) SDL_SwapLE16(src[2]);
|
|
|
- Sint32 last_sample1 = (Sint32) SDL_SwapLE16(src[1]);
|
|
|
- Sint32 last_sample0 = (Sint32) SDL_SwapLE16(src[0]);
|
|
|
- while (dst >= target) {
|
|
|
- const Sint32 sample7 = (Sint32) SDL_SwapLE16(src[7]);
|
|
|
- const Sint32 sample6 = (Sint32) SDL_SwapLE16(src[6]);
|
|
|
- const Sint32 sample5 = (Sint32) SDL_SwapLE16(src[5]);
|
|
|
- const Sint32 sample4 = (Sint32) SDL_SwapLE16(src[4]);
|
|
|
- const Sint32 sample3 = (Sint32) SDL_SwapLE16(src[3]);
|
|
|
- const Sint32 sample2 = (Sint32) SDL_SwapLE16(src[2]);
|
|
|
- const Sint32 sample1 = (Sint32) SDL_SwapLE16(src[1]);
|
|
|
- const Sint32 sample0 = (Sint32) SDL_SwapLE16(src[0]);
|
|
|
- src -= 8;
|
|
|
- dst[15] = (Uint16) ((sample7 + last_sample7) >> 1);
|
|
|
- dst[14] = (Uint16) ((sample6 + last_sample6) >> 1);
|
|
|
- dst[13] = (Uint16) ((sample5 + last_sample5) >> 1);
|
|
|
- dst[12] = (Uint16) ((sample4 + last_sample4) >> 1);
|
|
|
- dst[11] = (Uint16) ((sample3 + last_sample3) >> 1);
|
|
|
- dst[10] = (Uint16) ((sample2 + last_sample2) >> 1);
|
|
|
- dst[9] = (Uint16) ((sample1 + last_sample1) >> 1);
|
|
|
- dst[8] = (Uint16) ((sample0 + last_sample0) >> 1);
|
|
|
- dst[7] = (Uint16) sample7;
|
|
|
- dst[6] = (Uint16) sample6;
|
|
|
- dst[5] = (Uint16) sample5;
|
|
|
- dst[4] = (Uint16) sample4;
|
|
|
- dst[3] = (Uint16) sample3;
|
|
|
- dst[2] = (Uint16) sample2;
|
|
|
- dst[1] = (Uint16) sample1;
|
|
|
- dst[0] = (Uint16) sample0;
|
|
|
- last_sample7 = sample7;
|
|
|
- last_sample6 = sample6;
|
|
|
- last_sample5 = sample5;
|
|
|
- last_sample4 = sample4;
|
|
|
- last_sample3 = sample3;
|
|
|
- last_sample2 = sample2;
|
|
|
- last_sample1 = sample1;
|
|
|
- last_sample0 = sample0;
|
|
|
- dst -= 16;
|
|
|
- }
|
|
|
-
|
|
|
- cvt->len_cvt = dstsize;
|
|
|
- if (cvt->filters[++cvt->filter_index]) {
|
|
|
- cvt->filters[cvt->filter_index] (cvt, format);
|
|
|
- }
|
|
|
-}
|
|
|
-
|
|
|
-static void SDLCALL
|
|
|
-SDL_Downsample_U16LSB_8c_x2(SDL_AudioCVT * cvt, SDL_AudioFormat format)
|
|
|
-{
|
|
|
-#if DEBUG_CONVERT
|
|
|
- fprintf(stderr, "Downsample (x2) AUDIO_U16LSB, 8 channels.\n");
|
|
|
-#endif
|
|
|
-
|
|
|
- const int dstsize = cvt->len_cvt / 2;
|
|
|
- Uint16 *dst = (Uint16 *) cvt->buf;
|
|
|
- const Uint16 *src = (Uint16 *) cvt->buf;
|
|
|
- const Uint16 *target = (const Uint16 *) (cvt->buf + dstsize);
|
|
|
- Sint32 last_sample0 = (Sint32) SDL_SwapLE16(src[0]);
|
|
|
- Sint32 last_sample1 = (Sint32) SDL_SwapLE16(src[1]);
|
|
|
- Sint32 last_sample2 = (Sint32) SDL_SwapLE16(src[2]);
|
|
|
- Sint32 last_sample3 = (Sint32) SDL_SwapLE16(src[3]);
|
|
|
- Sint32 last_sample4 = (Sint32) SDL_SwapLE16(src[4]);
|
|
|
- Sint32 last_sample5 = (Sint32) SDL_SwapLE16(src[5]);
|
|
|
- Sint32 last_sample6 = (Sint32) SDL_SwapLE16(src[6]);
|
|
|
- Sint32 last_sample7 = (Sint32) SDL_SwapLE16(src[7]);
|
|
|
- while (dst < target) {
|
|
|
- const Sint32 sample0 = (Sint32) SDL_SwapLE16(src[0]);
|
|
|
- const Sint32 sample1 = (Sint32) SDL_SwapLE16(src[1]);
|
|
|
- const Sint32 sample2 = (Sint32) SDL_SwapLE16(src[2]);
|
|
|
- const Sint32 sample3 = (Sint32) SDL_SwapLE16(src[3]);
|
|
|
- const Sint32 sample4 = (Sint32) SDL_SwapLE16(src[4]);
|
|
|
- const Sint32 sample5 = (Sint32) SDL_SwapLE16(src[5]);
|
|
|
- const Sint32 sample6 = (Sint32) SDL_SwapLE16(src[6]);
|
|
|
- const Sint32 sample7 = (Sint32) SDL_SwapLE16(src[7]);
|
|
|
- src += 16;
|
|
|
- dst[0] = (Uint16) ((sample0 + last_sample0) >> 1);
|
|
|
- dst[1] = (Uint16) ((sample1 + last_sample1) >> 1);
|
|
|
- dst[2] = (Uint16) ((sample2 + last_sample2) >> 1);
|
|
|
- dst[3] = (Uint16) ((sample3 + last_sample3) >> 1);
|
|
|
- dst[4] = (Uint16) ((sample4 + last_sample4) >> 1);
|
|
|
- dst[5] = (Uint16) ((sample5 + last_sample5) >> 1);
|
|
|
- dst[6] = (Uint16) ((sample6 + last_sample6) >> 1);
|
|
|
- dst[7] = (Uint16) ((sample7 + last_sample7) >> 1);
|
|
|
- last_sample0 = sample0;
|
|
|
- last_sample1 = sample1;
|
|
|
- last_sample2 = sample2;
|
|
|
- last_sample3 = sample3;
|
|
|
- last_sample4 = sample4;
|
|
|
- last_sample5 = sample5;
|
|
|
- last_sample6 = sample6;
|
|
|
- last_sample7 = sample7;
|
|
|
- dst += 8;
|
|
|
- }
|
|
|
-
|
|
|
- cvt->len_cvt = dstsize;
|
|
|
- if (cvt->filters[++cvt->filter_index]) {
|
|
|
- cvt->filters[cvt->filter_index] (cvt, format);
|
|
|
- }
|
|
|
-}
|
|
|
-
|
|
|
-static void SDLCALL
|
|
|
-SDL_Upsample_U16LSB_8c_x4(SDL_AudioCVT * cvt, SDL_AudioFormat format)
|
|
|
-{
|
|
|
-#if DEBUG_CONVERT
|
|
|
- fprintf(stderr, "Upsample (x4) AUDIO_U16LSB, 8 channels.\n");
|
|
|
-#endif
|
|
|
-
|
|
|
- const int dstsize = cvt->len_cvt * 4;
|
|
|
- Uint16 *dst = ((Uint16 *) (cvt->buf + dstsize)) - 8 * 4;
|
|
|
- const Uint16 *src = ((Uint16 *) (cvt->buf + cvt->len_cvt)) - 8;
|
|
|
- const Uint16 *target = ((const Uint16 *) cvt->buf);
|
|
|
- Sint32 last_sample7 = (Sint32) SDL_SwapLE16(src[7]);
|
|
|
- Sint32 last_sample6 = (Sint32) SDL_SwapLE16(src[6]);
|
|
|
- Sint32 last_sample5 = (Sint32) SDL_SwapLE16(src[5]);
|
|
|
- Sint32 last_sample4 = (Sint32) SDL_SwapLE16(src[4]);
|
|
|
- Sint32 last_sample3 = (Sint32) SDL_SwapLE16(src[3]);
|
|
|
- Sint32 last_sample2 = (Sint32) SDL_SwapLE16(src[2]);
|
|
|
- Sint32 last_sample1 = (Sint32) SDL_SwapLE16(src[1]);
|
|
|
- Sint32 last_sample0 = (Sint32) SDL_SwapLE16(src[0]);
|
|
|
- while (dst >= target) {
|
|
|
- const Sint32 sample7 = (Sint32) SDL_SwapLE16(src[7]);
|
|
|
- const Sint32 sample6 = (Sint32) SDL_SwapLE16(src[6]);
|
|
|
- const Sint32 sample5 = (Sint32) SDL_SwapLE16(src[5]);
|
|
|
- const Sint32 sample4 = (Sint32) SDL_SwapLE16(src[4]);
|
|
|
- const Sint32 sample3 = (Sint32) SDL_SwapLE16(src[3]);
|
|
|
- const Sint32 sample2 = (Sint32) SDL_SwapLE16(src[2]);
|
|
|
- const Sint32 sample1 = (Sint32) SDL_SwapLE16(src[1]);
|
|
|
- const Sint32 sample0 = (Sint32) SDL_SwapLE16(src[0]);
|
|
|
- src -= 8;
|
|
|
- dst[31] = (Uint16) ((sample7 + (3 * last_sample7)) >> 2);
|
|
|
- dst[30] = (Uint16) ((sample6 + (3 * last_sample6)) >> 2);
|
|
|
- dst[29] = (Uint16) ((sample5 + (3 * last_sample5)) >> 2);
|
|
|
- dst[28] = (Uint16) ((sample4 + (3 * last_sample4)) >> 2);
|
|
|
- dst[27] = (Uint16) ((sample3 + (3 * last_sample3)) >> 2);
|
|
|
- dst[26] = (Uint16) ((sample2 + (3 * last_sample2)) >> 2);
|
|
|
- dst[25] = (Uint16) ((sample1 + (3 * last_sample1)) >> 2);
|
|
|
- dst[24] = (Uint16) ((sample0 + (3 * last_sample0)) >> 2);
|
|
|
- dst[23] = (Uint16) ((sample7 + last_sample7) >> 1);
|
|
|
- dst[22] = (Uint16) ((sample6 + last_sample6) >> 1);
|
|
|
- dst[21] = (Uint16) ((sample5 + last_sample5) >> 1);
|
|
|
- dst[20] = (Uint16) ((sample4 + last_sample4) >> 1);
|
|
|
- dst[19] = (Uint16) ((sample3 + last_sample3) >> 1);
|
|
|
- dst[18] = (Uint16) ((sample2 + last_sample2) >> 1);
|
|
|
- dst[17] = (Uint16) ((sample1 + last_sample1) >> 1);
|
|
|
- dst[16] = (Uint16) ((sample0 + last_sample0) >> 1);
|
|
|
- dst[15] = (Uint16) (((3 * sample7) + last_sample7) >> 2);
|
|
|
- dst[14] = (Uint16) (((3 * sample6) + last_sample6) >> 2);
|
|
|
- dst[13] = (Uint16) (((3 * sample5) + last_sample5) >> 2);
|
|
|
- dst[12] = (Uint16) (((3 * sample4) + last_sample4) >> 2);
|
|
|
- dst[11] = (Uint16) (((3 * sample3) + last_sample3) >> 2);
|
|
|
- dst[10] = (Uint16) (((3 * sample2) + last_sample2) >> 2);
|
|
|
- dst[9] = (Uint16) (((3 * sample1) + last_sample1) >> 2);
|
|
|
- dst[8] = (Uint16) (((3 * sample0) + last_sample0) >> 2);
|
|
|
- dst[7] = (Uint16) sample7;
|
|
|
- dst[6] = (Uint16) sample6;
|
|
|
- dst[5] = (Uint16) sample5;
|
|
|
- dst[4] = (Uint16) sample4;
|
|
|
- dst[3] = (Uint16) sample3;
|
|
|
- dst[2] = (Uint16) sample2;
|
|
|
- dst[1] = (Uint16) sample1;
|
|
|
- dst[0] = (Uint16) sample0;
|
|
|
- last_sample7 = sample7;
|
|
|
- last_sample6 = sample6;
|
|
|
- last_sample5 = sample5;
|
|
|
- last_sample4 = sample4;
|
|
|
- last_sample3 = sample3;
|
|
|
- last_sample2 = sample2;
|
|
|
- last_sample1 = sample1;
|
|
|
- last_sample0 = sample0;
|
|
|
- dst -= 32;
|
|
|
- }
|
|
|
-
|
|
|
- cvt->len_cvt = dstsize;
|
|
|
- if (cvt->filters[++cvt->filter_index]) {
|
|
|
- cvt->filters[cvt->filter_index] (cvt, format);
|
|
|
- }
|
|
|
-}
|
|
|
-
|
|
|
-static void SDLCALL
|
|
|
-SDL_Downsample_U16LSB_8c_x4(SDL_AudioCVT * cvt, SDL_AudioFormat format)
|
|
|
-{
|
|
|
-#if DEBUG_CONVERT
|
|
|
- fprintf(stderr, "Downsample (x4) AUDIO_U16LSB, 8 channels.\n");
|
|
|
-#endif
|
|
|
-
|
|
|
- const int dstsize = cvt->len_cvt / 4;
|
|
|
- Uint16 *dst = (Uint16 *) cvt->buf;
|
|
|
- const Uint16 *src = (Uint16 *) cvt->buf;
|
|
|
- const Uint16 *target = (const Uint16 *) (cvt->buf + dstsize);
|
|
|
- Sint32 last_sample0 = (Sint32) SDL_SwapLE16(src[0]);
|
|
|
- Sint32 last_sample1 = (Sint32) SDL_SwapLE16(src[1]);
|
|
|
- Sint32 last_sample2 = (Sint32) SDL_SwapLE16(src[2]);
|
|
|
- Sint32 last_sample3 = (Sint32) SDL_SwapLE16(src[3]);
|
|
|
- Sint32 last_sample4 = (Sint32) SDL_SwapLE16(src[4]);
|
|
|
- Sint32 last_sample5 = (Sint32) SDL_SwapLE16(src[5]);
|
|
|
- Sint32 last_sample6 = (Sint32) SDL_SwapLE16(src[6]);
|
|
|
- Sint32 last_sample7 = (Sint32) SDL_SwapLE16(src[7]);
|
|
|
- while (dst < target) {
|
|
|
- const Sint32 sample0 = (Sint32) SDL_SwapLE16(src[0]);
|
|
|
- const Sint32 sample1 = (Sint32) SDL_SwapLE16(src[1]);
|
|
|
- const Sint32 sample2 = (Sint32) SDL_SwapLE16(src[2]);
|
|
|
- const Sint32 sample3 = (Sint32) SDL_SwapLE16(src[3]);
|
|
|
- const Sint32 sample4 = (Sint32) SDL_SwapLE16(src[4]);
|
|
|
- const Sint32 sample5 = (Sint32) SDL_SwapLE16(src[5]);
|
|
|
- const Sint32 sample6 = (Sint32) SDL_SwapLE16(src[6]);
|
|
|
- const Sint32 sample7 = (Sint32) SDL_SwapLE16(src[7]);
|
|
|
- src += 32;
|
|
|
- dst[0] = (Uint16) ((sample0 + last_sample0) >> 1);
|
|
|
- dst[1] = (Uint16) ((sample1 + last_sample1) >> 1);
|
|
|
- dst[2] = (Uint16) ((sample2 + last_sample2) >> 1);
|
|
|
- dst[3] = (Uint16) ((sample3 + last_sample3) >> 1);
|
|
|
- dst[4] = (Uint16) ((sample4 + last_sample4) >> 1);
|
|
|
- dst[5] = (Uint16) ((sample5 + last_sample5) >> 1);
|
|
|
- dst[6] = (Uint16) ((sample6 + last_sample6) >> 1);
|
|
|
- dst[7] = (Uint16) ((sample7 + last_sample7) >> 1);
|
|
|
- last_sample0 = sample0;
|
|
|
- last_sample1 = sample1;
|
|
|
- last_sample2 = sample2;
|
|
|
- last_sample3 = sample3;
|
|
|
- last_sample4 = sample4;
|
|
|
- last_sample5 = sample5;
|
|
|
- last_sample6 = sample6;
|
|
|
- last_sample7 = sample7;
|
|
|
- dst += 8;
|
|
|
- }
|
|
|
-
|
|
|
- cvt->len_cvt = dstsize;
|
|
|
- if (cvt->filters[++cvt->filter_index]) {
|
|
|
- cvt->filters[cvt->filter_index] (cvt, format);
|
|
|
- }
|
|
|
-}
|
|
|
-
|
|
|
-static void SDLCALL
|
|
|
-SDL_Upsample_S16LSB_1c_x2(SDL_AudioCVT * cvt, SDL_AudioFormat format)
|
|
|
-{
|
|
|
-#if DEBUG_CONVERT
|
|
|
- fprintf(stderr, "Upsample (x2) AUDIO_S16LSB, 1 channels.\n");
|
|
|
-#endif
|
|
|
-
|
|
|
- const int dstsize = cvt->len_cvt * 2;
|
|
|
- Sint16 *dst = ((Sint16 *) (cvt->buf + dstsize)) - 1 * 2;
|
|
|
- const Sint16 *src = ((Sint16 *) (cvt->buf + cvt->len_cvt)) - 1;
|
|
|
- const Sint16 *target = ((const Sint16 *) cvt->buf);
|
|
|
- Sint32 last_sample0 = (Sint32) ((Sint16) SDL_SwapLE16(src[0]));
|
|
|
- while (dst >= target) {
|
|
|
- const Sint32 sample0 = (Sint32) ((Sint16) SDL_SwapLE16(src[0]));
|
|
|
- src--;
|
|
|
- dst[1] = (Sint16) ((sample0 + last_sample0) >> 1);
|
|
|
- dst[0] = (Sint16) sample0;
|
|
|
- last_sample0 = sample0;
|
|
|
- dst -= 2;
|
|
|
- }
|
|
|
-
|
|
|
- cvt->len_cvt = dstsize;
|
|
|
- if (cvt->filters[++cvt->filter_index]) {
|
|
|
- cvt->filters[cvt->filter_index] (cvt, format);
|
|
|
- }
|
|
|
-}
|
|
|
-
|
|
|
-static void SDLCALL
|
|
|
-SDL_Downsample_S16LSB_1c_x2(SDL_AudioCVT * cvt, SDL_AudioFormat format)
|
|
|
-{
|
|
|
-#if DEBUG_CONVERT
|
|
|
- fprintf(stderr, "Downsample (x2) AUDIO_S16LSB, 1 channels.\n");
|
|
|
-#endif
|
|
|
-
|
|
|
- const int dstsize = cvt->len_cvt / 2;
|
|
|
- Sint16 *dst = (Sint16 *) cvt->buf;
|
|
|
- const Sint16 *src = (Sint16 *) cvt->buf;
|
|
|
- const Sint16 *target = (const Sint16 *) (cvt->buf + dstsize);
|
|
|
- Sint32 last_sample0 = (Sint32) ((Sint16) SDL_SwapLE16(src[0]));
|
|
|
- while (dst < target) {
|
|
|
- const Sint32 sample0 = (Sint32) ((Sint16) SDL_SwapLE16(src[0]));
|
|
|
- src += 2;
|
|
|
- dst[0] = (Sint16) ((sample0 + last_sample0) >> 1);
|
|
|
- last_sample0 = sample0;
|
|
|
- dst++;
|
|
|
- }
|
|
|
-
|
|
|
- cvt->len_cvt = dstsize;
|
|
|
- if (cvt->filters[++cvt->filter_index]) {
|
|
|
- cvt->filters[cvt->filter_index] (cvt, format);
|
|
|
- }
|
|
|
-}
|
|
|
-
|
|
|
-static void SDLCALL
|
|
|
-SDL_Upsample_S16LSB_1c_x4(SDL_AudioCVT * cvt, SDL_AudioFormat format)
|
|
|
-{
|
|
|
-#if DEBUG_CONVERT
|
|
|
- fprintf(stderr, "Upsample (x4) AUDIO_S16LSB, 1 channels.\n");
|
|
|
-#endif
|
|
|
-
|
|
|
- const int dstsize = cvt->len_cvt * 4;
|
|
|
- Sint16 *dst = ((Sint16 *) (cvt->buf + dstsize)) - 1 * 4;
|
|
|
- const Sint16 *src = ((Sint16 *) (cvt->buf + cvt->len_cvt)) - 1;
|
|
|
- const Sint16 *target = ((const Sint16 *) cvt->buf);
|
|
|
- Sint32 last_sample0 = (Sint32) ((Sint16) SDL_SwapLE16(src[0]));
|
|
|
- while (dst >= target) {
|
|
|
- const Sint32 sample0 = (Sint32) ((Sint16) SDL_SwapLE16(src[0]));
|
|
|
- src--;
|
|
|
- dst[3] = (Sint16) ((sample0 + (3 * last_sample0)) >> 2);
|
|
|
- dst[2] = (Sint16) ((sample0 + last_sample0) >> 1);
|
|
|
- dst[1] = (Sint16) (((3 * sample0) + last_sample0) >> 2);
|
|
|
- dst[0] = (Sint16) sample0;
|
|
|
- last_sample0 = sample0;
|
|
|
- dst -= 4;
|
|
|
- }
|
|
|
-
|
|
|
- cvt->len_cvt = dstsize;
|
|
|
- if (cvt->filters[++cvt->filter_index]) {
|
|
|
- cvt->filters[cvt->filter_index] (cvt, format);
|
|
|
- }
|
|
|
-}
|
|
|
-
|
|
|
-static void SDLCALL
|
|
|
-SDL_Downsample_S16LSB_1c_x4(SDL_AudioCVT * cvt, SDL_AudioFormat format)
|
|
|
-{
|
|
|
-#if DEBUG_CONVERT
|
|
|
- fprintf(stderr, "Downsample (x4) AUDIO_S16LSB, 1 channels.\n");
|
|
|
-#endif
|
|
|
-
|
|
|
- const int dstsize = cvt->len_cvt / 4;
|
|
|
- Sint16 *dst = (Sint16 *) cvt->buf;
|
|
|
- const Sint16 *src = (Sint16 *) cvt->buf;
|
|
|
- const Sint16 *target = (const Sint16 *) (cvt->buf + dstsize);
|
|
|
- Sint32 last_sample0 = (Sint32) ((Sint16) SDL_SwapLE16(src[0]));
|
|
|
- while (dst < target) {
|
|
|
- const Sint32 sample0 = (Sint32) ((Sint16) SDL_SwapLE16(src[0]));
|
|
|
- src += 4;
|
|
|
- dst[0] = (Sint16) ((sample0 + last_sample0) >> 1);
|
|
|
- last_sample0 = sample0;
|
|
|
- dst++;
|
|
|
- }
|
|
|
-
|
|
|
- cvt->len_cvt = dstsize;
|
|
|
- if (cvt->filters[++cvt->filter_index]) {
|
|
|
- cvt->filters[cvt->filter_index] (cvt, format);
|
|
|
- }
|
|
|
-}
|
|
|
-
|
|
|
-static void SDLCALL
|
|
|
-SDL_Upsample_S16LSB_2c_x2(SDL_AudioCVT * cvt, SDL_AudioFormat format)
|
|
|
-{
|
|
|
-#if DEBUG_CONVERT
|
|
|
- fprintf(stderr, "Upsample (x2) AUDIO_S16LSB, 2 channels.\n");
|
|
|
-#endif
|
|
|
-
|
|
|
- const int dstsize = cvt->len_cvt * 2;
|
|
|
- Sint16 *dst = ((Sint16 *) (cvt->buf + dstsize)) - 2 * 2;
|
|
|
- const Sint16 *src = ((Sint16 *) (cvt->buf + cvt->len_cvt)) - 2;
|
|
|
- const Sint16 *target = ((const Sint16 *) cvt->buf);
|
|
|
- Sint32 last_sample1 = (Sint32) ((Sint16) SDL_SwapLE16(src[1]));
|
|
|
- Sint32 last_sample0 = (Sint32) ((Sint16) SDL_SwapLE16(src[0]));
|
|
|
- while (dst >= target) {
|
|
|
- const Sint32 sample1 = (Sint32) ((Sint16) SDL_SwapLE16(src[1]));
|
|
|
- const Sint32 sample0 = (Sint32) ((Sint16) SDL_SwapLE16(src[0]));
|
|
|
- src -= 2;
|
|
|
- dst[3] = (Sint16) ((sample1 + last_sample1) >> 1);
|
|
|
- dst[2] = (Sint16) ((sample0 + last_sample0) >> 1);
|
|
|
- dst[1] = (Sint16) sample1;
|
|
|
- dst[0] = (Sint16) sample0;
|
|
|
- last_sample1 = sample1;
|
|
|
- last_sample0 = sample0;
|
|
|
- dst -= 4;
|
|
|
- }
|
|
|
-
|
|
|
- cvt->len_cvt = dstsize;
|
|
|
- if (cvt->filters[++cvt->filter_index]) {
|
|
|
- cvt->filters[cvt->filter_index] (cvt, format);
|
|
|
- }
|
|
|
-}
|
|
|
-
|
|
|
-static void SDLCALL
|
|
|
-SDL_Downsample_S16LSB_2c_x2(SDL_AudioCVT * cvt, SDL_AudioFormat format)
|
|
|
-{
|
|
|
-#if DEBUG_CONVERT
|
|
|
- fprintf(stderr, "Downsample (x2) AUDIO_S16LSB, 2 channels.\n");
|
|
|
-#endif
|
|
|
-
|
|
|
- const int dstsize = cvt->len_cvt / 2;
|
|
|
- Sint16 *dst = (Sint16 *) cvt->buf;
|
|
|
- const Sint16 *src = (Sint16 *) cvt->buf;
|
|
|
- const Sint16 *target = (const Sint16 *) (cvt->buf + dstsize);
|
|
|
- Sint32 last_sample0 = (Sint32) ((Sint16) SDL_SwapLE16(src[0]));
|
|
|
- Sint32 last_sample1 = (Sint32) ((Sint16) SDL_SwapLE16(src[1]));
|
|
|
- while (dst < target) {
|
|
|
- const Sint32 sample0 = (Sint32) ((Sint16) SDL_SwapLE16(src[0]));
|
|
|
- const Sint32 sample1 = (Sint32) ((Sint16) SDL_SwapLE16(src[1]));
|
|
|
- src += 4;
|
|
|
- dst[0] = (Sint16) ((sample0 + last_sample0) >> 1);
|
|
|
- dst[1] = (Sint16) ((sample1 + last_sample1) >> 1);
|
|
|
- last_sample0 = sample0;
|
|
|
- last_sample1 = sample1;
|
|
|
- dst += 2;
|
|
|
- }
|
|
|
-
|
|
|
- cvt->len_cvt = dstsize;
|
|
|
- if (cvt->filters[++cvt->filter_index]) {
|
|
|
- cvt->filters[cvt->filter_index] (cvt, format);
|
|
|
- }
|
|
|
-}
|
|
|
-
|
|
|
-static void SDLCALL
|
|
|
-SDL_Upsample_S16LSB_2c_x4(SDL_AudioCVT * cvt, SDL_AudioFormat format)
|
|
|
-{
|
|
|
-#if DEBUG_CONVERT
|
|
|
- fprintf(stderr, "Upsample (x4) AUDIO_S16LSB, 2 channels.\n");
|
|
|
-#endif
|
|
|
-
|
|
|
- const int dstsize = cvt->len_cvt * 4;
|
|
|
- Sint16 *dst = ((Sint16 *) (cvt->buf + dstsize)) - 2 * 4;
|
|
|
- const Sint16 *src = ((Sint16 *) (cvt->buf + cvt->len_cvt)) - 2;
|
|
|
- const Sint16 *target = ((const Sint16 *) cvt->buf);
|
|
|
- Sint32 last_sample1 = (Sint32) ((Sint16) SDL_SwapLE16(src[1]));
|
|
|
- Sint32 last_sample0 = (Sint32) ((Sint16) SDL_SwapLE16(src[0]));
|
|
|
- while (dst >= target) {
|
|
|
- const Sint32 sample1 = (Sint32) ((Sint16) SDL_SwapLE16(src[1]));
|
|
|
- const Sint32 sample0 = (Sint32) ((Sint16) SDL_SwapLE16(src[0]));
|
|
|
- src -= 2;
|
|
|
- dst[7] = (Sint16) ((sample1 + (3 * last_sample1)) >> 2);
|
|
|
- dst[6] = (Sint16) ((sample0 + (3 * last_sample0)) >> 2);
|
|
|
- dst[5] = (Sint16) ((sample1 + last_sample1) >> 1);
|
|
|
- dst[4] = (Sint16) ((sample0 + last_sample0) >> 1);
|
|
|
- dst[3] = (Sint16) (((3 * sample1) + last_sample1) >> 2);
|
|
|
- dst[2] = (Sint16) (((3 * sample0) + last_sample0) >> 2);
|
|
|
- dst[1] = (Sint16) sample1;
|
|
|
- dst[0] = (Sint16) sample0;
|
|
|
- last_sample1 = sample1;
|
|
|
- last_sample0 = sample0;
|
|
|
- dst -= 8;
|
|
|
- }
|
|
|
-
|
|
|
- cvt->len_cvt = dstsize;
|
|
|
- if (cvt->filters[++cvt->filter_index]) {
|
|
|
- cvt->filters[cvt->filter_index] (cvt, format);
|
|
|
- }
|
|
|
-}
|
|
|
-
|
|
|
-static void SDLCALL
|
|
|
-SDL_Downsample_S16LSB_2c_x4(SDL_AudioCVT * cvt, SDL_AudioFormat format)
|
|
|
-{
|
|
|
-#if DEBUG_CONVERT
|
|
|
- fprintf(stderr, "Downsample (x4) AUDIO_S16LSB, 2 channels.\n");
|
|
|
-#endif
|
|
|
-
|
|
|
- const int dstsize = cvt->len_cvt / 4;
|
|
|
- Sint16 *dst = (Sint16 *) cvt->buf;
|
|
|
- const Sint16 *src = (Sint16 *) cvt->buf;
|
|
|
- const Sint16 *target = (const Sint16 *) (cvt->buf + dstsize);
|
|
|
- Sint32 last_sample0 = (Sint32) ((Sint16) SDL_SwapLE16(src[0]));
|
|
|
- Sint32 last_sample1 = (Sint32) ((Sint16) SDL_SwapLE16(src[1]));
|
|
|
- while (dst < target) {
|
|
|
- const Sint32 sample0 = (Sint32) ((Sint16) SDL_SwapLE16(src[0]));
|
|
|
- const Sint32 sample1 = (Sint32) ((Sint16) SDL_SwapLE16(src[1]));
|
|
|
- src += 8;
|
|
|
- dst[0] = (Sint16) ((sample0 + last_sample0) >> 1);
|
|
|
- dst[1] = (Sint16) ((sample1 + last_sample1) >> 1);
|
|
|
- last_sample0 = sample0;
|
|
|
- last_sample1 = sample1;
|
|
|
- dst += 2;
|
|
|
- }
|
|
|
-
|
|
|
- cvt->len_cvt = dstsize;
|
|
|
- if (cvt->filters[++cvt->filter_index]) {
|
|
|
- cvt->filters[cvt->filter_index] (cvt, format);
|
|
|
- }
|
|
|
-}
|
|
|
-
|
|
|
-static void SDLCALL
|
|
|
-SDL_Upsample_S16LSB_4c_x2(SDL_AudioCVT * cvt, SDL_AudioFormat format)
|
|
|
-{
|
|
|
-#if DEBUG_CONVERT
|
|
|
- fprintf(stderr, "Upsample (x2) AUDIO_S16LSB, 4 channels.\n");
|
|
|
-#endif
|
|
|
-
|
|
|
- const int dstsize = cvt->len_cvt * 2;
|
|
|
- Sint16 *dst = ((Sint16 *) (cvt->buf + dstsize)) - 4 * 2;
|
|
|
- const Sint16 *src = ((Sint16 *) (cvt->buf + cvt->len_cvt)) - 4;
|
|
|
- const Sint16 *target = ((const Sint16 *) cvt->buf);
|
|
|
- Sint32 last_sample3 = (Sint32) ((Sint16) SDL_SwapLE16(src[3]));
|
|
|
- Sint32 last_sample2 = (Sint32) ((Sint16) SDL_SwapLE16(src[2]));
|
|
|
- Sint32 last_sample1 = (Sint32) ((Sint16) SDL_SwapLE16(src[1]));
|
|
|
- Sint32 last_sample0 = (Sint32) ((Sint16) SDL_SwapLE16(src[0]));
|
|
|
- while (dst >= target) {
|
|
|
- const Sint32 sample3 = (Sint32) ((Sint16) SDL_SwapLE16(src[3]));
|
|
|
- const Sint32 sample2 = (Sint32) ((Sint16) SDL_SwapLE16(src[2]));
|
|
|
- const Sint32 sample1 = (Sint32) ((Sint16) SDL_SwapLE16(src[1]));
|
|
|
- const Sint32 sample0 = (Sint32) ((Sint16) SDL_SwapLE16(src[0]));
|
|
|
- src -= 4;
|
|
|
- dst[7] = (Sint16) ((sample3 + last_sample3) >> 1);
|
|
|
- dst[6] = (Sint16) ((sample2 + last_sample2) >> 1);
|
|
|
- dst[5] = (Sint16) ((sample1 + last_sample1) >> 1);
|
|
|
- dst[4] = (Sint16) ((sample0 + last_sample0) >> 1);
|
|
|
- dst[3] = (Sint16) sample3;
|
|
|
- dst[2] = (Sint16) sample2;
|
|
|
- dst[1] = (Sint16) sample1;
|
|
|
- dst[0] = (Sint16) sample0;
|
|
|
- last_sample3 = sample3;
|
|
|
- last_sample2 = sample2;
|
|
|
- last_sample1 = sample1;
|
|
|
- last_sample0 = sample0;
|
|
|
- dst -= 8;
|
|
|
- }
|
|
|
-
|
|
|
- cvt->len_cvt = dstsize;
|
|
|
- if (cvt->filters[++cvt->filter_index]) {
|
|
|
- cvt->filters[cvt->filter_index] (cvt, format);
|
|
|
- }
|
|
|
-}
|
|
|
-
|
|
|
-static void SDLCALL
|
|
|
-SDL_Downsample_S16LSB_4c_x2(SDL_AudioCVT * cvt, SDL_AudioFormat format)
|
|
|
-{
|
|
|
-#if DEBUG_CONVERT
|
|
|
- fprintf(stderr, "Downsample (x2) AUDIO_S16LSB, 4 channels.\n");
|
|
|
-#endif
|
|
|
-
|
|
|
- const int dstsize = cvt->len_cvt / 2;
|
|
|
- Sint16 *dst = (Sint16 *) cvt->buf;
|
|
|
- const Sint16 *src = (Sint16 *) cvt->buf;
|
|
|
- const Sint16 *target = (const Sint16 *) (cvt->buf + dstsize);
|
|
|
- Sint32 last_sample0 = (Sint32) ((Sint16) SDL_SwapLE16(src[0]));
|
|
|
- Sint32 last_sample1 = (Sint32) ((Sint16) SDL_SwapLE16(src[1]));
|
|
|
- Sint32 last_sample2 = (Sint32) ((Sint16) SDL_SwapLE16(src[2]));
|
|
|
- Sint32 last_sample3 = (Sint32) ((Sint16) SDL_SwapLE16(src[3]));
|
|
|
- while (dst < target) {
|
|
|
- const Sint32 sample0 = (Sint32) ((Sint16) SDL_SwapLE16(src[0]));
|
|
|
- const Sint32 sample1 = (Sint32) ((Sint16) SDL_SwapLE16(src[1]));
|
|
|
- const Sint32 sample2 = (Sint32) ((Sint16) SDL_SwapLE16(src[2]));
|
|
|
- const Sint32 sample3 = (Sint32) ((Sint16) SDL_SwapLE16(src[3]));
|
|
|
- src += 8;
|
|
|
- dst[0] = (Sint16) ((sample0 + last_sample0) >> 1);
|
|
|
- dst[1] = (Sint16) ((sample1 + last_sample1) >> 1);
|
|
|
- dst[2] = (Sint16) ((sample2 + last_sample2) >> 1);
|
|
|
- dst[3] = (Sint16) ((sample3 + last_sample3) >> 1);
|
|
|
- last_sample0 = sample0;
|
|
|
- last_sample1 = sample1;
|
|
|
- last_sample2 = sample2;
|
|
|
- last_sample3 = sample3;
|
|
|
- dst += 4;
|
|
|
- }
|
|
|
-
|
|
|
- cvt->len_cvt = dstsize;
|
|
|
- if (cvt->filters[++cvt->filter_index]) {
|
|
|
- cvt->filters[cvt->filter_index] (cvt, format);
|
|
|
- }
|
|
|
-}
|
|
|
-
|
|
|
-static void SDLCALL
|
|
|
-SDL_Upsample_S16LSB_4c_x4(SDL_AudioCVT * cvt, SDL_AudioFormat format)
|
|
|
-{
|
|
|
-#if DEBUG_CONVERT
|
|
|
- fprintf(stderr, "Upsample (x4) AUDIO_S16LSB, 4 channels.\n");
|
|
|
-#endif
|
|
|
-
|
|
|
- const int dstsize = cvt->len_cvt * 4;
|
|
|
- Sint16 *dst = ((Sint16 *) (cvt->buf + dstsize)) - 4 * 4;
|
|
|
- const Sint16 *src = ((Sint16 *) (cvt->buf + cvt->len_cvt)) - 4;
|
|
|
- const Sint16 *target = ((const Sint16 *) cvt->buf);
|
|
|
- Sint32 last_sample3 = (Sint32) ((Sint16) SDL_SwapLE16(src[3]));
|
|
|
- Sint32 last_sample2 = (Sint32) ((Sint16) SDL_SwapLE16(src[2]));
|
|
|
- Sint32 last_sample1 = (Sint32) ((Sint16) SDL_SwapLE16(src[1]));
|
|
|
- Sint32 last_sample0 = (Sint32) ((Sint16) SDL_SwapLE16(src[0]));
|
|
|
- while (dst >= target) {
|
|
|
- const Sint32 sample3 = (Sint32) ((Sint16) SDL_SwapLE16(src[3]));
|
|
|
- const Sint32 sample2 = (Sint32) ((Sint16) SDL_SwapLE16(src[2]));
|
|
|
- const Sint32 sample1 = (Sint32) ((Sint16) SDL_SwapLE16(src[1]));
|
|
|
- const Sint32 sample0 = (Sint32) ((Sint16) SDL_SwapLE16(src[0]));
|
|
|
- src -= 4;
|
|
|
- dst[15] = (Sint16) ((sample3 + (3 * last_sample3)) >> 2);
|
|
|
- dst[14] = (Sint16) ((sample2 + (3 * last_sample2)) >> 2);
|
|
|
- dst[13] = (Sint16) ((sample1 + (3 * last_sample1)) >> 2);
|
|
|
- dst[12] = (Sint16) ((sample0 + (3 * last_sample0)) >> 2);
|
|
|
- dst[11] = (Sint16) ((sample3 + last_sample3) >> 1);
|
|
|
- dst[10] = (Sint16) ((sample2 + last_sample2) >> 1);
|
|
|
- dst[9] = (Sint16) ((sample1 + last_sample1) >> 1);
|
|
|
- dst[8] = (Sint16) ((sample0 + last_sample0) >> 1);
|
|
|
- dst[7] = (Sint16) (((3 * sample3) + last_sample3) >> 2);
|
|
|
- dst[6] = (Sint16) (((3 * sample2) + last_sample2) >> 2);
|
|
|
- dst[5] = (Sint16) (((3 * sample1) + last_sample1) >> 2);
|
|
|
- dst[4] = (Sint16) (((3 * sample0) + last_sample0) >> 2);
|
|
|
- dst[3] = (Sint16) sample3;
|
|
|
- dst[2] = (Sint16) sample2;
|
|
|
- dst[1] = (Sint16) sample1;
|
|
|
- dst[0] = (Sint16) sample0;
|
|
|
- last_sample3 = sample3;
|
|
|
- last_sample2 = sample2;
|
|
|
- last_sample1 = sample1;
|
|
|
- last_sample0 = sample0;
|
|
|
- dst -= 16;
|
|
|
- }
|
|
|
-
|
|
|
- cvt->len_cvt = dstsize;
|
|
|
- if (cvt->filters[++cvt->filter_index]) {
|
|
|
- cvt->filters[cvt->filter_index] (cvt, format);
|
|
|
- }
|
|
|
-}
|
|
|
-
|
|
|
-static void SDLCALL
|
|
|
-SDL_Downsample_S16LSB_4c_x4(SDL_AudioCVT * cvt, SDL_AudioFormat format)
|
|
|
-{
|
|
|
-#if DEBUG_CONVERT
|
|
|
- fprintf(stderr, "Downsample (x4) AUDIO_S16LSB, 4 channels.\n");
|
|
|
-#endif
|
|
|
-
|
|
|
- const int dstsize = cvt->len_cvt / 4;
|
|
|
- Sint16 *dst = (Sint16 *) cvt->buf;
|
|
|
- const Sint16 *src = (Sint16 *) cvt->buf;
|
|
|
- const Sint16 *target = (const Sint16 *) (cvt->buf + dstsize);
|
|
|
- Sint32 last_sample0 = (Sint32) ((Sint16) SDL_SwapLE16(src[0]));
|
|
|
- Sint32 last_sample1 = (Sint32) ((Sint16) SDL_SwapLE16(src[1]));
|
|
|
- Sint32 last_sample2 = (Sint32) ((Sint16) SDL_SwapLE16(src[2]));
|
|
|
- Sint32 last_sample3 = (Sint32) ((Sint16) SDL_SwapLE16(src[3]));
|
|
|
- while (dst < target) {
|
|
|
- const Sint32 sample0 = (Sint32) ((Sint16) SDL_SwapLE16(src[0]));
|
|
|
- const Sint32 sample1 = (Sint32) ((Sint16) SDL_SwapLE16(src[1]));
|
|
|
- const Sint32 sample2 = (Sint32) ((Sint16) SDL_SwapLE16(src[2]));
|
|
|
- const Sint32 sample3 = (Sint32) ((Sint16) SDL_SwapLE16(src[3]));
|
|
|
- src += 16;
|
|
|
- dst[0] = (Sint16) ((sample0 + last_sample0) >> 1);
|
|
|
- dst[1] = (Sint16) ((sample1 + last_sample1) >> 1);
|
|
|
- dst[2] = (Sint16) ((sample2 + last_sample2) >> 1);
|
|
|
- dst[3] = (Sint16) ((sample3 + last_sample3) >> 1);
|
|
|
- last_sample0 = sample0;
|
|
|
- last_sample1 = sample1;
|
|
|
- last_sample2 = sample2;
|
|
|
- last_sample3 = sample3;
|
|
|
- dst += 4;
|
|
|
- }
|
|
|
-
|
|
|
- cvt->len_cvt = dstsize;
|
|
|
- if (cvt->filters[++cvt->filter_index]) {
|
|
|
- cvt->filters[cvt->filter_index] (cvt, format);
|
|
|
- }
|
|
|
-}
|
|
|
-
|
|
|
-static void SDLCALL
|
|
|
-SDL_Upsample_S16LSB_6c_x2(SDL_AudioCVT * cvt, SDL_AudioFormat format)
|
|
|
-{
|
|
|
-#if DEBUG_CONVERT
|
|
|
- fprintf(stderr, "Upsample (x2) AUDIO_S16LSB, 6 channels.\n");
|
|
|
-#endif
|
|
|
-
|
|
|
- const int dstsize = cvt->len_cvt * 2;
|
|
|
- Sint16 *dst = ((Sint16 *) (cvt->buf + dstsize)) - 6 * 2;
|
|
|
- const Sint16 *src = ((Sint16 *) (cvt->buf + cvt->len_cvt)) - 6;
|
|
|
- const Sint16 *target = ((const Sint16 *) cvt->buf);
|
|
|
- Sint32 last_sample5 = (Sint32) ((Sint16) SDL_SwapLE16(src[5]));
|
|
|
- Sint32 last_sample4 = (Sint32) ((Sint16) SDL_SwapLE16(src[4]));
|
|
|
- Sint32 last_sample3 = (Sint32) ((Sint16) SDL_SwapLE16(src[3]));
|
|
|
- Sint32 last_sample2 = (Sint32) ((Sint16) SDL_SwapLE16(src[2]));
|
|
|
- Sint32 last_sample1 = (Sint32) ((Sint16) SDL_SwapLE16(src[1]));
|
|
|
- Sint32 last_sample0 = (Sint32) ((Sint16) SDL_SwapLE16(src[0]));
|
|
|
- while (dst >= target) {
|
|
|
- const Sint32 sample5 = (Sint32) ((Sint16) SDL_SwapLE16(src[5]));
|
|
|
- const Sint32 sample4 = (Sint32) ((Sint16) SDL_SwapLE16(src[4]));
|
|
|
- const Sint32 sample3 = (Sint32) ((Sint16) SDL_SwapLE16(src[3]));
|
|
|
- const Sint32 sample2 = (Sint32) ((Sint16) SDL_SwapLE16(src[2]));
|
|
|
- const Sint32 sample1 = (Sint32) ((Sint16) SDL_SwapLE16(src[1]));
|
|
|
- const Sint32 sample0 = (Sint32) ((Sint16) SDL_SwapLE16(src[0]));
|
|
|
- src -= 6;
|
|
|
- dst[11] = (Sint16) ((sample5 + last_sample5) >> 1);
|
|
|
- dst[10] = (Sint16) ((sample4 + last_sample4) >> 1);
|
|
|
- dst[9] = (Sint16) ((sample3 + last_sample3) >> 1);
|
|
|
- dst[8] = (Sint16) ((sample2 + last_sample2) >> 1);
|
|
|
- dst[7] = (Sint16) ((sample1 + last_sample1) >> 1);
|
|
|
- dst[6] = (Sint16) ((sample0 + last_sample0) >> 1);
|
|
|
- dst[5] = (Sint16) sample5;
|
|
|
- dst[4] = (Sint16) sample4;
|
|
|
- dst[3] = (Sint16) sample3;
|
|
|
- dst[2] = (Sint16) sample2;
|
|
|
- dst[1] = (Sint16) sample1;
|
|
|
- dst[0] = (Sint16) sample0;
|
|
|
- last_sample5 = sample5;
|
|
|
- last_sample4 = sample4;
|
|
|
- last_sample3 = sample3;
|
|
|
- last_sample2 = sample2;
|
|
|
- last_sample1 = sample1;
|
|
|
- last_sample0 = sample0;
|
|
|
- dst -= 12;
|
|
|
- }
|
|
|
-
|
|
|
- cvt->len_cvt = dstsize;
|
|
|
- if (cvt->filters[++cvt->filter_index]) {
|
|
|
- cvt->filters[cvt->filter_index] (cvt, format);
|
|
|
- }
|
|
|
-}
|
|
|
-
|
|
|
-static void SDLCALL
|
|
|
-SDL_Downsample_S16LSB_6c_x2(SDL_AudioCVT * cvt, SDL_AudioFormat format)
|
|
|
-{
|
|
|
-#if DEBUG_CONVERT
|
|
|
- fprintf(stderr, "Downsample (x2) AUDIO_S16LSB, 6 channels.\n");
|
|
|
-#endif
|
|
|
-
|
|
|
- const int dstsize = cvt->len_cvt / 2;
|
|
|
- Sint16 *dst = (Sint16 *) cvt->buf;
|
|
|
- const Sint16 *src = (Sint16 *) cvt->buf;
|
|
|
- const Sint16 *target = (const Sint16 *) (cvt->buf + dstsize);
|
|
|
- Sint32 last_sample0 = (Sint32) ((Sint16) SDL_SwapLE16(src[0]));
|
|
|
- Sint32 last_sample1 = (Sint32) ((Sint16) SDL_SwapLE16(src[1]));
|
|
|
- Sint32 last_sample2 = (Sint32) ((Sint16) SDL_SwapLE16(src[2]));
|
|
|
- Sint32 last_sample3 = (Sint32) ((Sint16) SDL_SwapLE16(src[3]));
|
|
|
- Sint32 last_sample4 = (Sint32) ((Sint16) SDL_SwapLE16(src[4]));
|
|
|
- Sint32 last_sample5 = (Sint32) ((Sint16) SDL_SwapLE16(src[5]));
|
|
|
- while (dst < target) {
|
|
|
- const Sint32 sample0 = (Sint32) ((Sint16) SDL_SwapLE16(src[0]));
|
|
|
- const Sint32 sample1 = (Sint32) ((Sint16) SDL_SwapLE16(src[1]));
|
|
|
- const Sint32 sample2 = (Sint32) ((Sint16) SDL_SwapLE16(src[2]));
|
|
|
- const Sint32 sample3 = (Sint32) ((Sint16) SDL_SwapLE16(src[3]));
|
|
|
- const Sint32 sample4 = (Sint32) ((Sint16) SDL_SwapLE16(src[4]));
|
|
|
- const Sint32 sample5 = (Sint32) ((Sint16) SDL_SwapLE16(src[5]));
|
|
|
- src += 12;
|
|
|
- dst[0] = (Sint16) ((sample0 + last_sample0) >> 1);
|
|
|
- dst[1] = (Sint16) ((sample1 + last_sample1) >> 1);
|
|
|
- dst[2] = (Sint16) ((sample2 + last_sample2) >> 1);
|
|
|
- dst[3] = (Sint16) ((sample3 + last_sample3) >> 1);
|
|
|
- dst[4] = (Sint16) ((sample4 + last_sample4) >> 1);
|
|
|
- dst[5] = (Sint16) ((sample5 + last_sample5) >> 1);
|
|
|
- last_sample0 = sample0;
|
|
|
- last_sample1 = sample1;
|
|
|
- last_sample2 = sample2;
|
|
|
- last_sample3 = sample3;
|
|
|
- last_sample4 = sample4;
|
|
|
- last_sample5 = sample5;
|
|
|
- dst += 6;
|
|
|
- }
|
|
|
-
|
|
|
- cvt->len_cvt = dstsize;
|
|
|
- if (cvt->filters[++cvt->filter_index]) {
|
|
|
- cvt->filters[cvt->filter_index] (cvt, format);
|
|
|
- }
|
|
|
-}
|
|
|
-
|
|
|
-static void SDLCALL
|
|
|
-SDL_Upsample_S16LSB_6c_x4(SDL_AudioCVT * cvt, SDL_AudioFormat format)
|
|
|
-{
|
|
|
-#if DEBUG_CONVERT
|
|
|
- fprintf(stderr, "Upsample (x4) AUDIO_S16LSB, 6 channels.\n");
|
|
|
-#endif
|
|
|
-
|
|
|
- const int dstsize = cvt->len_cvt * 4;
|
|
|
- Sint16 *dst = ((Sint16 *) (cvt->buf + dstsize)) - 6 * 4;
|
|
|
- const Sint16 *src = ((Sint16 *) (cvt->buf + cvt->len_cvt)) - 6;
|
|
|
- const Sint16 *target = ((const Sint16 *) cvt->buf);
|
|
|
- Sint32 last_sample5 = (Sint32) ((Sint16) SDL_SwapLE16(src[5]));
|
|
|
- Sint32 last_sample4 = (Sint32) ((Sint16) SDL_SwapLE16(src[4]));
|
|
|
- Sint32 last_sample3 = (Sint32) ((Sint16) SDL_SwapLE16(src[3]));
|
|
|
- Sint32 last_sample2 = (Sint32) ((Sint16) SDL_SwapLE16(src[2]));
|
|
|
- Sint32 last_sample1 = (Sint32) ((Sint16) SDL_SwapLE16(src[1]));
|
|
|
- Sint32 last_sample0 = (Sint32) ((Sint16) SDL_SwapLE16(src[0]));
|
|
|
- while (dst >= target) {
|
|
|
- const Sint32 sample5 = (Sint32) ((Sint16) SDL_SwapLE16(src[5]));
|
|
|
- const Sint32 sample4 = (Sint32) ((Sint16) SDL_SwapLE16(src[4]));
|
|
|
- const Sint32 sample3 = (Sint32) ((Sint16) SDL_SwapLE16(src[3]));
|
|
|
- const Sint32 sample2 = (Sint32) ((Sint16) SDL_SwapLE16(src[2]));
|
|
|
- const Sint32 sample1 = (Sint32) ((Sint16) SDL_SwapLE16(src[1]));
|
|
|
- const Sint32 sample0 = (Sint32) ((Sint16) SDL_SwapLE16(src[0]));
|
|
|
- src -= 6;
|
|
|
- dst[23] = (Sint16) ((sample5 + (3 * last_sample5)) >> 2);
|
|
|
- dst[22] = (Sint16) ((sample4 + (3 * last_sample4)) >> 2);
|
|
|
- dst[21] = (Sint16) ((sample3 + (3 * last_sample3)) >> 2);
|
|
|
- dst[20] = (Sint16) ((sample2 + (3 * last_sample2)) >> 2);
|
|
|
- dst[19] = (Sint16) ((sample1 + (3 * last_sample1)) >> 2);
|
|
|
- dst[18] = (Sint16) ((sample0 + (3 * last_sample0)) >> 2);
|
|
|
- dst[17] = (Sint16) ((sample5 + last_sample5) >> 1);
|
|
|
- dst[16] = (Sint16) ((sample4 + last_sample4) >> 1);
|
|
|
- dst[15] = (Sint16) ((sample3 + last_sample3) >> 1);
|
|
|
- dst[14] = (Sint16) ((sample2 + last_sample2) >> 1);
|
|
|
- dst[13] = (Sint16) ((sample1 + last_sample1) >> 1);
|
|
|
- dst[12] = (Sint16) ((sample0 + last_sample0) >> 1);
|
|
|
- dst[11] = (Sint16) (((3 * sample5) + last_sample5) >> 2);
|
|
|
- dst[10] = (Sint16) (((3 * sample4) + last_sample4) >> 2);
|
|
|
- dst[9] = (Sint16) (((3 * sample3) + last_sample3) >> 2);
|
|
|
- dst[8] = (Sint16) (((3 * sample2) + last_sample2) >> 2);
|
|
|
- dst[7] = (Sint16) (((3 * sample1) + last_sample1) >> 2);
|
|
|
- dst[6] = (Sint16) (((3 * sample0) + last_sample0) >> 2);
|
|
|
- dst[5] = (Sint16) sample5;
|
|
|
- dst[4] = (Sint16) sample4;
|
|
|
- dst[3] = (Sint16) sample3;
|
|
|
- dst[2] = (Sint16) sample2;
|
|
|
- dst[1] = (Sint16) sample1;
|
|
|
- dst[0] = (Sint16) sample0;
|
|
|
- last_sample5 = sample5;
|
|
|
- last_sample4 = sample4;
|
|
|
- last_sample3 = sample3;
|
|
|
- last_sample2 = sample2;
|
|
|
- last_sample1 = sample1;
|
|
|
- last_sample0 = sample0;
|
|
|
- dst -= 24;
|
|
|
- }
|
|
|
-
|
|
|
- cvt->len_cvt = dstsize;
|
|
|
- if (cvt->filters[++cvt->filter_index]) {
|
|
|
- cvt->filters[cvt->filter_index] (cvt, format);
|
|
|
- }
|
|
|
-}
|
|
|
-
|
|
|
-static void SDLCALL
|
|
|
-SDL_Downsample_S16LSB_6c_x4(SDL_AudioCVT * cvt, SDL_AudioFormat format)
|
|
|
-{
|
|
|
-#if DEBUG_CONVERT
|
|
|
- fprintf(stderr, "Downsample (x4) AUDIO_S16LSB, 6 channels.\n");
|
|
|
-#endif
|
|
|
-
|
|
|
- const int dstsize = cvt->len_cvt / 4;
|
|
|
- Sint16 *dst = (Sint16 *) cvt->buf;
|
|
|
- const Sint16 *src = (Sint16 *) cvt->buf;
|
|
|
- const Sint16 *target = (const Sint16 *) (cvt->buf + dstsize);
|
|
|
- Sint32 last_sample0 = (Sint32) ((Sint16) SDL_SwapLE16(src[0]));
|
|
|
- Sint32 last_sample1 = (Sint32) ((Sint16) SDL_SwapLE16(src[1]));
|
|
|
- Sint32 last_sample2 = (Sint32) ((Sint16) SDL_SwapLE16(src[2]));
|
|
|
- Sint32 last_sample3 = (Sint32) ((Sint16) SDL_SwapLE16(src[3]));
|
|
|
- Sint32 last_sample4 = (Sint32) ((Sint16) SDL_SwapLE16(src[4]));
|
|
|
- Sint32 last_sample5 = (Sint32) ((Sint16) SDL_SwapLE16(src[5]));
|
|
|
- while (dst < target) {
|
|
|
- const Sint32 sample0 = (Sint32) ((Sint16) SDL_SwapLE16(src[0]));
|
|
|
- const Sint32 sample1 = (Sint32) ((Sint16) SDL_SwapLE16(src[1]));
|
|
|
- const Sint32 sample2 = (Sint32) ((Sint16) SDL_SwapLE16(src[2]));
|
|
|
- const Sint32 sample3 = (Sint32) ((Sint16) SDL_SwapLE16(src[3]));
|
|
|
- const Sint32 sample4 = (Sint32) ((Sint16) SDL_SwapLE16(src[4]));
|
|
|
- const Sint32 sample5 = (Sint32) ((Sint16) SDL_SwapLE16(src[5]));
|
|
|
- src += 24;
|
|
|
- dst[0] = (Sint16) ((sample0 + last_sample0) >> 1);
|
|
|
- dst[1] = (Sint16) ((sample1 + last_sample1) >> 1);
|
|
|
- dst[2] = (Sint16) ((sample2 + last_sample2) >> 1);
|
|
|
- dst[3] = (Sint16) ((sample3 + last_sample3) >> 1);
|
|
|
- dst[4] = (Sint16) ((sample4 + last_sample4) >> 1);
|
|
|
- dst[5] = (Sint16) ((sample5 + last_sample5) >> 1);
|
|
|
- last_sample0 = sample0;
|
|
|
- last_sample1 = sample1;
|
|
|
- last_sample2 = sample2;
|
|
|
- last_sample3 = sample3;
|
|
|
- last_sample4 = sample4;
|
|
|
- last_sample5 = sample5;
|
|
|
- dst += 6;
|
|
|
- }
|
|
|
-
|
|
|
- cvt->len_cvt = dstsize;
|
|
|
- if (cvt->filters[++cvt->filter_index]) {
|
|
|
- cvt->filters[cvt->filter_index] (cvt, format);
|
|
|
- }
|
|
|
-}
|
|
|
-
|
|
|
-static void SDLCALL
|
|
|
-SDL_Upsample_S16LSB_8c_x2(SDL_AudioCVT * cvt, SDL_AudioFormat format)
|
|
|
-{
|
|
|
-#if DEBUG_CONVERT
|
|
|
- fprintf(stderr, "Upsample (x2) AUDIO_S16LSB, 8 channels.\n");
|
|
|
-#endif
|
|
|
-
|
|
|
- const int dstsize = cvt->len_cvt * 2;
|
|
|
- Sint16 *dst = ((Sint16 *) (cvt->buf + dstsize)) - 8 * 2;
|
|
|
- const Sint16 *src = ((Sint16 *) (cvt->buf + cvt->len_cvt)) - 8;
|
|
|
- const Sint16 *target = ((const Sint16 *) cvt->buf);
|
|
|
- Sint32 last_sample7 = (Sint32) ((Sint16) SDL_SwapLE16(src[7]));
|
|
|
- Sint32 last_sample6 = (Sint32) ((Sint16) SDL_SwapLE16(src[6]));
|
|
|
- Sint32 last_sample5 = (Sint32) ((Sint16) SDL_SwapLE16(src[5]));
|
|
|
- Sint32 last_sample4 = (Sint32) ((Sint16) SDL_SwapLE16(src[4]));
|
|
|
- Sint32 last_sample3 = (Sint32) ((Sint16) SDL_SwapLE16(src[3]));
|
|
|
- Sint32 last_sample2 = (Sint32) ((Sint16) SDL_SwapLE16(src[2]));
|
|
|
- Sint32 last_sample1 = (Sint32) ((Sint16) SDL_SwapLE16(src[1]));
|
|
|
- Sint32 last_sample0 = (Sint32) ((Sint16) SDL_SwapLE16(src[0]));
|
|
|
- while (dst >= target) {
|
|
|
- const Sint32 sample7 = (Sint32) ((Sint16) SDL_SwapLE16(src[7]));
|
|
|
- const Sint32 sample6 = (Sint32) ((Sint16) SDL_SwapLE16(src[6]));
|
|
|
- const Sint32 sample5 = (Sint32) ((Sint16) SDL_SwapLE16(src[5]));
|
|
|
- const Sint32 sample4 = (Sint32) ((Sint16) SDL_SwapLE16(src[4]));
|
|
|
- const Sint32 sample3 = (Sint32) ((Sint16) SDL_SwapLE16(src[3]));
|
|
|
- const Sint32 sample2 = (Sint32) ((Sint16) SDL_SwapLE16(src[2]));
|
|
|
- const Sint32 sample1 = (Sint32) ((Sint16) SDL_SwapLE16(src[1]));
|
|
|
- const Sint32 sample0 = (Sint32) ((Sint16) SDL_SwapLE16(src[0]));
|
|
|
- src -= 8;
|
|
|
- dst[15] = (Sint16) ((sample7 + last_sample7) >> 1);
|
|
|
- dst[14] = (Sint16) ((sample6 + last_sample6) >> 1);
|
|
|
- dst[13] = (Sint16) ((sample5 + last_sample5) >> 1);
|
|
|
- dst[12] = (Sint16) ((sample4 + last_sample4) >> 1);
|
|
|
- dst[11] = (Sint16) ((sample3 + last_sample3) >> 1);
|
|
|
- dst[10] = (Sint16) ((sample2 + last_sample2) >> 1);
|
|
|
- dst[9] = (Sint16) ((sample1 + last_sample1) >> 1);
|
|
|
- dst[8] = (Sint16) ((sample0 + last_sample0) >> 1);
|
|
|
- dst[7] = (Sint16) sample7;
|
|
|
- dst[6] = (Sint16) sample6;
|
|
|
- dst[5] = (Sint16) sample5;
|
|
|
- dst[4] = (Sint16) sample4;
|
|
|
- dst[3] = (Sint16) sample3;
|
|
|
- dst[2] = (Sint16) sample2;
|
|
|
- dst[1] = (Sint16) sample1;
|
|
|
- dst[0] = (Sint16) sample0;
|
|
|
- last_sample7 = sample7;
|
|
|
- last_sample6 = sample6;
|
|
|
- last_sample5 = sample5;
|
|
|
- last_sample4 = sample4;
|
|
|
- last_sample3 = sample3;
|
|
|
- last_sample2 = sample2;
|
|
|
- last_sample1 = sample1;
|
|
|
- last_sample0 = sample0;
|
|
|
- dst -= 16;
|
|
|
- }
|
|
|
-
|
|
|
- cvt->len_cvt = dstsize;
|
|
|
- if (cvt->filters[++cvt->filter_index]) {
|
|
|
- cvt->filters[cvt->filter_index] (cvt, format);
|
|
|
- }
|
|
|
-}
|
|
|
-
|
|
|
-static void SDLCALL
|
|
|
-SDL_Downsample_S16LSB_8c_x2(SDL_AudioCVT * cvt, SDL_AudioFormat format)
|
|
|
-{
|
|
|
-#if DEBUG_CONVERT
|
|
|
- fprintf(stderr, "Downsample (x2) AUDIO_S16LSB, 8 channels.\n");
|
|
|
-#endif
|
|
|
-
|
|
|
- const int dstsize = cvt->len_cvt / 2;
|
|
|
- Sint16 *dst = (Sint16 *) cvt->buf;
|
|
|
- const Sint16 *src = (Sint16 *) cvt->buf;
|
|
|
- const Sint16 *target = (const Sint16 *) (cvt->buf + dstsize);
|
|
|
- Sint32 last_sample0 = (Sint32) ((Sint16) SDL_SwapLE16(src[0]));
|
|
|
- Sint32 last_sample1 = (Sint32) ((Sint16) SDL_SwapLE16(src[1]));
|
|
|
- Sint32 last_sample2 = (Sint32) ((Sint16) SDL_SwapLE16(src[2]));
|
|
|
- Sint32 last_sample3 = (Sint32) ((Sint16) SDL_SwapLE16(src[3]));
|
|
|
- Sint32 last_sample4 = (Sint32) ((Sint16) SDL_SwapLE16(src[4]));
|
|
|
- Sint32 last_sample5 = (Sint32) ((Sint16) SDL_SwapLE16(src[5]));
|
|
|
- Sint32 last_sample6 = (Sint32) ((Sint16) SDL_SwapLE16(src[6]));
|
|
|
- Sint32 last_sample7 = (Sint32) ((Sint16) SDL_SwapLE16(src[7]));
|
|
|
- while (dst < target) {
|
|
|
- const Sint32 sample0 = (Sint32) ((Sint16) SDL_SwapLE16(src[0]));
|
|
|
- const Sint32 sample1 = (Sint32) ((Sint16) SDL_SwapLE16(src[1]));
|
|
|
- const Sint32 sample2 = (Sint32) ((Sint16) SDL_SwapLE16(src[2]));
|
|
|
- const Sint32 sample3 = (Sint32) ((Sint16) SDL_SwapLE16(src[3]));
|
|
|
- const Sint32 sample4 = (Sint32) ((Sint16) SDL_SwapLE16(src[4]));
|
|
|
- const Sint32 sample5 = (Sint32) ((Sint16) SDL_SwapLE16(src[5]));
|
|
|
- const Sint32 sample6 = (Sint32) ((Sint16) SDL_SwapLE16(src[6]));
|
|
|
- const Sint32 sample7 = (Sint32) ((Sint16) SDL_SwapLE16(src[7]));
|
|
|
- src += 16;
|
|
|
- dst[0] = (Sint16) ((sample0 + last_sample0) >> 1);
|
|
|
- dst[1] = (Sint16) ((sample1 + last_sample1) >> 1);
|
|
|
- dst[2] = (Sint16) ((sample2 + last_sample2) >> 1);
|
|
|
- dst[3] = (Sint16) ((sample3 + last_sample3) >> 1);
|
|
|
- dst[4] = (Sint16) ((sample4 + last_sample4) >> 1);
|
|
|
- dst[5] = (Sint16) ((sample5 + last_sample5) >> 1);
|
|
|
- dst[6] = (Sint16) ((sample6 + last_sample6) >> 1);
|
|
|
- dst[7] = (Sint16) ((sample7 + last_sample7) >> 1);
|
|
|
- last_sample0 = sample0;
|
|
|
- last_sample1 = sample1;
|
|
|
- last_sample2 = sample2;
|
|
|
- last_sample3 = sample3;
|
|
|
- last_sample4 = sample4;
|
|
|
- last_sample5 = sample5;
|
|
|
- last_sample6 = sample6;
|
|
|
- last_sample7 = sample7;
|
|
|
- dst += 8;
|
|
|
- }
|
|
|
-
|
|
|
- cvt->len_cvt = dstsize;
|
|
|
- if (cvt->filters[++cvt->filter_index]) {
|
|
|
- cvt->filters[cvt->filter_index] (cvt, format);
|
|
|
- }
|
|
|
-}
|
|
|
-
|
|
|
-static void SDLCALL
|
|
|
-SDL_Upsample_S16LSB_8c_x4(SDL_AudioCVT * cvt, SDL_AudioFormat format)
|
|
|
-{
|
|
|
-#if DEBUG_CONVERT
|
|
|
- fprintf(stderr, "Upsample (x4) AUDIO_S16LSB, 8 channels.\n");
|
|
|
-#endif
|
|
|
-
|
|
|
- const int dstsize = cvt->len_cvt * 4;
|
|
|
- Sint16 *dst = ((Sint16 *) (cvt->buf + dstsize)) - 8 * 4;
|
|
|
- const Sint16 *src = ((Sint16 *) (cvt->buf + cvt->len_cvt)) - 8;
|
|
|
- const Sint16 *target = ((const Sint16 *) cvt->buf);
|
|
|
- Sint32 last_sample7 = (Sint32) ((Sint16) SDL_SwapLE16(src[7]));
|
|
|
- Sint32 last_sample6 = (Sint32) ((Sint16) SDL_SwapLE16(src[6]));
|
|
|
- Sint32 last_sample5 = (Sint32) ((Sint16) SDL_SwapLE16(src[5]));
|
|
|
- Sint32 last_sample4 = (Sint32) ((Sint16) SDL_SwapLE16(src[4]));
|
|
|
- Sint32 last_sample3 = (Sint32) ((Sint16) SDL_SwapLE16(src[3]));
|
|
|
- Sint32 last_sample2 = (Sint32) ((Sint16) SDL_SwapLE16(src[2]));
|
|
|
- Sint32 last_sample1 = (Sint32) ((Sint16) SDL_SwapLE16(src[1]));
|
|
|
- Sint32 last_sample0 = (Sint32) ((Sint16) SDL_SwapLE16(src[0]));
|
|
|
- while (dst >= target) {
|
|
|
- const Sint32 sample7 = (Sint32) ((Sint16) SDL_SwapLE16(src[7]));
|
|
|
- const Sint32 sample6 = (Sint32) ((Sint16) SDL_SwapLE16(src[6]));
|
|
|
- const Sint32 sample5 = (Sint32) ((Sint16) SDL_SwapLE16(src[5]));
|
|
|
- const Sint32 sample4 = (Sint32) ((Sint16) SDL_SwapLE16(src[4]));
|
|
|
- const Sint32 sample3 = (Sint32) ((Sint16) SDL_SwapLE16(src[3]));
|
|
|
- const Sint32 sample2 = (Sint32) ((Sint16) SDL_SwapLE16(src[2]));
|
|
|
- const Sint32 sample1 = (Sint32) ((Sint16) SDL_SwapLE16(src[1]));
|
|
|
- const Sint32 sample0 = (Sint32) ((Sint16) SDL_SwapLE16(src[0]));
|
|
|
- src -= 8;
|
|
|
- dst[31] = (Sint16) ((sample7 + (3 * last_sample7)) >> 2);
|
|
|
- dst[30] = (Sint16) ((sample6 + (3 * last_sample6)) >> 2);
|
|
|
- dst[29] = (Sint16) ((sample5 + (3 * last_sample5)) >> 2);
|
|
|
- dst[28] = (Sint16) ((sample4 + (3 * last_sample4)) >> 2);
|
|
|
- dst[27] = (Sint16) ((sample3 + (3 * last_sample3)) >> 2);
|
|
|
- dst[26] = (Sint16) ((sample2 + (3 * last_sample2)) >> 2);
|
|
|
- dst[25] = (Sint16) ((sample1 + (3 * last_sample1)) >> 2);
|
|
|
- dst[24] = (Sint16) ((sample0 + (3 * last_sample0)) >> 2);
|
|
|
- dst[23] = (Sint16) ((sample7 + last_sample7) >> 1);
|
|
|
- dst[22] = (Sint16) ((sample6 + last_sample6) >> 1);
|
|
|
- dst[21] = (Sint16) ((sample5 + last_sample5) >> 1);
|
|
|
- dst[20] = (Sint16) ((sample4 + last_sample4) >> 1);
|
|
|
- dst[19] = (Sint16) ((sample3 + last_sample3) >> 1);
|
|
|
- dst[18] = (Sint16) ((sample2 + last_sample2) >> 1);
|
|
|
- dst[17] = (Sint16) ((sample1 + last_sample1) >> 1);
|
|
|
- dst[16] = (Sint16) ((sample0 + last_sample0) >> 1);
|
|
|
- dst[15] = (Sint16) (((3 * sample7) + last_sample7) >> 2);
|
|
|
- dst[14] = (Sint16) (((3 * sample6) + last_sample6) >> 2);
|
|
|
- dst[13] = (Sint16) (((3 * sample5) + last_sample5) >> 2);
|
|
|
- dst[12] = (Sint16) (((3 * sample4) + last_sample4) >> 2);
|
|
|
- dst[11] = (Sint16) (((3 * sample3) + last_sample3) >> 2);
|
|
|
- dst[10] = (Sint16) (((3 * sample2) + last_sample2) >> 2);
|
|
|
- dst[9] = (Sint16) (((3 * sample1) + last_sample1) >> 2);
|
|
|
- dst[8] = (Sint16) (((3 * sample0) + last_sample0) >> 2);
|
|
|
- dst[7] = (Sint16) sample7;
|
|
|
- dst[6] = (Sint16) sample6;
|
|
|
- dst[5] = (Sint16) sample5;
|
|
|
- dst[4] = (Sint16) sample4;
|
|
|
- dst[3] = (Sint16) sample3;
|
|
|
- dst[2] = (Sint16) sample2;
|
|
|
- dst[1] = (Sint16) sample1;
|
|
|
- dst[0] = (Sint16) sample0;
|
|
|
- last_sample7 = sample7;
|
|
|
- last_sample6 = sample6;
|
|
|
- last_sample5 = sample5;
|
|
|
- last_sample4 = sample4;
|
|
|
- last_sample3 = sample3;
|
|
|
- last_sample2 = sample2;
|
|
|
- last_sample1 = sample1;
|
|
|
- last_sample0 = sample0;
|
|
|
- dst -= 32;
|
|
|
- }
|
|
|
-
|
|
|
- cvt->len_cvt = dstsize;
|
|
|
- if (cvt->filters[++cvt->filter_index]) {
|
|
|
- cvt->filters[cvt->filter_index] (cvt, format);
|
|
|
- }
|
|
|
-}
|
|
|
-
|
|
|
-static void SDLCALL
|
|
|
-SDL_Downsample_S16LSB_8c_x4(SDL_AudioCVT * cvt, SDL_AudioFormat format)
|
|
|
-{
|
|
|
-#if DEBUG_CONVERT
|
|
|
- fprintf(stderr, "Downsample (x4) AUDIO_S16LSB, 8 channels.\n");
|
|
|
-#endif
|
|
|
-
|
|
|
- const int dstsize = cvt->len_cvt / 4;
|
|
|
- Sint16 *dst = (Sint16 *) cvt->buf;
|
|
|
- const Sint16 *src = (Sint16 *) cvt->buf;
|
|
|
- const Sint16 *target = (const Sint16 *) (cvt->buf + dstsize);
|
|
|
- Sint32 last_sample0 = (Sint32) ((Sint16) SDL_SwapLE16(src[0]));
|
|
|
- Sint32 last_sample1 = (Sint32) ((Sint16) SDL_SwapLE16(src[1]));
|
|
|
- Sint32 last_sample2 = (Sint32) ((Sint16) SDL_SwapLE16(src[2]));
|
|
|
- Sint32 last_sample3 = (Sint32) ((Sint16) SDL_SwapLE16(src[3]));
|
|
|
- Sint32 last_sample4 = (Sint32) ((Sint16) SDL_SwapLE16(src[4]));
|
|
|
- Sint32 last_sample5 = (Sint32) ((Sint16) SDL_SwapLE16(src[5]));
|
|
|
- Sint32 last_sample6 = (Sint32) ((Sint16) SDL_SwapLE16(src[6]));
|
|
|
- Sint32 last_sample7 = (Sint32) ((Sint16) SDL_SwapLE16(src[7]));
|
|
|
- while (dst < target) {
|
|
|
- const Sint32 sample0 = (Sint32) ((Sint16) SDL_SwapLE16(src[0]));
|
|
|
- const Sint32 sample1 = (Sint32) ((Sint16) SDL_SwapLE16(src[1]));
|
|
|
- const Sint32 sample2 = (Sint32) ((Sint16) SDL_SwapLE16(src[2]));
|
|
|
- const Sint32 sample3 = (Sint32) ((Sint16) SDL_SwapLE16(src[3]));
|
|
|
- const Sint32 sample4 = (Sint32) ((Sint16) SDL_SwapLE16(src[4]));
|
|
|
- const Sint32 sample5 = (Sint32) ((Sint16) SDL_SwapLE16(src[5]));
|
|
|
- const Sint32 sample6 = (Sint32) ((Sint16) SDL_SwapLE16(src[6]));
|
|
|
- const Sint32 sample7 = (Sint32) ((Sint16) SDL_SwapLE16(src[7]));
|
|
|
- src += 32;
|
|
|
- dst[0] = (Sint16) ((sample0 + last_sample0) >> 1);
|
|
|
- dst[1] = (Sint16) ((sample1 + last_sample1) >> 1);
|
|
|
- dst[2] = (Sint16) ((sample2 + last_sample2) >> 1);
|
|
|
- dst[3] = (Sint16) ((sample3 + last_sample3) >> 1);
|
|
|
- dst[4] = (Sint16) ((sample4 + last_sample4) >> 1);
|
|
|
- dst[5] = (Sint16) ((sample5 + last_sample5) >> 1);
|
|
|
- dst[6] = (Sint16) ((sample6 + last_sample6) >> 1);
|
|
|
- dst[7] = (Sint16) ((sample7 + last_sample7) >> 1);
|
|
|
- last_sample0 = sample0;
|
|
|
- last_sample1 = sample1;
|
|
|
- last_sample2 = sample2;
|
|
|
- last_sample3 = sample3;
|
|
|
- last_sample4 = sample4;
|
|
|
- last_sample5 = sample5;
|
|
|
- last_sample6 = sample6;
|
|
|
- last_sample7 = sample7;
|
|
|
- dst += 8;
|
|
|
- }
|
|
|
-
|
|
|
- cvt->len_cvt = dstsize;
|
|
|
- if (cvt->filters[++cvt->filter_index]) {
|
|
|
- cvt->filters[cvt->filter_index] (cvt, format);
|
|
|
- }
|
|
|
-}
|
|
|
-
|
|
|
-static void SDLCALL
|
|
|
-SDL_Upsample_U16MSB_1c_x2(SDL_AudioCVT * cvt, SDL_AudioFormat format)
|
|
|
-{
|
|
|
-#if DEBUG_CONVERT
|
|
|
- fprintf(stderr, "Upsample (x2) AUDIO_U16MSB, 1 channels.\n");
|
|
|
-#endif
|
|
|
-
|
|
|
- const int dstsize = cvt->len_cvt * 2;
|
|
|
- Uint16 *dst = ((Uint16 *) (cvt->buf + dstsize)) - 1 * 2;
|
|
|
- const Uint16 *src = ((Uint16 *) (cvt->buf + cvt->len_cvt)) - 1;
|
|
|
- const Uint16 *target = ((const Uint16 *) cvt->buf);
|
|
|
- Sint32 last_sample0 = (Sint32) SDL_SwapBE16(src[0]);
|
|
|
- while (dst >= target) {
|
|
|
- const Sint32 sample0 = (Sint32) SDL_SwapBE16(src[0]);
|
|
|
- src--;
|
|
|
- dst[1] = (Uint16) ((sample0 + last_sample0) >> 1);
|
|
|
- dst[0] = (Uint16) sample0;
|
|
|
- last_sample0 = sample0;
|
|
|
- dst -= 2;
|
|
|
- }
|
|
|
-
|
|
|
- cvt->len_cvt = dstsize;
|
|
|
- if (cvt->filters[++cvt->filter_index]) {
|
|
|
- cvt->filters[cvt->filter_index] (cvt, format);
|
|
|
- }
|
|
|
-}
|
|
|
-
|
|
|
-static void SDLCALL
|
|
|
-SDL_Downsample_U16MSB_1c_x2(SDL_AudioCVT * cvt, SDL_AudioFormat format)
|
|
|
-{
|
|
|
-#if DEBUG_CONVERT
|
|
|
- fprintf(stderr, "Downsample (x2) AUDIO_U16MSB, 1 channels.\n");
|
|
|
-#endif
|
|
|
-
|
|
|
- const int dstsize = cvt->len_cvt / 2;
|
|
|
- Uint16 *dst = (Uint16 *) cvt->buf;
|
|
|
- const Uint16 *src = (Uint16 *) cvt->buf;
|
|
|
- const Uint16 *target = (const Uint16 *) (cvt->buf + dstsize);
|
|
|
- Sint32 last_sample0 = (Sint32) SDL_SwapBE16(src[0]);
|
|
|
- while (dst < target) {
|
|
|
- const Sint32 sample0 = (Sint32) SDL_SwapBE16(src[0]);
|
|
|
- src += 2;
|
|
|
- dst[0] = (Uint16) ((sample0 + last_sample0) >> 1);
|
|
|
- last_sample0 = sample0;
|
|
|
- dst++;
|
|
|
- }
|
|
|
-
|
|
|
- cvt->len_cvt = dstsize;
|
|
|
- if (cvt->filters[++cvt->filter_index]) {
|
|
|
- cvt->filters[cvt->filter_index] (cvt, format);
|
|
|
- }
|
|
|
-}
|
|
|
-
|
|
|
-static void SDLCALL
|
|
|
-SDL_Upsample_U16MSB_1c_x4(SDL_AudioCVT * cvt, SDL_AudioFormat format)
|
|
|
-{
|
|
|
-#if DEBUG_CONVERT
|
|
|
- fprintf(stderr, "Upsample (x4) AUDIO_U16MSB, 1 channels.\n");
|
|
|
-#endif
|
|
|
-
|
|
|
- const int dstsize = cvt->len_cvt * 4;
|
|
|
- Uint16 *dst = ((Uint16 *) (cvt->buf + dstsize)) - 1 * 4;
|
|
|
- const Uint16 *src = ((Uint16 *) (cvt->buf + cvt->len_cvt)) - 1;
|
|
|
- const Uint16 *target = ((const Uint16 *) cvt->buf);
|
|
|
- Sint32 last_sample0 = (Sint32) SDL_SwapBE16(src[0]);
|
|
|
- while (dst >= target) {
|
|
|
- const Sint32 sample0 = (Sint32) SDL_SwapBE16(src[0]);
|
|
|
- src--;
|
|
|
- dst[3] = (Uint16) ((sample0 + (3 * last_sample0)) >> 2);
|
|
|
- dst[2] = (Uint16) ((sample0 + last_sample0) >> 1);
|
|
|
- dst[1] = (Uint16) (((3 * sample0) + last_sample0) >> 2);
|
|
|
- dst[0] = (Uint16) sample0;
|
|
|
- last_sample0 = sample0;
|
|
|
- dst -= 4;
|
|
|
- }
|
|
|
-
|
|
|
- cvt->len_cvt = dstsize;
|
|
|
- if (cvt->filters[++cvt->filter_index]) {
|
|
|
- cvt->filters[cvt->filter_index] (cvt, format);
|
|
|
- }
|
|
|
-}
|
|
|
-
|
|
|
-static void SDLCALL
|
|
|
-SDL_Downsample_U16MSB_1c_x4(SDL_AudioCVT * cvt, SDL_AudioFormat format)
|
|
|
-{
|
|
|
-#if DEBUG_CONVERT
|
|
|
- fprintf(stderr, "Downsample (x4) AUDIO_U16MSB, 1 channels.\n");
|
|
|
-#endif
|
|
|
-
|
|
|
- const int dstsize = cvt->len_cvt / 4;
|
|
|
- Uint16 *dst = (Uint16 *) cvt->buf;
|
|
|
- const Uint16 *src = (Uint16 *) cvt->buf;
|
|
|
- const Uint16 *target = (const Uint16 *) (cvt->buf + dstsize);
|
|
|
- Sint32 last_sample0 = (Sint32) SDL_SwapBE16(src[0]);
|
|
|
- while (dst < target) {
|
|
|
- const Sint32 sample0 = (Sint32) SDL_SwapBE16(src[0]);
|
|
|
- src += 4;
|
|
|
- dst[0] = (Uint16) ((sample0 + last_sample0) >> 1);
|
|
|
- last_sample0 = sample0;
|
|
|
- dst++;
|
|
|
- }
|
|
|
-
|
|
|
- cvt->len_cvt = dstsize;
|
|
|
- if (cvt->filters[++cvt->filter_index]) {
|
|
|
- cvt->filters[cvt->filter_index] (cvt, format);
|
|
|
- }
|
|
|
-}
|
|
|
-
|
|
|
-static void SDLCALL
|
|
|
-SDL_Upsample_U16MSB_2c_x2(SDL_AudioCVT * cvt, SDL_AudioFormat format)
|
|
|
-{
|
|
|
-#if DEBUG_CONVERT
|
|
|
- fprintf(stderr, "Upsample (x2) AUDIO_U16MSB, 2 channels.\n");
|
|
|
-#endif
|
|
|
-
|
|
|
- const int dstsize = cvt->len_cvt * 2;
|
|
|
- Uint16 *dst = ((Uint16 *) (cvt->buf + dstsize)) - 2 * 2;
|
|
|
- const Uint16 *src = ((Uint16 *) (cvt->buf + cvt->len_cvt)) - 2;
|
|
|
- const Uint16 *target = ((const Uint16 *) cvt->buf);
|
|
|
- Sint32 last_sample1 = (Sint32) SDL_SwapBE16(src[1]);
|
|
|
- Sint32 last_sample0 = (Sint32) SDL_SwapBE16(src[0]);
|
|
|
- while (dst >= target) {
|
|
|
- const Sint32 sample1 = (Sint32) SDL_SwapBE16(src[1]);
|
|
|
- const Sint32 sample0 = (Sint32) SDL_SwapBE16(src[0]);
|
|
|
- src -= 2;
|
|
|
- dst[3] = (Uint16) ((sample1 + last_sample1) >> 1);
|
|
|
- dst[2] = (Uint16) ((sample0 + last_sample0) >> 1);
|
|
|
- dst[1] = (Uint16) sample1;
|
|
|
- dst[0] = (Uint16) sample0;
|
|
|
- last_sample1 = sample1;
|
|
|
- last_sample0 = sample0;
|
|
|
- dst -= 4;
|
|
|
- }
|
|
|
-
|
|
|
- cvt->len_cvt = dstsize;
|
|
|
- if (cvt->filters[++cvt->filter_index]) {
|
|
|
- cvt->filters[cvt->filter_index] (cvt, format);
|
|
|
- }
|
|
|
-}
|
|
|
-
|
|
|
-static void SDLCALL
|
|
|
-SDL_Downsample_U16MSB_2c_x2(SDL_AudioCVT * cvt, SDL_AudioFormat format)
|
|
|
-{
|
|
|
-#if DEBUG_CONVERT
|
|
|
- fprintf(stderr, "Downsample (x2) AUDIO_U16MSB, 2 channels.\n");
|
|
|
-#endif
|
|
|
-
|
|
|
- const int dstsize = cvt->len_cvt / 2;
|
|
|
- Uint16 *dst = (Uint16 *) cvt->buf;
|
|
|
- const Uint16 *src = (Uint16 *) cvt->buf;
|
|
|
- const Uint16 *target = (const Uint16 *) (cvt->buf + dstsize);
|
|
|
- Sint32 last_sample0 = (Sint32) SDL_SwapBE16(src[0]);
|
|
|
- Sint32 last_sample1 = (Sint32) SDL_SwapBE16(src[1]);
|
|
|
- while (dst < target) {
|
|
|
- const Sint32 sample0 = (Sint32) SDL_SwapBE16(src[0]);
|
|
|
- const Sint32 sample1 = (Sint32) SDL_SwapBE16(src[1]);
|
|
|
- src += 4;
|
|
|
- dst[0] = (Uint16) ((sample0 + last_sample0) >> 1);
|
|
|
- dst[1] = (Uint16) ((sample1 + last_sample1) >> 1);
|
|
|
- last_sample0 = sample0;
|
|
|
- last_sample1 = sample1;
|
|
|
- dst += 2;
|
|
|
- }
|
|
|
-
|
|
|
- cvt->len_cvt = dstsize;
|
|
|
- if (cvt->filters[++cvt->filter_index]) {
|
|
|
- cvt->filters[cvt->filter_index] (cvt, format);
|
|
|
- }
|
|
|
-}
|
|
|
-
|
|
|
-static void SDLCALL
|
|
|
-SDL_Upsample_U16MSB_2c_x4(SDL_AudioCVT * cvt, SDL_AudioFormat format)
|
|
|
-{
|
|
|
-#if DEBUG_CONVERT
|
|
|
- fprintf(stderr, "Upsample (x4) AUDIO_U16MSB, 2 channels.\n");
|
|
|
-#endif
|
|
|
-
|
|
|
- const int dstsize = cvt->len_cvt * 4;
|
|
|
- Uint16 *dst = ((Uint16 *) (cvt->buf + dstsize)) - 2 * 4;
|
|
|
- const Uint16 *src = ((Uint16 *) (cvt->buf + cvt->len_cvt)) - 2;
|
|
|
- const Uint16 *target = ((const Uint16 *) cvt->buf);
|
|
|
- Sint32 last_sample1 = (Sint32) SDL_SwapBE16(src[1]);
|
|
|
- Sint32 last_sample0 = (Sint32) SDL_SwapBE16(src[0]);
|
|
|
- while (dst >= target) {
|
|
|
- const Sint32 sample1 = (Sint32) SDL_SwapBE16(src[1]);
|
|
|
- const Sint32 sample0 = (Sint32) SDL_SwapBE16(src[0]);
|
|
|
- src -= 2;
|
|
|
- dst[7] = (Uint16) ((sample1 + (3 * last_sample1)) >> 2);
|
|
|
- dst[6] = (Uint16) ((sample0 + (3 * last_sample0)) >> 2);
|
|
|
- dst[5] = (Uint16) ((sample1 + last_sample1) >> 1);
|
|
|
- dst[4] = (Uint16) ((sample0 + last_sample0) >> 1);
|
|
|
- dst[3] = (Uint16) (((3 * sample1) + last_sample1) >> 2);
|
|
|
- dst[2] = (Uint16) (((3 * sample0) + last_sample0) >> 2);
|
|
|
- dst[1] = (Uint16) sample1;
|
|
|
- dst[0] = (Uint16) sample0;
|
|
|
- last_sample1 = sample1;
|
|
|
- last_sample0 = sample0;
|
|
|
- dst -= 8;
|
|
|
- }
|
|
|
-
|
|
|
- cvt->len_cvt = dstsize;
|
|
|
- if (cvt->filters[++cvt->filter_index]) {
|
|
|
- cvt->filters[cvt->filter_index] (cvt, format);
|
|
|
- }
|
|
|
-}
|
|
|
-
|
|
|
-static void SDLCALL
|
|
|
-SDL_Downsample_U16MSB_2c_x4(SDL_AudioCVT * cvt, SDL_AudioFormat format)
|
|
|
-{
|
|
|
-#if DEBUG_CONVERT
|
|
|
- fprintf(stderr, "Downsample (x4) AUDIO_U16MSB, 2 channels.\n");
|
|
|
-#endif
|
|
|
-
|
|
|
- const int dstsize = cvt->len_cvt / 4;
|
|
|
- Uint16 *dst = (Uint16 *) cvt->buf;
|
|
|
- const Uint16 *src = (Uint16 *) cvt->buf;
|
|
|
- const Uint16 *target = (const Uint16 *) (cvt->buf + dstsize);
|
|
|
- Sint32 last_sample0 = (Sint32) SDL_SwapBE16(src[0]);
|
|
|
- Sint32 last_sample1 = (Sint32) SDL_SwapBE16(src[1]);
|
|
|
- while (dst < target) {
|
|
|
- const Sint32 sample0 = (Sint32) SDL_SwapBE16(src[0]);
|
|
|
- const Sint32 sample1 = (Sint32) SDL_SwapBE16(src[1]);
|
|
|
- src += 8;
|
|
|
- dst[0] = (Uint16) ((sample0 + last_sample0) >> 1);
|
|
|
- dst[1] = (Uint16) ((sample1 + last_sample1) >> 1);
|
|
|
- last_sample0 = sample0;
|
|
|
- last_sample1 = sample1;
|
|
|
- dst += 2;
|
|
|
- }
|
|
|
-
|
|
|
- cvt->len_cvt = dstsize;
|
|
|
- if (cvt->filters[++cvt->filter_index]) {
|
|
|
- cvt->filters[cvt->filter_index] (cvt, format);
|
|
|
- }
|
|
|
-}
|
|
|
-
|
|
|
-static void SDLCALL
|
|
|
-SDL_Upsample_U16MSB_4c_x2(SDL_AudioCVT * cvt, SDL_AudioFormat format)
|
|
|
-{
|
|
|
-#if DEBUG_CONVERT
|
|
|
- fprintf(stderr, "Upsample (x2) AUDIO_U16MSB, 4 channels.\n");
|
|
|
-#endif
|
|
|
-
|
|
|
- const int dstsize = cvt->len_cvt * 2;
|
|
|
- Uint16 *dst = ((Uint16 *) (cvt->buf + dstsize)) - 4 * 2;
|
|
|
- const Uint16 *src = ((Uint16 *) (cvt->buf + cvt->len_cvt)) - 4;
|
|
|
- const Uint16 *target = ((const Uint16 *) cvt->buf);
|
|
|
- Sint32 last_sample3 = (Sint32) SDL_SwapBE16(src[3]);
|
|
|
- Sint32 last_sample2 = (Sint32) SDL_SwapBE16(src[2]);
|
|
|
- Sint32 last_sample1 = (Sint32) SDL_SwapBE16(src[1]);
|
|
|
- Sint32 last_sample0 = (Sint32) SDL_SwapBE16(src[0]);
|
|
|
- while (dst >= target) {
|
|
|
- const Sint32 sample3 = (Sint32) SDL_SwapBE16(src[3]);
|
|
|
- const Sint32 sample2 = (Sint32) SDL_SwapBE16(src[2]);
|
|
|
- const Sint32 sample1 = (Sint32) SDL_SwapBE16(src[1]);
|
|
|
- const Sint32 sample0 = (Sint32) SDL_SwapBE16(src[0]);
|
|
|
- src -= 4;
|
|
|
- dst[7] = (Uint16) ((sample3 + last_sample3) >> 1);
|
|
|
- dst[6] = (Uint16) ((sample2 + last_sample2) >> 1);
|
|
|
- dst[5] = (Uint16) ((sample1 + last_sample1) >> 1);
|
|
|
- dst[4] = (Uint16) ((sample0 + last_sample0) >> 1);
|
|
|
- dst[3] = (Uint16) sample3;
|
|
|
- dst[2] = (Uint16) sample2;
|
|
|
- dst[1] = (Uint16) sample1;
|
|
|
- dst[0] = (Uint16) sample0;
|
|
|
- last_sample3 = sample3;
|
|
|
- last_sample2 = sample2;
|
|
|
- last_sample1 = sample1;
|
|
|
- last_sample0 = sample0;
|
|
|
- dst -= 8;
|
|
|
- }
|
|
|
-
|
|
|
- cvt->len_cvt = dstsize;
|
|
|
- if (cvt->filters[++cvt->filter_index]) {
|
|
|
- cvt->filters[cvt->filter_index] (cvt, format);
|
|
|
- }
|
|
|
-}
|
|
|
-
|
|
|
-static void SDLCALL
|
|
|
-SDL_Downsample_U16MSB_4c_x2(SDL_AudioCVT * cvt, SDL_AudioFormat format)
|
|
|
-{
|
|
|
-#if DEBUG_CONVERT
|
|
|
- fprintf(stderr, "Downsample (x2) AUDIO_U16MSB, 4 channels.\n");
|
|
|
-#endif
|
|
|
-
|
|
|
- const int dstsize = cvt->len_cvt / 2;
|
|
|
- Uint16 *dst = (Uint16 *) cvt->buf;
|
|
|
- const Uint16 *src = (Uint16 *) cvt->buf;
|
|
|
- const Uint16 *target = (const Uint16 *) (cvt->buf + dstsize);
|
|
|
- Sint32 last_sample0 = (Sint32) SDL_SwapBE16(src[0]);
|
|
|
- Sint32 last_sample1 = (Sint32) SDL_SwapBE16(src[1]);
|
|
|
- Sint32 last_sample2 = (Sint32) SDL_SwapBE16(src[2]);
|
|
|
- Sint32 last_sample3 = (Sint32) SDL_SwapBE16(src[3]);
|
|
|
- while (dst < target) {
|
|
|
- const Sint32 sample0 = (Sint32) SDL_SwapBE16(src[0]);
|
|
|
- const Sint32 sample1 = (Sint32) SDL_SwapBE16(src[1]);
|
|
|
- const Sint32 sample2 = (Sint32) SDL_SwapBE16(src[2]);
|
|
|
- const Sint32 sample3 = (Sint32) SDL_SwapBE16(src[3]);
|
|
|
- src += 8;
|
|
|
- dst[0] = (Uint16) ((sample0 + last_sample0) >> 1);
|
|
|
- dst[1] = (Uint16) ((sample1 + last_sample1) >> 1);
|
|
|
- dst[2] = (Uint16) ((sample2 + last_sample2) >> 1);
|
|
|
- dst[3] = (Uint16) ((sample3 + last_sample3) >> 1);
|
|
|
- last_sample0 = sample0;
|
|
|
- last_sample1 = sample1;
|
|
|
- last_sample2 = sample2;
|
|
|
- last_sample3 = sample3;
|
|
|
- dst += 4;
|
|
|
- }
|
|
|
-
|
|
|
- cvt->len_cvt = dstsize;
|
|
|
- if (cvt->filters[++cvt->filter_index]) {
|
|
|
- cvt->filters[cvt->filter_index] (cvt, format);
|
|
|
- }
|
|
|
-}
|
|
|
-
|
|
|
-static void SDLCALL
|
|
|
-SDL_Upsample_U16MSB_4c_x4(SDL_AudioCVT * cvt, SDL_AudioFormat format)
|
|
|
-{
|
|
|
-#if DEBUG_CONVERT
|
|
|
- fprintf(stderr, "Upsample (x4) AUDIO_U16MSB, 4 channels.\n");
|
|
|
-#endif
|
|
|
-
|
|
|
- const int dstsize = cvt->len_cvt * 4;
|
|
|
- Uint16 *dst = ((Uint16 *) (cvt->buf + dstsize)) - 4 * 4;
|
|
|
- const Uint16 *src = ((Uint16 *) (cvt->buf + cvt->len_cvt)) - 4;
|
|
|
- const Uint16 *target = ((const Uint16 *) cvt->buf);
|
|
|
- Sint32 last_sample3 = (Sint32) SDL_SwapBE16(src[3]);
|
|
|
- Sint32 last_sample2 = (Sint32) SDL_SwapBE16(src[2]);
|
|
|
- Sint32 last_sample1 = (Sint32) SDL_SwapBE16(src[1]);
|
|
|
- Sint32 last_sample0 = (Sint32) SDL_SwapBE16(src[0]);
|
|
|
- while (dst >= target) {
|
|
|
- const Sint32 sample3 = (Sint32) SDL_SwapBE16(src[3]);
|
|
|
- const Sint32 sample2 = (Sint32) SDL_SwapBE16(src[2]);
|
|
|
- const Sint32 sample1 = (Sint32) SDL_SwapBE16(src[1]);
|
|
|
- const Sint32 sample0 = (Sint32) SDL_SwapBE16(src[0]);
|
|
|
- src -= 4;
|
|
|
- dst[15] = (Uint16) ((sample3 + (3 * last_sample3)) >> 2);
|
|
|
- dst[14] = (Uint16) ((sample2 + (3 * last_sample2)) >> 2);
|
|
|
- dst[13] = (Uint16) ((sample1 + (3 * last_sample1)) >> 2);
|
|
|
- dst[12] = (Uint16) ((sample0 + (3 * last_sample0)) >> 2);
|
|
|
- dst[11] = (Uint16) ((sample3 + last_sample3) >> 1);
|
|
|
- dst[10] = (Uint16) ((sample2 + last_sample2) >> 1);
|
|
|
- dst[9] = (Uint16) ((sample1 + last_sample1) >> 1);
|
|
|
- dst[8] = (Uint16) ((sample0 + last_sample0) >> 1);
|
|
|
- dst[7] = (Uint16) (((3 * sample3) + last_sample3) >> 2);
|
|
|
- dst[6] = (Uint16) (((3 * sample2) + last_sample2) >> 2);
|
|
|
- dst[5] = (Uint16) (((3 * sample1) + last_sample1) >> 2);
|
|
|
- dst[4] = (Uint16) (((3 * sample0) + last_sample0) >> 2);
|
|
|
- dst[3] = (Uint16) sample3;
|
|
|
- dst[2] = (Uint16) sample2;
|
|
|
- dst[1] = (Uint16) sample1;
|
|
|
- dst[0] = (Uint16) sample0;
|
|
|
- last_sample3 = sample3;
|
|
|
- last_sample2 = sample2;
|
|
|
- last_sample1 = sample1;
|
|
|
- last_sample0 = sample0;
|
|
|
- dst -= 16;
|
|
|
- }
|
|
|
-
|
|
|
- cvt->len_cvt = dstsize;
|
|
|
- if (cvt->filters[++cvt->filter_index]) {
|
|
|
- cvt->filters[cvt->filter_index] (cvt, format);
|
|
|
- }
|
|
|
-}
|
|
|
-
|
|
|
-static void SDLCALL
|
|
|
-SDL_Downsample_U16MSB_4c_x4(SDL_AudioCVT * cvt, SDL_AudioFormat format)
|
|
|
-{
|
|
|
-#if DEBUG_CONVERT
|
|
|
- fprintf(stderr, "Downsample (x4) AUDIO_U16MSB, 4 channels.\n");
|
|
|
-#endif
|
|
|
-
|
|
|
- const int dstsize = cvt->len_cvt / 4;
|
|
|
- Uint16 *dst = (Uint16 *) cvt->buf;
|
|
|
- const Uint16 *src = (Uint16 *) cvt->buf;
|
|
|
- const Uint16 *target = (const Uint16 *) (cvt->buf + dstsize);
|
|
|
- Sint32 last_sample0 = (Sint32) SDL_SwapBE16(src[0]);
|
|
|
- Sint32 last_sample1 = (Sint32) SDL_SwapBE16(src[1]);
|
|
|
- Sint32 last_sample2 = (Sint32) SDL_SwapBE16(src[2]);
|
|
|
- Sint32 last_sample3 = (Sint32) SDL_SwapBE16(src[3]);
|
|
|
- while (dst < target) {
|
|
|
- const Sint32 sample0 = (Sint32) SDL_SwapBE16(src[0]);
|
|
|
- const Sint32 sample1 = (Sint32) SDL_SwapBE16(src[1]);
|
|
|
- const Sint32 sample2 = (Sint32) SDL_SwapBE16(src[2]);
|
|
|
- const Sint32 sample3 = (Sint32) SDL_SwapBE16(src[3]);
|
|
|
- src += 16;
|
|
|
- dst[0] = (Uint16) ((sample0 + last_sample0) >> 1);
|
|
|
- dst[1] = (Uint16) ((sample1 + last_sample1) >> 1);
|
|
|
- dst[2] = (Uint16) ((sample2 + last_sample2) >> 1);
|
|
|
- dst[3] = (Uint16) ((sample3 + last_sample3) >> 1);
|
|
|
- last_sample0 = sample0;
|
|
|
- last_sample1 = sample1;
|
|
|
- last_sample2 = sample2;
|
|
|
- last_sample3 = sample3;
|
|
|
- dst += 4;
|
|
|
- }
|
|
|
-
|
|
|
- cvt->len_cvt = dstsize;
|
|
|
- if (cvt->filters[++cvt->filter_index]) {
|
|
|
- cvt->filters[cvt->filter_index] (cvt, format);
|
|
|
- }
|
|
|
-}
|
|
|
-
|
|
|
-static void SDLCALL
|
|
|
-SDL_Upsample_U16MSB_6c_x2(SDL_AudioCVT * cvt, SDL_AudioFormat format)
|
|
|
-{
|
|
|
-#if DEBUG_CONVERT
|
|
|
- fprintf(stderr, "Upsample (x2) AUDIO_U16MSB, 6 channels.\n");
|
|
|
-#endif
|
|
|
-
|
|
|
- const int dstsize = cvt->len_cvt * 2;
|
|
|
- Uint16 *dst = ((Uint16 *) (cvt->buf + dstsize)) - 6 * 2;
|
|
|
- const Uint16 *src = ((Uint16 *) (cvt->buf + cvt->len_cvt)) - 6;
|
|
|
- const Uint16 *target = ((const Uint16 *) cvt->buf);
|
|
|
- Sint32 last_sample5 = (Sint32) SDL_SwapBE16(src[5]);
|
|
|
- Sint32 last_sample4 = (Sint32) SDL_SwapBE16(src[4]);
|
|
|
- Sint32 last_sample3 = (Sint32) SDL_SwapBE16(src[3]);
|
|
|
- Sint32 last_sample2 = (Sint32) SDL_SwapBE16(src[2]);
|
|
|
- Sint32 last_sample1 = (Sint32) SDL_SwapBE16(src[1]);
|
|
|
- Sint32 last_sample0 = (Sint32) SDL_SwapBE16(src[0]);
|
|
|
- while (dst >= target) {
|
|
|
- const Sint32 sample5 = (Sint32) SDL_SwapBE16(src[5]);
|
|
|
- const Sint32 sample4 = (Sint32) SDL_SwapBE16(src[4]);
|
|
|
- const Sint32 sample3 = (Sint32) SDL_SwapBE16(src[3]);
|
|
|
- const Sint32 sample2 = (Sint32) SDL_SwapBE16(src[2]);
|
|
|
- const Sint32 sample1 = (Sint32) SDL_SwapBE16(src[1]);
|
|
|
- const Sint32 sample0 = (Sint32) SDL_SwapBE16(src[0]);
|
|
|
- src -= 6;
|
|
|
- dst[11] = (Uint16) ((sample5 + last_sample5) >> 1);
|
|
|
- dst[10] = (Uint16) ((sample4 + last_sample4) >> 1);
|
|
|
- dst[9] = (Uint16) ((sample3 + last_sample3) >> 1);
|
|
|
- dst[8] = (Uint16) ((sample2 + last_sample2) >> 1);
|
|
|
- dst[7] = (Uint16) ((sample1 + last_sample1) >> 1);
|
|
|
- dst[6] = (Uint16) ((sample0 + last_sample0) >> 1);
|
|
|
- dst[5] = (Uint16) sample5;
|
|
|
- dst[4] = (Uint16) sample4;
|
|
|
- dst[3] = (Uint16) sample3;
|
|
|
- dst[2] = (Uint16) sample2;
|
|
|
- dst[1] = (Uint16) sample1;
|
|
|
- dst[0] = (Uint16) sample0;
|
|
|
- last_sample5 = sample5;
|
|
|
- last_sample4 = sample4;
|
|
|
- last_sample3 = sample3;
|
|
|
- last_sample2 = sample2;
|
|
|
- last_sample1 = sample1;
|
|
|
- last_sample0 = sample0;
|
|
|
- dst -= 12;
|
|
|
- }
|
|
|
-
|
|
|
- cvt->len_cvt = dstsize;
|
|
|
- if (cvt->filters[++cvt->filter_index]) {
|
|
|
- cvt->filters[cvt->filter_index] (cvt, format);
|
|
|
- }
|
|
|
-}
|
|
|
-
|
|
|
-static void SDLCALL
|
|
|
-SDL_Downsample_U16MSB_6c_x2(SDL_AudioCVT * cvt, SDL_AudioFormat format)
|
|
|
-{
|
|
|
-#if DEBUG_CONVERT
|
|
|
- fprintf(stderr, "Downsample (x2) AUDIO_U16MSB, 6 channels.\n");
|
|
|
-#endif
|
|
|
-
|
|
|
- const int dstsize = cvt->len_cvt / 2;
|
|
|
- Uint16 *dst = (Uint16 *) cvt->buf;
|
|
|
- const Uint16 *src = (Uint16 *) cvt->buf;
|
|
|
- const Uint16 *target = (const Uint16 *) (cvt->buf + dstsize);
|
|
|
- Sint32 last_sample0 = (Sint32) SDL_SwapBE16(src[0]);
|
|
|
- Sint32 last_sample1 = (Sint32) SDL_SwapBE16(src[1]);
|
|
|
- Sint32 last_sample2 = (Sint32) SDL_SwapBE16(src[2]);
|
|
|
- Sint32 last_sample3 = (Sint32) SDL_SwapBE16(src[3]);
|
|
|
- Sint32 last_sample4 = (Sint32) SDL_SwapBE16(src[4]);
|
|
|
- Sint32 last_sample5 = (Sint32) SDL_SwapBE16(src[5]);
|
|
|
- while (dst < target) {
|
|
|
- const Sint32 sample0 = (Sint32) SDL_SwapBE16(src[0]);
|
|
|
- const Sint32 sample1 = (Sint32) SDL_SwapBE16(src[1]);
|
|
|
- const Sint32 sample2 = (Sint32) SDL_SwapBE16(src[2]);
|
|
|
- const Sint32 sample3 = (Sint32) SDL_SwapBE16(src[3]);
|
|
|
- const Sint32 sample4 = (Sint32) SDL_SwapBE16(src[4]);
|
|
|
- const Sint32 sample5 = (Sint32) SDL_SwapBE16(src[5]);
|
|
|
- src += 12;
|
|
|
- dst[0] = (Uint16) ((sample0 + last_sample0) >> 1);
|
|
|
- dst[1] = (Uint16) ((sample1 + last_sample1) >> 1);
|
|
|
- dst[2] = (Uint16) ((sample2 + last_sample2) >> 1);
|
|
|
- dst[3] = (Uint16) ((sample3 + last_sample3) >> 1);
|
|
|
- dst[4] = (Uint16) ((sample4 + last_sample4) >> 1);
|
|
|
- dst[5] = (Uint16) ((sample5 + last_sample5) >> 1);
|
|
|
- last_sample0 = sample0;
|
|
|
- last_sample1 = sample1;
|
|
|
- last_sample2 = sample2;
|
|
|
- last_sample3 = sample3;
|
|
|
- last_sample4 = sample4;
|
|
|
- last_sample5 = sample5;
|
|
|
- dst += 6;
|
|
|
- }
|
|
|
-
|
|
|
- cvt->len_cvt = dstsize;
|
|
|
- if (cvt->filters[++cvt->filter_index]) {
|
|
|
- cvt->filters[cvt->filter_index] (cvt, format);
|
|
|
- }
|
|
|
-}
|
|
|
-
|
|
|
-static void SDLCALL
|
|
|
-SDL_Upsample_U16MSB_6c_x4(SDL_AudioCVT * cvt, SDL_AudioFormat format)
|
|
|
-{
|
|
|
-#if DEBUG_CONVERT
|
|
|
- fprintf(stderr, "Upsample (x4) AUDIO_U16MSB, 6 channels.\n");
|
|
|
-#endif
|
|
|
-
|
|
|
- const int dstsize = cvt->len_cvt * 4;
|
|
|
- Uint16 *dst = ((Uint16 *) (cvt->buf + dstsize)) - 6 * 4;
|
|
|
- const Uint16 *src = ((Uint16 *) (cvt->buf + cvt->len_cvt)) - 6;
|
|
|
- const Uint16 *target = ((const Uint16 *) cvt->buf);
|
|
|
- Sint32 last_sample5 = (Sint32) SDL_SwapBE16(src[5]);
|
|
|
- Sint32 last_sample4 = (Sint32) SDL_SwapBE16(src[4]);
|
|
|
- Sint32 last_sample3 = (Sint32) SDL_SwapBE16(src[3]);
|
|
|
- Sint32 last_sample2 = (Sint32) SDL_SwapBE16(src[2]);
|
|
|
- Sint32 last_sample1 = (Sint32) SDL_SwapBE16(src[1]);
|
|
|
- Sint32 last_sample0 = (Sint32) SDL_SwapBE16(src[0]);
|
|
|
- while (dst >= target) {
|
|
|
- const Sint32 sample5 = (Sint32) SDL_SwapBE16(src[5]);
|
|
|
- const Sint32 sample4 = (Sint32) SDL_SwapBE16(src[4]);
|
|
|
- const Sint32 sample3 = (Sint32) SDL_SwapBE16(src[3]);
|
|
|
- const Sint32 sample2 = (Sint32) SDL_SwapBE16(src[2]);
|
|
|
- const Sint32 sample1 = (Sint32) SDL_SwapBE16(src[1]);
|
|
|
- const Sint32 sample0 = (Sint32) SDL_SwapBE16(src[0]);
|
|
|
- src -= 6;
|
|
|
- dst[23] = (Uint16) ((sample5 + (3 * last_sample5)) >> 2);
|
|
|
- dst[22] = (Uint16) ((sample4 + (3 * last_sample4)) >> 2);
|
|
|
- dst[21] = (Uint16) ((sample3 + (3 * last_sample3)) >> 2);
|
|
|
- dst[20] = (Uint16) ((sample2 + (3 * last_sample2)) >> 2);
|
|
|
- dst[19] = (Uint16) ((sample1 + (3 * last_sample1)) >> 2);
|
|
|
- dst[18] = (Uint16) ((sample0 + (3 * last_sample0)) >> 2);
|
|
|
- dst[17] = (Uint16) ((sample5 + last_sample5) >> 1);
|
|
|
- dst[16] = (Uint16) ((sample4 + last_sample4) >> 1);
|
|
|
- dst[15] = (Uint16) ((sample3 + last_sample3) >> 1);
|
|
|
- dst[14] = (Uint16) ((sample2 + last_sample2) >> 1);
|
|
|
- dst[13] = (Uint16) ((sample1 + last_sample1) >> 1);
|
|
|
- dst[12] = (Uint16) ((sample0 + last_sample0) >> 1);
|
|
|
- dst[11] = (Uint16) (((3 * sample5) + last_sample5) >> 2);
|
|
|
- dst[10] = (Uint16) (((3 * sample4) + last_sample4) >> 2);
|
|
|
- dst[9] = (Uint16) (((3 * sample3) + last_sample3) >> 2);
|
|
|
- dst[8] = (Uint16) (((3 * sample2) + last_sample2) >> 2);
|
|
|
- dst[7] = (Uint16) (((3 * sample1) + last_sample1) >> 2);
|
|
|
- dst[6] = (Uint16) (((3 * sample0) + last_sample0) >> 2);
|
|
|
- dst[5] = (Uint16) sample5;
|
|
|
- dst[4] = (Uint16) sample4;
|
|
|
- dst[3] = (Uint16) sample3;
|
|
|
- dst[2] = (Uint16) sample2;
|
|
|
- dst[1] = (Uint16) sample1;
|
|
|
- dst[0] = (Uint16) sample0;
|
|
|
- last_sample5 = sample5;
|
|
|
- last_sample4 = sample4;
|
|
|
- last_sample3 = sample3;
|
|
|
- last_sample2 = sample2;
|
|
|
- last_sample1 = sample1;
|
|
|
- last_sample0 = sample0;
|
|
|
- dst -= 24;
|
|
|
- }
|
|
|
-
|
|
|
- cvt->len_cvt = dstsize;
|
|
|
- if (cvt->filters[++cvt->filter_index]) {
|
|
|
- cvt->filters[cvt->filter_index] (cvt, format);
|
|
|
- }
|
|
|
-}
|
|
|
-
|
|
|
-static void SDLCALL
|
|
|
-SDL_Downsample_U16MSB_6c_x4(SDL_AudioCVT * cvt, SDL_AudioFormat format)
|
|
|
-{
|
|
|
-#if DEBUG_CONVERT
|
|
|
- fprintf(stderr, "Downsample (x4) AUDIO_U16MSB, 6 channels.\n");
|
|
|
-#endif
|
|
|
-
|
|
|
- const int dstsize = cvt->len_cvt / 4;
|
|
|
- Uint16 *dst = (Uint16 *) cvt->buf;
|
|
|
- const Uint16 *src = (Uint16 *) cvt->buf;
|
|
|
- const Uint16 *target = (const Uint16 *) (cvt->buf + dstsize);
|
|
|
- Sint32 last_sample0 = (Sint32) SDL_SwapBE16(src[0]);
|
|
|
- Sint32 last_sample1 = (Sint32) SDL_SwapBE16(src[1]);
|
|
|
- Sint32 last_sample2 = (Sint32) SDL_SwapBE16(src[2]);
|
|
|
- Sint32 last_sample3 = (Sint32) SDL_SwapBE16(src[3]);
|
|
|
- Sint32 last_sample4 = (Sint32) SDL_SwapBE16(src[4]);
|
|
|
- Sint32 last_sample5 = (Sint32) SDL_SwapBE16(src[5]);
|
|
|
- while (dst < target) {
|
|
|
- const Sint32 sample0 = (Sint32) SDL_SwapBE16(src[0]);
|
|
|
- const Sint32 sample1 = (Sint32) SDL_SwapBE16(src[1]);
|
|
|
- const Sint32 sample2 = (Sint32) SDL_SwapBE16(src[2]);
|
|
|
- const Sint32 sample3 = (Sint32) SDL_SwapBE16(src[3]);
|
|
|
- const Sint32 sample4 = (Sint32) SDL_SwapBE16(src[4]);
|
|
|
- const Sint32 sample5 = (Sint32) SDL_SwapBE16(src[5]);
|
|
|
- src += 24;
|
|
|
- dst[0] = (Uint16) ((sample0 + last_sample0) >> 1);
|
|
|
- dst[1] = (Uint16) ((sample1 + last_sample1) >> 1);
|
|
|
- dst[2] = (Uint16) ((sample2 + last_sample2) >> 1);
|
|
|
- dst[3] = (Uint16) ((sample3 + last_sample3) >> 1);
|
|
|
- dst[4] = (Uint16) ((sample4 + last_sample4) >> 1);
|
|
|
- dst[5] = (Uint16) ((sample5 + last_sample5) >> 1);
|
|
|
- last_sample0 = sample0;
|
|
|
- last_sample1 = sample1;
|
|
|
- last_sample2 = sample2;
|
|
|
- last_sample3 = sample3;
|
|
|
- last_sample4 = sample4;
|
|
|
- last_sample5 = sample5;
|
|
|
- dst += 6;
|
|
|
- }
|
|
|
-
|
|
|
- cvt->len_cvt = dstsize;
|
|
|
- if (cvt->filters[++cvt->filter_index]) {
|
|
|
- cvt->filters[cvt->filter_index] (cvt, format);
|
|
|
- }
|
|
|
-}
|
|
|
-
|
|
|
-static void SDLCALL
|
|
|
-SDL_Upsample_U16MSB_8c_x2(SDL_AudioCVT * cvt, SDL_AudioFormat format)
|
|
|
-{
|
|
|
-#if DEBUG_CONVERT
|
|
|
- fprintf(stderr, "Upsample (x2) AUDIO_U16MSB, 8 channels.\n");
|
|
|
-#endif
|
|
|
-
|
|
|
- const int dstsize = cvt->len_cvt * 2;
|
|
|
- Uint16 *dst = ((Uint16 *) (cvt->buf + dstsize)) - 8 * 2;
|
|
|
- const Uint16 *src = ((Uint16 *) (cvt->buf + cvt->len_cvt)) - 8;
|
|
|
- const Uint16 *target = ((const Uint16 *) cvt->buf);
|
|
|
- Sint32 last_sample7 = (Sint32) SDL_SwapBE16(src[7]);
|
|
|
- Sint32 last_sample6 = (Sint32) SDL_SwapBE16(src[6]);
|
|
|
- Sint32 last_sample5 = (Sint32) SDL_SwapBE16(src[5]);
|
|
|
- Sint32 last_sample4 = (Sint32) SDL_SwapBE16(src[4]);
|
|
|
- Sint32 last_sample3 = (Sint32) SDL_SwapBE16(src[3]);
|
|
|
- Sint32 last_sample2 = (Sint32) SDL_SwapBE16(src[2]);
|
|
|
- Sint32 last_sample1 = (Sint32) SDL_SwapBE16(src[1]);
|
|
|
- Sint32 last_sample0 = (Sint32) SDL_SwapBE16(src[0]);
|
|
|
- while (dst >= target) {
|
|
|
- const Sint32 sample7 = (Sint32) SDL_SwapBE16(src[7]);
|
|
|
- const Sint32 sample6 = (Sint32) SDL_SwapBE16(src[6]);
|
|
|
- const Sint32 sample5 = (Sint32) SDL_SwapBE16(src[5]);
|
|
|
- const Sint32 sample4 = (Sint32) SDL_SwapBE16(src[4]);
|
|
|
- const Sint32 sample3 = (Sint32) SDL_SwapBE16(src[3]);
|
|
|
- const Sint32 sample2 = (Sint32) SDL_SwapBE16(src[2]);
|
|
|
- const Sint32 sample1 = (Sint32) SDL_SwapBE16(src[1]);
|
|
|
- const Sint32 sample0 = (Sint32) SDL_SwapBE16(src[0]);
|
|
|
- src -= 8;
|
|
|
- dst[15] = (Uint16) ((sample7 + last_sample7) >> 1);
|
|
|
- dst[14] = (Uint16) ((sample6 + last_sample6) >> 1);
|
|
|
- dst[13] = (Uint16) ((sample5 + last_sample5) >> 1);
|
|
|
- dst[12] = (Uint16) ((sample4 + last_sample4) >> 1);
|
|
|
- dst[11] = (Uint16) ((sample3 + last_sample3) >> 1);
|
|
|
- dst[10] = (Uint16) ((sample2 + last_sample2) >> 1);
|
|
|
- dst[9] = (Uint16) ((sample1 + last_sample1) >> 1);
|
|
|
- dst[8] = (Uint16) ((sample0 + last_sample0) >> 1);
|
|
|
- dst[7] = (Uint16) sample7;
|
|
|
- dst[6] = (Uint16) sample6;
|
|
|
- dst[5] = (Uint16) sample5;
|
|
|
- dst[4] = (Uint16) sample4;
|
|
|
- dst[3] = (Uint16) sample3;
|
|
|
- dst[2] = (Uint16) sample2;
|
|
|
- dst[1] = (Uint16) sample1;
|
|
|
- dst[0] = (Uint16) sample0;
|
|
|
- last_sample7 = sample7;
|
|
|
- last_sample6 = sample6;
|
|
|
- last_sample5 = sample5;
|
|
|
- last_sample4 = sample4;
|
|
|
- last_sample3 = sample3;
|
|
|
- last_sample2 = sample2;
|
|
|
- last_sample1 = sample1;
|
|
|
- last_sample0 = sample0;
|
|
|
- dst -= 16;
|
|
|
- }
|
|
|
-
|
|
|
- cvt->len_cvt = dstsize;
|
|
|
- if (cvt->filters[++cvt->filter_index]) {
|
|
|
- cvt->filters[cvt->filter_index] (cvt, format);
|
|
|
- }
|
|
|
-}
|
|
|
-
|
|
|
-static void SDLCALL
|
|
|
-SDL_Downsample_U16MSB_8c_x2(SDL_AudioCVT * cvt, SDL_AudioFormat format)
|
|
|
-{
|
|
|
-#if DEBUG_CONVERT
|
|
|
- fprintf(stderr, "Downsample (x2) AUDIO_U16MSB, 8 channels.\n");
|
|
|
-#endif
|
|
|
-
|
|
|
- const int dstsize = cvt->len_cvt / 2;
|
|
|
- Uint16 *dst = (Uint16 *) cvt->buf;
|
|
|
- const Uint16 *src = (Uint16 *) cvt->buf;
|
|
|
- const Uint16 *target = (const Uint16 *) (cvt->buf + dstsize);
|
|
|
- Sint32 last_sample0 = (Sint32) SDL_SwapBE16(src[0]);
|
|
|
- Sint32 last_sample1 = (Sint32) SDL_SwapBE16(src[1]);
|
|
|
- Sint32 last_sample2 = (Sint32) SDL_SwapBE16(src[2]);
|
|
|
- Sint32 last_sample3 = (Sint32) SDL_SwapBE16(src[3]);
|
|
|
- Sint32 last_sample4 = (Sint32) SDL_SwapBE16(src[4]);
|
|
|
- Sint32 last_sample5 = (Sint32) SDL_SwapBE16(src[5]);
|
|
|
- Sint32 last_sample6 = (Sint32) SDL_SwapBE16(src[6]);
|
|
|
- Sint32 last_sample7 = (Sint32) SDL_SwapBE16(src[7]);
|
|
|
- while (dst < target) {
|
|
|
- const Sint32 sample0 = (Sint32) SDL_SwapBE16(src[0]);
|
|
|
- const Sint32 sample1 = (Sint32) SDL_SwapBE16(src[1]);
|
|
|
- const Sint32 sample2 = (Sint32) SDL_SwapBE16(src[2]);
|
|
|
- const Sint32 sample3 = (Sint32) SDL_SwapBE16(src[3]);
|
|
|
- const Sint32 sample4 = (Sint32) SDL_SwapBE16(src[4]);
|
|
|
- const Sint32 sample5 = (Sint32) SDL_SwapBE16(src[5]);
|
|
|
- const Sint32 sample6 = (Sint32) SDL_SwapBE16(src[6]);
|
|
|
- const Sint32 sample7 = (Sint32) SDL_SwapBE16(src[7]);
|
|
|
- src += 16;
|
|
|
- dst[0] = (Uint16) ((sample0 + last_sample0) >> 1);
|
|
|
- dst[1] = (Uint16) ((sample1 + last_sample1) >> 1);
|
|
|
- dst[2] = (Uint16) ((sample2 + last_sample2) >> 1);
|
|
|
- dst[3] = (Uint16) ((sample3 + last_sample3) >> 1);
|
|
|
- dst[4] = (Uint16) ((sample4 + last_sample4) >> 1);
|
|
|
- dst[5] = (Uint16) ((sample5 + last_sample5) >> 1);
|
|
|
- dst[6] = (Uint16) ((sample6 + last_sample6) >> 1);
|
|
|
- dst[7] = (Uint16) ((sample7 + last_sample7) >> 1);
|
|
|
- last_sample0 = sample0;
|
|
|
- last_sample1 = sample1;
|
|
|
- last_sample2 = sample2;
|
|
|
- last_sample3 = sample3;
|
|
|
- last_sample4 = sample4;
|
|
|
- last_sample5 = sample5;
|
|
|
- last_sample6 = sample6;
|
|
|
- last_sample7 = sample7;
|
|
|
- dst += 8;
|
|
|
- }
|
|
|
-
|
|
|
- cvt->len_cvt = dstsize;
|
|
|
- if (cvt->filters[++cvt->filter_index]) {
|
|
|
- cvt->filters[cvt->filter_index] (cvt, format);
|
|
|
- }
|
|
|
-}
|
|
|
-
|
|
|
-static void SDLCALL
|
|
|
-SDL_Upsample_U16MSB_8c_x4(SDL_AudioCVT * cvt, SDL_AudioFormat format)
|
|
|
-{
|
|
|
-#if DEBUG_CONVERT
|
|
|
- fprintf(stderr, "Upsample (x4) AUDIO_U16MSB, 8 channels.\n");
|
|
|
-#endif
|
|
|
-
|
|
|
- const int dstsize = cvt->len_cvt * 4;
|
|
|
- Uint16 *dst = ((Uint16 *) (cvt->buf + dstsize)) - 8 * 4;
|
|
|
- const Uint16 *src = ((Uint16 *) (cvt->buf + cvt->len_cvt)) - 8;
|
|
|
- const Uint16 *target = ((const Uint16 *) cvt->buf);
|
|
|
- Sint32 last_sample7 = (Sint32) SDL_SwapBE16(src[7]);
|
|
|
- Sint32 last_sample6 = (Sint32) SDL_SwapBE16(src[6]);
|
|
|
- Sint32 last_sample5 = (Sint32) SDL_SwapBE16(src[5]);
|
|
|
- Sint32 last_sample4 = (Sint32) SDL_SwapBE16(src[4]);
|
|
|
- Sint32 last_sample3 = (Sint32) SDL_SwapBE16(src[3]);
|
|
|
- Sint32 last_sample2 = (Sint32) SDL_SwapBE16(src[2]);
|
|
|
- Sint32 last_sample1 = (Sint32) SDL_SwapBE16(src[1]);
|
|
|
- Sint32 last_sample0 = (Sint32) SDL_SwapBE16(src[0]);
|
|
|
- while (dst >= target) {
|
|
|
- const Sint32 sample7 = (Sint32) SDL_SwapBE16(src[7]);
|
|
|
- const Sint32 sample6 = (Sint32) SDL_SwapBE16(src[6]);
|
|
|
- const Sint32 sample5 = (Sint32) SDL_SwapBE16(src[5]);
|
|
|
- const Sint32 sample4 = (Sint32) SDL_SwapBE16(src[4]);
|
|
|
- const Sint32 sample3 = (Sint32) SDL_SwapBE16(src[3]);
|
|
|
- const Sint32 sample2 = (Sint32) SDL_SwapBE16(src[2]);
|
|
|
- const Sint32 sample1 = (Sint32) SDL_SwapBE16(src[1]);
|
|
|
- const Sint32 sample0 = (Sint32) SDL_SwapBE16(src[0]);
|
|
|
- src -= 8;
|
|
|
- dst[31] = (Uint16) ((sample7 + (3 * last_sample7)) >> 2);
|
|
|
- dst[30] = (Uint16) ((sample6 + (3 * last_sample6)) >> 2);
|
|
|
- dst[29] = (Uint16) ((sample5 + (3 * last_sample5)) >> 2);
|
|
|
- dst[28] = (Uint16) ((sample4 + (3 * last_sample4)) >> 2);
|
|
|
- dst[27] = (Uint16) ((sample3 + (3 * last_sample3)) >> 2);
|
|
|
- dst[26] = (Uint16) ((sample2 + (3 * last_sample2)) >> 2);
|
|
|
- dst[25] = (Uint16) ((sample1 + (3 * last_sample1)) >> 2);
|
|
|
- dst[24] = (Uint16) ((sample0 + (3 * last_sample0)) >> 2);
|
|
|
- dst[23] = (Uint16) ((sample7 + last_sample7) >> 1);
|
|
|
- dst[22] = (Uint16) ((sample6 + last_sample6) >> 1);
|
|
|
- dst[21] = (Uint16) ((sample5 + last_sample5) >> 1);
|
|
|
- dst[20] = (Uint16) ((sample4 + last_sample4) >> 1);
|
|
|
- dst[19] = (Uint16) ((sample3 + last_sample3) >> 1);
|
|
|
- dst[18] = (Uint16) ((sample2 + last_sample2) >> 1);
|
|
|
- dst[17] = (Uint16) ((sample1 + last_sample1) >> 1);
|
|
|
- dst[16] = (Uint16) ((sample0 + last_sample0) >> 1);
|
|
|
- dst[15] = (Uint16) (((3 * sample7) + last_sample7) >> 2);
|
|
|
- dst[14] = (Uint16) (((3 * sample6) + last_sample6) >> 2);
|
|
|
- dst[13] = (Uint16) (((3 * sample5) + last_sample5) >> 2);
|
|
|
- dst[12] = (Uint16) (((3 * sample4) + last_sample4) >> 2);
|
|
|
- dst[11] = (Uint16) (((3 * sample3) + last_sample3) >> 2);
|
|
|
- dst[10] = (Uint16) (((3 * sample2) + last_sample2) >> 2);
|
|
|
- dst[9] = (Uint16) (((3 * sample1) + last_sample1) >> 2);
|
|
|
- dst[8] = (Uint16) (((3 * sample0) + last_sample0) >> 2);
|
|
|
- dst[7] = (Uint16) sample7;
|
|
|
- dst[6] = (Uint16) sample6;
|
|
|
- dst[5] = (Uint16) sample5;
|
|
|
- dst[4] = (Uint16) sample4;
|
|
|
- dst[3] = (Uint16) sample3;
|
|
|
- dst[2] = (Uint16) sample2;
|
|
|
- dst[1] = (Uint16) sample1;
|
|
|
- dst[0] = (Uint16) sample0;
|
|
|
- last_sample7 = sample7;
|
|
|
- last_sample6 = sample6;
|
|
|
- last_sample5 = sample5;
|
|
|
- last_sample4 = sample4;
|
|
|
- last_sample3 = sample3;
|
|
|
- last_sample2 = sample2;
|
|
|
- last_sample1 = sample1;
|
|
|
- last_sample0 = sample0;
|
|
|
- dst -= 32;
|
|
|
- }
|
|
|
-
|
|
|
- cvt->len_cvt = dstsize;
|
|
|
- if (cvt->filters[++cvt->filter_index]) {
|
|
|
- cvt->filters[cvt->filter_index] (cvt, format);
|
|
|
- }
|
|
|
-}
|
|
|
-
|
|
|
-static void SDLCALL
|
|
|
-SDL_Downsample_U16MSB_8c_x4(SDL_AudioCVT * cvt, SDL_AudioFormat format)
|
|
|
-{
|
|
|
-#if DEBUG_CONVERT
|
|
|
- fprintf(stderr, "Downsample (x4) AUDIO_U16MSB, 8 channels.\n");
|
|
|
-#endif
|
|
|
-
|
|
|
- const int dstsize = cvt->len_cvt / 4;
|
|
|
- Uint16 *dst = (Uint16 *) cvt->buf;
|
|
|
- const Uint16 *src = (Uint16 *) cvt->buf;
|
|
|
- const Uint16 *target = (const Uint16 *) (cvt->buf + dstsize);
|
|
|
- Sint32 last_sample0 = (Sint32) SDL_SwapBE16(src[0]);
|
|
|
- Sint32 last_sample1 = (Sint32) SDL_SwapBE16(src[1]);
|
|
|
- Sint32 last_sample2 = (Sint32) SDL_SwapBE16(src[2]);
|
|
|
- Sint32 last_sample3 = (Sint32) SDL_SwapBE16(src[3]);
|
|
|
- Sint32 last_sample4 = (Sint32) SDL_SwapBE16(src[4]);
|
|
|
- Sint32 last_sample5 = (Sint32) SDL_SwapBE16(src[5]);
|
|
|
- Sint32 last_sample6 = (Sint32) SDL_SwapBE16(src[6]);
|
|
|
- Sint32 last_sample7 = (Sint32) SDL_SwapBE16(src[7]);
|
|
|
- while (dst < target) {
|
|
|
- const Sint32 sample0 = (Sint32) SDL_SwapBE16(src[0]);
|
|
|
- const Sint32 sample1 = (Sint32) SDL_SwapBE16(src[1]);
|
|
|
- const Sint32 sample2 = (Sint32) SDL_SwapBE16(src[2]);
|
|
|
- const Sint32 sample3 = (Sint32) SDL_SwapBE16(src[3]);
|
|
|
- const Sint32 sample4 = (Sint32) SDL_SwapBE16(src[4]);
|
|
|
- const Sint32 sample5 = (Sint32) SDL_SwapBE16(src[5]);
|
|
|
- const Sint32 sample6 = (Sint32) SDL_SwapBE16(src[6]);
|
|
|
- const Sint32 sample7 = (Sint32) SDL_SwapBE16(src[7]);
|
|
|
- src += 32;
|
|
|
- dst[0] = (Uint16) ((sample0 + last_sample0) >> 1);
|
|
|
- dst[1] = (Uint16) ((sample1 + last_sample1) >> 1);
|
|
|
- dst[2] = (Uint16) ((sample2 + last_sample2) >> 1);
|
|
|
- dst[3] = (Uint16) ((sample3 + last_sample3) >> 1);
|
|
|
- dst[4] = (Uint16) ((sample4 + last_sample4) >> 1);
|
|
|
- dst[5] = (Uint16) ((sample5 + last_sample5) >> 1);
|
|
|
- dst[6] = (Uint16) ((sample6 + last_sample6) >> 1);
|
|
|
- dst[7] = (Uint16) ((sample7 + last_sample7) >> 1);
|
|
|
- last_sample0 = sample0;
|
|
|
- last_sample1 = sample1;
|
|
|
- last_sample2 = sample2;
|
|
|
- last_sample3 = sample3;
|
|
|
- last_sample4 = sample4;
|
|
|
- last_sample5 = sample5;
|
|
|
- last_sample6 = sample6;
|
|
|
- last_sample7 = sample7;
|
|
|
- dst += 8;
|
|
|
- }
|
|
|
-
|
|
|
- cvt->len_cvt = dstsize;
|
|
|
- if (cvt->filters[++cvt->filter_index]) {
|
|
|
- cvt->filters[cvt->filter_index] (cvt, format);
|
|
|
- }
|
|
|
-}
|
|
|
-
|
|
|
-static void SDLCALL
|
|
|
-SDL_Upsample_S16MSB_1c_x2(SDL_AudioCVT * cvt, SDL_AudioFormat format)
|
|
|
-{
|
|
|
-#if DEBUG_CONVERT
|
|
|
- fprintf(stderr, "Upsample (x2) AUDIO_S16MSB, 1 channels.\n");
|
|
|
-#endif
|
|
|
-
|
|
|
- const int dstsize = cvt->len_cvt * 2;
|
|
|
- Sint16 *dst = ((Sint16 *) (cvt->buf + dstsize)) - 1 * 2;
|
|
|
- const Sint16 *src = ((Sint16 *) (cvt->buf + cvt->len_cvt)) - 1;
|
|
|
- const Sint16 *target = ((const Sint16 *) cvt->buf);
|
|
|
- Sint32 last_sample0 = (Sint32) ((Sint16) SDL_SwapBE16(src[0]));
|
|
|
- while (dst >= target) {
|
|
|
- const Sint32 sample0 = (Sint32) ((Sint16) SDL_SwapBE16(src[0]));
|
|
|
- src--;
|
|
|
- dst[1] = (Sint16) ((sample0 + last_sample0) >> 1);
|
|
|
- dst[0] = (Sint16) sample0;
|
|
|
- last_sample0 = sample0;
|
|
|
- dst -= 2;
|
|
|
- }
|
|
|
-
|
|
|
- cvt->len_cvt = dstsize;
|
|
|
- if (cvt->filters[++cvt->filter_index]) {
|
|
|
- cvt->filters[cvt->filter_index] (cvt, format);
|
|
|
- }
|
|
|
-}
|
|
|
-
|
|
|
-static void SDLCALL
|
|
|
-SDL_Downsample_S16MSB_1c_x2(SDL_AudioCVT * cvt, SDL_AudioFormat format)
|
|
|
-{
|
|
|
-#if DEBUG_CONVERT
|
|
|
- fprintf(stderr, "Downsample (x2) AUDIO_S16MSB, 1 channels.\n");
|
|
|
-#endif
|
|
|
-
|
|
|
- const int dstsize = cvt->len_cvt / 2;
|
|
|
- Sint16 *dst = (Sint16 *) cvt->buf;
|
|
|
- const Sint16 *src = (Sint16 *) cvt->buf;
|
|
|
- const Sint16 *target = (const Sint16 *) (cvt->buf + dstsize);
|
|
|
- Sint32 last_sample0 = (Sint32) ((Sint16) SDL_SwapBE16(src[0]));
|
|
|
- while (dst < target) {
|
|
|
- const Sint32 sample0 = (Sint32) ((Sint16) SDL_SwapBE16(src[0]));
|
|
|
- src += 2;
|
|
|
- dst[0] = (Sint16) ((sample0 + last_sample0) >> 1);
|
|
|
- last_sample0 = sample0;
|
|
|
- dst++;
|
|
|
- }
|
|
|
-
|
|
|
- cvt->len_cvt = dstsize;
|
|
|
- if (cvt->filters[++cvt->filter_index]) {
|
|
|
- cvt->filters[cvt->filter_index] (cvt, format);
|
|
|
- }
|
|
|
-}
|
|
|
-
|
|
|
-static void SDLCALL
|
|
|
-SDL_Upsample_S16MSB_1c_x4(SDL_AudioCVT * cvt, SDL_AudioFormat format)
|
|
|
-{
|
|
|
-#if DEBUG_CONVERT
|
|
|
- fprintf(stderr, "Upsample (x4) AUDIO_S16MSB, 1 channels.\n");
|
|
|
-#endif
|
|
|
-
|
|
|
- const int dstsize = cvt->len_cvt * 4;
|
|
|
- Sint16 *dst = ((Sint16 *) (cvt->buf + dstsize)) - 1 * 4;
|
|
|
- const Sint16 *src = ((Sint16 *) (cvt->buf + cvt->len_cvt)) - 1;
|
|
|
- const Sint16 *target = ((const Sint16 *) cvt->buf);
|
|
|
- Sint32 last_sample0 = (Sint32) ((Sint16) SDL_SwapBE16(src[0]));
|
|
|
- while (dst >= target) {
|
|
|
- const Sint32 sample0 = (Sint32) ((Sint16) SDL_SwapBE16(src[0]));
|
|
|
- src--;
|
|
|
- dst[3] = (Sint16) ((sample0 + (3 * last_sample0)) >> 2);
|
|
|
- dst[2] = (Sint16) ((sample0 + last_sample0) >> 1);
|
|
|
- dst[1] = (Sint16) (((3 * sample0) + last_sample0) >> 2);
|
|
|
- dst[0] = (Sint16) sample0;
|
|
|
- last_sample0 = sample0;
|
|
|
- dst -= 4;
|
|
|
- }
|
|
|
-
|
|
|
- cvt->len_cvt = dstsize;
|
|
|
- if (cvt->filters[++cvt->filter_index]) {
|
|
|
- cvt->filters[cvt->filter_index] (cvt, format);
|
|
|
- }
|
|
|
-}
|
|
|
-
|
|
|
-static void SDLCALL
|
|
|
-SDL_Downsample_S16MSB_1c_x4(SDL_AudioCVT * cvt, SDL_AudioFormat format)
|
|
|
-{
|
|
|
-#if DEBUG_CONVERT
|
|
|
- fprintf(stderr, "Downsample (x4) AUDIO_S16MSB, 1 channels.\n");
|
|
|
-#endif
|
|
|
-
|
|
|
- const int dstsize = cvt->len_cvt / 4;
|
|
|
- Sint16 *dst = (Sint16 *) cvt->buf;
|
|
|
- const Sint16 *src = (Sint16 *) cvt->buf;
|
|
|
- const Sint16 *target = (const Sint16 *) (cvt->buf + dstsize);
|
|
|
- Sint32 last_sample0 = (Sint32) ((Sint16) SDL_SwapBE16(src[0]));
|
|
|
- while (dst < target) {
|
|
|
- const Sint32 sample0 = (Sint32) ((Sint16) SDL_SwapBE16(src[0]));
|
|
|
- src += 4;
|
|
|
- dst[0] = (Sint16) ((sample0 + last_sample0) >> 1);
|
|
|
- last_sample0 = sample0;
|
|
|
- dst++;
|
|
|
- }
|
|
|
-
|
|
|
- cvt->len_cvt = dstsize;
|
|
|
- if (cvt->filters[++cvt->filter_index]) {
|
|
|
- cvt->filters[cvt->filter_index] (cvt, format);
|
|
|
- }
|
|
|
-}
|
|
|
-
|
|
|
-static void SDLCALL
|
|
|
-SDL_Upsample_S16MSB_2c_x2(SDL_AudioCVT * cvt, SDL_AudioFormat format)
|
|
|
-{
|
|
|
-#if DEBUG_CONVERT
|
|
|
- fprintf(stderr, "Upsample (x2) AUDIO_S16MSB, 2 channels.\n");
|
|
|
-#endif
|
|
|
-
|
|
|
- const int dstsize = cvt->len_cvt * 2;
|
|
|
- Sint16 *dst = ((Sint16 *) (cvt->buf + dstsize)) - 2 * 2;
|
|
|
- const Sint16 *src = ((Sint16 *) (cvt->buf + cvt->len_cvt)) - 2;
|
|
|
- const Sint16 *target = ((const Sint16 *) cvt->buf);
|
|
|
- Sint32 last_sample1 = (Sint32) ((Sint16) SDL_SwapBE16(src[1]));
|
|
|
- Sint32 last_sample0 = (Sint32) ((Sint16) SDL_SwapBE16(src[0]));
|
|
|
- while (dst >= target) {
|
|
|
- const Sint32 sample1 = (Sint32) ((Sint16) SDL_SwapBE16(src[1]));
|
|
|
- const Sint32 sample0 = (Sint32) ((Sint16) SDL_SwapBE16(src[0]));
|
|
|
- src -= 2;
|
|
|
- dst[3] = (Sint16) ((sample1 + last_sample1) >> 1);
|
|
|
- dst[2] = (Sint16) ((sample0 + last_sample0) >> 1);
|
|
|
- dst[1] = (Sint16) sample1;
|
|
|
- dst[0] = (Sint16) sample0;
|
|
|
- last_sample1 = sample1;
|
|
|
- last_sample0 = sample0;
|
|
|
- dst -= 4;
|
|
|
- }
|
|
|
-
|
|
|
- cvt->len_cvt = dstsize;
|
|
|
- if (cvt->filters[++cvt->filter_index]) {
|
|
|
- cvt->filters[cvt->filter_index] (cvt, format);
|
|
|
- }
|
|
|
-}
|
|
|
-
|
|
|
-static void SDLCALL
|
|
|
-SDL_Downsample_S16MSB_2c_x2(SDL_AudioCVT * cvt, SDL_AudioFormat format)
|
|
|
-{
|
|
|
-#if DEBUG_CONVERT
|
|
|
- fprintf(stderr, "Downsample (x2) AUDIO_S16MSB, 2 channels.\n");
|
|
|
-#endif
|
|
|
-
|
|
|
- const int dstsize = cvt->len_cvt / 2;
|
|
|
- Sint16 *dst = (Sint16 *) cvt->buf;
|
|
|
- const Sint16 *src = (Sint16 *) cvt->buf;
|
|
|
- const Sint16 *target = (const Sint16 *) (cvt->buf + dstsize);
|
|
|
- Sint32 last_sample0 = (Sint32) ((Sint16) SDL_SwapBE16(src[0]));
|
|
|
- Sint32 last_sample1 = (Sint32) ((Sint16) SDL_SwapBE16(src[1]));
|
|
|
- while (dst < target) {
|
|
|
- const Sint32 sample0 = (Sint32) ((Sint16) SDL_SwapBE16(src[0]));
|
|
|
- const Sint32 sample1 = (Sint32) ((Sint16) SDL_SwapBE16(src[1]));
|
|
|
- src += 4;
|
|
|
- dst[0] = (Sint16) ((sample0 + last_sample0) >> 1);
|
|
|
- dst[1] = (Sint16) ((sample1 + last_sample1) >> 1);
|
|
|
- last_sample0 = sample0;
|
|
|
- last_sample1 = sample1;
|
|
|
- dst += 2;
|
|
|
- }
|
|
|
-
|
|
|
- cvt->len_cvt = dstsize;
|
|
|
- if (cvt->filters[++cvt->filter_index]) {
|
|
|
- cvt->filters[cvt->filter_index] (cvt, format);
|
|
|
- }
|
|
|
-}
|
|
|
-
|
|
|
-static void SDLCALL
|
|
|
-SDL_Upsample_S16MSB_2c_x4(SDL_AudioCVT * cvt, SDL_AudioFormat format)
|
|
|
-{
|
|
|
-#if DEBUG_CONVERT
|
|
|
- fprintf(stderr, "Upsample (x4) AUDIO_S16MSB, 2 channels.\n");
|
|
|
-#endif
|
|
|
-
|
|
|
- const int dstsize = cvt->len_cvt * 4;
|
|
|
- Sint16 *dst = ((Sint16 *) (cvt->buf + dstsize)) - 2 * 4;
|
|
|
- const Sint16 *src = ((Sint16 *) (cvt->buf + cvt->len_cvt)) - 2;
|
|
|
- const Sint16 *target = ((const Sint16 *) cvt->buf);
|
|
|
- Sint32 last_sample1 = (Sint32) ((Sint16) SDL_SwapBE16(src[1]));
|
|
|
- Sint32 last_sample0 = (Sint32) ((Sint16) SDL_SwapBE16(src[0]));
|
|
|
- while (dst >= target) {
|
|
|
- const Sint32 sample1 = (Sint32) ((Sint16) SDL_SwapBE16(src[1]));
|
|
|
- const Sint32 sample0 = (Sint32) ((Sint16) SDL_SwapBE16(src[0]));
|
|
|
- src -= 2;
|
|
|
- dst[7] = (Sint16) ((sample1 + (3 * last_sample1)) >> 2);
|
|
|
- dst[6] = (Sint16) ((sample0 + (3 * last_sample0)) >> 2);
|
|
|
- dst[5] = (Sint16) ((sample1 + last_sample1) >> 1);
|
|
|
- dst[4] = (Sint16) ((sample0 + last_sample0) >> 1);
|
|
|
- dst[3] = (Sint16) (((3 * sample1) + last_sample1) >> 2);
|
|
|
- dst[2] = (Sint16) (((3 * sample0) + last_sample0) >> 2);
|
|
|
- dst[1] = (Sint16) sample1;
|
|
|
- dst[0] = (Sint16) sample0;
|
|
|
- last_sample1 = sample1;
|
|
|
- last_sample0 = sample0;
|
|
|
- dst -= 8;
|
|
|
- }
|
|
|
-
|
|
|
- cvt->len_cvt = dstsize;
|
|
|
- if (cvt->filters[++cvt->filter_index]) {
|
|
|
- cvt->filters[cvt->filter_index] (cvt, format);
|
|
|
- }
|
|
|
-}
|
|
|
-
|
|
|
-static void SDLCALL
|
|
|
-SDL_Downsample_S16MSB_2c_x4(SDL_AudioCVT * cvt, SDL_AudioFormat format)
|
|
|
-{
|
|
|
-#if DEBUG_CONVERT
|
|
|
- fprintf(stderr, "Downsample (x4) AUDIO_S16MSB, 2 channels.\n");
|
|
|
-#endif
|
|
|
-
|
|
|
- const int dstsize = cvt->len_cvt / 4;
|
|
|
- Sint16 *dst = (Sint16 *) cvt->buf;
|
|
|
- const Sint16 *src = (Sint16 *) cvt->buf;
|
|
|
- const Sint16 *target = (const Sint16 *) (cvt->buf + dstsize);
|
|
|
- Sint32 last_sample0 = (Sint32) ((Sint16) SDL_SwapBE16(src[0]));
|
|
|
- Sint32 last_sample1 = (Sint32) ((Sint16) SDL_SwapBE16(src[1]));
|
|
|
- while (dst < target) {
|
|
|
- const Sint32 sample0 = (Sint32) ((Sint16) SDL_SwapBE16(src[0]));
|
|
|
- const Sint32 sample1 = (Sint32) ((Sint16) SDL_SwapBE16(src[1]));
|
|
|
- src += 8;
|
|
|
- dst[0] = (Sint16) ((sample0 + last_sample0) >> 1);
|
|
|
- dst[1] = (Sint16) ((sample1 + last_sample1) >> 1);
|
|
|
- last_sample0 = sample0;
|
|
|
- last_sample1 = sample1;
|
|
|
- dst += 2;
|
|
|
- }
|
|
|
-
|
|
|
- cvt->len_cvt = dstsize;
|
|
|
- if (cvt->filters[++cvt->filter_index]) {
|
|
|
- cvt->filters[cvt->filter_index] (cvt, format);
|
|
|
- }
|
|
|
-}
|
|
|
-
|
|
|
-static void SDLCALL
|
|
|
-SDL_Upsample_S16MSB_4c_x2(SDL_AudioCVT * cvt, SDL_AudioFormat format)
|
|
|
-{
|
|
|
-#if DEBUG_CONVERT
|
|
|
- fprintf(stderr, "Upsample (x2) AUDIO_S16MSB, 4 channels.\n");
|
|
|
-#endif
|
|
|
-
|
|
|
- const int dstsize = cvt->len_cvt * 2;
|
|
|
- Sint16 *dst = ((Sint16 *) (cvt->buf + dstsize)) - 4 * 2;
|
|
|
- const Sint16 *src = ((Sint16 *) (cvt->buf + cvt->len_cvt)) - 4;
|
|
|
- const Sint16 *target = ((const Sint16 *) cvt->buf);
|
|
|
- Sint32 last_sample3 = (Sint32) ((Sint16) SDL_SwapBE16(src[3]));
|
|
|
- Sint32 last_sample2 = (Sint32) ((Sint16) SDL_SwapBE16(src[2]));
|
|
|
- Sint32 last_sample1 = (Sint32) ((Sint16) SDL_SwapBE16(src[1]));
|
|
|
- Sint32 last_sample0 = (Sint32) ((Sint16) SDL_SwapBE16(src[0]));
|
|
|
- while (dst >= target) {
|
|
|
- const Sint32 sample3 = (Sint32) ((Sint16) SDL_SwapBE16(src[3]));
|
|
|
- const Sint32 sample2 = (Sint32) ((Sint16) SDL_SwapBE16(src[2]));
|
|
|
- const Sint32 sample1 = (Sint32) ((Sint16) SDL_SwapBE16(src[1]));
|
|
|
- const Sint32 sample0 = (Sint32) ((Sint16) SDL_SwapBE16(src[0]));
|
|
|
- src -= 4;
|
|
|
- dst[7] = (Sint16) ((sample3 + last_sample3) >> 1);
|
|
|
- dst[6] = (Sint16) ((sample2 + last_sample2) >> 1);
|
|
|
- dst[5] = (Sint16) ((sample1 + last_sample1) >> 1);
|
|
|
- dst[4] = (Sint16) ((sample0 + last_sample0) >> 1);
|
|
|
- dst[3] = (Sint16) sample3;
|
|
|
- dst[2] = (Sint16) sample2;
|
|
|
- dst[1] = (Sint16) sample1;
|
|
|
- dst[0] = (Sint16) sample0;
|
|
|
- last_sample3 = sample3;
|
|
|
- last_sample2 = sample2;
|
|
|
- last_sample1 = sample1;
|
|
|
- last_sample0 = sample0;
|
|
|
- dst -= 8;
|
|
|
- }
|
|
|
-
|
|
|
- cvt->len_cvt = dstsize;
|
|
|
- if (cvt->filters[++cvt->filter_index]) {
|
|
|
- cvt->filters[cvt->filter_index] (cvt, format);
|
|
|
- }
|
|
|
-}
|
|
|
-
|
|
|
-static void SDLCALL
|
|
|
-SDL_Downsample_S16MSB_4c_x2(SDL_AudioCVT * cvt, SDL_AudioFormat format)
|
|
|
-{
|
|
|
-#if DEBUG_CONVERT
|
|
|
- fprintf(stderr, "Downsample (x2) AUDIO_S16MSB, 4 channels.\n");
|
|
|
-#endif
|
|
|
-
|
|
|
- const int dstsize = cvt->len_cvt / 2;
|
|
|
- Sint16 *dst = (Sint16 *) cvt->buf;
|
|
|
- const Sint16 *src = (Sint16 *) cvt->buf;
|
|
|
- const Sint16 *target = (const Sint16 *) (cvt->buf + dstsize);
|
|
|
- Sint32 last_sample0 = (Sint32) ((Sint16) SDL_SwapBE16(src[0]));
|
|
|
- Sint32 last_sample1 = (Sint32) ((Sint16) SDL_SwapBE16(src[1]));
|
|
|
- Sint32 last_sample2 = (Sint32) ((Sint16) SDL_SwapBE16(src[2]));
|
|
|
- Sint32 last_sample3 = (Sint32) ((Sint16) SDL_SwapBE16(src[3]));
|
|
|
- while (dst < target) {
|
|
|
- const Sint32 sample0 = (Sint32) ((Sint16) SDL_SwapBE16(src[0]));
|
|
|
- const Sint32 sample1 = (Sint32) ((Sint16) SDL_SwapBE16(src[1]));
|
|
|
- const Sint32 sample2 = (Sint32) ((Sint16) SDL_SwapBE16(src[2]));
|
|
|
- const Sint32 sample3 = (Sint32) ((Sint16) SDL_SwapBE16(src[3]));
|
|
|
- src += 8;
|
|
|
- dst[0] = (Sint16) ((sample0 + last_sample0) >> 1);
|
|
|
- dst[1] = (Sint16) ((sample1 + last_sample1) >> 1);
|
|
|
- dst[2] = (Sint16) ((sample2 + last_sample2) >> 1);
|
|
|
- dst[3] = (Sint16) ((sample3 + last_sample3) >> 1);
|
|
|
- last_sample0 = sample0;
|
|
|
- last_sample1 = sample1;
|
|
|
- last_sample2 = sample2;
|
|
|
- last_sample3 = sample3;
|
|
|
- dst += 4;
|
|
|
- }
|
|
|
-
|
|
|
- cvt->len_cvt = dstsize;
|
|
|
- if (cvt->filters[++cvt->filter_index]) {
|
|
|
- cvt->filters[cvt->filter_index] (cvt, format);
|
|
|
- }
|
|
|
-}
|
|
|
-
|
|
|
-static void SDLCALL
|
|
|
-SDL_Upsample_S16MSB_4c_x4(SDL_AudioCVT * cvt, SDL_AudioFormat format)
|
|
|
-{
|
|
|
-#if DEBUG_CONVERT
|
|
|
- fprintf(stderr, "Upsample (x4) AUDIO_S16MSB, 4 channels.\n");
|
|
|
-#endif
|
|
|
-
|
|
|
- const int dstsize = cvt->len_cvt * 4;
|
|
|
- Sint16 *dst = ((Sint16 *) (cvt->buf + dstsize)) - 4 * 4;
|
|
|
- const Sint16 *src = ((Sint16 *) (cvt->buf + cvt->len_cvt)) - 4;
|
|
|
- const Sint16 *target = ((const Sint16 *) cvt->buf);
|
|
|
- Sint32 last_sample3 = (Sint32) ((Sint16) SDL_SwapBE16(src[3]));
|
|
|
- Sint32 last_sample2 = (Sint32) ((Sint16) SDL_SwapBE16(src[2]));
|
|
|
- Sint32 last_sample1 = (Sint32) ((Sint16) SDL_SwapBE16(src[1]));
|
|
|
- Sint32 last_sample0 = (Sint32) ((Sint16) SDL_SwapBE16(src[0]));
|
|
|
- while (dst >= target) {
|
|
|
- const Sint32 sample3 = (Sint32) ((Sint16) SDL_SwapBE16(src[3]));
|
|
|
- const Sint32 sample2 = (Sint32) ((Sint16) SDL_SwapBE16(src[2]));
|
|
|
- const Sint32 sample1 = (Sint32) ((Sint16) SDL_SwapBE16(src[1]));
|
|
|
- const Sint32 sample0 = (Sint32) ((Sint16) SDL_SwapBE16(src[0]));
|
|
|
- src -= 4;
|
|
|
- dst[15] = (Sint16) ((sample3 + (3 * last_sample3)) >> 2);
|
|
|
- dst[14] = (Sint16) ((sample2 + (3 * last_sample2)) >> 2);
|
|
|
- dst[13] = (Sint16) ((sample1 + (3 * last_sample1)) >> 2);
|
|
|
- dst[12] = (Sint16) ((sample0 + (3 * last_sample0)) >> 2);
|
|
|
- dst[11] = (Sint16) ((sample3 + last_sample3) >> 1);
|
|
|
- dst[10] = (Sint16) ((sample2 + last_sample2) >> 1);
|
|
|
- dst[9] = (Sint16) ((sample1 + last_sample1) >> 1);
|
|
|
- dst[8] = (Sint16) ((sample0 + last_sample0) >> 1);
|
|
|
- dst[7] = (Sint16) (((3 * sample3) + last_sample3) >> 2);
|
|
|
- dst[6] = (Sint16) (((3 * sample2) + last_sample2) >> 2);
|
|
|
- dst[5] = (Sint16) (((3 * sample1) + last_sample1) >> 2);
|
|
|
- dst[4] = (Sint16) (((3 * sample0) + last_sample0) >> 2);
|
|
|
- dst[3] = (Sint16) sample3;
|
|
|
- dst[2] = (Sint16) sample2;
|
|
|
- dst[1] = (Sint16) sample1;
|
|
|
- dst[0] = (Sint16) sample0;
|
|
|
- last_sample3 = sample3;
|
|
|
- last_sample2 = sample2;
|
|
|
- last_sample1 = sample1;
|
|
|
- last_sample0 = sample0;
|
|
|
- dst -= 16;
|
|
|
- }
|
|
|
-
|
|
|
- cvt->len_cvt = dstsize;
|
|
|
- if (cvt->filters[++cvt->filter_index]) {
|
|
|
- cvt->filters[cvt->filter_index] (cvt, format);
|
|
|
- }
|
|
|
-}
|
|
|
-
|
|
|
-static void SDLCALL
|
|
|
-SDL_Downsample_S16MSB_4c_x4(SDL_AudioCVT * cvt, SDL_AudioFormat format)
|
|
|
-{
|
|
|
-#if DEBUG_CONVERT
|
|
|
- fprintf(stderr, "Downsample (x4) AUDIO_S16MSB, 4 channels.\n");
|
|
|
-#endif
|
|
|
-
|
|
|
- const int dstsize = cvt->len_cvt / 4;
|
|
|
- Sint16 *dst = (Sint16 *) cvt->buf;
|
|
|
- const Sint16 *src = (Sint16 *) cvt->buf;
|
|
|
- const Sint16 *target = (const Sint16 *) (cvt->buf + dstsize);
|
|
|
- Sint32 last_sample0 = (Sint32) ((Sint16) SDL_SwapBE16(src[0]));
|
|
|
- Sint32 last_sample1 = (Sint32) ((Sint16) SDL_SwapBE16(src[1]));
|
|
|
- Sint32 last_sample2 = (Sint32) ((Sint16) SDL_SwapBE16(src[2]));
|
|
|
- Sint32 last_sample3 = (Sint32) ((Sint16) SDL_SwapBE16(src[3]));
|
|
|
- while (dst < target) {
|
|
|
- const Sint32 sample0 = (Sint32) ((Sint16) SDL_SwapBE16(src[0]));
|
|
|
- const Sint32 sample1 = (Sint32) ((Sint16) SDL_SwapBE16(src[1]));
|
|
|
- const Sint32 sample2 = (Sint32) ((Sint16) SDL_SwapBE16(src[2]));
|
|
|
- const Sint32 sample3 = (Sint32) ((Sint16) SDL_SwapBE16(src[3]));
|
|
|
- src += 16;
|
|
|
- dst[0] = (Sint16) ((sample0 + last_sample0) >> 1);
|
|
|
- dst[1] = (Sint16) ((sample1 + last_sample1) >> 1);
|
|
|
- dst[2] = (Sint16) ((sample2 + last_sample2) >> 1);
|
|
|
- dst[3] = (Sint16) ((sample3 + last_sample3) >> 1);
|
|
|
- last_sample0 = sample0;
|
|
|
- last_sample1 = sample1;
|
|
|
- last_sample2 = sample2;
|
|
|
- last_sample3 = sample3;
|
|
|
- dst += 4;
|
|
|
- }
|
|
|
-
|
|
|
- cvt->len_cvt = dstsize;
|
|
|
- if (cvt->filters[++cvt->filter_index]) {
|
|
|
- cvt->filters[cvt->filter_index] (cvt, format);
|
|
|
- }
|
|
|
-}
|
|
|
-
|
|
|
-static void SDLCALL
|
|
|
-SDL_Upsample_S16MSB_6c_x2(SDL_AudioCVT * cvt, SDL_AudioFormat format)
|
|
|
-{
|
|
|
-#if DEBUG_CONVERT
|
|
|
- fprintf(stderr, "Upsample (x2) AUDIO_S16MSB, 6 channels.\n");
|
|
|
-#endif
|
|
|
-
|
|
|
- const int dstsize = cvt->len_cvt * 2;
|
|
|
- Sint16 *dst = ((Sint16 *) (cvt->buf + dstsize)) - 6 * 2;
|
|
|
- const Sint16 *src = ((Sint16 *) (cvt->buf + cvt->len_cvt)) - 6;
|
|
|
- const Sint16 *target = ((const Sint16 *) cvt->buf);
|
|
|
- Sint32 last_sample5 = (Sint32) ((Sint16) SDL_SwapBE16(src[5]));
|
|
|
- Sint32 last_sample4 = (Sint32) ((Sint16) SDL_SwapBE16(src[4]));
|
|
|
- Sint32 last_sample3 = (Sint32) ((Sint16) SDL_SwapBE16(src[3]));
|
|
|
- Sint32 last_sample2 = (Sint32) ((Sint16) SDL_SwapBE16(src[2]));
|
|
|
- Sint32 last_sample1 = (Sint32) ((Sint16) SDL_SwapBE16(src[1]));
|
|
|
- Sint32 last_sample0 = (Sint32) ((Sint16) SDL_SwapBE16(src[0]));
|
|
|
- while (dst >= target) {
|
|
|
- const Sint32 sample5 = (Sint32) ((Sint16) SDL_SwapBE16(src[5]));
|
|
|
- const Sint32 sample4 = (Sint32) ((Sint16) SDL_SwapBE16(src[4]));
|
|
|
- const Sint32 sample3 = (Sint32) ((Sint16) SDL_SwapBE16(src[3]));
|
|
|
- const Sint32 sample2 = (Sint32) ((Sint16) SDL_SwapBE16(src[2]));
|
|
|
- const Sint32 sample1 = (Sint32) ((Sint16) SDL_SwapBE16(src[1]));
|
|
|
- const Sint32 sample0 = (Sint32) ((Sint16) SDL_SwapBE16(src[0]));
|
|
|
- src -= 6;
|
|
|
- dst[11] = (Sint16) ((sample5 + last_sample5) >> 1);
|
|
|
- dst[10] = (Sint16) ((sample4 + last_sample4) >> 1);
|
|
|
- dst[9] = (Sint16) ((sample3 + last_sample3) >> 1);
|
|
|
- dst[8] = (Sint16) ((sample2 + last_sample2) >> 1);
|
|
|
- dst[7] = (Sint16) ((sample1 + last_sample1) >> 1);
|
|
|
- dst[6] = (Sint16) ((sample0 + last_sample0) >> 1);
|
|
|
- dst[5] = (Sint16) sample5;
|
|
|
- dst[4] = (Sint16) sample4;
|
|
|
- dst[3] = (Sint16) sample3;
|
|
|
- dst[2] = (Sint16) sample2;
|
|
|
- dst[1] = (Sint16) sample1;
|
|
|
- dst[0] = (Sint16) sample0;
|
|
|
- last_sample5 = sample5;
|
|
|
- last_sample4 = sample4;
|
|
|
- last_sample3 = sample3;
|
|
|
- last_sample2 = sample2;
|
|
|
- last_sample1 = sample1;
|
|
|
- last_sample0 = sample0;
|
|
|
- dst -= 12;
|
|
|
- }
|
|
|
-
|
|
|
- cvt->len_cvt = dstsize;
|
|
|
- if (cvt->filters[++cvt->filter_index]) {
|
|
|
- cvt->filters[cvt->filter_index] (cvt, format);
|
|
|
- }
|
|
|
-}
|
|
|
-
|
|
|
-static void SDLCALL
|
|
|
-SDL_Downsample_S16MSB_6c_x2(SDL_AudioCVT * cvt, SDL_AudioFormat format)
|
|
|
-{
|
|
|
-#if DEBUG_CONVERT
|
|
|
- fprintf(stderr, "Downsample (x2) AUDIO_S16MSB, 6 channels.\n");
|
|
|
-#endif
|
|
|
-
|
|
|
- const int dstsize = cvt->len_cvt / 2;
|
|
|
- Sint16 *dst = (Sint16 *) cvt->buf;
|
|
|
- const Sint16 *src = (Sint16 *) cvt->buf;
|
|
|
- const Sint16 *target = (const Sint16 *) (cvt->buf + dstsize);
|
|
|
- Sint32 last_sample0 = (Sint32) ((Sint16) SDL_SwapBE16(src[0]));
|
|
|
- Sint32 last_sample1 = (Sint32) ((Sint16) SDL_SwapBE16(src[1]));
|
|
|
- Sint32 last_sample2 = (Sint32) ((Sint16) SDL_SwapBE16(src[2]));
|
|
|
- Sint32 last_sample3 = (Sint32) ((Sint16) SDL_SwapBE16(src[3]));
|
|
|
- Sint32 last_sample4 = (Sint32) ((Sint16) SDL_SwapBE16(src[4]));
|
|
|
- Sint32 last_sample5 = (Sint32) ((Sint16) SDL_SwapBE16(src[5]));
|
|
|
- while (dst < target) {
|
|
|
- const Sint32 sample0 = (Sint32) ((Sint16) SDL_SwapBE16(src[0]));
|
|
|
- const Sint32 sample1 = (Sint32) ((Sint16) SDL_SwapBE16(src[1]));
|
|
|
- const Sint32 sample2 = (Sint32) ((Sint16) SDL_SwapBE16(src[2]));
|
|
|
- const Sint32 sample3 = (Sint32) ((Sint16) SDL_SwapBE16(src[3]));
|
|
|
- const Sint32 sample4 = (Sint32) ((Sint16) SDL_SwapBE16(src[4]));
|
|
|
- const Sint32 sample5 = (Sint32) ((Sint16) SDL_SwapBE16(src[5]));
|
|
|
- src += 12;
|
|
|
- dst[0] = (Sint16) ((sample0 + last_sample0) >> 1);
|
|
|
- dst[1] = (Sint16) ((sample1 + last_sample1) >> 1);
|
|
|
- dst[2] = (Sint16) ((sample2 + last_sample2) >> 1);
|
|
|
- dst[3] = (Sint16) ((sample3 + last_sample3) >> 1);
|
|
|
- dst[4] = (Sint16) ((sample4 + last_sample4) >> 1);
|
|
|
- dst[5] = (Sint16) ((sample5 + last_sample5) >> 1);
|
|
|
- last_sample0 = sample0;
|
|
|
- last_sample1 = sample1;
|
|
|
- last_sample2 = sample2;
|
|
|
- last_sample3 = sample3;
|
|
|
- last_sample4 = sample4;
|
|
|
- last_sample5 = sample5;
|
|
|
- dst += 6;
|
|
|
- }
|
|
|
-
|
|
|
- cvt->len_cvt = dstsize;
|
|
|
- if (cvt->filters[++cvt->filter_index]) {
|
|
|
- cvt->filters[cvt->filter_index] (cvt, format);
|
|
|
- }
|
|
|
-}
|
|
|
-
|
|
|
-static void SDLCALL
|
|
|
-SDL_Upsample_S16MSB_6c_x4(SDL_AudioCVT * cvt, SDL_AudioFormat format)
|
|
|
-{
|
|
|
-#if DEBUG_CONVERT
|
|
|
- fprintf(stderr, "Upsample (x4) AUDIO_S16MSB, 6 channels.\n");
|
|
|
-#endif
|
|
|
-
|
|
|
- const int dstsize = cvt->len_cvt * 4;
|
|
|
- Sint16 *dst = ((Sint16 *) (cvt->buf + dstsize)) - 6 * 4;
|
|
|
- const Sint16 *src = ((Sint16 *) (cvt->buf + cvt->len_cvt)) - 6;
|
|
|
- const Sint16 *target = ((const Sint16 *) cvt->buf);
|
|
|
- Sint32 last_sample5 = (Sint32) ((Sint16) SDL_SwapBE16(src[5]));
|
|
|
- Sint32 last_sample4 = (Sint32) ((Sint16) SDL_SwapBE16(src[4]));
|
|
|
- Sint32 last_sample3 = (Sint32) ((Sint16) SDL_SwapBE16(src[3]));
|
|
|
- Sint32 last_sample2 = (Sint32) ((Sint16) SDL_SwapBE16(src[2]));
|
|
|
- Sint32 last_sample1 = (Sint32) ((Sint16) SDL_SwapBE16(src[1]));
|
|
|
- Sint32 last_sample0 = (Sint32) ((Sint16) SDL_SwapBE16(src[0]));
|
|
|
- while (dst >= target) {
|
|
|
- const Sint32 sample5 = (Sint32) ((Sint16) SDL_SwapBE16(src[5]));
|
|
|
- const Sint32 sample4 = (Sint32) ((Sint16) SDL_SwapBE16(src[4]));
|
|
|
- const Sint32 sample3 = (Sint32) ((Sint16) SDL_SwapBE16(src[3]));
|
|
|
- const Sint32 sample2 = (Sint32) ((Sint16) SDL_SwapBE16(src[2]));
|
|
|
- const Sint32 sample1 = (Sint32) ((Sint16) SDL_SwapBE16(src[1]));
|
|
|
- const Sint32 sample0 = (Sint32) ((Sint16) SDL_SwapBE16(src[0]));
|
|
|
- src -= 6;
|
|
|
- dst[23] = (Sint16) ((sample5 + (3 * last_sample5)) >> 2);
|
|
|
- dst[22] = (Sint16) ((sample4 + (3 * last_sample4)) >> 2);
|
|
|
- dst[21] = (Sint16) ((sample3 + (3 * last_sample3)) >> 2);
|
|
|
- dst[20] = (Sint16) ((sample2 + (3 * last_sample2)) >> 2);
|
|
|
- dst[19] = (Sint16) ((sample1 + (3 * last_sample1)) >> 2);
|
|
|
- dst[18] = (Sint16) ((sample0 + (3 * last_sample0)) >> 2);
|
|
|
- dst[17] = (Sint16) ((sample5 + last_sample5) >> 1);
|
|
|
- dst[16] = (Sint16) ((sample4 + last_sample4) >> 1);
|
|
|
- dst[15] = (Sint16) ((sample3 + last_sample3) >> 1);
|
|
|
- dst[14] = (Sint16) ((sample2 + last_sample2) >> 1);
|
|
|
- dst[13] = (Sint16) ((sample1 + last_sample1) >> 1);
|
|
|
- dst[12] = (Sint16) ((sample0 + last_sample0) >> 1);
|
|
|
- dst[11] = (Sint16) (((3 * sample5) + last_sample5) >> 2);
|
|
|
- dst[10] = (Sint16) (((3 * sample4) + last_sample4) >> 2);
|
|
|
- dst[9] = (Sint16) (((3 * sample3) + last_sample3) >> 2);
|
|
|
- dst[8] = (Sint16) (((3 * sample2) + last_sample2) >> 2);
|
|
|
- dst[7] = (Sint16) (((3 * sample1) + last_sample1) >> 2);
|
|
|
- dst[6] = (Sint16) (((3 * sample0) + last_sample0) >> 2);
|
|
|
- dst[5] = (Sint16) sample5;
|
|
|
- dst[4] = (Sint16) sample4;
|
|
|
- dst[3] = (Sint16) sample3;
|
|
|
- dst[2] = (Sint16) sample2;
|
|
|
- dst[1] = (Sint16) sample1;
|
|
|
- dst[0] = (Sint16) sample0;
|
|
|
- last_sample5 = sample5;
|
|
|
- last_sample4 = sample4;
|
|
|
- last_sample3 = sample3;
|
|
|
- last_sample2 = sample2;
|
|
|
- last_sample1 = sample1;
|
|
|
- last_sample0 = sample0;
|
|
|
- dst -= 24;
|
|
|
- }
|
|
|
-
|
|
|
- cvt->len_cvt = dstsize;
|
|
|
- if (cvt->filters[++cvt->filter_index]) {
|
|
|
- cvt->filters[cvt->filter_index] (cvt, format);
|
|
|
- }
|
|
|
-}
|
|
|
-
|
|
|
-static void SDLCALL
|
|
|
-SDL_Downsample_S16MSB_6c_x4(SDL_AudioCVT * cvt, SDL_AudioFormat format)
|
|
|
-{
|
|
|
-#if DEBUG_CONVERT
|
|
|
- fprintf(stderr, "Downsample (x4) AUDIO_S16MSB, 6 channels.\n");
|
|
|
-#endif
|
|
|
-
|
|
|
- const int dstsize = cvt->len_cvt / 4;
|
|
|
- Sint16 *dst = (Sint16 *) cvt->buf;
|
|
|
- const Sint16 *src = (Sint16 *) cvt->buf;
|
|
|
- const Sint16 *target = (const Sint16 *) (cvt->buf + dstsize);
|
|
|
- Sint32 last_sample0 = (Sint32) ((Sint16) SDL_SwapBE16(src[0]));
|
|
|
- Sint32 last_sample1 = (Sint32) ((Sint16) SDL_SwapBE16(src[1]));
|
|
|
- Sint32 last_sample2 = (Sint32) ((Sint16) SDL_SwapBE16(src[2]));
|
|
|
- Sint32 last_sample3 = (Sint32) ((Sint16) SDL_SwapBE16(src[3]));
|
|
|
- Sint32 last_sample4 = (Sint32) ((Sint16) SDL_SwapBE16(src[4]));
|
|
|
- Sint32 last_sample5 = (Sint32) ((Sint16) SDL_SwapBE16(src[5]));
|
|
|
- while (dst < target) {
|
|
|
- const Sint32 sample0 = (Sint32) ((Sint16) SDL_SwapBE16(src[0]));
|
|
|
- const Sint32 sample1 = (Sint32) ((Sint16) SDL_SwapBE16(src[1]));
|
|
|
- const Sint32 sample2 = (Sint32) ((Sint16) SDL_SwapBE16(src[2]));
|
|
|
- const Sint32 sample3 = (Sint32) ((Sint16) SDL_SwapBE16(src[3]));
|
|
|
- const Sint32 sample4 = (Sint32) ((Sint16) SDL_SwapBE16(src[4]));
|
|
|
- const Sint32 sample5 = (Sint32) ((Sint16) SDL_SwapBE16(src[5]));
|
|
|
- src += 24;
|
|
|
- dst[0] = (Sint16) ((sample0 + last_sample0) >> 1);
|
|
|
- dst[1] = (Sint16) ((sample1 + last_sample1) >> 1);
|
|
|
- dst[2] = (Sint16) ((sample2 + last_sample2) >> 1);
|
|
|
- dst[3] = (Sint16) ((sample3 + last_sample3) >> 1);
|
|
|
- dst[4] = (Sint16) ((sample4 + last_sample4) >> 1);
|
|
|
- dst[5] = (Sint16) ((sample5 + last_sample5) >> 1);
|
|
|
- last_sample0 = sample0;
|
|
|
- last_sample1 = sample1;
|
|
|
- last_sample2 = sample2;
|
|
|
- last_sample3 = sample3;
|
|
|
- last_sample4 = sample4;
|
|
|
- last_sample5 = sample5;
|
|
|
- dst += 6;
|
|
|
- }
|
|
|
-
|
|
|
- cvt->len_cvt = dstsize;
|
|
|
- if (cvt->filters[++cvt->filter_index]) {
|
|
|
- cvt->filters[cvt->filter_index] (cvt, format);
|
|
|
- }
|
|
|
-}
|
|
|
-
|
|
|
-static void SDLCALL
|
|
|
-SDL_Upsample_S16MSB_8c_x2(SDL_AudioCVT * cvt, SDL_AudioFormat format)
|
|
|
-{
|
|
|
-#if DEBUG_CONVERT
|
|
|
- fprintf(stderr, "Upsample (x2) AUDIO_S16MSB, 8 channels.\n");
|
|
|
-#endif
|
|
|
-
|
|
|
- const int dstsize = cvt->len_cvt * 2;
|
|
|
- Sint16 *dst = ((Sint16 *) (cvt->buf + dstsize)) - 8 * 2;
|
|
|
- const Sint16 *src = ((Sint16 *) (cvt->buf + cvt->len_cvt)) - 8;
|
|
|
- const Sint16 *target = ((const Sint16 *) cvt->buf);
|
|
|
- Sint32 last_sample7 = (Sint32) ((Sint16) SDL_SwapBE16(src[7]));
|
|
|
- Sint32 last_sample6 = (Sint32) ((Sint16) SDL_SwapBE16(src[6]));
|
|
|
- Sint32 last_sample5 = (Sint32) ((Sint16) SDL_SwapBE16(src[5]));
|
|
|
- Sint32 last_sample4 = (Sint32) ((Sint16) SDL_SwapBE16(src[4]));
|
|
|
- Sint32 last_sample3 = (Sint32) ((Sint16) SDL_SwapBE16(src[3]));
|
|
|
- Sint32 last_sample2 = (Sint32) ((Sint16) SDL_SwapBE16(src[2]));
|
|
|
- Sint32 last_sample1 = (Sint32) ((Sint16) SDL_SwapBE16(src[1]));
|
|
|
- Sint32 last_sample0 = (Sint32) ((Sint16) SDL_SwapBE16(src[0]));
|
|
|
- while (dst >= target) {
|
|
|
- const Sint32 sample7 = (Sint32) ((Sint16) SDL_SwapBE16(src[7]));
|
|
|
- const Sint32 sample6 = (Sint32) ((Sint16) SDL_SwapBE16(src[6]));
|
|
|
- const Sint32 sample5 = (Sint32) ((Sint16) SDL_SwapBE16(src[5]));
|
|
|
- const Sint32 sample4 = (Sint32) ((Sint16) SDL_SwapBE16(src[4]));
|
|
|
- const Sint32 sample3 = (Sint32) ((Sint16) SDL_SwapBE16(src[3]));
|
|
|
- const Sint32 sample2 = (Sint32) ((Sint16) SDL_SwapBE16(src[2]));
|
|
|
- const Sint32 sample1 = (Sint32) ((Sint16) SDL_SwapBE16(src[1]));
|
|
|
- const Sint32 sample0 = (Sint32) ((Sint16) SDL_SwapBE16(src[0]));
|
|
|
- src -= 8;
|
|
|
- dst[15] = (Sint16) ((sample7 + last_sample7) >> 1);
|
|
|
- dst[14] = (Sint16) ((sample6 + last_sample6) >> 1);
|
|
|
- dst[13] = (Sint16) ((sample5 + last_sample5) >> 1);
|
|
|
- dst[12] = (Sint16) ((sample4 + last_sample4) >> 1);
|
|
|
- dst[11] = (Sint16) ((sample3 + last_sample3) >> 1);
|
|
|
- dst[10] = (Sint16) ((sample2 + last_sample2) >> 1);
|
|
|
- dst[9] = (Sint16) ((sample1 + last_sample1) >> 1);
|
|
|
- dst[8] = (Sint16) ((sample0 + last_sample0) >> 1);
|
|
|
- dst[7] = (Sint16) sample7;
|
|
|
- dst[6] = (Sint16) sample6;
|
|
|
- dst[5] = (Sint16) sample5;
|
|
|
- dst[4] = (Sint16) sample4;
|
|
|
- dst[3] = (Sint16) sample3;
|
|
|
- dst[2] = (Sint16) sample2;
|
|
|
- dst[1] = (Sint16) sample1;
|
|
|
- dst[0] = (Sint16) sample0;
|
|
|
- last_sample7 = sample7;
|
|
|
- last_sample6 = sample6;
|
|
|
- last_sample5 = sample5;
|
|
|
- last_sample4 = sample4;
|
|
|
- last_sample3 = sample3;
|
|
|
- last_sample2 = sample2;
|
|
|
- last_sample1 = sample1;
|
|
|
- last_sample0 = sample0;
|
|
|
- dst -= 16;
|
|
|
- }
|
|
|
-
|
|
|
- cvt->len_cvt = dstsize;
|
|
|
- if (cvt->filters[++cvt->filter_index]) {
|
|
|
- cvt->filters[cvt->filter_index] (cvt, format);
|
|
|
- }
|
|
|
-}
|
|
|
-
|
|
|
-static void SDLCALL
|
|
|
-SDL_Downsample_S16MSB_8c_x2(SDL_AudioCVT * cvt, SDL_AudioFormat format)
|
|
|
-{
|
|
|
-#if DEBUG_CONVERT
|
|
|
- fprintf(stderr, "Downsample (x2) AUDIO_S16MSB, 8 channels.\n");
|
|
|
-#endif
|
|
|
-
|
|
|
- const int dstsize = cvt->len_cvt / 2;
|
|
|
- Sint16 *dst = (Sint16 *) cvt->buf;
|
|
|
- const Sint16 *src = (Sint16 *) cvt->buf;
|
|
|
- const Sint16 *target = (const Sint16 *) (cvt->buf + dstsize);
|
|
|
- Sint32 last_sample0 = (Sint32) ((Sint16) SDL_SwapBE16(src[0]));
|
|
|
- Sint32 last_sample1 = (Sint32) ((Sint16) SDL_SwapBE16(src[1]));
|
|
|
- Sint32 last_sample2 = (Sint32) ((Sint16) SDL_SwapBE16(src[2]));
|
|
|
- Sint32 last_sample3 = (Sint32) ((Sint16) SDL_SwapBE16(src[3]));
|
|
|
- Sint32 last_sample4 = (Sint32) ((Sint16) SDL_SwapBE16(src[4]));
|
|
|
- Sint32 last_sample5 = (Sint32) ((Sint16) SDL_SwapBE16(src[5]));
|
|
|
- Sint32 last_sample6 = (Sint32) ((Sint16) SDL_SwapBE16(src[6]));
|
|
|
- Sint32 last_sample7 = (Sint32) ((Sint16) SDL_SwapBE16(src[7]));
|
|
|
- while (dst < target) {
|
|
|
- const Sint32 sample0 = (Sint32) ((Sint16) SDL_SwapBE16(src[0]));
|
|
|
- const Sint32 sample1 = (Sint32) ((Sint16) SDL_SwapBE16(src[1]));
|
|
|
- const Sint32 sample2 = (Sint32) ((Sint16) SDL_SwapBE16(src[2]));
|
|
|
- const Sint32 sample3 = (Sint32) ((Sint16) SDL_SwapBE16(src[3]));
|
|
|
- const Sint32 sample4 = (Sint32) ((Sint16) SDL_SwapBE16(src[4]));
|
|
|
- const Sint32 sample5 = (Sint32) ((Sint16) SDL_SwapBE16(src[5]));
|
|
|
- const Sint32 sample6 = (Sint32) ((Sint16) SDL_SwapBE16(src[6]));
|
|
|
- const Sint32 sample7 = (Sint32) ((Sint16) SDL_SwapBE16(src[7]));
|
|
|
- src += 16;
|
|
|
- dst[0] = (Sint16) ((sample0 + last_sample0) >> 1);
|
|
|
- dst[1] = (Sint16) ((sample1 + last_sample1) >> 1);
|
|
|
- dst[2] = (Sint16) ((sample2 + last_sample2) >> 1);
|
|
|
- dst[3] = (Sint16) ((sample3 + last_sample3) >> 1);
|
|
|
- dst[4] = (Sint16) ((sample4 + last_sample4) >> 1);
|
|
|
- dst[5] = (Sint16) ((sample5 + last_sample5) >> 1);
|
|
|
- dst[6] = (Sint16) ((sample6 + last_sample6) >> 1);
|
|
|
- dst[7] = (Sint16) ((sample7 + last_sample7) >> 1);
|
|
|
- last_sample0 = sample0;
|
|
|
- last_sample1 = sample1;
|
|
|
- last_sample2 = sample2;
|
|
|
- last_sample3 = sample3;
|
|
|
- last_sample4 = sample4;
|
|
|
- last_sample5 = sample5;
|
|
|
- last_sample6 = sample6;
|
|
|
- last_sample7 = sample7;
|
|
|
- dst += 8;
|
|
|
- }
|
|
|
-
|
|
|
- cvt->len_cvt = dstsize;
|
|
|
- if (cvt->filters[++cvt->filter_index]) {
|
|
|
- cvt->filters[cvt->filter_index] (cvt, format);
|
|
|
- }
|
|
|
-}
|
|
|
-
|
|
|
-static void SDLCALL
|
|
|
-SDL_Upsample_S16MSB_8c_x4(SDL_AudioCVT * cvt, SDL_AudioFormat format)
|
|
|
-{
|
|
|
-#if DEBUG_CONVERT
|
|
|
- fprintf(stderr, "Upsample (x4) AUDIO_S16MSB, 8 channels.\n");
|
|
|
-#endif
|
|
|
-
|
|
|
- const int dstsize = cvt->len_cvt * 4;
|
|
|
- Sint16 *dst = ((Sint16 *) (cvt->buf + dstsize)) - 8 * 4;
|
|
|
- const Sint16 *src = ((Sint16 *) (cvt->buf + cvt->len_cvt)) - 8;
|
|
|
- const Sint16 *target = ((const Sint16 *) cvt->buf);
|
|
|
- Sint32 last_sample7 = (Sint32) ((Sint16) SDL_SwapBE16(src[7]));
|
|
|
- Sint32 last_sample6 = (Sint32) ((Sint16) SDL_SwapBE16(src[6]));
|
|
|
- Sint32 last_sample5 = (Sint32) ((Sint16) SDL_SwapBE16(src[5]));
|
|
|
- Sint32 last_sample4 = (Sint32) ((Sint16) SDL_SwapBE16(src[4]));
|
|
|
- Sint32 last_sample3 = (Sint32) ((Sint16) SDL_SwapBE16(src[3]));
|
|
|
- Sint32 last_sample2 = (Sint32) ((Sint16) SDL_SwapBE16(src[2]));
|
|
|
- Sint32 last_sample1 = (Sint32) ((Sint16) SDL_SwapBE16(src[1]));
|
|
|
- Sint32 last_sample0 = (Sint32) ((Sint16) SDL_SwapBE16(src[0]));
|
|
|
- while (dst >= target) {
|
|
|
- const Sint32 sample7 = (Sint32) ((Sint16) SDL_SwapBE16(src[7]));
|
|
|
- const Sint32 sample6 = (Sint32) ((Sint16) SDL_SwapBE16(src[6]));
|
|
|
- const Sint32 sample5 = (Sint32) ((Sint16) SDL_SwapBE16(src[5]));
|
|
|
- const Sint32 sample4 = (Sint32) ((Sint16) SDL_SwapBE16(src[4]));
|
|
|
- const Sint32 sample3 = (Sint32) ((Sint16) SDL_SwapBE16(src[3]));
|
|
|
- const Sint32 sample2 = (Sint32) ((Sint16) SDL_SwapBE16(src[2]));
|
|
|
- const Sint32 sample1 = (Sint32) ((Sint16) SDL_SwapBE16(src[1]));
|
|
|
- const Sint32 sample0 = (Sint32) ((Sint16) SDL_SwapBE16(src[0]));
|
|
|
- src -= 8;
|
|
|
- dst[31] = (Sint16) ((sample7 + (3 * last_sample7)) >> 2);
|
|
|
- dst[30] = (Sint16) ((sample6 + (3 * last_sample6)) >> 2);
|
|
|
- dst[29] = (Sint16) ((sample5 + (3 * last_sample5)) >> 2);
|
|
|
- dst[28] = (Sint16) ((sample4 + (3 * last_sample4)) >> 2);
|
|
|
- dst[27] = (Sint16) ((sample3 + (3 * last_sample3)) >> 2);
|
|
|
- dst[26] = (Sint16) ((sample2 + (3 * last_sample2)) >> 2);
|
|
|
- dst[25] = (Sint16) ((sample1 + (3 * last_sample1)) >> 2);
|
|
|
- dst[24] = (Sint16) ((sample0 + (3 * last_sample0)) >> 2);
|
|
|
- dst[23] = (Sint16) ((sample7 + last_sample7) >> 1);
|
|
|
- dst[22] = (Sint16) ((sample6 + last_sample6) >> 1);
|
|
|
- dst[21] = (Sint16) ((sample5 + last_sample5) >> 1);
|
|
|
- dst[20] = (Sint16) ((sample4 + last_sample4) >> 1);
|
|
|
- dst[19] = (Sint16) ((sample3 + last_sample3) >> 1);
|
|
|
- dst[18] = (Sint16) ((sample2 + last_sample2) >> 1);
|
|
|
- dst[17] = (Sint16) ((sample1 + last_sample1) >> 1);
|
|
|
- dst[16] = (Sint16) ((sample0 + last_sample0) >> 1);
|
|
|
- dst[15] = (Sint16) (((3 * sample7) + last_sample7) >> 2);
|
|
|
- dst[14] = (Sint16) (((3 * sample6) + last_sample6) >> 2);
|
|
|
- dst[13] = (Sint16) (((3 * sample5) + last_sample5) >> 2);
|
|
|
- dst[12] = (Sint16) (((3 * sample4) + last_sample4) >> 2);
|
|
|
- dst[11] = (Sint16) (((3 * sample3) + last_sample3) >> 2);
|
|
|
- dst[10] = (Sint16) (((3 * sample2) + last_sample2) >> 2);
|
|
|
- dst[9] = (Sint16) (((3 * sample1) + last_sample1) >> 2);
|
|
|
- dst[8] = (Sint16) (((3 * sample0) + last_sample0) >> 2);
|
|
|
- dst[7] = (Sint16) sample7;
|
|
|
- dst[6] = (Sint16) sample6;
|
|
|
- dst[5] = (Sint16) sample5;
|
|
|
- dst[4] = (Sint16) sample4;
|
|
|
- dst[3] = (Sint16) sample3;
|
|
|
- dst[2] = (Sint16) sample2;
|
|
|
- dst[1] = (Sint16) sample1;
|
|
|
- dst[0] = (Sint16) sample0;
|
|
|
- last_sample7 = sample7;
|
|
|
- last_sample6 = sample6;
|
|
|
- last_sample5 = sample5;
|
|
|
- last_sample4 = sample4;
|
|
|
- last_sample3 = sample3;
|
|
|
- last_sample2 = sample2;
|
|
|
- last_sample1 = sample1;
|
|
|
- last_sample0 = sample0;
|
|
|
- dst -= 32;
|
|
|
- }
|
|
|
-
|
|
|
- cvt->len_cvt = dstsize;
|
|
|
- if (cvt->filters[++cvt->filter_index]) {
|
|
|
- cvt->filters[cvt->filter_index] (cvt, format);
|
|
|
- }
|
|
|
-}
|
|
|
-
|
|
|
-static void SDLCALL
|
|
|
-SDL_Downsample_S16MSB_8c_x4(SDL_AudioCVT * cvt, SDL_AudioFormat format)
|
|
|
-{
|
|
|
-#if DEBUG_CONVERT
|
|
|
- fprintf(stderr, "Downsample (x4) AUDIO_S16MSB, 8 channels.\n");
|
|
|
-#endif
|
|
|
-
|
|
|
- const int dstsize = cvt->len_cvt / 4;
|
|
|
- Sint16 *dst = (Sint16 *) cvt->buf;
|
|
|
- const Sint16 *src = (Sint16 *) cvt->buf;
|
|
|
- const Sint16 *target = (const Sint16 *) (cvt->buf + dstsize);
|
|
|
- Sint32 last_sample0 = (Sint32) ((Sint16) SDL_SwapBE16(src[0]));
|
|
|
- Sint32 last_sample1 = (Sint32) ((Sint16) SDL_SwapBE16(src[1]));
|
|
|
- Sint32 last_sample2 = (Sint32) ((Sint16) SDL_SwapBE16(src[2]));
|
|
|
- Sint32 last_sample3 = (Sint32) ((Sint16) SDL_SwapBE16(src[3]));
|
|
|
- Sint32 last_sample4 = (Sint32) ((Sint16) SDL_SwapBE16(src[4]));
|
|
|
- Sint32 last_sample5 = (Sint32) ((Sint16) SDL_SwapBE16(src[5]));
|
|
|
- Sint32 last_sample6 = (Sint32) ((Sint16) SDL_SwapBE16(src[6]));
|
|
|
- Sint32 last_sample7 = (Sint32) ((Sint16) SDL_SwapBE16(src[7]));
|
|
|
- while (dst < target) {
|
|
|
- const Sint32 sample0 = (Sint32) ((Sint16) SDL_SwapBE16(src[0]));
|
|
|
- const Sint32 sample1 = (Sint32) ((Sint16) SDL_SwapBE16(src[1]));
|
|
|
- const Sint32 sample2 = (Sint32) ((Sint16) SDL_SwapBE16(src[2]));
|
|
|
- const Sint32 sample3 = (Sint32) ((Sint16) SDL_SwapBE16(src[3]));
|
|
|
- const Sint32 sample4 = (Sint32) ((Sint16) SDL_SwapBE16(src[4]));
|
|
|
- const Sint32 sample5 = (Sint32) ((Sint16) SDL_SwapBE16(src[5]));
|
|
|
- const Sint32 sample6 = (Sint32) ((Sint16) SDL_SwapBE16(src[6]));
|
|
|
- const Sint32 sample7 = (Sint32) ((Sint16) SDL_SwapBE16(src[7]));
|
|
|
- src += 32;
|
|
|
- dst[0] = (Sint16) ((sample0 + last_sample0) >> 1);
|
|
|
- dst[1] = (Sint16) ((sample1 + last_sample1) >> 1);
|
|
|
- dst[2] = (Sint16) ((sample2 + last_sample2) >> 1);
|
|
|
- dst[3] = (Sint16) ((sample3 + last_sample3) >> 1);
|
|
|
- dst[4] = (Sint16) ((sample4 + last_sample4) >> 1);
|
|
|
- dst[5] = (Sint16) ((sample5 + last_sample5) >> 1);
|
|
|
- dst[6] = (Sint16) ((sample6 + last_sample6) >> 1);
|
|
|
- dst[7] = (Sint16) ((sample7 + last_sample7) >> 1);
|
|
|
- last_sample0 = sample0;
|
|
|
- last_sample1 = sample1;
|
|
|
- last_sample2 = sample2;
|
|
|
- last_sample3 = sample3;
|
|
|
- last_sample4 = sample4;
|
|
|
- last_sample5 = sample5;
|
|
|
- last_sample6 = sample6;
|
|
|
- last_sample7 = sample7;
|
|
|
- dst += 8;
|
|
|
- }
|
|
|
-
|
|
|
- cvt->len_cvt = dstsize;
|
|
|
- if (cvt->filters[++cvt->filter_index]) {
|
|
|
- cvt->filters[cvt->filter_index] (cvt, format);
|
|
|
- }
|
|
|
-}
|
|
|
-
|
|
|
-static void SDLCALL
|
|
|
-SDL_Upsample_S32LSB_1c_x2(SDL_AudioCVT * cvt, SDL_AudioFormat format)
|
|
|
-{
|
|
|
-#if DEBUG_CONVERT
|
|
|
- fprintf(stderr, "Upsample (x2) AUDIO_S32LSB, 1 channels.\n");
|
|
|
-#endif
|
|
|
-
|
|
|
- const int dstsize = cvt->len_cvt * 2;
|
|
|
- Sint32 *dst = ((Sint32 *) (cvt->buf + dstsize)) - 1 * 2;
|
|
|
- const Sint32 *src = ((Sint32 *) (cvt->buf + cvt->len_cvt)) - 1;
|
|
|
- const Sint32 *target = ((const Sint32 *) cvt->buf);
|
|
|
- Sint64 last_sample0 = (Sint64) ((Sint32) SDL_SwapLE32(src[0]));
|
|
|
- while (dst >= target) {
|
|
|
- const Sint64 sample0 = (Sint64) ((Sint32) SDL_SwapLE32(src[0]));
|
|
|
- src--;
|
|
|
- dst[1] = (Sint32) ((sample0 + last_sample0) >> 1);
|
|
|
- dst[0] = (Sint32) sample0;
|
|
|
- last_sample0 = sample0;
|
|
|
- dst -= 2;
|
|
|
- }
|
|
|
-
|
|
|
- cvt->len_cvt = dstsize;
|
|
|
- if (cvt->filters[++cvt->filter_index]) {
|
|
|
- cvt->filters[cvt->filter_index] (cvt, format);
|
|
|
- }
|
|
|
-}
|
|
|
-
|
|
|
-static void SDLCALL
|
|
|
-SDL_Downsample_S32LSB_1c_x2(SDL_AudioCVT * cvt, SDL_AudioFormat format)
|
|
|
-{
|
|
|
-#if DEBUG_CONVERT
|
|
|
- fprintf(stderr, "Downsample (x2) AUDIO_S32LSB, 1 channels.\n");
|
|
|
-#endif
|
|
|
-
|
|
|
- const int dstsize = cvt->len_cvt / 2;
|
|
|
- Sint32 *dst = (Sint32 *) cvt->buf;
|
|
|
- const Sint32 *src = (Sint32 *) cvt->buf;
|
|
|
- const Sint32 *target = (const Sint32 *) (cvt->buf + dstsize);
|
|
|
- Sint64 last_sample0 = (Sint64) ((Sint32) SDL_SwapLE32(src[0]));
|
|
|
- while (dst < target) {
|
|
|
- const Sint64 sample0 = (Sint64) ((Sint32) SDL_SwapLE32(src[0]));
|
|
|
- src += 2;
|
|
|
- dst[0] = (Sint32) ((sample0 + last_sample0) >> 1);
|
|
|
- last_sample0 = sample0;
|
|
|
- dst++;
|
|
|
- }
|
|
|
-
|
|
|
- cvt->len_cvt = dstsize;
|
|
|
- if (cvt->filters[++cvt->filter_index]) {
|
|
|
- cvt->filters[cvt->filter_index] (cvt, format);
|
|
|
- }
|
|
|
-}
|
|
|
-
|
|
|
-static void SDLCALL
|
|
|
-SDL_Upsample_S32LSB_1c_x4(SDL_AudioCVT * cvt, SDL_AudioFormat format)
|
|
|
-{
|
|
|
-#if DEBUG_CONVERT
|
|
|
- fprintf(stderr, "Upsample (x4) AUDIO_S32LSB, 1 channels.\n");
|
|
|
-#endif
|
|
|
-
|
|
|
- const int dstsize = cvt->len_cvt * 4;
|
|
|
- Sint32 *dst = ((Sint32 *) (cvt->buf + dstsize)) - 1 * 4;
|
|
|
- const Sint32 *src = ((Sint32 *) (cvt->buf + cvt->len_cvt)) - 1;
|
|
|
- const Sint32 *target = ((const Sint32 *) cvt->buf);
|
|
|
- Sint64 last_sample0 = (Sint64) ((Sint32) SDL_SwapLE32(src[0]));
|
|
|
- while (dst >= target) {
|
|
|
- const Sint64 sample0 = (Sint64) ((Sint32) SDL_SwapLE32(src[0]));
|
|
|
- src--;
|
|
|
- dst[3] = (Sint32) ((sample0 + (3 * last_sample0)) >> 2);
|
|
|
- dst[2] = (Sint32) ((sample0 + last_sample0) >> 1);
|
|
|
- dst[1] = (Sint32) (((3 * sample0) + last_sample0) >> 2);
|
|
|
- dst[0] = (Sint32) sample0;
|
|
|
- last_sample0 = sample0;
|
|
|
- dst -= 4;
|
|
|
- }
|
|
|
-
|
|
|
- cvt->len_cvt = dstsize;
|
|
|
- if (cvt->filters[++cvt->filter_index]) {
|
|
|
- cvt->filters[cvt->filter_index] (cvt, format);
|
|
|
- }
|
|
|
-}
|
|
|
-
|
|
|
-static void SDLCALL
|
|
|
-SDL_Downsample_S32LSB_1c_x4(SDL_AudioCVT * cvt, SDL_AudioFormat format)
|
|
|
-{
|
|
|
-#if DEBUG_CONVERT
|
|
|
- fprintf(stderr, "Downsample (x4) AUDIO_S32LSB, 1 channels.\n");
|
|
|
-#endif
|
|
|
-
|
|
|
- const int dstsize = cvt->len_cvt / 4;
|
|
|
- Sint32 *dst = (Sint32 *) cvt->buf;
|
|
|
- const Sint32 *src = (Sint32 *) cvt->buf;
|
|
|
- const Sint32 *target = (const Sint32 *) (cvt->buf + dstsize);
|
|
|
- Sint64 last_sample0 = (Sint64) ((Sint32) SDL_SwapLE32(src[0]));
|
|
|
- while (dst < target) {
|
|
|
- const Sint64 sample0 = (Sint64) ((Sint32) SDL_SwapLE32(src[0]));
|
|
|
- src += 4;
|
|
|
- dst[0] = (Sint32) ((sample0 + last_sample0) >> 1);
|
|
|
- last_sample0 = sample0;
|
|
|
- dst++;
|
|
|
- }
|
|
|
-
|
|
|
- cvt->len_cvt = dstsize;
|
|
|
- if (cvt->filters[++cvt->filter_index]) {
|
|
|
- cvt->filters[cvt->filter_index] (cvt, format);
|
|
|
- }
|
|
|
-}
|
|
|
-
|
|
|
-static void SDLCALL
|
|
|
-SDL_Upsample_S32LSB_2c_x2(SDL_AudioCVT * cvt, SDL_AudioFormat format)
|
|
|
-{
|
|
|
-#if DEBUG_CONVERT
|
|
|
- fprintf(stderr, "Upsample (x2) AUDIO_S32LSB, 2 channels.\n");
|
|
|
-#endif
|
|
|
-
|
|
|
- const int dstsize = cvt->len_cvt * 2;
|
|
|
- Sint32 *dst = ((Sint32 *) (cvt->buf + dstsize)) - 2 * 2;
|
|
|
- const Sint32 *src = ((Sint32 *) (cvt->buf + cvt->len_cvt)) - 2;
|
|
|
- const Sint32 *target = ((const Sint32 *) cvt->buf);
|
|
|
- Sint64 last_sample1 = (Sint64) ((Sint32) SDL_SwapLE32(src[1]));
|
|
|
- Sint64 last_sample0 = (Sint64) ((Sint32) SDL_SwapLE32(src[0]));
|
|
|
- while (dst >= target) {
|
|
|
- const Sint64 sample1 = (Sint64) ((Sint32) SDL_SwapLE32(src[1]));
|
|
|
- const Sint64 sample0 = (Sint64) ((Sint32) SDL_SwapLE32(src[0]));
|
|
|
- src -= 2;
|
|
|
- dst[3] = (Sint32) ((sample1 + last_sample1) >> 1);
|
|
|
- dst[2] = (Sint32) ((sample0 + last_sample0) >> 1);
|
|
|
- dst[1] = (Sint32) sample1;
|
|
|
- dst[0] = (Sint32) sample0;
|
|
|
- last_sample1 = sample1;
|
|
|
- last_sample0 = sample0;
|
|
|
- dst -= 4;
|
|
|
- }
|
|
|
-
|
|
|
- cvt->len_cvt = dstsize;
|
|
|
- if (cvt->filters[++cvt->filter_index]) {
|
|
|
- cvt->filters[cvt->filter_index] (cvt, format);
|
|
|
- }
|
|
|
-}
|
|
|
-
|
|
|
-static void SDLCALL
|
|
|
-SDL_Downsample_S32LSB_2c_x2(SDL_AudioCVT * cvt, SDL_AudioFormat format)
|
|
|
-{
|
|
|
-#if DEBUG_CONVERT
|
|
|
- fprintf(stderr, "Downsample (x2) AUDIO_S32LSB, 2 channels.\n");
|
|
|
-#endif
|
|
|
-
|
|
|
- const int dstsize = cvt->len_cvt / 2;
|
|
|
- Sint32 *dst = (Sint32 *) cvt->buf;
|
|
|
- const Sint32 *src = (Sint32 *) cvt->buf;
|
|
|
- const Sint32 *target = (const Sint32 *) (cvt->buf + dstsize);
|
|
|
- Sint64 last_sample0 = (Sint64) ((Sint32) SDL_SwapLE32(src[0]));
|
|
|
- Sint64 last_sample1 = (Sint64) ((Sint32) SDL_SwapLE32(src[1]));
|
|
|
- while (dst < target) {
|
|
|
- const Sint64 sample0 = (Sint64) ((Sint32) SDL_SwapLE32(src[0]));
|
|
|
- const Sint64 sample1 = (Sint64) ((Sint32) SDL_SwapLE32(src[1]));
|
|
|
- src += 4;
|
|
|
- dst[0] = (Sint32) ((sample0 + last_sample0) >> 1);
|
|
|
- dst[1] = (Sint32) ((sample1 + last_sample1) >> 1);
|
|
|
- last_sample0 = sample0;
|
|
|
- last_sample1 = sample1;
|
|
|
- dst += 2;
|
|
|
- }
|
|
|
-
|
|
|
- cvt->len_cvt = dstsize;
|
|
|
- if (cvt->filters[++cvt->filter_index]) {
|
|
|
- cvt->filters[cvt->filter_index] (cvt, format);
|
|
|
- }
|
|
|
-}
|
|
|
-
|
|
|
-static void SDLCALL
|
|
|
-SDL_Upsample_S32LSB_2c_x4(SDL_AudioCVT * cvt, SDL_AudioFormat format)
|
|
|
-{
|
|
|
-#if DEBUG_CONVERT
|
|
|
- fprintf(stderr, "Upsample (x4) AUDIO_S32LSB, 2 channels.\n");
|
|
|
-#endif
|
|
|
-
|
|
|
- const int dstsize = cvt->len_cvt * 4;
|
|
|
- Sint32 *dst = ((Sint32 *) (cvt->buf + dstsize)) - 2 * 4;
|
|
|
- const Sint32 *src = ((Sint32 *) (cvt->buf + cvt->len_cvt)) - 2;
|
|
|
- const Sint32 *target = ((const Sint32 *) cvt->buf);
|
|
|
- Sint64 last_sample1 = (Sint64) ((Sint32) SDL_SwapLE32(src[1]));
|
|
|
- Sint64 last_sample0 = (Sint64) ((Sint32) SDL_SwapLE32(src[0]));
|
|
|
- while (dst >= target) {
|
|
|
- const Sint64 sample1 = (Sint64) ((Sint32) SDL_SwapLE32(src[1]));
|
|
|
- const Sint64 sample0 = (Sint64) ((Sint32) SDL_SwapLE32(src[0]));
|
|
|
- src -= 2;
|
|
|
- dst[7] = (Sint32) ((sample1 + (3 * last_sample1)) >> 2);
|
|
|
- dst[6] = (Sint32) ((sample0 + (3 * last_sample0)) >> 2);
|
|
|
- dst[5] = (Sint32) ((sample1 + last_sample1) >> 1);
|
|
|
- dst[4] = (Sint32) ((sample0 + last_sample0) >> 1);
|
|
|
- dst[3] = (Sint32) (((3 * sample1) + last_sample1) >> 2);
|
|
|
- dst[2] = (Sint32) (((3 * sample0) + last_sample0) >> 2);
|
|
|
- dst[1] = (Sint32) sample1;
|
|
|
- dst[0] = (Sint32) sample0;
|
|
|
- last_sample1 = sample1;
|
|
|
- last_sample0 = sample0;
|
|
|
- dst -= 8;
|
|
|
- }
|
|
|
-
|
|
|
- cvt->len_cvt = dstsize;
|
|
|
- if (cvt->filters[++cvt->filter_index]) {
|
|
|
- cvt->filters[cvt->filter_index] (cvt, format);
|
|
|
- }
|
|
|
-}
|
|
|
-
|
|
|
-static void SDLCALL
|
|
|
-SDL_Downsample_S32LSB_2c_x4(SDL_AudioCVT * cvt, SDL_AudioFormat format)
|
|
|
-{
|
|
|
-#if DEBUG_CONVERT
|
|
|
- fprintf(stderr, "Downsample (x4) AUDIO_S32LSB, 2 channels.\n");
|
|
|
-#endif
|
|
|
-
|
|
|
- const int dstsize = cvt->len_cvt / 4;
|
|
|
- Sint32 *dst = (Sint32 *) cvt->buf;
|
|
|
- const Sint32 *src = (Sint32 *) cvt->buf;
|
|
|
- const Sint32 *target = (const Sint32 *) (cvt->buf + dstsize);
|
|
|
- Sint64 last_sample0 = (Sint64) ((Sint32) SDL_SwapLE32(src[0]));
|
|
|
- Sint64 last_sample1 = (Sint64) ((Sint32) SDL_SwapLE32(src[1]));
|
|
|
- while (dst < target) {
|
|
|
- const Sint64 sample0 = (Sint64) ((Sint32) SDL_SwapLE32(src[0]));
|
|
|
- const Sint64 sample1 = (Sint64) ((Sint32) SDL_SwapLE32(src[1]));
|
|
|
- src += 8;
|
|
|
- dst[0] = (Sint32) ((sample0 + last_sample0) >> 1);
|
|
|
- dst[1] = (Sint32) ((sample1 + last_sample1) >> 1);
|
|
|
- last_sample0 = sample0;
|
|
|
- last_sample1 = sample1;
|
|
|
- dst += 2;
|
|
|
- }
|
|
|
-
|
|
|
- cvt->len_cvt = dstsize;
|
|
|
- if (cvt->filters[++cvt->filter_index]) {
|
|
|
- cvt->filters[cvt->filter_index] (cvt, format);
|
|
|
- }
|
|
|
-}
|
|
|
-
|
|
|
-static void SDLCALL
|
|
|
-SDL_Upsample_S32LSB_4c_x2(SDL_AudioCVT * cvt, SDL_AudioFormat format)
|
|
|
-{
|
|
|
-#if DEBUG_CONVERT
|
|
|
- fprintf(stderr, "Upsample (x2) AUDIO_S32LSB, 4 channels.\n");
|
|
|
-#endif
|
|
|
-
|
|
|
- const int dstsize = cvt->len_cvt * 2;
|
|
|
- Sint32 *dst = ((Sint32 *) (cvt->buf + dstsize)) - 4 * 2;
|
|
|
- const Sint32 *src = ((Sint32 *) (cvt->buf + cvt->len_cvt)) - 4;
|
|
|
- const Sint32 *target = ((const Sint32 *) cvt->buf);
|
|
|
- Sint64 last_sample3 = (Sint64) ((Sint32) SDL_SwapLE32(src[3]));
|
|
|
- Sint64 last_sample2 = (Sint64) ((Sint32) SDL_SwapLE32(src[2]));
|
|
|
- Sint64 last_sample1 = (Sint64) ((Sint32) SDL_SwapLE32(src[1]));
|
|
|
- Sint64 last_sample0 = (Sint64) ((Sint32) SDL_SwapLE32(src[0]));
|
|
|
- while (dst >= target) {
|
|
|
- const Sint64 sample3 = (Sint64) ((Sint32) SDL_SwapLE32(src[3]));
|
|
|
- const Sint64 sample2 = (Sint64) ((Sint32) SDL_SwapLE32(src[2]));
|
|
|
- const Sint64 sample1 = (Sint64) ((Sint32) SDL_SwapLE32(src[1]));
|
|
|
- const Sint64 sample0 = (Sint64) ((Sint32) SDL_SwapLE32(src[0]));
|
|
|
- src -= 4;
|
|
|
- dst[7] = (Sint32) ((sample3 + last_sample3) >> 1);
|
|
|
- dst[6] = (Sint32) ((sample2 + last_sample2) >> 1);
|
|
|
- dst[5] = (Sint32) ((sample1 + last_sample1) >> 1);
|
|
|
- dst[4] = (Sint32) ((sample0 + last_sample0) >> 1);
|
|
|
- dst[3] = (Sint32) sample3;
|
|
|
- dst[2] = (Sint32) sample2;
|
|
|
- dst[1] = (Sint32) sample1;
|
|
|
- dst[0] = (Sint32) sample0;
|
|
|
- last_sample3 = sample3;
|
|
|
- last_sample2 = sample2;
|
|
|
- last_sample1 = sample1;
|
|
|
- last_sample0 = sample0;
|
|
|
- dst -= 8;
|
|
|
- }
|
|
|
-
|
|
|
- cvt->len_cvt = dstsize;
|
|
|
- if (cvt->filters[++cvt->filter_index]) {
|
|
|
- cvt->filters[cvt->filter_index] (cvt, format);
|
|
|
- }
|
|
|
-}
|
|
|
-
|
|
|
-static void SDLCALL
|
|
|
-SDL_Downsample_S32LSB_4c_x2(SDL_AudioCVT * cvt, SDL_AudioFormat format)
|
|
|
-{
|
|
|
-#if DEBUG_CONVERT
|
|
|
- fprintf(stderr, "Downsample (x2) AUDIO_S32LSB, 4 channels.\n");
|
|
|
-#endif
|
|
|
-
|
|
|
- const int dstsize = cvt->len_cvt / 2;
|
|
|
- Sint32 *dst = (Sint32 *) cvt->buf;
|
|
|
- const Sint32 *src = (Sint32 *) cvt->buf;
|
|
|
- const Sint32 *target = (const Sint32 *) (cvt->buf + dstsize);
|
|
|
- Sint64 last_sample0 = (Sint64) ((Sint32) SDL_SwapLE32(src[0]));
|
|
|
- Sint64 last_sample1 = (Sint64) ((Sint32) SDL_SwapLE32(src[1]));
|
|
|
- Sint64 last_sample2 = (Sint64) ((Sint32) SDL_SwapLE32(src[2]));
|
|
|
- Sint64 last_sample3 = (Sint64) ((Sint32) SDL_SwapLE32(src[3]));
|
|
|
- while (dst < target) {
|
|
|
- const Sint64 sample0 = (Sint64) ((Sint32) SDL_SwapLE32(src[0]));
|
|
|
- const Sint64 sample1 = (Sint64) ((Sint32) SDL_SwapLE32(src[1]));
|
|
|
- const Sint64 sample2 = (Sint64) ((Sint32) SDL_SwapLE32(src[2]));
|
|
|
- const Sint64 sample3 = (Sint64) ((Sint32) SDL_SwapLE32(src[3]));
|
|
|
- src += 8;
|
|
|
- dst[0] = (Sint32) ((sample0 + last_sample0) >> 1);
|
|
|
- dst[1] = (Sint32) ((sample1 + last_sample1) >> 1);
|
|
|
- dst[2] = (Sint32) ((sample2 + last_sample2) >> 1);
|
|
|
- dst[3] = (Sint32) ((sample3 + last_sample3) >> 1);
|
|
|
- last_sample0 = sample0;
|
|
|
- last_sample1 = sample1;
|
|
|
- last_sample2 = sample2;
|
|
|
- last_sample3 = sample3;
|
|
|
- dst += 4;
|
|
|
- }
|
|
|
-
|
|
|
- cvt->len_cvt = dstsize;
|
|
|
- if (cvt->filters[++cvt->filter_index]) {
|
|
|
- cvt->filters[cvt->filter_index] (cvt, format);
|
|
|
- }
|
|
|
-}
|
|
|
-
|
|
|
-static void SDLCALL
|
|
|
-SDL_Upsample_S32LSB_4c_x4(SDL_AudioCVT * cvt, SDL_AudioFormat format)
|
|
|
-{
|
|
|
-#if DEBUG_CONVERT
|
|
|
- fprintf(stderr, "Upsample (x4) AUDIO_S32LSB, 4 channels.\n");
|
|
|
-#endif
|
|
|
-
|
|
|
- const int dstsize = cvt->len_cvt * 4;
|
|
|
- Sint32 *dst = ((Sint32 *) (cvt->buf + dstsize)) - 4 * 4;
|
|
|
- const Sint32 *src = ((Sint32 *) (cvt->buf + cvt->len_cvt)) - 4;
|
|
|
- const Sint32 *target = ((const Sint32 *) cvt->buf);
|
|
|
- Sint64 last_sample3 = (Sint64) ((Sint32) SDL_SwapLE32(src[3]));
|
|
|
- Sint64 last_sample2 = (Sint64) ((Sint32) SDL_SwapLE32(src[2]));
|
|
|
- Sint64 last_sample1 = (Sint64) ((Sint32) SDL_SwapLE32(src[1]));
|
|
|
- Sint64 last_sample0 = (Sint64) ((Sint32) SDL_SwapLE32(src[0]));
|
|
|
- while (dst >= target) {
|
|
|
- const Sint64 sample3 = (Sint64) ((Sint32) SDL_SwapLE32(src[3]));
|
|
|
- const Sint64 sample2 = (Sint64) ((Sint32) SDL_SwapLE32(src[2]));
|
|
|
- const Sint64 sample1 = (Sint64) ((Sint32) SDL_SwapLE32(src[1]));
|
|
|
- const Sint64 sample0 = (Sint64) ((Sint32) SDL_SwapLE32(src[0]));
|
|
|
- src -= 4;
|
|
|
- dst[15] = (Sint32) ((sample3 + (3 * last_sample3)) >> 2);
|
|
|
- dst[14] = (Sint32) ((sample2 + (3 * last_sample2)) >> 2);
|
|
|
- dst[13] = (Sint32) ((sample1 + (3 * last_sample1)) >> 2);
|
|
|
- dst[12] = (Sint32) ((sample0 + (3 * last_sample0)) >> 2);
|
|
|
- dst[11] = (Sint32) ((sample3 + last_sample3) >> 1);
|
|
|
- dst[10] = (Sint32) ((sample2 + last_sample2) >> 1);
|
|
|
- dst[9] = (Sint32) ((sample1 + last_sample1) >> 1);
|
|
|
- dst[8] = (Sint32) ((sample0 + last_sample0) >> 1);
|
|
|
- dst[7] = (Sint32) (((3 * sample3) + last_sample3) >> 2);
|
|
|
- dst[6] = (Sint32) (((3 * sample2) + last_sample2) >> 2);
|
|
|
- dst[5] = (Sint32) (((3 * sample1) + last_sample1) >> 2);
|
|
|
- dst[4] = (Sint32) (((3 * sample0) + last_sample0) >> 2);
|
|
|
- dst[3] = (Sint32) sample3;
|
|
|
- dst[2] = (Sint32) sample2;
|
|
|
- dst[1] = (Sint32) sample1;
|
|
|
- dst[0] = (Sint32) sample0;
|
|
|
- last_sample3 = sample3;
|
|
|
- last_sample2 = sample2;
|
|
|
- last_sample1 = sample1;
|
|
|
- last_sample0 = sample0;
|
|
|
- dst -= 16;
|
|
|
- }
|
|
|
-
|
|
|
- cvt->len_cvt = dstsize;
|
|
|
- if (cvt->filters[++cvt->filter_index]) {
|
|
|
- cvt->filters[cvt->filter_index] (cvt, format);
|
|
|
- }
|
|
|
-}
|
|
|
-
|
|
|
-static void SDLCALL
|
|
|
-SDL_Downsample_S32LSB_4c_x4(SDL_AudioCVT * cvt, SDL_AudioFormat format)
|
|
|
-{
|
|
|
-#if DEBUG_CONVERT
|
|
|
- fprintf(stderr, "Downsample (x4) AUDIO_S32LSB, 4 channels.\n");
|
|
|
-#endif
|
|
|
-
|
|
|
- const int dstsize = cvt->len_cvt / 4;
|
|
|
- Sint32 *dst = (Sint32 *) cvt->buf;
|
|
|
- const Sint32 *src = (Sint32 *) cvt->buf;
|
|
|
- const Sint32 *target = (const Sint32 *) (cvt->buf + dstsize);
|
|
|
- Sint64 last_sample0 = (Sint64) ((Sint32) SDL_SwapLE32(src[0]));
|
|
|
- Sint64 last_sample1 = (Sint64) ((Sint32) SDL_SwapLE32(src[1]));
|
|
|
- Sint64 last_sample2 = (Sint64) ((Sint32) SDL_SwapLE32(src[2]));
|
|
|
- Sint64 last_sample3 = (Sint64) ((Sint32) SDL_SwapLE32(src[3]));
|
|
|
- while (dst < target) {
|
|
|
- const Sint64 sample0 = (Sint64) ((Sint32) SDL_SwapLE32(src[0]));
|
|
|
- const Sint64 sample1 = (Sint64) ((Sint32) SDL_SwapLE32(src[1]));
|
|
|
- const Sint64 sample2 = (Sint64) ((Sint32) SDL_SwapLE32(src[2]));
|
|
|
- const Sint64 sample3 = (Sint64) ((Sint32) SDL_SwapLE32(src[3]));
|
|
|
- src += 16;
|
|
|
- dst[0] = (Sint32) ((sample0 + last_sample0) >> 1);
|
|
|
- dst[1] = (Sint32) ((sample1 + last_sample1) >> 1);
|
|
|
- dst[2] = (Sint32) ((sample2 + last_sample2) >> 1);
|
|
|
- dst[3] = (Sint32) ((sample3 + last_sample3) >> 1);
|
|
|
- last_sample0 = sample0;
|
|
|
- last_sample1 = sample1;
|
|
|
- last_sample2 = sample2;
|
|
|
- last_sample3 = sample3;
|
|
|
- dst += 4;
|
|
|
- }
|
|
|
-
|
|
|
- cvt->len_cvt = dstsize;
|
|
|
- if (cvt->filters[++cvt->filter_index]) {
|
|
|
- cvt->filters[cvt->filter_index] (cvt, format);
|
|
|
- }
|
|
|
-}
|
|
|
-
|
|
|
-static void SDLCALL
|
|
|
-SDL_Upsample_S32LSB_6c_x2(SDL_AudioCVT * cvt, SDL_AudioFormat format)
|
|
|
-{
|
|
|
-#if DEBUG_CONVERT
|
|
|
- fprintf(stderr, "Upsample (x2) AUDIO_S32LSB, 6 channels.\n");
|
|
|
-#endif
|
|
|
-
|
|
|
- const int dstsize = cvt->len_cvt * 2;
|
|
|
- Sint32 *dst = ((Sint32 *) (cvt->buf + dstsize)) - 6 * 2;
|
|
|
- const Sint32 *src = ((Sint32 *) (cvt->buf + cvt->len_cvt)) - 6;
|
|
|
- const Sint32 *target = ((const Sint32 *) cvt->buf);
|
|
|
- Sint64 last_sample5 = (Sint64) ((Sint32) SDL_SwapLE32(src[5]));
|
|
|
- Sint64 last_sample4 = (Sint64) ((Sint32) SDL_SwapLE32(src[4]));
|
|
|
- Sint64 last_sample3 = (Sint64) ((Sint32) SDL_SwapLE32(src[3]));
|
|
|
- Sint64 last_sample2 = (Sint64) ((Sint32) SDL_SwapLE32(src[2]));
|
|
|
- Sint64 last_sample1 = (Sint64) ((Sint32) SDL_SwapLE32(src[1]));
|
|
|
- Sint64 last_sample0 = (Sint64) ((Sint32) SDL_SwapLE32(src[0]));
|
|
|
- while (dst >= target) {
|
|
|
- const Sint64 sample5 = (Sint64) ((Sint32) SDL_SwapLE32(src[5]));
|
|
|
- const Sint64 sample4 = (Sint64) ((Sint32) SDL_SwapLE32(src[4]));
|
|
|
- const Sint64 sample3 = (Sint64) ((Sint32) SDL_SwapLE32(src[3]));
|
|
|
- const Sint64 sample2 = (Sint64) ((Sint32) SDL_SwapLE32(src[2]));
|
|
|
- const Sint64 sample1 = (Sint64) ((Sint32) SDL_SwapLE32(src[1]));
|
|
|
- const Sint64 sample0 = (Sint64) ((Sint32) SDL_SwapLE32(src[0]));
|
|
|
- src -= 6;
|
|
|
- dst[11] = (Sint32) ((sample5 + last_sample5) >> 1);
|
|
|
- dst[10] = (Sint32) ((sample4 + last_sample4) >> 1);
|
|
|
- dst[9] = (Sint32) ((sample3 + last_sample3) >> 1);
|
|
|
- dst[8] = (Sint32) ((sample2 + last_sample2) >> 1);
|
|
|
- dst[7] = (Sint32) ((sample1 + last_sample1) >> 1);
|
|
|
- dst[6] = (Sint32) ((sample0 + last_sample0) >> 1);
|
|
|
- dst[5] = (Sint32) sample5;
|
|
|
- dst[4] = (Sint32) sample4;
|
|
|
- dst[3] = (Sint32) sample3;
|
|
|
- dst[2] = (Sint32) sample2;
|
|
|
- dst[1] = (Sint32) sample1;
|
|
|
- dst[0] = (Sint32) sample0;
|
|
|
- last_sample5 = sample5;
|
|
|
- last_sample4 = sample4;
|
|
|
- last_sample3 = sample3;
|
|
|
- last_sample2 = sample2;
|
|
|
- last_sample1 = sample1;
|
|
|
- last_sample0 = sample0;
|
|
|
- dst -= 12;
|
|
|
- }
|
|
|
-
|
|
|
- cvt->len_cvt = dstsize;
|
|
|
- if (cvt->filters[++cvt->filter_index]) {
|
|
|
- cvt->filters[cvt->filter_index] (cvt, format);
|
|
|
- }
|
|
|
-}
|
|
|
-
|
|
|
-static void SDLCALL
|
|
|
-SDL_Downsample_S32LSB_6c_x2(SDL_AudioCVT * cvt, SDL_AudioFormat format)
|
|
|
-{
|
|
|
-#if DEBUG_CONVERT
|
|
|
- fprintf(stderr, "Downsample (x2) AUDIO_S32LSB, 6 channels.\n");
|
|
|
-#endif
|
|
|
-
|
|
|
- const int dstsize = cvt->len_cvt / 2;
|
|
|
- Sint32 *dst = (Sint32 *) cvt->buf;
|
|
|
- const Sint32 *src = (Sint32 *) cvt->buf;
|
|
|
- const Sint32 *target = (const Sint32 *) (cvt->buf + dstsize);
|
|
|
- Sint64 last_sample0 = (Sint64) ((Sint32) SDL_SwapLE32(src[0]));
|
|
|
- Sint64 last_sample1 = (Sint64) ((Sint32) SDL_SwapLE32(src[1]));
|
|
|
- Sint64 last_sample2 = (Sint64) ((Sint32) SDL_SwapLE32(src[2]));
|
|
|
- Sint64 last_sample3 = (Sint64) ((Sint32) SDL_SwapLE32(src[3]));
|
|
|
- Sint64 last_sample4 = (Sint64) ((Sint32) SDL_SwapLE32(src[4]));
|
|
|
- Sint64 last_sample5 = (Sint64) ((Sint32) SDL_SwapLE32(src[5]));
|
|
|
- while (dst < target) {
|
|
|
- const Sint64 sample0 = (Sint64) ((Sint32) SDL_SwapLE32(src[0]));
|
|
|
- const Sint64 sample1 = (Sint64) ((Sint32) SDL_SwapLE32(src[1]));
|
|
|
- const Sint64 sample2 = (Sint64) ((Sint32) SDL_SwapLE32(src[2]));
|
|
|
- const Sint64 sample3 = (Sint64) ((Sint32) SDL_SwapLE32(src[3]));
|
|
|
- const Sint64 sample4 = (Sint64) ((Sint32) SDL_SwapLE32(src[4]));
|
|
|
- const Sint64 sample5 = (Sint64) ((Sint32) SDL_SwapLE32(src[5]));
|
|
|
- src += 12;
|
|
|
- dst[0] = (Sint32) ((sample0 + last_sample0) >> 1);
|
|
|
- dst[1] = (Sint32) ((sample1 + last_sample1) >> 1);
|
|
|
- dst[2] = (Sint32) ((sample2 + last_sample2) >> 1);
|
|
|
- dst[3] = (Sint32) ((sample3 + last_sample3) >> 1);
|
|
|
- dst[4] = (Sint32) ((sample4 + last_sample4) >> 1);
|
|
|
- dst[5] = (Sint32) ((sample5 + last_sample5) >> 1);
|
|
|
- last_sample0 = sample0;
|
|
|
- last_sample1 = sample1;
|
|
|
- last_sample2 = sample2;
|
|
|
- last_sample3 = sample3;
|
|
|
- last_sample4 = sample4;
|
|
|
- last_sample5 = sample5;
|
|
|
- dst += 6;
|
|
|
- }
|
|
|
-
|
|
|
- cvt->len_cvt = dstsize;
|
|
|
- if (cvt->filters[++cvt->filter_index]) {
|
|
|
- cvt->filters[cvt->filter_index] (cvt, format);
|
|
|
- }
|
|
|
-}
|
|
|
-
|
|
|
-static void SDLCALL
|
|
|
-SDL_Upsample_S32LSB_6c_x4(SDL_AudioCVT * cvt, SDL_AudioFormat format)
|
|
|
-{
|
|
|
-#if DEBUG_CONVERT
|
|
|
- fprintf(stderr, "Upsample (x4) AUDIO_S32LSB, 6 channels.\n");
|
|
|
-#endif
|
|
|
-
|
|
|
- const int dstsize = cvt->len_cvt * 4;
|
|
|
- Sint32 *dst = ((Sint32 *) (cvt->buf + dstsize)) - 6 * 4;
|
|
|
- const Sint32 *src = ((Sint32 *) (cvt->buf + cvt->len_cvt)) - 6;
|
|
|
- const Sint32 *target = ((const Sint32 *) cvt->buf);
|
|
|
- Sint64 last_sample5 = (Sint64) ((Sint32) SDL_SwapLE32(src[5]));
|
|
|
- Sint64 last_sample4 = (Sint64) ((Sint32) SDL_SwapLE32(src[4]));
|
|
|
- Sint64 last_sample3 = (Sint64) ((Sint32) SDL_SwapLE32(src[3]));
|
|
|
- Sint64 last_sample2 = (Sint64) ((Sint32) SDL_SwapLE32(src[2]));
|
|
|
- Sint64 last_sample1 = (Sint64) ((Sint32) SDL_SwapLE32(src[1]));
|
|
|
- Sint64 last_sample0 = (Sint64) ((Sint32) SDL_SwapLE32(src[0]));
|
|
|
- while (dst >= target) {
|
|
|
- const Sint64 sample5 = (Sint64) ((Sint32) SDL_SwapLE32(src[5]));
|
|
|
- const Sint64 sample4 = (Sint64) ((Sint32) SDL_SwapLE32(src[4]));
|
|
|
- const Sint64 sample3 = (Sint64) ((Sint32) SDL_SwapLE32(src[3]));
|
|
|
- const Sint64 sample2 = (Sint64) ((Sint32) SDL_SwapLE32(src[2]));
|
|
|
- const Sint64 sample1 = (Sint64) ((Sint32) SDL_SwapLE32(src[1]));
|
|
|
- const Sint64 sample0 = (Sint64) ((Sint32) SDL_SwapLE32(src[0]));
|
|
|
- src -= 6;
|
|
|
- dst[23] = (Sint32) ((sample5 + (3 * last_sample5)) >> 2);
|
|
|
- dst[22] = (Sint32) ((sample4 + (3 * last_sample4)) >> 2);
|
|
|
- dst[21] = (Sint32) ((sample3 + (3 * last_sample3)) >> 2);
|
|
|
- dst[20] = (Sint32) ((sample2 + (3 * last_sample2)) >> 2);
|
|
|
- dst[19] = (Sint32) ((sample1 + (3 * last_sample1)) >> 2);
|
|
|
- dst[18] = (Sint32) ((sample0 + (3 * last_sample0)) >> 2);
|
|
|
- dst[17] = (Sint32) ((sample5 + last_sample5) >> 1);
|
|
|
- dst[16] = (Sint32) ((sample4 + last_sample4) >> 1);
|
|
|
- dst[15] = (Sint32) ((sample3 + last_sample3) >> 1);
|
|
|
- dst[14] = (Sint32) ((sample2 + last_sample2) >> 1);
|
|
|
- dst[13] = (Sint32) ((sample1 + last_sample1) >> 1);
|
|
|
- dst[12] = (Sint32) ((sample0 + last_sample0) >> 1);
|
|
|
- dst[11] = (Sint32) (((3 * sample5) + last_sample5) >> 2);
|
|
|
- dst[10] = (Sint32) (((3 * sample4) + last_sample4) >> 2);
|
|
|
- dst[9] = (Sint32) (((3 * sample3) + last_sample3) >> 2);
|
|
|
- dst[8] = (Sint32) (((3 * sample2) + last_sample2) >> 2);
|
|
|
- dst[7] = (Sint32) (((3 * sample1) + last_sample1) >> 2);
|
|
|
- dst[6] = (Sint32) (((3 * sample0) + last_sample0) >> 2);
|
|
|
- dst[5] = (Sint32) sample5;
|
|
|
- dst[4] = (Sint32) sample4;
|
|
|
- dst[3] = (Sint32) sample3;
|
|
|
- dst[2] = (Sint32) sample2;
|
|
|
- dst[1] = (Sint32) sample1;
|
|
|
- dst[0] = (Sint32) sample0;
|
|
|
- last_sample5 = sample5;
|
|
|
- last_sample4 = sample4;
|
|
|
- last_sample3 = sample3;
|
|
|
- last_sample2 = sample2;
|
|
|
- last_sample1 = sample1;
|
|
|
- last_sample0 = sample0;
|
|
|
- dst -= 24;
|
|
|
- }
|
|
|
-
|
|
|
- cvt->len_cvt = dstsize;
|
|
|
- if (cvt->filters[++cvt->filter_index]) {
|
|
|
- cvt->filters[cvt->filter_index] (cvt, format);
|
|
|
- }
|
|
|
-}
|
|
|
-
|
|
|
-static void SDLCALL
|
|
|
-SDL_Downsample_S32LSB_6c_x4(SDL_AudioCVT * cvt, SDL_AudioFormat format)
|
|
|
-{
|
|
|
-#if DEBUG_CONVERT
|
|
|
- fprintf(stderr, "Downsample (x4) AUDIO_S32LSB, 6 channels.\n");
|
|
|
-#endif
|
|
|
-
|
|
|
- const int dstsize = cvt->len_cvt / 4;
|
|
|
- Sint32 *dst = (Sint32 *) cvt->buf;
|
|
|
- const Sint32 *src = (Sint32 *) cvt->buf;
|
|
|
- const Sint32 *target = (const Sint32 *) (cvt->buf + dstsize);
|
|
|
- Sint64 last_sample0 = (Sint64) ((Sint32) SDL_SwapLE32(src[0]));
|
|
|
- Sint64 last_sample1 = (Sint64) ((Sint32) SDL_SwapLE32(src[1]));
|
|
|
- Sint64 last_sample2 = (Sint64) ((Sint32) SDL_SwapLE32(src[2]));
|
|
|
- Sint64 last_sample3 = (Sint64) ((Sint32) SDL_SwapLE32(src[3]));
|
|
|
- Sint64 last_sample4 = (Sint64) ((Sint32) SDL_SwapLE32(src[4]));
|
|
|
- Sint64 last_sample5 = (Sint64) ((Sint32) SDL_SwapLE32(src[5]));
|
|
|
- while (dst < target) {
|
|
|
- const Sint64 sample0 = (Sint64) ((Sint32) SDL_SwapLE32(src[0]));
|
|
|
- const Sint64 sample1 = (Sint64) ((Sint32) SDL_SwapLE32(src[1]));
|
|
|
- const Sint64 sample2 = (Sint64) ((Sint32) SDL_SwapLE32(src[2]));
|
|
|
- const Sint64 sample3 = (Sint64) ((Sint32) SDL_SwapLE32(src[3]));
|
|
|
- const Sint64 sample4 = (Sint64) ((Sint32) SDL_SwapLE32(src[4]));
|
|
|
- const Sint64 sample5 = (Sint64) ((Sint32) SDL_SwapLE32(src[5]));
|
|
|
- src += 24;
|
|
|
- dst[0] = (Sint32) ((sample0 + last_sample0) >> 1);
|
|
|
- dst[1] = (Sint32) ((sample1 + last_sample1) >> 1);
|
|
|
- dst[2] = (Sint32) ((sample2 + last_sample2) >> 1);
|
|
|
- dst[3] = (Sint32) ((sample3 + last_sample3) >> 1);
|
|
|
- dst[4] = (Sint32) ((sample4 + last_sample4) >> 1);
|
|
|
- dst[5] = (Sint32) ((sample5 + last_sample5) >> 1);
|
|
|
- last_sample0 = sample0;
|
|
|
- last_sample1 = sample1;
|
|
|
- last_sample2 = sample2;
|
|
|
- last_sample3 = sample3;
|
|
|
- last_sample4 = sample4;
|
|
|
- last_sample5 = sample5;
|
|
|
- dst += 6;
|
|
|
- }
|
|
|
-
|
|
|
- cvt->len_cvt = dstsize;
|
|
|
- if (cvt->filters[++cvt->filter_index]) {
|
|
|
- cvt->filters[cvt->filter_index] (cvt, format);
|
|
|
- }
|
|
|
-}
|
|
|
-
|
|
|
-static void SDLCALL
|
|
|
-SDL_Upsample_S32LSB_8c_x2(SDL_AudioCVT * cvt, SDL_AudioFormat format)
|
|
|
-{
|
|
|
-#if DEBUG_CONVERT
|
|
|
- fprintf(stderr, "Upsample (x2) AUDIO_S32LSB, 8 channels.\n");
|
|
|
-#endif
|
|
|
-
|
|
|
- const int dstsize = cvt->len_cvt * 2;
|
|
|
- Sint32 *dst = ((Sint32 *) (cvt->buf + dstsize)) - 8 * 2;
|
|
|
- const Sint32 *src = ((Sint32 *) (cvt->buf + cvt->len_cvt)) - 8;
|
|
|
- const Sint32 *target = ((const Sint32 *) cvt->buf);
|
|
|
- Sint64 last_sample7 = (Sint64) ((Sint32) SDL_SwapLE32(src[7]));
|
|
|
- Sint64 last_sample6 = (Sint64) ((Sint32) SDL_SwapLE32(src[6]));
|
|
|
- Sint64 last_sample5 = (Sint64) ((Sint32) SDL_SwapLE32(src[5]));
|
|
|
- Sint64 last_sample4 = (Sint64) ((Sint32) SDL_SwapLE32(src[4]));
|
|
|
- Sint64 last_sample3 = (Sint64) ((Sint32) SDL_SwapLE32(src[3]));
|
|
|
- Sint64 last_sample2 = (Sint64) ((Sint32) SDL_SwapLE32(src[2]));
|
|
|
- Sint64 last_sample1 = (Sint64) ((Sint32) SDL_SwapLE32(src[1]));
|
|
|
- Sint64 last_sample0 = (Sint64) ((Sint32) SDL_SwapLE32(src[0]));
|
|
|
- while (dst >= target) {
|
|
|
- const Sint64 sample7 = (Sint64) ((Sint32) SDL_SwapLE32(src[7]));
|
|
|
- const Sint64 sample6 = (Sint64) ((Sint32) SDL_SwapLE32(src[6]));
|
|
|
- const Sint64 sample5 = (Sint64) ((Sint32) SDL_SwapLE32(src[5]));
|
|
|
- const Sint64 sample4 = (Sint64) ((Sint32) SDL_SwapLE32(src[4]));
|
|
|
- const Sint64 sample3 = (Sint64) ((Sint32) SDL_SwapLE32(src[3]));
|
|
|
- const Sint64 sample2 = (Sint64) ((Sint32) SDL_SwapLE32(src[2]));
|
|
|
- const Sint64 sample1 = (Sint64) ((Sint32) SDL_SwapLE32(src[1]));
|
|
|
- const Sint64 sample0 = (Sint64) ((Sint32) SDL_SwapLE32(src[0]));
|
|
|
- src -= 8;
|
|
|
- dst[15] = (Sint32) ((sample7 + last_sample7) >> 1);
|
|
|
- dst[14] = (Sint32) ((sample6 + last_sample6) >> 1);
|
|
|
- dst[13] = (Sint32) ((sample5 + last_sample5) >> 1);
|
|
|
- dst[12] = (Sint32) ((sample4 + last_sample4) >> 1);
|
|
|
- dst[11] = (Sint32) ((sample3 + last_sample3) >> 1);
|
|
|
- dst[10] = (Sint32) ((sample2 + last_sample2) >> 1);
|
|
|
- dst[9] = (Sint32) ((sample1 + last_sample1) >> 1);
|
|
|
- dst[8] = (Sint32) ((sample0 + last_sample0) >> 1);
|
|
|
- dst[7] = (Sint32) sample7;
|
|
|
- dst[6] = (Sint32) sample6;
|
|
|
- dst[5] = (Sint32) sample5;
|
|
|
- dst[4] = (Sint32) sample4;
|
|
|
- dst[3] = (Sint32) sample3;
|
|
|
- dst[2] = (Sint32) sample2;
|
|
|
- dst[1] = (Sint32) sample1;
|
|
|
- dst[0] = (Sint32) sample0;
|
|
|
- last_sample7 = sample7;
|
|
|
- last_sample6 = sample6;
|
|
|
- last_sample5 = sample5;
|
|
|
- last_sample4 = sample4;
|
|
|
- last_sample3 = sample3;
|
|
|
- last_sample2 = sample2;
|
|
|
- last_sample1 = sample1;
|
|
|
- last_sample0 = sample0;
|
|
|
- dst -= 16;
|
|
|
- }
|
|
|
-
|
|
|
- cvt->len_cvt = dstsize;
|
|
|
- if (cvt->filters[++cvt->filter_index]) {
|
|
|
- cvt->filters[cvt->filter_index] (cvt, format);
|
|
|
- }
|
|
|
-}
|
|
|
-
|
|
|
-static void SDLCALL
|
|
|
-SDL_Downsample_S32LSB_8c_x2(SDL_AudioCVT * cvt, SDL_AudioFormat format)
|
|
|
-{
|
|
|
-#if DEBUG_CONVERT
|
|
|
- fprintf(stderr, "Downsample (x2) AUDIO_S32LSB, 8 channels.\n");
|
|
|
-#endif
|
|
|
-
|
|
|
- const int dstsize = cvt->len_cvt / 2;
|
|
|
- Sint32 *dst = (Sint32 *) cvt->buf;
|
|
|
- const Sint32 *src = (Sint32 *) cvt->buf;
|
|
|
- const Sint32 *target = (const Sint32 *) (cvt->buf + dstsize);
|
|
|
- Sint64 last_sample0 = (Sint64) ((Sint32) SDL_SwapLE32(src[0]));
|
|
|
- Sint64 last_sample1 = (Sint64) ((Sint32) SDL_SwapLE32(src[1]));
|
|
|
- Sint64 last_sample2 = (Sint64) ((Sint32) SDL_SwapLE32(src[2]));
|
|
|
- Sint64 last_sample3 = (Sint64) ((Sint32) SDL_SwapLE32(src[3]));
|
|
|
- Sint64 last_sample4 = (Sint64) ((Sint32) SDL_SwapLE32(src[4]));
|
|
|
- Sint64 last_sample5 = (Sint64) ((Sint32) SDL_SwapLE32(src[5]));
|
|
|
- Sint64 last_sample6 = (Sint64) ((Sint32) SDL_SwapLE32(src[6]));
|
|
|
- Sint64 last_sample7 = (Sint64) ((Sint32) SDL_SwapLE32(src[7]));
|
|
|
- while (dst < target) {
|
|
|
- const Sint64 sample0 = (Sint64) ((Sint32) SDL_SwapLE32(src[0]));
|
|
|
- const Sint64 sample1 = (Sint64) ((Sint32) SDL_SwapLE32(src[1]));
|
|
|
- const Sint64 sample2 = (Sint64) ((Sint32) SDL_SwapLE32(src[2]));
|
|
|
- const Sint64 sample3 = (Sint64) ((Sint32) SDL_SwapLE32(src[3]));
|
|
|
- const Sint64 sample4 = (Sint64) ((Sint32) SDL_SwapLE32(src[4]));
|
|
|
- const Sint64 sample5 = (Sint64) ((Sint32) SDL_SwapLE32(src[5]));
|
|
|
- const Sint64 sample6 = (Sint64) ((Sint32) SDL_SwapLE32(src[6]));
|
|
|
- const Sint64 sample7 = (Sint64) ((Sint32) SDL_SwapLE32(src[7]));
|
|
|
- src += 16;
|
|
|
- dst[0] = (Sint32) ((sample0 + last_sample0) >> 1);
|
|
|
- dst[1] = (Sint32) ((sample1 + last_sample1) >> 1);
|
|
|
- dst[2] = (Sint32) ((sample2 + last_sample2) >> 1);
|
|
|
- dst[3] = (Sint32) ((sample3 + last_sample3) >> 1);
|
|
|
- dst[4] = (Sint32) ((sample4 + last_sample4) >> 1);
|
|
|
- dst[5] = (Sint32) ((sample5 + last_sample5) >> 1);
|
|
|
- dst[6] = (Sint32) ((sample6 + last_sample6) >> 1);
|
|
|
- dst[7] = (Sint32) ((sample7 + last_sample7) >> 1);
|
|
|
- last_sample0 = sample0;
|
|
|
- last_sample1 = sample1;
|
|
|
- last_sample2 = sample2;
|
|
|
- last_sample3 = sample3;
|
|
|
- last_sample4 = sample4;
|
|
|
- last_sample5 = sample5;
|
|
|
- last_sample6 = sample6;
|
|
|
- last_sample7 = sample7;
|
|
|
- dst += 8;
|
|
|
- }
|
|
|
-
|
|
|
- cvt->len_cvt = dstsize;
|
|
|
- if (cvt->filters[++cvt->filter_index]) {
|
|
|
- cvt->filters[cvt->filter_index] (cvt, format);
|
|
|
- }
|
|
|
-}
|
|
|
-
|
|
|
-static void SDLCALL
|
|
|
-SDL_Upsample_S32LSB_8c_x4(SDL_AudioCVT * cvt, SDL_AudioFormat format)
|
|
|
-{
|
|
|
-#if DEBUG_CONVERT
|
|
|
- fprintf(stderr, "Upsample (x4) AUDIO_S32LSB, 8 channels.\n");
|
|
|
-#endif
|
|
|
-
|
|
|
- const int dstsize = cvt->len_cvt * 4;
|
|
|
- Sint32 *dst = ((Sint32 *) (cvt->buf + dstsize)) - 8 * 4;
|
|
|
- const Sint32 *src = ((Sint32 *) (cvt->buf + cvt->len_cvt)) - 8;
|
|
|
- const Sint32 *target = ((const Sint32 *) cvt->buf);
|
|
|
- Sint64 last_sample7 = (Sint64) ((Sint32) SDL_SwapLE32(src[7]));
|
|
|
- Sint64 last_sample6 = (Sint64) ((Sint32) SDL_SwapLE32(src[6]));
|
|
|
- Sint64 last_sample5 = (Sint64) ((Sint32) SDL_SwapLE32(src[5]));
|
|
|
- Sint64 last_sample4 = (Sint64) ((Sint32) SDL_SwapLE32(src[4]));
|
|
|
- Sint64 last_sample3 = (Sint64) ((Sint32) SDL_SwapLE32(src[3]));
|
|
|
- Sint64 last_sample2 = (Sint64) ((Sint32) SDL_SwapLE32(src[2]));
|
|
|
- Sint64 last_sample1 = (Sint64) ((Sint32) SDL_SwapLE32(src[1]));
|
|
|
- Sint64 last_sample0 = (Sint64) ((Sint32) SDL_SwapLE32(src[0]));
|
|
|
- while (dst >= target) {
|
|
|
- const Sint64 sample7 = (Sint64) ((Sint32) SDL_SwapLE32(src[7]));
|
|
|
- const Sint64 sample6 = (Sint64) ((Sint32) SDL_SwapLE32(src[6]));
|
|
|
- const Sint64 sample5 = (Sint64) ((Sint32) SDL_SwapLE32(src[5]));
|
|
|
- const Sint64 sample4 = (Sint64) ((Sint32) SDL_SwapLE32(src[4]));
|
|
|
- const Sint64 sample3 = (Sint64) ((Sint32) SDL_SwapLE32(src[3]));
|
|
|
- const Sint64 sample2 = (Sint64) ((Sint32) SDL_SwapLE32(src[2]));
|
|
|
- const Sint64 sample1 = (Sint64) ((Sint32) SDL_SwapLE32(src[1]));
|
|
|
- const Sint64 sample0 = (Sint64) ((Sint32) SDL_SwapLE32(src[0]));
|
|
|
- src -= 8;
|
|
|
- dst[31] = (Sint32) ((sample7 + (3 * last_sample7)) >> 2);
|
|
|
- dst[30] = (Sint32) ((sample6 + (3 * last_sample6)) >> 2);
|
|
|
- dst[29] = (Sint32) ((sample5 + (3 * last_sample5)) >> 2);
|
|
|
- dst[28] = (Sint32) ((sample4 + (3 * last_sample4)) >> 2);
|
|
|
- dst[27] = (Sint32) ((sample3 + (3 * last_sample3)) >> 2);
|
|
|
- dst[26] = (Sint32) ((sample2 + (3 * last_sample2)) >> 2);
|
|
|
- dst[25] = (Sint32) ((sample1 + (3 * last_sample1)) >> 2);
|
|
|
- dst[24] = (Sint32) ((sample0 + (3 * last_sample0)) >> 2);
|
|
|
- dst[23] = (Sint32) ((sample7 + last_sample7) >> 1);
|
|
|
- dst[22] = (Sint32) ((sample6 + last_sample6) >> 1);
|
|
|
- dst[21] = (Sint32) ((sample5 + last_sample5) >> 1);
|
|
|
- dst[20] = (Sint32) ((sample4 + last_sample4) >> 1);
|
|
|
- dst[19] = (Sint32) ((sample3 + last_sample3) >> 1);
|
|
|
- dst[18] = (Sint32) ((sample2 + last_sample2) >> 1);
|
|
|
- dst[17] = (Sint32) ((sample1 + last_sample1) >> 1);
|
|
|
- dst[16] = (Sint32) ((sample0 + last_sample0) >> 1);
|
|
|
- dst[15] = (Sint32) (((3 * sample7) + last_sample7) >> 2);
|
|
|
- dst[14] = (Sint32) (((3 * sample6) + last_sample6) >> 2);
|
|
|
- dst[13] = (Sint32) (((3 * sample5) + last_sample5) >> 2);
|
|
|
- dst[12] = (Sint32) (((3 * sample4) + last_sample4) >> 2);
|
|
|
- dst[11] = (Sint32) (((3 * sample3) + last_sample3) >> 2);
|
|
|
- dst[10] = (Sint32) (((3 * sample2) + last_sample2) >> 2);
|
|
|
- dst[9] = (Sint32) (((3 * sample1) + last_sample1) >> 2);
|
|
|
- dst[8] = (Sint32) (((3 * sample0) + last_sample0) >> 2);
|
|
|
- dst[7] = (Sint32) sample7;
|
|
|
- dst[6] = (Sint32) sample6;
|
|
|
- dst[5] = (Sint32) sample5;
|
|
|
- dst[4] = (Sint32) sample4;
|
|
|
- dst[3] = (Sint32) sample3;
|
|
|
- dst[2] = (Sint32) sample2;
|
|
|
- dst[1] = (Sint32) sample1;
|
|
|
- dst[0] = (Sint32) sample0;
|
|
|
- last_sample7 = sample7;
|
|
|
- last_sample6 = sample6;
|
|
|
- last_sample5 = sample5;
|
|
|
- last_sample4 = sample4;
|
|
|
- last_sample3 = sample3;
|
|
|
- last_sample2 = sample2;
|
|
|
- last_sample1 = sample1;
|
|
|
- last_sample0 = sample0;
|
|
|
- dst -= 32;
|
|
|
- }
|
|
|
-
|
|
|
- cvt->len_cvt = dstsize;
|
|
|
- if (cvt->filters[++cvt->filter_index]) {
|
|
|
- cvt->filters[cvt->filter_index] (cvt, format);
|
|
|
- }
|
|
|
-}
|
|
|
-
|
|
|
-static void SDLCALL
|
|
|
-SDL_Downsample_S32LSB_8c_x4(SDL_AudioCVT * cvt, SDL_AudioFormat format)
|
|
|
-{
|
|
|
-#if DEBUG_CONVERT
|
|
|
- fprintf(stderr, "Downsample (x4) AUDIO_S32LSB, 8 channels.\n");
|
|
|
-#endif
|
|
|
-
|
|
|
- const int dstsize = cvt->len_cvt / 4;
|
|
|
- Sint32 *dst = (Sint32 *) cvt->buf;
|
|
|
- const Sint32 *src = (Sint32 *) cvt->buf;
|
|
|
- const Sint32 *target = (const Sint32 *) (cvt->buf + dstsize);
|
|
|
- Sint64 last_sample0 = (Sint64) ((Sint32) SDL_SwapLE32(src[0]));
|
|
|
- Sint64 last_sample1 = (Sint64) ((Sint32) SDL_SwapLE32(src[1]));
|
|
|
- Sint64 last_sample2 = (Sint64) ((Sint32) SDL_SwapLE32(src[2]));
|
|
|
- Sint64 last_sample3 = (Sint64) ((Sint32) SDL_SwapLE32(src[3]));
|
|
|
- Sint64 last_sample4 = (Sint64) ((Sint32) SDL_SwapLE32(src[4]));
|
|
|
- Sint64 last_sample5 = (Sint64) ((Sint32) SDL_SwapLE32(src[5]));
|
|
|
- Sint64 last_sample6 = (Sint64) ((Sint32) SDL_SwapLE32(src[6]));
|
|
|
- Sint64 last_sample7 = (Sint64) ((Sint32) SDL_SwapLE32(src[7]));
|
|
|
- while (dst < target) {
|
|
|
- const Sint64 sample0 = (Sint64) ((Sint32) SDL_SwapLE32(src[0]));
|
|
|
- const Sint64 sample1 = (Sint64) ((Sint32) SDL_SwapLE32(src[1]));
|
|
|
- const Sint64 sample2 = (Sint64) ((Sint32) SDL_SwapLE32(src[2]));
|
|
|
- const Sint64 sample3 = (Sint64) ((Sint32) SDL_SwapLE32(src[3]));
|
|
|
- const Sint64 sample4 = (Sint64) ((Sint32) SDL_SwapLE32(src[4]));
|
|
|
- const Sint64 sample5 = (Sint64) ((Sint32) SDL_SwapLE32(src[5]));
|
|
|
- const Sint64 sample6 = (Sint64) ((Sint32) SDL_SwapLE32(src[6]));
|
|
|
- const Sint64 sample7 = (Sint64) ((Sint32) SDL_SwapLE32(src[7]));
|
|
|
- src += 32;
|
|
|
- dst[0] = (Sint32) ((sample0 + last_sample0) >> 1);
|
|
|
- dst[1] = (Sint32) ((sample1 + last_sample1) >> 1);
|
|
|
- dst[2] = (Sint32) ((sample2 + last_sample2) >> 1);
|
|
|
- dst[3] = (Sint32) ((sample3 + last_sample3) >> 1);
|
|
|
- dst[4] = (Sint32) ((sample4 + last_sample4) >> 1);
|
|
|
- dst[5] = (Sint32) ((sample5 + last_sample5) >> 1);
|
|
|
- dst[6] = (Sint32) ((sample6 + last_sample6) >> 1);
|
|
|
- dst[7] = (Sint32) ((sample7 + last_sample7) >> 1);
|
|
|
- last_sample0 = sample0;
|
|
|
- last_sample1 = sample1;
|
|
|
- last_sample2 = sample2;
|
|
|
- last_sample3 = sample3;
|
|
|
- last_sample4 = sample4;
|
|
|
- last_sample5 = sample5;
|
|
|
- last_sample6 = sample6;
|
|
|
- last_sample7 = sample7;
|
|
|
- dst += 8;
|
|
|
- }
|
|
|
-
|
|
|
- cvt->len_cvt = dstsize;
|
|
|
- if (cvt->filters[++cvt->filter_index]) {
|
|
|
- cvt->filters[cvt->filter_index] (cvt, format);
|
|
|
- }
|
|
|
-}
|
|
|
-
|
|
|
-static void SDLCALL
|
|
|
-SDL_Upsample_S32MSB_1c_x2(SDL_AudioCVT * cvt, SDL_AudioFormat format)
|
|
|
-{
|
|
|
-#if DEBUG_CONVERT
|
|
|
- fprintf(stderr, "Upsample (x2) AUDIO_S32MSB, 1 channels.\n");
|
|
|
-#endif
|
|
|
-
|
|
|
- const int dstsize = cvt->len_cvt * 2;
|
|
|
- Sint32 *dst = ((Sint32 *) (cvt->buf + dstsize)) - 1 * 2;
|
|
|
- const Sint32 *src = ((Sint32 *) (cvt->buf + cvt->len_cvt)) - 1;
|
|
|
- const Sint32 *target = ((const Sint32 *) cvt->buf);
|
|
|
- Sint64 last_sample0 = (Sint64) ((Sint32) SDL_SwapBE32(src[0]));
|
|
|
- while (dst >= target) {
|
|
|
- const Sint64 sample0 = (Sint64) ((Sint32) SDL_SwapBE32(src[0]));
|
|
|
- src--;
|
|
|
- dst[1] = (Sint32) ((sample0 + last_sample0) >> 1);
|
|
|
- dst[0] = (Sint32) sample0;
|
|
|
- last_sample0 = sample0;
|
|
|
- dst -= 2;
|
|
|
- }
|
|
|
-
|
|
|
- cvt->len_cvt = dstsize;
|
|
|
- if (cvt->filters[++cvt->filter_index]) {
|
|
|
- cvt->filters[cvt->filter_index] (cvt, format);
|
|
|
- }
|
|
|
-}
|
|
|
-
|
|
|
-static void SDLCALL
|
|
|
-SDL_Downsample_S32MSB_1c_x2(SDL_AudioCVT * cvt, SDL_AudioFormat format)
|
|
|
-{
|
|
|
-#if DEBUG_CONVERT
|
|
|
- fprintf(stderr, "Downsample (x2) AUDIO_S32MSB, 1 channels.\n");
|
|
|
-#endif
|
|
|
-
|
|
|
- const int dstsize = cvt->len_cvt / 2;
|
|
|
- Sint32 *dst = (Sint32 *) cvt->buf;
|
|
|
- const Sint32 *src = (Sint32 *) cvt->buf;
|
|
|
- const Sint32 *target = (const Sint32 *) (cvt->buf + dstsize);
|
|
|
- Sint64 last_sample0 = (Sint64) ((Sint32) SDL_SwapBE32(src[0]));
|
|
|
- while (dst < target) {
|
|
|
- const Sint64 sample0 = (Sint64) ((Sint32) SDL_SwapBE32(src[0]));
|
|
|
- src += 2;
|
|
|
- dst[0] = (Sint32) ((sample0 + last_sample0) >> 1);
|
|
|
- last_sample0 = sample0;
|
|
|
- dst++;
|
|
|
- }
|
|
|
-
|
|
|
- cvt->len_cvt = dstsize;
|
|
|
- if (cvt->filters[++cvt->filter_index]) {
|
|
|
- cvt->filters[cvt->filter_index] (cvt, format);
|
|
|
- }
|
|
|
-}
|
|
|
-
|
|
|
-static void SDLCALL
|
|
|
-SDL_Upsample_S32MSB_1c_x4(SDL_AudioCVT * cvt, SDL_AudioFormat format)
|
|
|
-{
|
|
|
-#if DEBUG_CONVERT
|
|
|
- fprintf(stderr, "Upsample (x4) AUDIO_S32MSB, 1 channels.\n");
|
|
|
-#endif
|
|
|
-
|
|
|
- const int dstsize = cvt->len_cvt * 4;
|
|
|
- Sint32 *dst = ((Sint32 *) (cvt->buf + dstsize)) - 1 * 4;
|
|
|
- const Sint32 *src = ((Sint32 *) (cvt->buf + cvt->len_cvt)) - 1;
|
|
|
- const Sint32 *target = ((const Sint32 *) cvt->buf);
|
|
|
- Sint64 last_sample0 = (Sint64) ((Sint32) SDL_SwapBE32(src[0]));
|
|
|
- while (dst >= target) {
|
|
|
- const Sint64 sample0 = (Sint64) ((Sint32) SDL_SwapBE32(src[0]));
|
|
|
- src--;
|
|
|
- dst[3] = (Sint32) ((sample0 + (3 * last_sample0)) >> 2);
|
|
|
- dst[2] = (Sint32) ((sample0 + last_sample0) >> 1);
|
|
|
- dst[1] = (Sint32) (((3 * sample0) + last_sample0) >> 2);
|
|
|
- dst[0] = (Sint32) sample0;
|
|
|
- last_sample0 = sample0;
|
|
|
- dst -= 4;
|
|
|
- }
|
|
|
-
|
|
|
- cvt->len_cvt = dstsize;
|
|
|
- if (cvt->filters[++cvt->filter_index]) {
|
|
|
- cvt->filters[cvt->filter_index] (cvt, format);
|
|
|
- }
|
|
|
-}
|
|
|
-
|
|
|
-static void SDLCALL
|
|
|
-SDL_Downsample_S32MSB_1c_x4(SDL_AudioCVT * cvt, SDL_AudioFormat format)
|
|
|
-{
|
|
|
-#if DEBUG_CONVERT
|
|
|
- fprintf(stderr, "Downsample (x4) AUDIO_S32MSB, 1 channels.\n");
|
|
|
-#endif
|
|
|
-
|
|
|
- const int dstsize = cvt->len_cvt / 4;
|
|
|
- Sint32 *dst = (Sint32 *) cvt->buf;
|
|
|
- const Sint32 *src = (Sint32 *) cvt->buf;
|
|
|
- const Sint32 *target = (const Sint32 *) (cvt->buf + dstsize);
|
|
|
- Sint64 last_sample0 = (Sint64) ((Sint32) SDL_SwapBE32(src[0]));
|
|
|
- while (dst < target) {
|
|
|
- const Sint64 sample0 = (Sint64) ((Sint32) SDL_SwapBE32(src[0]));
|
|
|
- src += 4;
|
|
|
- dst[0] = (Sint32) ((sample0 + last_sample0) >> 1);
|
|
|
- last_sample0 = sample0;
|
|
|
- dst++;
|
|
|
- }
|
|
|
-
|
|
|
- cvt->len_cvt = dstsize;
|
|
|
- if (cvt->filters[++cvt->filter_index]) {
|
|
|
- cvt->filters[cvt->filter_index] (cvt, format);
|
|
|
- }
|
|
|
-}
|
|
|
-
|
|
|
-static void SDLCALL
|
|
|
-SDL_Upsample_S32MSB_2c_x2(SDL_AudioCVT * cvt, SDL_AudioFormat format)
|
|
|
-{
|
|
|
-#if DEBUG_CONVERT
|
|
|
- fprintf(stderr, "Upsample (x2) AUDIO_S32MSB, 2 channels.\n");
|
|
|
-#endif
|
|
|
-
|
|
|
- const int dstsize = cvt->len_cvt * 2;
|
|
|
- Sint32 *dst = ((Sint32 *) (cvt->buf + dstsize)) - 2 * 2;
|
|
|
- const Sint32 *src = ((Sint32 *) (cvt->buf + cvt->len_cvt)) - 2;
|
|
|
- const Sint32 *target = ((const Sint32 *) cvt->buf);
|
|
|
- Sint64 last_sample1 = (Sint64) ((Sint32) SDL_SwapBE32(src[1]));
|
|
|
- Sint64 last_sample0 = (Sint64) ((Sint32) SDL_SwapBE32(src[0]));
|
|
|
- while (dst >= target) {
|
|
|
- const Sint64 sample1 = (Sint64) ((Sint32) SDL_SwapBE32(src[1]));
|
|
|
- const Sint64 sample0 = (Sint64) ((Sint32) SDL_SwapBE32(src[0]));
|
|
|
- src -= 2;
|
|
|
- dst[3] = (Sint32) ((sample1 + last_sample1) >> 1);
|
|
|
- dst[2] = (Sint32) ((sample0 + last_sample0) >> 1);
|
|
|
- dst[1] = (Sint32) sample1;
|
|
|
- dst[0] = (Sint32) sample0;
|
|
|
- last_sample1 = sample1;
|
|
|
- last_sample0 = sample0;
|
|
|
- dst -= 4;
|
|
|
- }
|
|
|
-
|
|
|
- cvt->len_cvt = dstsize;
|
|
|
- if (cvt->filters[++cvt->filter_index]) {
|
|
|
- cvt->filters[cvt->filter_index] (cvt, format);
|
|
|
- }
|
|
|
-}
|
|
|
-
|
|
|
-static void SDLCALL
|
|
|
-SDL_Downsample_S32MSB_2c_x2(SDL_AudioCVT * cvt, SDL_AudioFormat format)
|
|
|
-{
|
|
|
-#if DEBUG_CONVERT
|
|
|
- fprintf(stderr, "Downsample (x2) AUDIO_S32MSB, 2 channels.\n");
|
|
|
-#endif
|
|
|
-
|
|
|
- const int dstsize = cvt->len_cvt / 2;
|
|
|
- Sint32 *dst = (Sint32 *) cvt->buf;
|
|
|
- const Sint32 *src = (Sint32 *) cvt->buf;
|
|
|
- const Sint32 *target = (const Sint32 *) (cvt->buf + dstsize);
|
|
|
- Sint64 last_sample0 = (Sint64) ((Sint32) SDL_SwapBE32(src[0]));
|
|
|
- Sint64 last_sample1 = (Sint64) ((Sint32) SDL_SwapBE32(src[1]));
|
|
|
- while (dst < target) {
|
|
|
- const Sint64 sample0 = (Sint64) ((Sint32) SDL_SwapBE32(src[0]));
|
|
|
- const Sint64 sample1 = (Sint64) ((Sint32) SDL_SwapBE32(src[1]));
|
|
|
- src += 4;
|
|
|
- dst[0] = (Sint32) ((sample0 + last_sample0) >> 1);
|
|
|
- dst[1] = (Sint32) ((sample1 + last_sample1) >> 1);
|
|
|
- last_sample0 = sample0;
|
|
|
- last_sample1 = sample1;
|
|
|
- dst += 2;
|
|
|
- }
|
|
|
-
|
|
|
- cvt->len_cvt = dstsize;
|
|
|
- if (cvt->filters[++cvt->filter_index]) {
|
|
|
- cvt->filters[cvt->filter_index] (cvt, format);
|
|
|
- }
|
|
|
-}
|
|
|
-
|
|
|
-static void SDLCALL
|
|
|
-SDL_Upsample_S32MSB_2c_x4(SDL_AudioCVT * cvt, SDL_AudioFormat format)
|
|
|
-{
|
|
|
-#if DEBUG_CONVERT
|
|
|
- fprintf(stderr, "Upsample (x4) AUDIO_S32MSB, 2 channels.\n");
|
|
|
-#endif
|
|
|
-
|
|
|
- const int dstsize = cvt->len_cvt * 4;
|
|
|
- Sint32 *dst = ((Sint32 *) (cvt->buf + dstsize)) - 2 * 4;
|
|
|
- const Sint32 *src = ((Sint32 *) (cvt->buf + cvt->len_cvt)) - 2;
|
|
|
- const Sint32 *target = ((const Sint32 *) cvt->buf);
|
|
|
- Sint64 last_sample1 = (Sint64) ((Sint32) SDL_SwapBE32(src[1]));
|
|
|
- Sint64 last_sample0 = (Sint64) ((Sint32) SDL_SwapBE32(src[0]));
|
|
|
- while (dst >= target) {
|
|
|
- const Sint64 sample1 = (Sint64) ((Sint32) SDL_SwapBE32(src[1]));
|
|
|
- const Sint64 sample0 = (Sint64) ((Sint32) SDL_SwapBE32(src[0]));
|
|
|
- src -= 2;
|
|
|
- dst[7] = (Sint32) ((sample1 + (3 * last_sample1)) >> 2);
|
|
|
- dst[6] = (Sint32) ((sample0 + (3 * last_sample0)) >> 2);
|
|
|
- dst[5] = (Sint32) ((sample1 + last_sample1) >> 1);
|
|
|
- dst[4] = (Sint32) ((sample0 + last_sample0) >> 1);
|
|
|
- dst[3] = (Sint32) (((3 * sample1) + last_sample1) >> 2);
|
|
|
- dst[2] = (Sint32) (((3 * sample0) + last_sample0) >> 2);
|
|
|
- dst[1] = (Sint32) sample1;
|
|
|
- dst[0] = (Sint32) sample0;
|
|
|
- last_sample1 = sample1;
|
|
|
- last_sample0 = sample0;
|
|
|
- dst -= 8;
|
|
|
- }
|
|
|
-
|
|
|
- cvt->len_cvt = dstsize;
|
|
|
- if (cvt->filters[++cvt->filter_index]) {
|
|
|
- cvt->filters[cvt->filter_index] (cvt, format);
|
|
|
- }
|
|
|
-}
|
|
|
-
|
|
|
-static void SDLCALL
|
|
|
-SDL_Downsample_S32MSB_2c_x4(SDL_AudioCVT * cvt, SDL_AudioFormat format)
|
|
|
-{
|
|
|
-#if DEBUG_CONVERT
|
|
|
- fprintf(stderr, "Downsample (x4) AUDIO_S32MSB, 2 channels.\n");
|
|
|
-#endif
|
|
|
-
|
|
|
- const int dstsize = cvt->len_cvt / 4;
|
|
|
- Sint32 *dst = (Sint32 *) cvt->buf;
|
|
|
- const Sint32 *src = (Sint32 *) cvt->buf;
|
|
|
- const Sint32 *target = (const Sint32 *) (cvt->buf + dstsize);
|
|
|
- Sint64 last_sample0 = (Sint64) ((Sint32) SDL_SwapBE32(src[0]));
|
|
|
- Sint64 last_sample1 = (Sint64) ((Sint32) SDL_SwapBE32(src[1]));
|
|
|
- while (dst < target) {
|
|
|
- const Sint64 sample0 = (Sint64) ((Sint32) SDL_SwapBE32(src[0]));
|
|
|
- const Sint64 sample1 = (Sint64) ((Sint32) SDL_SwapBE32(src[1]));
|
|
|
- src += 8;
|
|
|
- dst[0] = (Sint32) ((sample0 + last_sample0) >> 1);
|
|
|
- dst[1] = (Sint32) ((sample1 + last_sample1) >> 1);
|
|
|
- last_sample0 = sample0;
|
|
|
- last_sample1 = sample1;
|
|
|
- dst += 2;
|
|
|
- }
|
|
|
-
|
|
|
- cvt->len_cvt = dstsize;
|
|
|
- if (cvt->filters[++cvt->filter_index]) {
|
|
|
- cvt->filters[cvt->filter_index] (cvt, format);
|
|
|
- }
|
|
|
-}
|
|
|
-
|
|
|
-static void SDLCALL
|
|
|
-SDL_Upsample_S32MSB_4c_x2(SDL_AudioCVT * cvt, SDL_AudioFormat format)
|
|
|
-{
|
|
|
-#if DEBUG_CONVERT
|
|
|
- fprintf(stderr, "Upsample (x2) AUDIO_S32MSB, 4 channels.\n");
|
|
|
-#endif
|
|
|
-
|
|
|
- const int dstsize = cvt->len_cvt * 2;
|
|
|
- Sint32 *dst = ((Sint32 *) (cvt->buf + dstsize)) - 4 * 2;
|
|
|
- const Sint32 *src = ((Sint32 *) (cvt->buf + cvt->len_cvt)) - 4;
|
|
|
- const Sint32 *target = ((const Sint32 *) cvt->buf);
|
|
|
- Sint64 last_sample3 = (Sint64) ((Sint32) SDL_SwapBE32(src[3]));
|
|
|
- Sint64 last_sample2 = (Sint64) ((Sint32) SDL_SwapBE32(src[2]));
|
|
|
- Sint64 last_sample1 = (Sint64) ((Sint32) SDL_SwapBE32(src[1]));
|
|
|
- Sint64 last_sample0 = (Sint64) ((Sint32) SDL_SwapBE32(src[0]));
|
|
|
- while (dst >= target) {
|
|
|
- const Sint64 sample3 = (Sint64) ((Sint32) SDL_SwapBE32(src[3]));
|
|
|
- const Sint64 sample2 = (Sint64) ((Sint32) SDL_SwapBE32(src[2]));
|
|
|
- const Sint64 sample1 = (Sint64) ((Sint32) SDL_SwapBE32(src[1]));
|
|
|
- const Sint64 sample0 = (Sint64) ((Sint32) SDL_SwapBE32(src[0]));
|
|
|
- src -= 4;
|
|
|
- dst[7] = (Sint32) ((sample3 + last_sample3) >> 1);
|
|
|
- dst[6] = (Sint32) ((sample2 + last_sample2) >> 1);
|
|
|
- dst[5] = (Sint32) ((sample1 + last_sample1) >> 1);
|
|
|
- dst[4] = (Sint32) ((sample0 + last_sample0) >> 1);
|
|
|
- dst[3] = (Sint32) sample3;
|
|
|
- dst[2] = (Sint32) sample2;
|
|
|
- dst[1] = (Sint32) sample1;
|
|
|
- dst[0] = (Sint32) sample0;
|
|
|
- last_sample3 = sample3;
|
|
|
- last_sample2 = sample2;
|
|
|
- last_sample1 = sample1;
|
|
|
- last_sample0 = sample0;
|
|
|
- dst -= 8;
|
|
|
- }
|
|
|
-
|
|
|
- cvt->len_cvt = dstsize;
|
|
|
- if (cvt->filters[++cvt->filter_index]) {
|
|
|
- cvt->filters[cvt->filter_index] (cvt, format);
|
|
|
- }
|
|
|
-}
|
|
|
-
|
|
|
-static void SDLCALL
|
|
|
-SDL_Downsample_S32MSB_4c_x2(SDL_AudioCVT * cvt, SDL_AudioFormat format)
|
|
|
-{
|
|
|
-#if DEBUG_CONVERT
|
|
|
- fprintf(stderr, "Downsample (x2) AUDIO_S32MSB, 4 channels.\n");
|
|
|
-#endif
|
|
|
-
|
|
|
- const int dstsize = cvt->len_cvt / 2;
|
|
|
- Sint32 *dst = (Sint32 *) cvt->buf;
|
|
|
- const Sint32 *src = (Sint32 *) cvt->buf;
|
|
|
- const Sint32 *target = (const Sint32 *) (cvt->buf + dstsize);
|
|
|
- Sint64 last_sample0 = (Sint64) ((Sint32) SDL_SwapBE32(src[0]));
|
|
|
- Sint64 last_sample1 = (Sint64) ((Sint32) SDL_SwapBE32(src[1]));
|
|
|
- Sint64 last_sample2 = (Sint64) ((Sint32) SDL_SwapBE32(src[2]));
|
|
|
- Sint64 last_sample3 = (Sint64) ((Sint32) SDL_SwapBE32(src[3]));
|
|
|
- while (dst < target) {
|
|
|
- const Sint64 sample0 = (Sint64) ((Sint32) SDL_SwapBE32(src[0]));
|
|
|
- const Sint64 sample1 = (Sint64) ((Sint32) SDL_SwapBE32(src[1]));
|
|
|
- const Sint64 sample2 = (Sint64) ((Sint32) SDL_SwapBE32(src[2]));
|
|
|
- const Sint64 sample3 = (Sint64) ((Sint32) SDL_SwapBE32(src[3]));
|
|
|
- src += 8;
|
|
|
- dst[0] = (Sint32) ((sample0 + last_sample0) >> 1);
|
|
|
- dst[1] = (Sint32) ((sample1 + last_sample1) >> 1);
|
|
|
- dst[2] = (Sint32) ((sample2 + last_sample2) >> 1);
|
|
|
- dst[3] = (Sint32) ((sample3 + last_sample3) >> 1);
|
|
|
- last_sample0 = sample0;
|
|
|
- last_sample1 = sample1;
|
|
|
- last_sample2 = sample2;
|
|
|
- last_sample3 = sample3;
|
|
|
- dst += 4;
|
|
|
- }
|
|
|
-
|
|
|
- cvt->len_cvt = dstsize;
|
|
|
- if (cvt->filters[++cvt->filter_index]) {
|
|
|
- cvt->filters[cvt->filter_index] (cvt, format);
|
|
|
- }
|
|
|
-}
|
|
|
-
|
|
|
-static void SDLCALL
|
|
|
-SDL_Upsample_S32MSB_4c_x4(SDL_AudioCVT * cvt, SDL_AudioFormat format)
|
|
|
-{
|
|
|
-#if DEBUG_CONVERT
|
|
|
- fprintf(stderr, "Upsample (x4) AUDIO_S32MSB, 4 channels.\n");
|
|
|
-#endif
|
|
|
-
|
|
|
- const int dstsize = cvt->len_cvt * 4;
|
|
|
- Sint32 *dst = ((Sint32 *) (cvt->buf + dstsize)) - 4 * 4;
|
|
|
- const Sint32 *src = ((Sint32 *) (cvt->buf + cvt->len_cvt)) - 4;
|
|
|
- const Sint32 *target = ((const Sint32 *) cvt->buf);
|
|
|
- Sint64 last_sample3 = (Sint64) ((Sint32) SDL_SwapBE32(src[3]));
|
|
|
- Sint64 last_sample2 = (Sint64) ((Sint32) SDL_SwapBE32(src[2]));
|
|
|
- Sint64 last_sample1 = (Sint64) ((Sint32) SDL_SwapBE32(src[1]));
|
|
|
- Sint64 last_sample0 = (Sint64) ((Sint32) SDL_SwapBE32(src[0]));
|
|
|
- while (dst >= target) {
|
|
|
- const Sint64 sample3 = (Sint64) ((Sint32) SDL_SwapBE32(src[3]));
|
|
|
- const Sint64 sample2 = (Sint64) ((Sint32) SDL_SwapBE32(src[2]));
|
|
|
- const Sint64 sample1 = (Sint64) ((Sint32) SDL_SwapBE32(src[1]));
|
|
|
- const Sint64 sample0 = (Sint64) ((Sint32) SDL_SwapBE32(src[0]));
|
|
|
- src -= 4;
|
|
|
- dst[15] = (Sint32) ((sample3 + (3 * last_sample3)) >> 2);
|
|
|
- dst[14] = (Sint32) ((sample2 + (3 * last_sample2)) >> 2);
|
|
|
- dst[13] = (Sint32) ((sample1 + (3 * last_sample1)) >> 2);
|
|
|
- dst[12] = (Sint32) ((sample0 + (3 * last_sample0)) >> 2);
|
|
|
- dst[11] = (Sint32) ((sample3 + last_sample3) >> 1);
|
|
|
- dst[10] = (Sint32) ((sample2 + last_sample2) >> 1);
|
|
|
- dst[9] = (Sint32) ((sample1 + last_sample1) >> 1);
|
|
|
- dst[8] = (Sint32) ((sample0 + last_sample0) >> 1);
|
|
|
- dst[7] = (Sint32) (((3 * sample3) + last_sample3) >> 2);
|
|
|
- dst[6] = (Sint32) (((3 * sample2) + last_sample2) >> 2);
|
|
|
- dst[5] = (Sint32) (((3 * sample1) + last_sample1) >> 2);
|
|
|
- dst[4] = (Sint32) (((3 * sample0) + last_sample0) >> 2);
|
|
|
- dst[3] = (Sint32) sample3;
|
|
|
- dst[2] = (Sint32) sample2;
|
|
|
- dst[1] = (Sint32) sample1;
|
|
|
- dst[0] = (Sint32) sample0;
|
|
|
- last_sample3 = sample3;
|
|
|
- last_sample2 = sample2;
|
|
|
- last_sample1 = sample1;
|
|
|
- last_sample0 = sample0;
|
|
|
- dst -= 16;
|
|
|
- }
|
|
|
-
|
|
|
- cvt->len_cvt = dstsize;
|
|
|
- if (cvt->filters[++cvt->filter_index]) {
|
|
|
- cvt->filters[cvt->filter_index] (cvt, format);
|
|
|
- }
|
|
|
-}
|
|
|
-
|
|
|
-static void SDLCALL
|
|
|
-SDL_Downsample_S32MSB_4c_x4(SDL_AudioCVT * cvt, SDL_AudioFormat format)
|
|
|
-{
|
|
|
-#if DEBUG_CONVERT
|
|
|
- fprintf(stderr, "Downsample (x4) AUDIO_S32MSB, 4 channels.\n");
|
|
|
-#endif
|
|
|
-
|
|
|
- const int dstsize = cvt->len_cvt / 4;
|
|
|
- Sint32 *dst = (Sint32 *) cvt->buf;
|
|
|
- const Sint32 *src = (Sint32 *) cvt->buf;
|
|
|
- const Sint32 *target = (const Sint32 *) (cvt->buf + dstsize);
|
|
|
- Sint64 last_sample0 = (Sint64) ((Sint32) SDL_SwapBE32(src[0]));
|
|
|
- Sint64 last_sample1 = (Sint64) ((Sint32) SDL_SwapBE32(src[1]));
|
|
|
- Sint64 last_sample2 = (Sint64) ((Sint32) SDL_SwapBE32(src[2]));
|
|
|
- Sint64 last_sample3 = (Sint64) ((Sint32) SDL_SwapBE32(src[3]));
|
|
|
- while (dst < target) {
|
|
|
- const Sint64 sample0 = (Sint64) ((Sint32) SDL_SwapBE32(src[0]));
|
|
|
- const Sint64 sample1 = (Sint64) ((Sint32) SDL_SwapBE32(src[1]));
|
|
|
- const Sint64 sample2 = (Sint64) ((Sint32) SDL_SwapBE32(src[2]));
|
|
|
- const Sint64 sample3 = (Sint64) ((Sint32) SDL_SwapBE32(src[3]));
|
|
|
- src += 16;
|
|
|
- dst[0] = (Sint32) ((sample0 + last_sample0) >> 1);
|
|
|
- dst[1] = (Sint32) ((sample1 + last_sample1) >> 1);
|
|
|
- dst[2] = (Sint32) ((sample2 + last_sample2) >> 1);
|
|
|
- dst[3] = (Sint32) ((sample3 + last_sample3) >> 1);
|
|
|
- last_sample0 = sample0;
|
|
|
- last_sample1 = sample1;
|
|
|
- last_sample2 = sample2;
|
|
|
- last_sample3 = sample3;
|
|
|
- dst += 4;
|
|
|
- }
|
|
|
-
|
|
|
- cvt->len_cvt = dstsize;
|
|
|
- if (cvt->filters[++cvt->filter_index]) {
|
|
|
- cvt->filters[cvt->filter_index] (cvt, format);
|
|
|
- }
|
|
|
-}
|
|
|
-
|
|
|
-static void SDLCALL
|
|
|
-SDL_Upsample_S32MSB_6c_x2(SDL_AudioCVT * cvt, SDL_AudioFormat format)
|
|
|
-{
|
|
|
-#if DEBUG_CONVERT
|
|
|
- fprintf(stderr, "Upsample (x2) AUDIO_S32MSB, 6 channels.\n");
|
|
|
-#endif
|
|
|
-
|
|
|
- const int dstsize = cvt->len_cvt * 2;
|
|
|
- Sint32 *dst = ((Sint32 *) (cvt->buf + dstsize)) - 6 * 2;
|
|
|
- const Sint32 *src = ((Sint32 *) (cvt->buf + cvt->len_cvt)) - 6;
|
|
|
- const Sint32 *target = ((const Sint32 *) cvt->buf);
|
|
|
- Sint64 last_sample5 = (Sint64) ((Sint32) SDL_SwapBE32(src[5]));
|
|
|
- Sint64 last_sample4 = (Sint64) ((Sint32) SDL_SwapBE32(src[4]));
|
|
|
- Sint64 last_sample3 = (Sint64) ((Sint32) SDL_SwapBE32(src[3]));
|
|
|
- Sint64 last_sample2 = (Sint64) ((Sint32) SDL_SwapBE32(src[2]));
|
|
|
- Sint64 last_sample1 = (Sint64) ((Sint32) SDL_SwapBE32(src[1]));
|
|
|
- Sint64 last_sample0 = (Sint64) ((Sint32) SDL_SwapBE32(src[0]));
|
|
|
- while (dst >= target) {
|
|
|
- const Sint64 sample5 = (Sint64) ((Sint32) SDL_SwapBE32(src[5]));
|
|
|
- const Sint64 sample4 = (Sint64) ((Sint32) SDL_SwapBE32(src[4]));
|
|
|
- const Sint64 sample3 = (Sint64) ((Sint32) SDL_SwapBE32(src[3]));
|
|
|
- const Sint64 sample2 = (Sint64) ((Sint32) SDL_SwapBE32(src[2]));
|
|
|
- const Sint64 sample1 = (Sint64) ((Sint32) SDL_SwapBE32(src[1]));
|
|
|
- const Sint64 sample0 = (Sint64) ((Sint32) SDL_SwapBE32(src[0]));
|
|
|
- src -= 6;
|
|
|
- dst[11] = (Sint32) ((sample5 + last_sample5) >> 1);
|
|
|
- dst[10] = (Sint32) ((sample4 + last_sample4) >> 1);
|
|
|
- dst[9] = (Sint32) ((sample3 + last_sample3) >> 1);
|
|
|
- dst[8] = (Sint32) ((sample2 + last_sample2) >> 1);
|
|
|
- dst[7] = (Sint32) ((sample1 + last_sample1) >> 1);
|
|
|
- dst[6] = (Sint32) ((sample0 + last_sample0) >> 1);
|
|
|
- dst[5] = (Sint32) sample5;
|
|
|
- dst[4] = (Sint32) sample4;
|
|
|
- dst[3] = (Sint32) sample3;
|
|
|
- dst[2] = (Sint32) sample2;
|
|
|
- dst[1] = (Sint32) sample1;
|
|
|
- dst[0] = (Sint32) sample0;
|
|
|
- last_sample5 = sample5;
|
|
|
- last_sample4 = sample4;
|
|
|
- last_sample3 = sample3;
|
|
|
- last_sample2 = sample2;
|
|
|
- last_sample1 = sample1;
|
|
|
- last_sample0 = sample0;
|
|
|
- dst -= 12;
|
|
|
- }
|
|
|
-
|
|
|
- cvt->len_cvt = dstsize;
|
|
|
- if (cvt->filters[++cvt->filter_index]) {
|
|
|
- cvt->filters[cvt->filter_index] (cvt, format);
|
|
|
- }
|
|
|
-}
|
|
|
-
|
|
|
-static void SDLCALL
|
|
|
-SDL_Downsample_S32MSB_6c_x2(SDL_AudioCVT * cvt, SDL_AudioFormat format)
|
|
|
-{
|
|
|
-#if DEBUG_CONVERT
|
|
|
- fprintf(stderr, "Downsample (x2) AUDIO_S32MSB, 6 channels.\n");
|
|
|
-#endif
|
|
|
-
|
|
|
- const int dstsize = cvt->len_cvt / 2;
|
|
|
- Sint32 *dst = (Sint32 *) cvt->buf;
|
|
|
- const Sint32 *src = (Sint32 *) cvt->buf;
|
|
|
- const Sint32 *target = (const Sint32 *) (cvt->buf + dstsize);
|
|
|
- Sint64 last_sample0 = (Sint64) ((Sint32) SDL_SwapBE32(src[0]));
|
|
|
- Sint64 last_sample1 = (Sint64) ((Sint32) SDL_SwapBE32(src[1]));
|
|
|
- Sint64 last_sample2 = (Sint64) ((Sint32) SDL_SwapBE32(src[2]));
|
|
|
- Sint64 last_sample3 = (Sint64) ((Sint32) SDL_SwapBE32(src[3]));
|
|
|
- Sint64 last_sample4 = (Sint64) ((Sint32) SDL_SwapBE32(src[4]));
|
|
|
- Sint64 last_sample5 = (Sint64) ((Sint32) SDL_SwapBE32(src[5]));
|
|
|
- while (dst < target) {
|
|
|
- const Sint64 sample0 = (Sint64) ((Sint32) SDL_SwapBE32(src[0]));
|
|
|
- const Sint64 sample1 = (Sint64) ((Sint32) SDL_SwapBE32(src[1]));
|
|
|
- const Sint64 sample2 = (Sint64) ((Sint32) SDL_SwapBE32(src[2]));
|
|
|
- const Sint64 sample3 = (Sint64) ((Sint32) SDL_SwapBE32(src[3]));
|
|
|
- const Sint64 sample4 = (Sint64) ((Sint32) SDL_SwapBE32(src[4]));
|
|
|
- const Sint64 sample5 = (Sint64) ((Sint32) SDL_SwapBE32(src[5]));
|
|
|
- src += 12;
|
|
|
- dst[0] = (Sint32) ((sample0 + last_sample0) >> 1);
|
|
|
- dst[1] = (Sint32) ((sample1 + last_sample1) >> 1);
|
|
|
- dst[2] = (Sint32) ((sample2 + last_sample2) >> 1);
|
|
|
- dst[3] = (Sint32) ((sample3 + last_sample3) >> 1);
|
|
|
- dst[4] = (Sint32) ((sample4 + last_sample4) >> 1);
|
|
|
- dst[5] = (Sint32) ((sample5 + last_sample5) >> 1);
|
|
|
- last_sample0 = sample0;
|
|
|
- last_sample1 = sample1;
|
|
|
- last_sample2 = sample2;
|
|
|
- last_sample3 = sample3;
|
|
|
- last_sample4 = sample4;
|
|
|
- last_sample5 = sample5;
|
|
|
- dst += 6;
|
|
|
- }
|
|
|
-
|
|
|
- cvt->len_cvt = dstsize;
|
|
|
- if (cvt->filters[++cvt->filter_index]) {
|
|
|
- cvt->filters[cvt->filter_index] (cvt, format);
|
|
|
- }
|
|
|
-}
|
|
|
-
|
|
|
-static void SDLCALL
|
|
|
-SDL_Upsample_S32MSB_6c_x4(SDL_AudioCVT * cvt, SDL_AudioFormat format)
|
|
|
-{
|
|
|
-#if DEBUG_CONVERT
|
|
|
- fprintf(stderr, "Upsample (x4) AUDIO_S32MSB, 6 channels.\n");
|
|
|
-#endif
|
|
|
-
|
|
|
- const int dstsize = cvt->len_cvt * 4;
|
|
|
- Sint32 *dst = ((Sint32 *) (cvt->buf + dstsize)) - 6 * 4;
|
|
|
- const Sint32 *src = ((Sint32 *) (cvt->buf + cvt->len_cvt)) - 6;
|
|
|
- const Sint32 *target = ((const Sint32 *) cvt->buf);
|
|
|
- Sint64 last_sample5 = (Sint64) ((Sint32) SDL_SwapBE32(src[5]));
|
|
|
- Sint64 last_sample4 = (Sint64) ((Sint32) SDL_SwapBE32(src[4]));
|
|
|
- Sint64 last_sample3 = (Sint64) ((Sint32) SDL_SwapBE32(src[3]));
|
|
|
- Sint64 last_sample2 = (Sint64) ((Sint32) SDL_SwapBE32(src[2]));
|
|
|
- Sint64 last_sample1 = (Sint64) ((Sint32) SDL_SwapBE32(src[1]));
|
|
|
- Sint64 last_sample0 = (Sint64) ((Sint32) SDL_SwapBE32(src[0]));
|
|
|
- while (dst >= target) {
|
|
|
- const Sint64 sample5 = (Sint64) ((Sint32) SDL_SwapBE32(src[5]));
|
|
|
- const Sint64 sample4 = (Sint64) ((Sint32) SDL_SwapBE32(src[4]));
|
|
|
- const Sint64 sample3 = (Sint64) ((Sint32) SDL_SwapBE32(src[3]));
|
|
|
- const Sint64 sample2 = (Sint64) ((Sint32) SDL_SwapBE32(src[2]));
|
|
|
- const Sint64 sample1 = (Sint64) ((Sint32) SDL_SwapBE32(src[1]));
|
|
|
- const Sint64 sample0 = (Sint64) ((Sint32) SDL_SwapBE32(src[0]));
|
|
|
- src -= 6;
|
|
|
- dst[23] = (Sint32) ((sample5 + (3 * last_sample5)) >> 2);
|
|
|
- dst[22] = (Sint32) ((sample4 + (3 * last_sample4)) >> 2);
|
|
|
- dst[21] = (Sint32) ((sample3 + (3 * last_sample3)) >> 2);
|
|
|
- dst[20] = (Sint32) ((sample2 + (3 * last_sample2)) >> 2);
|
|
|
- dst[19] = (Sint32) ((sample1 + (3 * last_sample1)) >> 2);
|
|
|
- dst[18] = (Sint32) ((sample0 + (3 * last_sample0)) >> 2);
|
|
|
- dst[17] = (Sint32) ((sample5 + last_sample5) >> 1);
|
|
|
- dst[16] = (Sint32) ((sample4 + last_sample4) >> 1);
|
|
|
- dst[15] = (Sint32) ((sample3 + last_sample3) >> 1);
|
|
|
- dst[14] = (Sint32) ((sample2 + last_sample2) >> 1);
|
|
|
- dst[13] = (Sint32) ((sample1 + last_sample1) >> 1);
|
|
|
- dst[12] = (Sint32) ((sample0 + last_sample0) >> 1);
|
|
|
- dst[11] = (Sint32) (((3 * sample5) + last_sample5) >> 2);
|
|
|
- dst[10] = (Sint32) (((3 * sample4) + last_sample4) >> 2);
|
|
|
- dst[9] = (Sint32) (((3 * sample3) + last_sample3) >> 2);
|
|
|
- dst[8] = (Sint32) (((3 * sample2) + last_sample2) >> 2);
|
|
|
- dst[7] = (Sint32) (((3 * sample1) + last_sample1) >> 2);
|
|
|
- dst[6] = (Sint32) (((3 * sample0) + last_sample0) >> 2);
|
|
|
- dst[5] = (Sint32) sample5;
|
|
|
- dst[4] = (Sint32) sample4;
|
|
|
- dst[3] = (Sint32) sample3;
|
|
|
- dst[2] = (Sint32) sample2;
|
|
|
- dst[1] = (Sint32) sample1;
|
|
|
- dst[0] = (Sint32) sample0;
|
|
|
- last_sample5 = sample5;
|
|
|
- last_sample4 = sample4;
|
|
|
- last_sample3 = sample3;
|
|
|
- last_sample2 = sample2;
|
|
|
- last_sample1 = sample1;
|
|
|
- last_sample0 = sample0;
|
|
|
- dst -= 24;
|
|
|
- }
|
|
|
-
|
|
|
- cvt->len_cvt = dstsize;
|
|
|
- if (cvt->filters[++cvt->filter_index]) {
|
|
|
- cvt->filters[cvt->filter_index] (cvt, format);
|
|
|
- }
|
|
|
-}
|
|
|
-
|
|
|
-static void SDLCALL
|
|
|
-SDL_Downsample_S32MSB_6c_x4(SDL_AudioCVT * cvt, SDL_AudioFormat format)
|
|
|
-{
|
|
|
-#if DEBUG_CONVERT
|
|
|
- fprintf(stderr, "Downsample (x4) AUDIO_S32MSB, 6 channels.\n");
|
|
|
-#endif
|
|
|
-
|
|
|
- const int dstsize = cvt->len_cvt / 4;
|
|
|
- Sint32 *dst = (Sint32 *) cvt->buf;
|
|
|
- const Sint32 *src = (Sint32 *) cvt->buf;
|
|
|
- const Sint32 *target = (const Sint32 *) (cvt->buf + dstsize);
|
|
|
- Sint64 last_sample0 = (Sint64) ((Sint32) SDL_SwapBE32(src[0]));
|
|
|
- Sint64 last_sample1 = (Sint64) ((Sint32) SDL_SwapBE32(src[1]));
|
|
|
- Sint64 last_sample2 = (Sint64) ((Sint32) SDL_SwapBE32(src[2]));
|
|
|
- Sint64 last_sample3 = (Sint64) ((Sint32) SDL_SwapBE32(src[3]));
|
|
|
- Sint64 last_sample4 = (Sint64) ((Sint32) SDL_SwapBE32(src[4]));
|
|
|
- Sint64 last_sample5 = (Sint64) ((Sint32) SDL_SwapBE32(src[5]));
|
|
|
- while (dst < target) {
|
|
|
- const Sint64 sample0 = (Sint64) ((Sint32) SDL_SwapBE32(src[0]));
|
|
|
- const Sint64 sample1 = (Sint64) ((Sint32) SDL_SwapBE32(src[1]));
|
|
|
- const Sint64 sample2 = (Sint64) ((Sint32) SDL_SwapBE32(src[2]));
|
|
|
- const Sint64 sample3 = (Sint64) ((Sint32) SDL_SwapBE32(src[3]));
|
|
|
- const Sint64 sample4 = (Sint64) ((Sint32) SDL_SwapBE32(src[4]));
|
|
|
- const Sint64 sample5 = (Sint64) ((Sint32) SDL_SwapBE32(src[5]));
|
|
|
- src += 24;
|
|
|
- dst[0] = (Sint32) ((sample0 + last_sample0) >> 1);
|
|
|
- dst[1] = (Sint32) ((sample1 + last_sample1) >> 1);
|
|
|
- dst[2] = (Sint32) ((sample2 + last_sample2) >> 1);
|
|
|
- dst[3] = (Sint32) ((sample3 + last_sample3) >> 1);
|
|
|
- dst[4] = (Sint32) ((sample4 + last_sample4) >> 1);
|
|
|
- dst[5] = (Sint32) ((sample5 + last_sample5) >> 1);
|
|
|
- last_sample0 = sample0;
|
|
|
- last_sample1 = sample1;
|
|
|
- last_sample2 = sample2;
|
|
|
- last_sample3 = sample3;
|
|
|
- last_sample4 = sample4;
|
|
|
- last_sample5 = sample5;
|
|
|
- dst += 6;
|
|
|
- }
|
|
|
-
|
|
|
- cvt->len_cvt = dstsize;
|
|
|
- if (cvt->filters[++cvt->filter_index]) {
|
|
|
- cvt->filters[cvt->filter_index] (cvt, format);
|
|
|
- }
|
|
|
-}
|
|
|
-
|
|
|
-static void SDLCALL
|
|
|
-SDL_Upsample_S32MSB_8c_x2(SDL_AudioCVT * cvt, SDL_AudioFormat format)
|
|
|
-{
|
|
|
-#if DEBUG_CONVERT
|
|
|
- fprintf(stderr, "Upsample (x2) AUDIO_S32MSB, 8 channels.\n");
|
|
|
-#endif
|
|
|
-
|
|
|
- const int dstsize = cvt->len_cvt * 2;
|
|
|
- Sint32 *dst = ((Sint32 *) (cvt->buf + dstsize)) - 8 * 2;
|
|
|
- const Sint32 *src = ((Sint32 *) (cvt->buf + cvt->len_cvt)) - 8;
|
|
|
- const Sint32 *target = ((const Sint32 *) cvt->buf);
|
|
|
- Sint64 last_sample7 = (Sint64) ((Sint32) SDL_SwapBE32(src[7]));
|
|
|
- Sint64 last_sample6 = (Sint64) ((Sint32) SDL_SwapBE32(src[6]));
|
|
|
- Sint64 last_sample5 = (Sint64) ((Sint32) SDL_SwapBE32(src[5]));
|
|
|
- Sint64 last_sample4 = (Sint64) ((Sint32) SDL_SwapBE32(src[4]));
|
|
|
- Sint64 last_sample3 = (Sint64) ((Sint32) SDL_SwapBE32(src[3]));
|
|
|
- Sint64 last_sample2 = (Sint64) ((Sint32) SDL_SwapBE32(src[2]));
|
|
|
- Sint64 last_sample1 = (Sint64) ((Sint32) SDL_SwapBE32(src[1]));
|
|
|
- Sint64 last_sample0 = (Sint64) ((Sint32) SDL_SwapBE32(src[0]));
|
|
|
- while (dst >= target) {
|
|
|
- const Sint64 sample7 = (Sint64) ((Sint32) SDL_SwapBE32(src[7]));
|
|
|
- const Sint64 sample6 = (Sint64) ((Sint32) SDL_SwapBE32(src[6]));
|
|
|
- const Sint64 sample5 = (Sint64) ((Sint32) SDL_SwapBE32(src[5]));
|
|
|
- const Sint64 sample4 = (Sint64) ((Sint32) SDL_SwapBE32(src[4]));
|
|
|
- const Sint64 sample3 = (Sint64) ((Sint32) SDL_SwapBE32(src[3]));
|
|
|
- const Sint64 sample2 = (Sint64) ((Sint32) SDL_SwapBE32(src[2]));
|
|
|
- const Sint64 sample1 = (Sint64) ((Sint32) SDL_SwapBE32(src[1]));
|
|
|
- const Sint64 sample0 = (Sint64) ((Sint32) SDL_SwapBE32(src[0]));
|
|
|
- src -= 8;
|
|
|
- dst[15] = (Sint32) ((sample7 + last_sample7) >> 1);
|
|
|
- dst[14] = (Sint32) ((sample6 + last_sample6) >> 1);
|
|
|
- dst[13] = (Sint32) ((sample5 + last_sample5) >> 1);
|
|
|
- dst[12] = (Sint32) ((sample4 + last_sample4) >> 1);
|
|
|
- dst[11] = (Sint32) ((sample3 + last_sample3) >> 1);
|
|
|
- dst[10] = (Sint32) ((sample2 + last_sample2) >> 1);
|
|
|
- dst[9] = (Sint32) ((sample1 + last_sample1) >> 1);
|
|
|
- dst[8] = (Sint32) ((sample0 + last_sample0) >> 1);
|
|
|
- dst[7] = (Sint32) sample7;
|
|
|
- dst[6] = (Sint32) sample6;
|
|
|
- dst[5] = (Sint32) sample5;
|
|
|
- dst[4] = (Sint32) sample4;
|
|
|
- dst[3] = (Sint32) sample3;
|
|
|
- dst[2] = (Sint32) sample2;
|
|
|
- dst[1] = (Sint32) sample1;
|
|
|
- dst[0] = (Sint32) sample0;
|
|
|
- last_sample7 = sample7;
|
|
|
- last_sample6 = sample6;
|
|
|
- last_sample5 = sample5;
|
|
|
- last_sample4 = sample4;
|
|
|
- last_sample3 = sample3;
|
|
|
- last_sample2 = sample2;
|
|
|
- last_sample1 = sample1;
|
|
|
- last_sample0 = sample0;
|
|
|
- dst -= 16;
|
|
|
- }
|
|
|
-
|
|
|
- cvt->len_cvt = dstsize;
|
|
|
- if (cvt->filters[++cvt->filter_index]) {
|
|
|
- cvt->filters[cvt->filter_index] (cvt, format);
|
|
|
- }
|
|
|
-}
|
|
|
-
|
|
|
-static void SDLCALL
|
|
|
-SDL_Downsample_S32MSB_8c_x2(SDL_AudioCVT * cvt, SDL_AudioFormat format)
|
|
|
-{
|
|
|
-#if DEBUG_CONVERT
|
|
|
- fprintf(stderr, "Downsample (x2) AUDIO_S32MSB, 8 channels.\n");
|
|
|
-#endif
|
|
|
-
|
|
|
- const int dstsize = cvt->len_cvt / 2;
|
|
|
- Sint32 *dst = (Sint32 *) cvt->buf;
|
|
|
- const Sint32 *src = (Sint32 *) cvt->buf;
|
|
|
- const Sint32 *target = (const Sint32 *) (cvt->buf + dstsize);
|
|
|
- Sint64 last_sample0 = (Sint64) ((Sint32) SDL_SwapBE32(src[0]));
|
|
|
- Sint64 last_sample1 = (Sint64) ((Sint32) SDL_SwapBE32(src[1]));
|
|
|
- Sint64 last_sample2 = (Sint64) ((Sint32) SDL_SwapBE32(src[2]));
|
|
|
- Sint64 last_sample3 = (Sint64) ((Sint32) SDL_SwapBE32(src[3]));
|
|
|
- Sint64 last_sample4 = (Sint64) ((Sint32) SDL_SwapBE32(src[4]));
|
|
|
- Sint64 last_sample5 = (Sint64) ((Sint32) SDL_SwapBE32(src[5]));
|
|
|
- Sint64 last_sample6 = (Sint64) ((Sint32) SDL_SwapBE32(src[6]));
|
|
|
- Sint64 last_sample7 = (Sint64) ((Sint32) SDL_SwapBE32(src[7]));
|
|
|
- while (dst < target) {
|
|
|
- const Sint64 sample0 = (Sint64) ((Sint32) SDL_SwapBE32(src[0]));
|
|
|
- const Sint64 sample1 = (Sint64) ((Sint32) SDL_SwapBE32(src[1]));
|
|
|
- const Sint64 sample2 = (Sint64) ((Sint32) SDL_SwapBE32(src[2]));
|
|
|
- const Sint64 sample3 = (Sint64) ((Sint32) SDL_SwapBE32(src[3]));
|
|
|
- const Sint64 sample4 = (Sint64) ((Sint32) SDL_SwapBE32(src[4]));
|
|
|
- const Sint64 sample5 = (Sint64) ((Sint32) SDL_SwapBE32(src[5]));
|
|
|
- const Sint64 sample6 = (Sint64) ((Sint32) SDL_SwapBE32(src[6]));
|
|
|
- const Sint64 sample7 = (Sint64) ((Sint32) SDL_SwapBE32(src[7]));
|
|
|
- src += 16;
|
|
|
- dst[0] = (Sint32) ((sample0 + last_sample0) >> 1);
|
|
|
- dst[1] = (Sint32) ((sample1 + last_sample1) >> 1);
|
|
|
- dst[2] = (Sint32) ((sample2 + last_sample2) >> 1);
|
|
|
- dst[3] = (Sint32) ((sample3 + last_sample3) >> 1);
|
|
|
- dst[4] = (Sint32) ((sample4 + last_sample4) >> 1);
|
|
|
- dst[5] = (Sint32) ((sample5 + last_sample5) >> 1);
|
|
|
- dst[6] = (Sint32) ((sample6 + last_sample6) >> 1);
|
|
|
- dst[7] = (Sint32) ((sample7 + last_sample7) >> 1);
|
|
|
- last_sample0 = sample0;
|
|
|
- last_sample1 = sample1;
|
|
|
- last_sample2 = sample2;
|
|
|
- last_sample3 = sample3;
|
|
|
- last_sample4 = sample4;
|
|
|
- last_sample5 = sample5;
|
|
|
- last_sample6 = sample6;
|
|
|
- last_sample7 = sample7;
|
|
|
- dst += 8;
|
|
|
- }
|
|
|
-
|
|
|
- cvt->len_cvt = dstsize;
|
|
|
- if (cvt->filters[++cvt->filter_index]) {
|
|
|
- cvt->filters[cvt->filter_index] (cvt, format);
|
|
|
- }
|
|
|
-}
|
|
|
-
|
|
|
-static void SDLCALL
|
|
|
-SDL_Upsample_S32MSB_8c_x4(SDL_AudioCVT * cvt, SDL_AudioFormat format)
|
|
|
-{
|
|
|
-#if DEBUG_CONVERT
|
|
|
- fprintf(stderr, "Upsample (x4) AUDIO_S32MSB, 8 channels.\n");
|
|
|
-#endif
|
|
|
-
|
|
|
- const int dstsize = cvt->len_cvt * 4;
|
|
|
- Sint32 *dst = ((Sint32 *) (cvt->buf + dstsize)) - 8 * 4;
|
|
|
- const Sint32 *src = ((Sint32 *) (cvt->buf + cvt->len_cvt)) - 8;
|
|
|
- const Sint32 *target = ((const Sint32 *) cvt->buf);
|
|
|
- Sint64 last_sample7 = (Sint64) ((Sint32) SDL_SwapBE32(src[7]));
|
|
|
- Sint64 last_sample6 = (Sint64) ((Sint32) SDL_SwapBE32(src[6]));
|
|
|
- Sint64 last_sample5 = (Sint64) ((Sint32) SDL_SwapBE32(src[5]));
|
|
|
- Sint64 last_sample4 = (Sint64) ((Sint32) SDL_SwapBE32(src[4]));
|
|
|
- Sint64 last_sample3 = (Sint64) ((Sint32) SDL_SwapBE32(src[3]));
|
|
|
- Sint64 last_sample2 = (Sint64) ((Sint32) SDL_SwapBE32(src[2]));
|
|
|
- Sint64 last_sample1 = (Sint64) ((Sint32) SDL_SwapBE32(src[1]));
|
|
|
- Sint64 last_sample0 = (Sint64) ((Sint32) SDL_SwapBE32(src[0]));
|
|
|
- while (dst >= target) {
|
|
|
- const Sint64 sample7 = (Sint64) ((Sint32) SDL_SwapBE32(src[7]));
|
|
|
- const Sint64 sample6 = (Sint64) ((Sint32) SDL_SwapBE32(src[6]));
|
|
|
- const Sint64 sample5 = (Sint64) ((Sint32) SDL_SwapBE32(src[5]));
|
|
|
- const Sint64 sample4 = (Sint64) ((Sint32) SDL_SwapBE32(src[4]));
|
|
|
- const Sint64 sample3 = (Sint64) ((Sint32) SDL_SwapBE32(src[3]));
|
|
|
- const Sint64 sample2 = (Sint64) ((Sint32) SDL_SwapBE32(src[2]));
|
|
|
- const Sint64 sample1 = (Sint64) ((Sint32) SDL_SwapBE32(src[1]));
|
|
|
- const Sint64 sample0 = (Sint64) ((Sint32) SDL_SwapBE32(src[0]));
|
|
|
- src -= 8;
|
|
|
- dst[31] = (Sint32) ((sample7 + (3 * last_sample7)) >> 2);
|
|
|
- dst[30] = (Sint32) ((sample6 + (3 * last_sample6)) >> 2);
|
|
|
- dst[29] = (Sint32) ((sample5 + (3 * last_sample5)) >> 2);
|
|
|
- dst[28] = (Sint32) ((sample4 + (3 * last_sample4)) >> 2);
|
|
|
- dst[27] = (Sint32) ((sample3 + (3 * last_sample3)) >> 2);
|
|
|
- dst[26] = (Sint32) ((sample2 + (3 * last_sample2)) >> 2);
|
|
|
- dst[25] = (Sint32) ((sample1 + (3 * last_sample1)) >> 2);
|
|
|
- dst[24] = (Sint32) ((sample0 + (3 * last_sample0)) >> 2);
|
|
|
- dst[23] = (Sint32) ((sample7 + last_sample7) >> 1);
|
|
|
- dst[22] = (Sint32) ((sample6 + last_sample6) >> 1);
|
|
|
- dst[21] = (Sint32) ((sample5 + last_sample5) >> 1);
|
|
|
- dst[20] = (Sint32) ((sample4 + last_sample4) >> 1);
|
|
|
- dst[19] = (Sint32) ((sample3 + last_sample3) >> 1);
|
|
|
- dst[18] = (Sint32) ((sample2 + last_sample2) >> 1);
|
|
|
- dst[17] = (Sint32) ((sample1 + last_sample1) >> 1);
|
|
|
- dst[16] = (Sint32) ((sample0 + last_sample0) >> 1);
|
|
|
- dst[15] = (Sint32) (((3 * sample7) + last_sample7) >> 2);
|
|
|
- dst[14] = (Sint32) (((3 * sample6) + last_sample6) >> 2);
|
|
|
- dst[13] = (Sint32) (((3 * sample5) + last_sample5) >> 2);
|
|
|
- dst[12] = (Sint32) (((3 * sample4) + last_sample4) >> 2);
|
|
|
- dst[11] = (Sint32) (((3 * sample3) + last_sample3) >> 2);
|
|
|
- dst[10] = (Sint32) (((3 * sample2) + last_sample2) >> 2);
|
|
|
- dst[9] = (Sint32) (((3 * sample1) + last_sample1) >> 2);
|
|
|
- dst[8] = (Sint32) (((3 * sample0) + last_sample0) >> 2);
|
|
|
- dst[7] = (Sint32) sample7;
|
|
|
- dst[6] = (Sint32) sample6;
|
|
|
- dst[5] = (Sint32) sample5;
|
|
|
- dst[4] = (Sint32) sample4;
|
|
|
- dst[3] = (Sint32) sample3;
|
|
|
- dst[2] = (Sint32) sample2;
|
|
|
- dst[1] = (Sint32) sample1;
|
|
|
- dst[0] = (Sint32) sample0;
|
|
|
- last_sample7 = sample7;
|
|
|
- last_sample6 = sample6;
|
|
|
- last_sample5 = sample5;
|
|
|
- last_sample4 = sample4;
|
|
|
- last_sample3 = sample3;
|
|
|
- last_sample2 = sample2;
|
|
|
- last_sample1 = sample1;
|
|
|
- last_sample0 = sample0;
|
|
|
- dst -= 32;
|
|
|
- }
|
|
|
-
|
|
|
- cvt->len_cvt = dstsize;
|
|
|
- if (cvt->filters[++cvt->filter_index]) {
|
|
|
- cvt->filters[cvt->filter_index] (cvt, format);
|
|
|
- }
|
|
|
-}
|
|
|
-
|
|
|
-static void SDLCALL
|
|
|
-SDL_Downsample_S32MSB_8c_x4(SDL_AudioCVT * cvt, SDL_AudioFormat format)
|
|
|
-{
|
|
|
-#if DEBUG_CONVERT
|
|
|
- fprintf(stderr, "Downsample (x4) AUDIO_S32MSB, 8 channels.\n");
|
|
|
-#endif
|
|
|
-
|
|
|
- const int dstsize = cvt->len_cvt / 4;
|
|
|
- Sint32 *dst = (Sint32 *) cvt->buf;
|
|
|
- const Sint32 *src = (Sint32 *) cvt->buf;
|
|
|
- const Sint32 *target = (const Sint32 *) (cvt->buf + dstsize);
|
|
|
- Sint64 last_sample0 = (Sint64) ((Sint32) SDL_SwapBE32(src[0]));
|
|
|
- Sint64 last_sample1 = (Sint64) ((Sint32) SDL_SwapBE32(src[1]));
|
|
|
- Sint64 last_sample2 = (Sint64) ((Sint32) SDL_SwapBE32(src[2]));
|
|
|
- Sint64 last_sample3 = (Sint64) ((Sint32) SDL_SwapBE32(src[3]));
|
|
|
- Sint64 last_sample4 = (Sint64) ((Sint32) SDL_SwapBE32(src[4]));
|
|
|
- Sint64 last_sample5 = (Sint64) ((Sint32) SDL_SwapBE32(src[5]));
|
|
|
- Sint64 last_sample6 = (Sint64) ((Sint32) SDL_SwapBE32(src[6]));
|
|
|
- Sint64 last_sample7 = (Sint64) ((Sint32) SDL_SwapBE32(src[7]));
|
|
|
- while (dst < target) {
|
|
|
- const Sint64 sample0 = (Sint64) ((Sint32) SDL_SwapBE32(src[0]));
|
|
|
- const Sint64 sample1 = (Sint64) ((Sint32) SDL_SwapBE32(src[1]));
|
|
|
- const Sint64 sample2 = (Sint64) ((Sint32) SDL_SwapBE32(src[2]));
|
|
|
- const Sint64 sample3 = (Sint64) ((Sint32) SDL_SwapBE32(src[3]));
|
|
|
- const Sint64 sample4 = (Sint64) ((Sint32) SDL_SwapBE32(src[4]));
|
|
|
- const Sint64 sample5 = (Sint64) ((Sint32) SDL_SwapBE32(src[5]));
|
|
|
- const Sint64 sample6 = (Sint64) ((Sint32) SDL_SwapBE32(src[6]));
|
|
|
- const Sint64 sample7 = (Sint64) ((Sint32) SDL_SwapBE32(src[7]));
|
|
|
- src += 32;
|
|
|
- dst[0] = (Sint32) ((sample0 + last_sample0) >> 1);
|
|
|
- dst[1] = (Sint32) ((sample1 + last_sample1) >> 1);
|
|
|
- dst[2] = (Sint32) ((sample2 + last_sample2) >> 1);
|
|
|
- dst[3] = (Sint32) ((sample3 + last_sample3) >> 1);
|
|
|
- dst[4] = (Sint32) ((sample4 + last_sample4) >> 1);
|
|
|
- dst[5] = (Sint32) ((sample5 + last_sample5) >> 1);
|
|
|
- dst[6] = (Sint32) ((sample6 + last_sample6) >> 1);
|
|
|
- dst[7] = (Sint32) ((sample7 + last_sample7) >> 1);
|
|
|
- last_sample0 = sample0;
|
|
|
- last_sample1 = sample1;
|
|
|
- last_sample2 = sample2;
|
|
|
- last_sample3 = sample3;
|
|
|
- last_sample4 = sample4;
|
|
|
- last_sample5 = sample5;
|
|
|
- last_sample6 = sample6;
|
|
|
- last_sample7 = sample7;
|
|
|
- dst += 8;
|
|
|
- }
|
|
|
-
|
|
|
- cvt->len_cvt = dstsize;
|
|
|
- if (cvt->filters[++cvt->filter_index]) {
|
|
|
- cvt->filters[cvt->filter_index] (cvt, format);
|
|
|
- }
|
|
|
-}
|
|
|
-
|
|
|
-static void SDLCALL
|
|
|
-SDL_Upsample_F32LSB_1c_x2(SDL_AudioCVT * cvt, SDL_AudioFormat format)
|
|
|
-{
|
|
|
-#if DEBUG_CONVERT
|
|
|
- fprintf(stderr, "Upsample (x2) AUDIO_F32LSB, 1 channels.\n");
|
|
|
-#endif
|
|
|
-
|
|
|
- const int dstsize = cvt->len_cvt * 2;
|
|
|
- float *dst = ((float *) (cvt->buf + dstsize)) - 1 * 2;
|
|
|
- const float *src = ((float *) (cvt->buf + cvt->len_cvt)) - 1;
|
|
|
- const float *target = ((const float *) cvt->buf);
|
|
|
- double last_sample0 = (double) SDL_SwapFloatLE(src[0]);
|
|
|
- while (dst >= target) {
|
|
|
- const double sample0 = (double) SDL_SwapFloatLE(src[0]);
|
|
|
- src--;
|
|
|
- dst[1] = (float) ((sample0 + last_sample0) * 0.5);
|
|
|
- dst[0] = (float) sample0;
|
|
|
- last_sample0 = sample0;
|
|
|
- dst -= 2;
|
|
|
- }
|
|
|
-
|
|
|
- cvt->len_cvt = dstsize;
|
|
|
- if (cvt->filters[++cvt->filter_index]) {
|
|
|
- cvt->filters[cvt->filter_index] (cvt, format);
|
|
|
- }
|
|
|
-}
|
|
|
-
|
|
|
-static void SDLCALL
|
|
|
-SDL_Downsample_F32LSB_1c_x2(SDL_AudioCVT * cvt, SDL_AudioFormat format)
|
|
|
-{
|
|
|
-#if DEBUG_CONVERT
|
|
|
- fprintf(stderr, "Downsample (x2) AUDIO_F32LSB, 1 channels.\n");
|
|
|
-#endif
|
|
|
-
|
|
|
- const int dstsize = cvt->len_cvt / 2;
|
|
|
- float *dst = (float *) cvt->buf;
|
|
|
- const float *src = (float *) cvt->buf;
|
|
|
- const float *target = (const float *) (cvt->buf + dstsize);
|
|
|
- double last_sample0 = (double) SDL_SwapFloatLE(src[0]);
|
|
|
- while (dst < target) {
|
|
|
- const double sample0 = (double) SDL_SwapFloatLE(src[0]);
|
|
|
- src += 2;
|
|
|
- dst[0] = (float) ((sample0 + last_sample0) * 0.5);
|
|
|
- last_sample0 = sample0;
|
|
|
- dst++;
|
|
|
- }
|
|
|
-
|
|
|
- cvt->len_cvt = dstsize;
|
|
|
- if (cvt->filters[++cvt->filter_index]) {
|
|
|
- cvt->filters[cvt->filter_index] (cvt, format);
|
|
|
- }
|
|
|
-}
|
|
|
-
|
|
|
-static void SDLCALL
|
|
|
-SDL_Upsample_F32LSB_1c_x4(SDL_AudioCVT * cvt, SDL_AudioFormat format)
|
|
|
-{
|
|
|
-#if DEBUG_CONVERT
|
|
|
- fprintf(stderr, "Upsample (x4) AUDIO_F32LSB, 1 channels.\n");
|
|
|
-#endif
|
|
|
-
|
|
|
- const int dstsize = cvt->len_cvt * 4;
|
|
|
- float *dst = ((float *) (cvt->buf + dstsize)) - 1 * 4;
|
|
|
- const float *src = ((float *) (cvt->buf + cvt->len_cvt)) - 1;
|
|
|
- const float *target = ((const float *) cvt->buf);
|
|
|
- double last_sample0 = (double) SDL_SwapFloatLE(src[0]);
|
|
|
- while (dst >= target) {
|
|
|
- const double sample0 = (double) SDL_SwapFloatLE(src[0]);
|
|
|
- src--;
|
|
|
- dst[3] = (float) ((sample0 + (3.0 * last_sample0)) * 0.25);
|
|
|
- dst[2] = (float) ((sample0 + last_sample0) * 0.5);
|
|
|
- dst[1] = (float) (((3.0 * sample0) + last_sample0) * 0.25);
|
|
|
- dst[0] = (float) sample0;
|
|
|
- last_sample0 = sample0;
|
|
|
- dst -= 4;
|
|
|
- }
|
|
|
-
|
|
|
- cvt->len_cvt = dstsize;
|
|
|
- if (cvt->filters[++cvt->filter_index]) {
|
|
|
- cvt->filters[cvt->filter_index] (cvt, format);
|
|
|
- }
|
|
|
-}
|
|
|
-
|
|
|
-static void SDLCALL
|
|
|
-SDL_Downsample_F32LSB_1c_x4(SDL_AudioCVT * cvt, SDL_AudioFormat format)
|
|
|
-{
|
|
|
-#if DEBUG_CONVERT
|
|
|
- fprintf(stderr, "Downsample (x4) AUDIO_F32LSB, 1 channels.\n");
|
|
|
-#endif
|
|
|
-
|
|
|
- const int dstsize = cvt->len_cvt / 4;
|
|
|
- float *dst = (float *) cvt->buf;
|
|
|
- const float *src = (float *) cvt->buf;
|
|
|
- const float *target = (const float *) (cvt->buf + dstsize);
|
|
|
- double last_sample0 = (double) SDL_SwapFloatLE(src[0]);
|
|
|
- while (dst < target) {
|
|
|
- const double sample0 = (double) SDL_SwapFloatLE(src[0]);
|
|
|
- src += 4;
|
|
|
- dst[0] = (float) ((sample0 + last_sample0) * 0.5);
|
|
|
- last_sample0 = sample0;
|
|
|
- dst++;
|
|
|
- }
|
|
|
-
|
|
|
- cvt->len_cvt = dstsize;
|
|
|
- if (cvt->filters[++cvt->filter_index]) {
|
|
|
- cvt->filters[cvt->filter_index] (cvt, format);
|
|
|
- }
|
|
|
-}
|
|
|
-
|
|
|
-static void SDLCALL
|
|
|
-SDL_Upsample_F32LSB_2c_x2(SDL_AudioCVT * cvt, SDL_AudioFormat format)
|
|
|
-{
|
|
|
-#if DEBUG_CONVERT
|
|
|
- fprintf(stderr, "Upsample (x2) AUDIO_F32LSB, 2 channels.\n");
|
|
|
-#endif
|
|
|
-
|
|
|
- const int dstsize = cvt->len_cvt * 2;
|
|
|
- float *dst = ((float *) (cvt->buf + dstsize)) - 2 * 2;
|
|
|
- const float *src = ((float *) (cvt->buf + cvt->len_cvt)) - 2;
|
|
|
- const float *target = ((const float *) cvt->buf);
|
|
|
- double last_sample1 = (double) SDL_SwapFloatLE(src[1]);
|
|
|
- double last_sample0 = (double) SDL_SwapFloatLE(src[0]);
|
|
|
- while (dst >= target) {
|
|
|
- const double sample1 = (double) SDL_SwapFloatLE(src[1]);
|
|
|
- const double sample0 = (double) SDL_SwapFloatLE(src[0]);
|
|
|
- src -= 2;
|
|
|
- dst[3] = (float) ((sample1 + last_sample1) * 0.5);
|
|
|
- dst[2] = (float) ((sample0 + last_sample0) * 0.5);
|
|
|
- dst[1] = (float) sample1;
|
|
|
- dst[0] = (float) sample0;
|
|
|
- last_sample1 = sample1;
|
|
|
- last_sample0 = sample0;
|
|
|
- dst -= 4;
|
|
|
- }
|
|
|
-
|
|
|
- cvt->len_cvt = dstsize;
|
|
|
- if (cvt->filters[++cvt->filter_index]) {
|
|
|
- cvt->filters[cvt->filter_index] (cvt, format);
|
|
|
- }
|
|
|
-}
|
|
|
-
|
|
|
-static void SDLCALL
|
|
|
-SDL_Downsample_F32LSB_2c_x2(SDL_AudioCVT * cvt, SDL_AudioFormat format)
|
|
|
-{
|
|
|
-#if DEBUG_CONVERT
|
|
|
- fprintf(stderr, "Downsample (x2) AUDIO_F32LSB, 2 channels.\n");
|
|
|
-#endif
|
|
|
-
|
|
|
- const int dstsize = cvt->len_cvt / 2;
|
|
|
- float *dst = (float *) cvt->buf;
|
|
|
- const float *src = (float *) cvt->buf;
|
|
|
- const float *target = (const float *) (cvt->buf + dstsize);
|
|
|
- double last_sample0 = (double) SDL_SwapFloatLE(src[0]);
|
|
|
- double last_sample1 = (double) SDL_SwapFloatLE(src[1]);
|
|
|
- while (dst < target) {
|
|
|
- const double sample0 = (double) SDL_SwapFloatLE(src[0]);
|
|
|
- const double sample1 = (double) SDL_SwapFloatLE(src[1]);
|
|
|
- src += 4;
|
|
|
- dst[0] = (float) ((sample0 + last_sample0) * 0.5);
|
|
|
- dst[1] = (float) ((sample1 + last_sample1) * 0.5);
|
|
|
- last_sample0 = sample0;
|
|
|
- last_sample1 = sample1;
|
|
|
- dst += 2;
|
|
|
- }
|
|
|
-
|
|
|
- cvt->len_cvt = dstsize;
|
|
|
- if (cvt->filters[++cvt->filter_index]) {
|
|
|
- cvt->filters[cvt->filter_index] (cvt, format);
|
|
|
- }
|
|
|
-}
|
|
|
-
|
|
|
-static void SDLCALL
|
|
|
-SDL_Upsample_F32LSB_2c_x4(SDL_AudioCVT * cvt, SDL_AudioFormat format)
|
|
|
-{
|
|
|
-#if DEBUG_CONVERT
|
|
|
- fprintf(stderr, "Upsample (x4) AUDIO_F32LSB, 2 channels.\n");
|
|
|
-#endif
|
|
|
-
|
|
|
- const int dstsize = cvt->len_cvt * 4;
|
|
|
- float *dst = ((float *) (cvt->buf + dstsize)) - 2 * 4;
|
|
|
- const float *src = ((float *) (cvt->buf + cvt->len_cvt)) - 2;
|
|
|
- const float *target = ((const float *) cvt->buf);
|
|
|
- double last_sample1 = (double) SDL_SwapFloatLE(src[1]);
|
|
|
- double last_sample0 = (double) SDL_SwapFloatLE(src[0]);
|
|
|
- while (dst >= target) {
|
|
|
- const double sample1 = (double) SDL_SwapFloatLE(src[1]);
|
|
|
- const double sample0 = (double) SDL_SwapFloatLE(src[0]);
|
|
|
- src -= 2;
|
|
|
- dst[7] = (float) ((sample1 + (3.0 * last_sample1)) * 0.25);
|
|
|
- dst[6] = (float) ((sample0 + (3.0 * last_sample0)) * 0.25);
|
|
|
- dst[5] = (float) ((sample1 + last_sample1) * 0.5);
|
|
|
- dst[4] = (float) ((sample0 + last_sample0) * 0.5);
|
|
|
- dst[3] = (float) (((3.0 * sample1) + last_sample1) * 0.25);
|
|
|
- dst[2] = (float) (((3.0 * sample0) + last_sample0) * 0.25);
|
|
|
- dst[1] = (float) sample1;
|
|
|
- dst[0] = (float) sample0;
|
|
|
- last_sample1 = sample1;
|
|
|
- last_sample0 = sample0;
|
|
|
- dst -= 8;
|
|
|
- }
|
|
|
-
|
|
|
- cvt->len_cvt = dstsize;
|
|
|
- if (cvt->filters[++cvt->filter_index]) {
|
|
|
- cvt->filters[cvt->filter_index] (cvt, format);
|
|
|
- }
|
|
|
-}
|
|
|
-
|
|
|
-static void SDLCALL
|
|
|
-SDL_Downsample_F32LSB_2c_x4(SDL_AudioCVT * cvt, SDL_AudioFormat format)
|
|
|
-{
|
|
|
-#if DEBUG_CONVERT
|
|
|
- fprintf(stderr, "Downsample (x4) AUDIO_F32LSB, 2 channels.\n");
|
|
|
-#endif
|
|
|
-
|
|
|
- const int dstsize = cvt->len_cvt / 4;
|
|
|
- float *dst = (float *) cvt->buf;
|
|
|
- const float *src = (float *) cvt->buf;
|
|
|
- const float *target = (const float *) (cvt->buf + dstsize);
|
|
|
- double last_sample0 = (double) SDL_SwapFloatLE(src[0]);
|
|
|
- double last_sample1 = (double) SDL_SwapFloatLE(src[1]);
|
|
|
- while (dst < target) {
|
|
|
- const double sample0 = (double) SDL_SwapFloatLE(src[0]);
|
|
|
- const double sample1 = (double) SDL_SwapFloatLE(src[1]);
|
|
|
- src += 8;
|
|
|
- dst[0] = (float) ((sample0 + last_sample0) * 0.5);
|
|
|
- dst[1] = (float) ((sample1 + last_sample1) * 0.5);
|
|
|
- last_sample0 = sample0;
|
|
|
- last_sample1 = sample1;
|
|
|
- dst += 2;
|
|
|
- }
|
|
|
-
|
|
|
- cvt->len_cvt = dstsize;
|
|
|
- if (cvt->filters[++cvt->filter_index]) {
|
|
|
- cvt->filters[cvt->filter_index] (cvt, format);
|
|
|
- }
|
|
|
-}
|
|
|
-
|
|
|
-static void SDLCALL
|
|
|
-SDL_Upsample_F32LSB_4c_x2(SDL_AudioCVT * cvt, SDL_AudioFormat format)
|
|
|
-{
|
|
|
-#if DEBUG_CONVERT
|
|
|
- fprintf(stderr, "Upsample (x2) AUDIO_F32LSB, 4 channels.\n");
|
|
|
-#endif
|
|
|
-
|
|
|
- const int dstsize = cvt->len_cvt * 2;
|
|
|
- float *dst = ((float *) (cvt->buf + dstsize)) - 4 * 2;
|
|
|
- const float *src = ((float *) (cvt->buf + cvt->len_cvt)) - 4;
|
|
|
- const float *target = ((const float *) cvt->buf);
|
|
|
- double last_sample3 = (double) SDL_SwapFloatLE(src[3]);
|
|
|
- double last_sample2 = (double) SDL_SwapFloatLE(src[2]);
|
|
|
- double last_sample1 = (double) SDL_SwapFloatLE(src[1]);
|
|
|
- double last_sample0 = (double) SDL_SwapFloatLE(src[0]);
|
|
|
- while (dst >= target) {
|
|
|
- const double sample3 = (double) SDL_SwapFloatLE(src[3]);
|
|
|
- const double sample2 = (double) SDL_SwapFloatLE(src[2]);
|
|
|
- const double sample1 = (double) SDL_SwapFloatLE(src[1]);
|
|
|
- const double sample0 = (double) SDL_SwapFloatLE(src[0]);
|
|
|
- src -= 4;
|
|
|
- dst[7] = (float) ((sample3 + last_sample3) * 0.5);
|
|
|
- dst[6] = (float) ((sample2 + last_sample2) * 0.5);
|
|
|
- dst[5] = (float) ((sample1 + last_sample1) * 0.5);
|
|
|
- dst[4] = (float) ((sample0 + last_sample0) * 0.5);
|
|
|
- dst[3] = (float) sample3;
|
|
|
- dst[2] = (float) sample2;
|
|
|
- dst[1] = (float) sample1;
|
|
|
- dst[0] = (float) sample0;
|
|
|
- last_sample3 = sample3;
|
|
|
- last_sample2 = sample2;
|
|
|
- last_sample1 = sample1;
|
|
|
- last_sample0 = sample0;
|
|
|
- dst -= 8;
|
|
|
- }
|
|
|
-
|
|
|
- cvt->len_cvt = dstsize;
|
|
|
- if (cvt->filters[++cvt->filter_index]) {
|
|
|
- cvt->filters[cvt->filter_index] (cvt, format);
|
|
|
- }
|
|
|
-}
|
|
|
-
|
|
|
-static void SDLCALL
|
|
|
-SDL_Downsample_F32LSB_4c_x2(SDL_AudioCVT * cvt, SDL_AudioFormat format)
|
|
|
-{
|
|
|
-#if DEBUG_CONVERT
|
|
|
- fprintf(stderr, "Downsample (x2) AUDIO_F32LSB, 4 channels.\n");
|
|
|
-#endif
|
|
|
-
|
|
|
- const int dstsize = cvt->len_cvt / 2;
|
|
|
- float *dst = (float *) cvt->buf;
|
|
|
- const float *src = (float *) cvt->buf;
|
|
|
- const float *target = (const float *) (cvt->buf + dstsize);
|
|
|
- double last_sample0 = (double) SDL_SwapFloatLE(src[0]);
|
|
|
- double last_sample1 = (double) SDL_SwapFloatLE(src[1]);
|
|
|
- double last_sample2 = (double) SDL_SwapFloatLE(src[2]);
|
|
|
- double last_sample3 = (double) SDL_SwapFloatLE(src[3]);
|
|
|
- while (dst < target) {
|
|
|
- const double sample0 = (double) SDL_SwapFloatLE(src[0]);
|
|
|
- const double sample1 = (double) SDL_SwapFloatLE(src[1]);
|
|
|
- const double sample2 = (double) SDL_SwapFloatLE(src[2]);
|
|
|
- const double sample3 = (double) SDL_SwapFloatLE(src[3]);
|
|
|
- src += 8;
|
|
|
- dst[0] = (float) ((sample0 + last_sample0) * 0.5);
|
|
|
- dst[1] = (float) ((sample1 + last_sample1) * 0.5);
|
|
|
- dst[2] = (float) ((sample2 + last_sample2) * 0.5);
|
|
|
- dst[3] = (float) ((sample3 + last_sample3) * 0.5);
|
|
|
- last_sample0 = sample0;
|
|
|
- last_sample1 = sample1;
|
|
|
- last_sample2 = sample2;
|
|
|
- last_sample3 = sample3;
|
|
|
- dst += 4;
|
|
|
- }
|
|
|
-
|
|
|
- cvt->len_cvt = dstsize;
|
|
|
- if (cvt->filters[++cvt->filter_index]) {
|
|
|
- cvt->filters[cvt->filter_index] (cvt, format);
|
|
|
- }
|
|
|
-}
|
|
|
-
|
|
|
-static void SDLCALL
|
|
|
-SDL_Upsample_F32LSB_4c_x4(SDL_AudioCVT * cvt, SDL_AudioFormat format)
|
|
|
-{
|
|
|
-#if DEBUG_CONVERT
|
|
|
- fprintf(stderr, "Upsample (x4) AUDIO_F32LSB, 4 channels.\n");
|
|
|
-#endif
|
|
|
-
|
|
|
- const int dstsize = cvt->len_cvt * 4;
|
|
|
- float *dst = ((float *) (cvt->buf + dstsize)) - 4 * 4;
|
|
|
- const float *src = ((float *) (cvt->buf + cvt->len_cvt)) - 4;
|
|
|
- const float *target = ((const float *) cvt->buf);
|
|
|
- double last_sample3 = (double) SDL_SwapFloatLE(src[3]);
|
|
|
- double last_sample2 = (double) SDL_SwapFloatLE(src[2]);
|
|
|
- double last_sample1 = (double) SDL_SwapFloatLE(src[1]);
|
|
|
- double last_sample0 = (double) SDL_SwapFloatLE(src[0]);
|
|
|
- while (dst >= target) {
|
|
|
- const double sample3 = (double) SDL_SwapFloatLE(src[3]);
|
|
|
- const double sample2 = (double) SDL_SwapFloatLE(src[2]);
|
|
|
- const double sample1 = (double) SDL_SwapFloatLE(src[1]);
|
|
|
- const double sample0 = (double) SDL_SwapFloatLE(src[0]);
|
|
|
- src -= 4;
|
|
|
- dst[15] = (float) ((sample3 + (3.0 * last_sample3)) * 0.25);
|
|
|
- dst[14] = (float) ((sample2 + (3.0 * last_sample2)) * 0.25);
|
|
|
- dst[13] = (float) ((sample1 + (3.0 * last_sample1)) * 0.25);
|
|
|
- dst[12] = (float) ((sample0 + (3.0 * last_sample0)) * 0.25);
|
|
|
- dst[11] = (float) ((sample3 + last_sample3) * 0.5);
|
|
|
- dst[10] = (float) ((sample2 + last_sample2) * 0.5);
|
|
|
- dst[9] = (float) ((sample1 + last_sample1) * 0.5);
|
|
|
- dst[8] = (float) ((sample0 + last_sample0) * 0.5);
|
|
|
- dst[7] = (float) (((3.0 * sample3) + last_sample3) * 0.25);
|
|
|
- dst[6] = (float) (((3.0 * sample2) + last_sample2) * 0.25);
|
|
|
- dst[5] = (float) (((3.0 * sample1) + last_sample1) * 0.25);
|
|
|
- dst[4] = (float) (((3.0 * sample0) + last_sample0) * 0.25);
|
|
|
- dst[3] = (float) sample3;
|
|
|
- dst[2] = (float) sample2;
|
|
|
- dst[1] = (float) sample1;
|
|
|
- dst[0] = (float) sample0;
|
|
|
- last_sample3 = sample3;
|
|
|
- last_sample2 = sample2;
|
|
|
- last_sample1 = sample1;
|
|
|
- last_sample0 = sample0;
|
|
|
- dst -= 16;
|
|
|
- }
|
|
|
-
|
|
|
- cvt->len_cvt = dstsize;
|
|
|
- if (cvt->filters[++cvt->filter_index]) {
|
|
|
- cvt->filters[cvt->filter_index] (cvt, format);
|
|
|
- }
|
|
|
-}
|
|
|
-
|
|
|
-static void SDLCALL
|
|
|
-SDL_Downsample_F32LSB_4c_x4(SDL_AudioCVT * cvt, SDL_AudioFormat format)
|
|
|
-{
|
|
|
-#if DEBUG_CONVERT
|
|
|
- fprintf(stderr, "Downsample (x4) AUDIO_F32LSB, 4 channels.\n");
|
|
|
-#endif
|
|
|
-
|
|
|
- const int dstsize = cvt->len_cvt / 4;
|
|
|
- float *dst = (float *) cvt->buf;
|
|
|
- const float *src = (float *) cvt->buf;
|
|
|
- const float *target = (const float *) (cvt->buf + dstsize);
|
|
|
- double last_sample0 = (double) SDL_SwapFloatLE(src[0]);
|
|
|
- double last_sample1 = (double) SDL_SwapFloatLE(src[1]);
|
|
|
- double last_sample2 = (double) SDL_SwapFloatLE(src[2]);
|
|
|
- double last_sample3 = (double) SDL_SwapFloatLE(src[3]);
|
|
|
- while (dst < target) {
|
|
|
- const double sample0 = (double) SDL_SwapFloatLE(src[0]);
|
|
|
- const double sample1 = (double) SDL_SwapFloatLE(src[1]);
|
|
|
- const double sample2 = (double) SDL_SwapFloatLE(src[2]);
|
|
|
- const double sample3 = (double) SDL_SwapFloatLE(src[3]);
|
|
|
- src += 16;
|
|
|
- dst[0] = (float) ((sample0 + last_sample0) * 0.5);
|
|
|
- dst[1] = (float) ((sample1 + last_sample1) * 0.5);
|
|
|
- dst[2] = (float) ((sample2 + last_sample2) * 0.5);
|
|
|
- dst[3] = (float) ((sample3 + last_sample3) * 0.5);
|
|
|
- last_sample0 = sample0;
|
|
|
- last_sample1 = sample1;
|
|
|
- last_sample2 = sample2;
|
|
|
- last_sample3 = sample3;
|
|
|
- dst += 4;
|
|
|
- }
|
|
|
-
|
|
|
- cvt->len_cvt = dstsize;
|
|
|
- if (cvt->filters[++cvt->filter_index]) {
|
|
|
- cvt->filters[cvt->filter_index] (cvt, format);
|
|
|
- }
|
|
|
-}
|
|
|
-
|
|
|
-static void SDLCALL
|
|
|
-SDL_Upsample_F32LSB_6c_x2(SDL_AudioCVT * cvt, SDL_AudioFormat format)
|
|
|
-{
|
|
|
-#if DEBUG_CONVERT
|
|
|
- fprintf(stderr, "Upsample (x2) AUDIO_F32LSB, 6 channels.\n");
|
|
|
-#endif
|
|
|
-
|
|
|
- const int dstsize = cvt->len_cvt * 2;
|
|
|
- float *dst = ((float *) (cvt->buf + dstsize)) - 6 * 2;
|
|
|
- const float *src = ((float *) (cvt->buf + cvt->len_cvt)) - 6;
|
|
|
- const float *target = ((const float *) cvt->buf);
|
|
|
- double last_sample5 = (double) SDL_SwapFloatLE(src[5]);
|
|
|
- double last_sample4 = (double) SDL_SwapFloatLE(src[4]);
|
|
|
- double last_sample3 = (double) SDL_SwapFloatLE(src[3]);
|
|
|
- double last_sample2 = (double) SDL_SwapFloatLE(src[2]);
|
|
|
- double last_sample1 = (double) SDL_SwapFloatLE(src[1]);
|
|
|
- double last_sample0 = (double) SDL_SwapFloatLE(src[0]);
|
|
|
- while (dst >= target) {
|
|
|
- const double sample5 = (double) SDL_SwapFloatLE(src[5]);
|
|
|
- const double sample4 = (double) SDL_SwapFloatLE(src[4]);
|
|
|
- const double sample3 = (double) SDL_SwapFloatLE(src[3]);
|
|
|
- const double sample2 = (double) SDL_SwapFloatLE(src[2]);
|
|
|
- const double sample1 = (double) SDL_SwapFloatLE(src[1]);
|
|
|
- const double sample0 = (double) SDL_SwapFloatLE(src[0]);
|
|
|
- src -= 6;
|
|
|
- dst[11] = (float) ((sample5 + last_sample5) * 0.5);
|
|
|
- dst[10] = (float) ((sample4 + last_sample4) * 0.5);
|
|
|
- dst[9] = (float) ((sample3 + last_sample3) * 0.5);
|
|
|
- dst[8] = (float) ((sample2 + last_sample2) * 0.5);
|
|
|
- dst[7] = (float) ((sample1 + last_sample1) * 0.5);
|
|
|
- dst[6] = (float) ((sample0 + last_sample0) * 0.5);
|
|
|
- dst[5] = (float) sample5;
|
|
|
- dst[4] = (float) sample4;
|
|
|
- dst[3] = (float) sample3;
|
|
|
- dst[2] = (float) sample2;
|
|
|
- dst[1] = (float) sample1;
|
|
|
- dst[0] = (float) sample0;
|
|
|
- last_sample5 = sample5;
|
|
|
- last_sample4 = sample4;
|
|
|
- last_sample3 = sample3;
|
|
|
- last_sample2 = sample2;
|
|
|
- last_sample1 = sample1;
|
|
|
- last_sample0 = sample0;
|
|
|
- dst -= 12;
|
|
|
- }
|
|
|
-
|
|
|
- cvt->len_cvt = dstsize;
|
|
|
- if (cvt->filters[++cvt->filter_index]) {
|
|
|
- cvt->filters[cvt->filter_index] (cvt, format);
|
|
|
- }
|
|
|
-}
|
|
|
-
|
|
|
-static void SDLCALL
|
|
|
-SDL_Downsample_F32LSB_6c_x2(SDL_AudioCVT * cvt, SDL_AudioFormat format)
|
|
|
-{
|
|
|
-#if DEBUG_CONVERT
|
|
|
- fprintf(stderr, "Downsample (x2) AUDIO_F32LSB, 6 channels.\n");
|
|
|
-#endif
|
|
|
-
|
|
|
- const int dstsize = cvt->len_cvt / 2;
|
|
|
- float *dst = (float *) cvt->buf;
|
|
|
- const float *src = (float *) cvt->buf;
|
|
|
- const float *target = (const float *) (cvt->buf + dstsize);
|
|
|
- double last_sample0 = (double) SDL_SwapFloatLE(src[0]);
|
|
|
- double last_sample1 = (double) SDL_SwapFloatLE(src[1]);
|
|
|
- double last_sample2 = (double) SDL_SwapFloatLE(src[2]);
|
|
|
- double last_sample3 = (double) SDL_SwapFloatLE(src[3]);
|
|
|
- double last_sample4 = (double) SDL_SwapFloatLE(src[4]);
|
|
|
- double last_sample5 = (double) SDL_SwapFloatLE(src[5]);
|
|
|
- while (dst < target) {
|
|
|
- const double sample0 = (double) SDL_SwapFloatLE(src[0]);
|
|
|
- const double sample1 = (double) SDL_SwapFloatLE(src[1]);
|
|
|
- const double sample2 = (double) SDL_SwapFloatLE(src[2]);
|
|
|
- const double sample3 = (double) SDL_SwapFloatLE(src[3]);
|
|
|
- const double sample4 = (double) SDL_SwapFloatLE(src[4]);
|
|
|
- const double sample5 = (double) SDL_SwapFloatLE(src[5]);
|
|
|
- src += 12;
|
|
|
- dst[0] = (float) ((sample0 + last_sample0) * 0.5);
|
|
|
- dst[1] = (float) ((sample1 + last_sample1) * 0.5);
|
|
|
- dst[2] = (float) ((sample2 + last_sample2) * 0.5);
|
|
|
- dst[3] = (float) ((sample3 + last_sample3) * 0.5);
|
|
|
- dst[4] = (float) ((sample4 + last_sample4) * 0.5);
|
|
|
- dst[5] = (float) ((sample5 + last_sample5) * 0.5);
|
|
|
- last_sample0 = sample0;
|
|
|
- last_sample1 = sample1;
|
|
|
- last_sample2 = sample2;
|
|
|
- last_sample3 = sample3;
|
|
|
- last_sample4 = sample4;
|
|
|
- last_sample5 = sample5;
|
|
|
- dst += 6;
|
|
|
- }
|
|
|
-
|
|
|
- cvt->len_cvt = dstsize;
|
|
|
- if (cvt->filters[++cvt->filter_index]) {
|
|
|
- cvt->filters[cvt->filter_index] (cvt, format);
|
|
|
- }
|
|
|
-}
|
|
|
-
|
|
|
-static void SDLCALL
|
|
|
-SDL_Upsample_F32LSB_6c_x4(SDL_AudioCVT * cvt, SDL_AudioFormat format)
|
|
|
-{
|
|
|
-#if DEBUG_CONVERT
|
|
|
- fprintf(stderr, "Upsample (x4) AUDIO_F32LSB, 6 channels.\n");
|
|
|
-#endif
|
|
|
-
|
|
|
- const int dstsize = cvt->len_cvt * 4;
|
|
|
- float *dst = ((float *) (cvt->buf + dstsize)) - 6 * 4;
|
|
|
- const float *src = ((float *) (cvt->buf + cvt->len_cvt)) - 6;
|
|
|
- const float *target = ((const float *) cvt->buf);
|
|
|
- double last_sample5 = (double) SDL_SwapFloatLE(src[5]);
|
|
|
- double last_sample4 = (double) SDL_SwapFloatLE(src[4]);
|
|
|
- double last_sample3 = (double) SDL_SwapFloatLE(src[3]);
|
|
|
- double last_sample2 = (double) SDL_SwapFloatLE(src[2]);
|
|
|
- double last_sample1 = (double) SDL_SwapFloatLE(src[1]);
|
|
|
- double last_sample0 = (double) SDL_SwapFloatLE(src[0]);
|
|
|
- while (dst >= target) {
|
|
|
- const double sample5 = (double) SDL_SwapFloatLE(src[5]);
|
|
|
- const double sample4 = (double) SDL_SwapFloatLE(src[4]);
|
|
|
- const double sample3 = (double) SDL_SwapFloatLE(src[3]);
|
|
|
- const double sample2 = (double) SDL_SwapFloatLE(src[2]);
|
|
|
- const double sample1 = (double) SDL_SwapFloatLE(src[1]);
|
|
|
- const double sample0 = (double) SDL_SwapFloatLE(src[0]);
|
|
|
- src -= 6;
|
|
|
- dst[23] = (float) ((sample5 + (3.0 * last_sample5)) * 0.25);
|
|
|
- dst[22] = (float) ((sample4 + (3.0 * last_sample4)) * 0.25);
|
|
|
- dst[21] = (float) ((sample3 + (3.0 * last_sample3)) * 0.25);
|
|
|
- dst[20] = (float) ((sample2 + (3.0 * last_sample2)) * 0.25);
|
|
|
- dst[19] = (float) ((sample1 + (3.0 * last_sample1)) * 0.25);
|
|
|
- dst[18] = (float) ((sample0 + (3.0 * last_sample0)) * 0.25);
|
|
|
- dst[17] = (float) ((sample5 + last_sample5) * 0.5);
|
|
|
- dst[16] = (float) ((sample4 + last_sample4) * 0.5);
|
|
|
- dst[15] = (float) ((sample3 + last_sample3) * 0.5);
|
|
|
- dst[14] = (float) ((sample2 + last_sample2) * 0.5);
|
|
|
- dst[13] = (float) ((sample1 + last_sample1) * 0.5);
|
|
|
- dst[12] = (float) ((sample0 + last_sample0) * 0.5);
|
|
|
- dst[11] = (float) (((3.0 * sample5) + last_sample5) * 0.25);
|
|
|
- dst[10] = (float) (((3.0 * sample4) + last_sample4) * 0.25);
|
|
|
- dst[9] = (float) (((3.0 * sample3) + last_sample3) * 0.25);
|
|
|
- dst[8] = (float) (((3.0 * sample2) + last_sample2) * 0.25);
|
|
|
- dst[7] = (float) (((3.0 * sample1) + last_sample1) * 0.25);
|
|
|
- dst[6] = (float) (((3.0 * sample0) + last_sample0) * 0.25);
|
|
|
- dst[5] = (float) sample5;
|
|
|
- dst[4] = (float) sample4;
|
|
|
- dst[3] = (float) sample3;
|
|
|
- dst[2] = (float) sample2;
|
|
|
- dst[1] = (float) sample1;
|
|
|
- dst[0] = (float) sample0;
|
|
|
- last_sample5 = sample5;
|
|
|
- last_sample4 = sample4;
|
|
|
- last_sample3 = sample3;
|
|
|
- last_sample2 = sample2;
|
|
|
- last_sample1 = sample1;
|
|
|
- last_sample0 = sample0;
|
|
|
- dst -= 24;
|
|
|
- }
|
|
|
-
|
|
|
- cvt->len_cvt = dstsize;
|
|
|
- if (cvt->filters[++cvt->filter_index]) {
|
|
|
- cvt->filters[cvt->filter_index] (cvt, format);
|
|
|
- }
|
|
|
-}
|
|
|
-
|
|
|
-static void SDLCALL
|
|
|
-SDL_Downsample_F32LSB_6c_x4(SDL_AudioCVT * cvt, SDL_AudioFormat format)
|
|
|
-{
|
|
|
-#if DEBUG_CONVERT
|
|
|
- fprintf(stderr, "Downsample (x4) AUDIO_F32LSB, 6 channels.\n");
|
|
|
-#endif
|
|
|
-
|
|
|
- const int dstsize = cvt->len_cvt / 4;
|
|
|
- float *dst = (float *) cvt->buf;
|
|
|
- const float *src = (float *) cvt->buf;
|
|
|
- const float *target = (const float *) (cvt->buf + dstsize);
|
|
|
- double last_sample0 = (double) SDL_SwapFloatLE(src[0]);
|
|
|
- double last_sample1 = (double) SDL_SwapFloatLE(src[1]);
|
|
|
- double last_sample2 = (double) SDL_SwapFloatLE(src[2]);
|
|
|
- double last_sample3 = (double) SDL_SwapFloatLE(src[3]);
|
|
|
- double last_sample4 = (double) SDL_SwapFloatLE(src[4]);
|
|
|
- double last_sample5 = (double) SDL_SwapFloatLE(src[5]);
|
|
|
- while (dst < target) {
|
|
|
- const double sample0 = (double) SDL_SwapFloatLE(src[0]);
|
|
|
- const double sample1 = (double) SDL_SwapFloatLE(src[1]);
|
|
|
- const double sample2 = (double) SDL_SwapFloatLE(src[2]);
|
|
|
- const double sample3 = (double) SDL_SwapFloatLE(src[3]);
|
|
|
- const double sample4 = (double) SDL_SwapFloatLE(src[4]);
|
|
|
- const double sample5 = (double) SDL_SwapFloatLE(src[5]);
|
|
|
- src += 24;
|
|
|
- dst[0] = (float) ((sample0 + last_sample0) * 0.5);
|
|
|
- dst[1] = (float) ((sample1 + last_sample1) * 0.5);
|
|
|
- dst[2] = (float) ((sample2 + last_sample2) * 0.5);
|
|
|
- dst[3] = (float) ((sample3 + last_sample3) * 0.5);
|
|
|
- dst[4] = (float) ((sample4 + last_sample4) * 0.5);
|
|
|
- dst[5] = (float) ((sample5 + last_sample5) * 0.5);
|
|
|
- last_sample0 = sample0;
|
|
|
- last_sample1 = sample1;
|
|
|
- last_sample2 = sample2;
|
|
|
- last_sample3 = sample3;
|
|
|
- last_sample4 = sample4;
|
|
|
- last_sample5 = sample5;
|
|
|
- dst += 6;
|
|
|
- }
|
|
|
-
|
|
|
- cvt->len_cvt = dstsize;
|
|
|
- if (cvt->filters[++cvt->filter_index]) {
|
|
|
- cvt->filters[cvt->filter_index] (cvt, format);
|
|
|
- }
|
|
|
-}
|
|
|
-
|
|
|
-static void SDLCALL
|
|
|
-SDL_Upsample_F32LSB_8c_x2(SDL_AudioCVT * cvt, SDL_AudioFormat format)
|
|
|
-{
|
|
|
-#if DEBUG_CONVERT
|
|
|
- fprintf(stderr, "Upsample (x2) AUDIO_F32LSB, 8 channels.\n");
|
|
|
-#endif
|
|
|
-
|
|
|
- const int dstsize = cvt->len_cvt * 2;
|
|
|
- float *dst = ((float *) (cvt->buf + dstsize)) - 8 * 2;
|
|
|
- const float *src = ((float *) (cvt->buf + cvt->len_cvt)) - 8;
|
|
|
- const float *target = ((const float *) cvt->buf);
|
|
|
- double last_sample7 = (double) SDL_SwapFloatLE(src[7]);
|
|
|
- double last_sample6 = (double) SDL_SwapFloatLE(src[6]);
|
|
|
- double last_sample5 = (double) SDL_SwapFloatLE(src[5]);
|
|
|
- double last_sample4 = (double) SDL_SwapFloatLE(src[4]);
|
|
|
- double last_sample3 = (double) SDL_SwapFloatLE(src[3]);
|
|
|
- double last_sample2 = (double) SDL_SwapFloatLE(src[2]);
|
|
|
- double last_sample1 = (double) SDL_SwapFloatLE(src[1]);
|
|
|
- double last_sample0 = (double) SDL_SwapFloatLE(src[0]);
|
|
|
- while (dst >= target) {
|
|
|
- const double sample7 = (double) SDL_SwapFloatLE(src[7]);
|
|
|
- const double sample6 = (double) SDL_SwapFloatLE(src[6]);
|
|
|
- const double sample5 = (double) SDL_SwapFloatLE(src[5]);
|
|
|
- const double sample4 = (double) SDL_SwapFloatLE(src[4]);
|
|
|
- const double sample3 = (double) SDL_SwapFloatLE(src[3]);
|
|
|
- const double sample2 = (double) SDL_SwapFloatLE(src[2]);
|
|
|
- const double sample1 = (double) SDL_SwapFloatLE(src[1]);
|
|
|
- const double sample0 = (double) SDL_SwapFloatLE(src[0]);
|
|
|
- src -= 8;
|
|
|
- dst[15] = (float) ((sample7 + last_sample7) * 0.5);
|
|
|
- dst[14] = (float) ((sample6 + last_sample6) * 0.5);
|
|
|
- dst[13] = (float) ((sample5 + last_sample5) * 0.5);
|
|
|
- dst[12] = (float) ((sample4 + last_sample4) * 0.5);
|
|
|
- dst[11] = (float) ((sample3 + last_sample3) * 0.5);
|
|
|
- dst[10] = (float) ((sample2 + last_sample2) * 0.5);
|
|
|
- dst[9] = (float) ((sample1 + last_sample1) * 0.5);
|
|
|
- dst[8] = (float) ((sample0 + last_sample0) * 0.5);
|
|
|
- dst[7] = (float) sample7;
|
|
|
- dst[6] = (float) sample6;
|
|
|
- dst[5] = (float) sample5;
|
|
|
- dst[4] = (float) sample4;
|
|
|
- dst[3] = (float) sample3;
|
|
|
- dst[2] = (float) sample2;
|
|
|
- dst[1] = (float) sample1;
|
|
|
- dst[0] = (float) sample0;
|
|
|
- last_sample7 = sample7;
|
|
|
- last_sample6 = sample6;
|
|
|
- last_sample5 = sample5;
|
|
|
- last_sample4 = sample4;
|
|
|
- last_sample3 = sample3;
|
|
|
- last_sample2 = sample2;
|
|
|
- last_sample1 = sample1;
|
|
|
- last_sample0 = sample0;
|
|
|
- dst -= 16;
|
|
|
- }
|
|
|
-
|
|
|
- cvt->len_cvt = dstsize;
|
|
|
- if (cvt->filters[++cvt->filter_index]) {
|
|
|
- cvt->filters[cvt->filter_index] (cvt, format);
|
|
|
- }
|
|
|
-}
|
|
|
-
|
|
|
-static void SDLCALL
|
|
|
-SDL_Downsample_F32LSB_8c_x2(SDL_AudioCVT * cvt, SDL_AudioFormat format)
|
|
|
-{
|
|
|
-#if DEBUG_CONVERT
|
|
|
- fprintf(stderr, "Downsample (x2) AUDIO_F32LSB, 8 channels.\n");
|
|
|
-#endif
|
|
|
-
|
|
|
- const int dstsize = cvt->len_cvt / 2;
|
|
|
- float *dst = (float *) cvt->buf;
|
|
|
- const float *src = (float *) cvt->buf;
|
|
|
- const float *target = (const float *) (cvt->buf + dstsize);
|
|
|
- double last_sample0 = (double) SDL_SwapFloatLE(src[0]);
|
|
|
- double last_sample1 = (double) SDL_SwapFloatLE(src[1]);
|
|
|
- double last_sample2 = (double) SDL_SwapFloatLE(src[2]);
|
|
|
- double last_sample3 = (double) SDL_SwapFloatLE(src[3]);
|
|
|
- double last_sample4 = (double) SDL_SwapFloatLE(src[4]);
|
|
|
- double last_sample5 = (double) SDL_SwapFloatLE(src[5]);
|
|
|
- double last_sample6 = (double) SDL_SwapFloatLE(src[6]);
|
|
|
- double last_sample7 = (double) SDL_SwapFloatLE(src[7]);
|
|
|
- while (dst < target) {
|
|
|
- const double sample0 = (double) SDL_SwapFloatLE(src[0]);
|
|
|
- const double sample1 = (double) SDL_SwapFloatLE(src[1]);
|
|
|
- const double sample2 = (double) SDL_SwapFloatLE(src[2]);
|
|
|
- const double sample3 = (double) SDL_SwapFloatLE(src[3]);
|
|
|
- const double sample4 = (double) SDL_SwapFloatLE(src[4]);
|
|
|
- const double sample5 = (double) SDL_SwapFloatLE(src[5]);
|
|
|
- const double sample6 = (double) SDL_SwapFloatLE(src[6]);
|
|
|
- const double sample7 = (double) SDL_SwapFloatLE(src[7]);
|
|
|
- src += 16;
|
|
|
- dst[0] = (float) ((sample0 + last_sample0) * 0.5);
|
|
|
- dst[1] = (float) ((sample1 + last_sample1) * 0.5);
|
|
|
- dst[2] = (float) ((sample2 + last_sample2) * 0.5);
|
|
|
- dst[3] = (float) ((sample3 + last_sample3) * 0.5);
|
|
|
- dst[4] = (float) ((sample4 + last_sample4) * 0.5);
|
|
|
- dst[5] = (float) ((sample5 + last_sample5) * 0.5);
|
|
|
- dst[6] = (float) ((sample6 + last_sample6) * 0.5);
|
|
|
- dst[7] = (float) ((sample7 + last_sample7) * 0.5);
|
|
|
- last_sample0 = sample0;
|
|
|
- last_sample1 = sample1;
|
|
|
- last_sample2 = sample2;
|
|
|
- last_sample3 = sample3;
|
|
|
- last_sample4 = sample4;
|
|
|
- last_sample5 = sample5;
|
|
|
- last_sample6 = sample6;
|
|
|
- last_sample7 = sample7;
|
|
|
- dst += 8;
|
|
|
- }
|
|
|
-
|
|
|
- cvt->len_cvt = dstsize;
|
|
|
- if (cvt->filters[++cvt->filter_index]) {
|
|
|
- cvt->filters[cvt->filter_index] (cvt, format);
|
|
|
- }
|
|
|
-}
|
|
|
-
|
|
|
-static void SDLCALL
|
|
|
-SDL_Upsample_F32LSB_8c_x4(SDL_AudioCVT * cvt, SDL_AudioFormat format)
|
|
|
-{
|
|
|
-#if DEBUG_CONVERT
|
|
|
- fprintf(stderr, "Upsample (x4) AUDIO_F32LSB, 8 channels.\n");
|
|
|
-#endif
|
|
|
-
|
|
|
- const int dstsize = cvt->len_cvt * 4;
|
|
|
- float *dst = ((float *) (cvt->buf + dstsize)) - 8 * 4;
|
|
|
- const float *src = ((float *) (cvt->buf + cvt->len_cvt)) - 8;
|
|
|
- const float *target = ((const float *) cvt->buf);
|
|
|
- double last_sample7 = (double) SDL_SwapFloatLE(src[7]);
|
|
|
- double last_sample6 = (double) SDL_SwapFloatLE(src[6]);
|
|
|
- double last_sample5 = (double) SDL_SwapFloatLE(src[5]);
|
|
|
- double last_sample4 = (double) SDL_SwapFloatLE(src[4]);
|
|
|
- double last_sample3 = (double) SDL_SwapFloatLE(src[3]);
|
|
|
- double last_sample2 = (double) SDL_SwapFloatLE(src[2]);
|
|
|
- double last_sample1 = (double) SDL_SwapFloatLE(src[1]);
|
|
|
- double last_sample0 = (double) SDL_SwapFloatLE(src[0]);
|
|
|
- while (dst >= target) {
|
|
|
- const double sample7 = (double) SDL_SwapFloatLE(src[7]);
|
|
|
- const double sample6 = (double) SDL_SwapFloatLE(src[6]);
|
|
|
- const double sample5 = (double) SDL_SwapFloatLE(src[5]);
|
|
|
- const double sample4 = (double) SDL_SwapFloatLE(src[4]);
|
|
|
- const double sample3 = (double) SDL_SwapFloatLE(src[3]);
|
|
|
- const double sample2 = (double) SDL_SwapFloatLE(src[2]);
|
|
|
- const double sample1 = (double) SDL_SwapFloatLE(src[1]);
|
|
|
- const double sample0 = (double) SDL_SwapFloatLE(src[0]);
|
|
|
- src -= 8;
|
|
|
- dst[31] = (float) ((sample7 + (3.0 * last_sample7)) * 0.25);
|
|
|
- dst[30] = (float) ((sample6 + (3.0 * last_sample6)) * 0.25);
|
|
|
- dst[29] = (float) ((sample5 + (3.0 * last_sample5)) * 0.25);
|
|
|
- dst[28] = (float) ((sample4 + (3.0 * last_sample4)) * 0.25);
|
|
|
- dst[27] = (float) ((sample3 + (3.0 * last_sample3)) * 0.25);
|
|
|
- dst[26] = (float) ((sample2 + (3.0 * last_sample2)) * 0.25);
|
|
|
- dst[25] = (float) ((sample1 + (3.0 * last_sample1)) * 0.25);
|
|
|
- dst[24] = (float) ((sample0 + (3.0 * last_sample0)) * 0.25);
|
|
|
- dst[23] = (float) ((sample7 + last_sample7) * 0.5);
|
|
|
- dst[22] = (float) ((sample6 + last_sample6) * 0.5);
|
|
|
- dst[21] = (float) ((sample5 + last_sample5) * 0.5);
|
|
|
- dst[20] = (float) ((sample4 + last_sample4) * 0.5);
|
|
|
- dst[19] = (float) ((sample3 + last_sample3) * 0.5);
|
|
|
- dst[18] = (float) ((sample2 + last_sample2) * 0.5);
|
|
|
- dst[17] = (float) ((sample1 + last_sample1) * 0.5);
|
|
|
- dst[16] = (float) ((sample0 + last_sample0) * 0.5);
|
|
|
- dst[15] = (float) (((3.0 * sample7) + last_sample7) * 0.25);
|
|
|
- dst[14] = (float) (((3.0 * sample6) + last_sample6) * 0.25);
|
|
|
- dst[13] = (float) (((3.0 * sample5) + last_sample5) * 0.25);
|
|
|
- dst[12] = (float) (((3.0 * sample4) + last_sample4) * 0.25);
|
|
|
- dst[11] = (float) (((3.0 * sample3) + last_sample3) * 0.25);
|
|
|
- dst[10] = (float) (((3.0 * sample2) + last_sample2) * 0.25);
|
|
|
- dst[9] = (float) (((3.0 * sample1) + last_sample1) * 0.25);
|
|
|
- dst[8] = (float) (((3.0 * sample0) + last_sample0) * 0.25);
|
|
|
- dst[7] = (float) sample7;
|
|
|
- dst[6] = (float) sample6;
|
|
|
- dst[5] = (float) sample5;
|
|
|
- dst[4] = (float) sample4;
|
|
|
- dst[3] = (float) sample3;
|
|
|
- dst[2] = (float) sample2;
|
|
|
- dst[1] = (float) sample1;
|
|
|
- dst[0] = (float) sample0;
|
|
|
- last_sample7 = sample7;
|
|
|
- last_sample6 = sample6;
|
|
|
- last_sample5 = sample5;
|
|
|
- last_sample4 = sample4;
|
|
|
- last_sample3 = sample3;
|
|
|
- last_sample2 = sample2;
|
|
|
- last_sample1 = sample1;
|
|
|
- last_sample0 = sample0;
|
|
|
- dst -= 32;
|
|
|
- }
|
|
|
-
|
|
|
- cvt->len_cvt = dstsize;
|
|
|
- if (cvt->filters[++cvt->filter_index]) {
|
|
|
- cvt->filters[cvt->filter_index] (cvt, format);
|
|
|
- }
|
|
|
-}
|
|
|
-
|
|
|
-static void SDLCALL
|
|
|
-SDL_Downsample_F32LSB_8c_x4(SDL_AudioCVT * cvt, SDL_AudioFormat format)
|
|
|
-{
|
|
|
-#if DEBUG_CONVERT
|
|
|
- fprintf(stderr, "Downsample (x4) AUDIO_F32LSB, 8 channels.\n");
|
|
|
-#endif
|
|
|
-
|
|
|
- const int dstsize = cvt->len_cvt / 4;
|
|
|
- float *dst = (float *) cvt->buf;
|
|
|
- const float *src = (float *) cvt->buf;
|
|
|
- const float *target = (const float *) (cvt->buf + dstsize);
|
|
|
- double last_sample0 = (double) SDL_SwapFloatLE(src[0]);
|
|
|
- double last_sample1 = (double) SDL_SwapFloatLE(src[1]);
|
|
|
- double last_sample2 = (double) SDL_SwapFloatLE(src[2]);
|
|
|
- double last_sample3 = (double) SDL_SwapFloatLE(src[3]);
|
|
|
- double last_sample4 = (double) SDL_SwapFloatLE(src[4]);
|
|
|
- double last_sample5 = (double) SDL_SwapFloatLE(src[5]);
|
|
|
- double last_sample6 = (double) SDL_SwapFloatLE(src[6]);
|
|
|
- double last_sample7 = (double) SDL_SwapFloatLE(src[7]);
|
|
|
- while (dst < target) {
|
|
|
- const double sample0 = (double) SDL_SwapFloatLE(src[0]);
|
|
|
- const double sample1 = (double) SDL_SwapFloatLE(src[1]);
|
|
|
- const double sample2 = (double) SDL_SwapFloatLE(src[2]);
|
|
|
- const double sample3 = (double) SDL_SwapFloatLE(src[3]);
|
|
|
- const double sample4 = (double) SDL_SwapFloatLE(src[4]);
|
|
|
- const double sample5 = (double) SDL_SwapFloatLE(src[5]);
|
|
|
- const double sample6 = (double) SDL_SwapFloatLE(src[6]);
|
|
|
- const double sample7 = (double) SDL_SwapFloatLE(src[7]);
|
|
|
- src += 32;
|
|
|
- dst[0] = (float) ((sample0 + last_sample0) * 0.5);
|
|
|
- dst[1] = (float) ((sample1 + last_sample1) * 0.5);
|
|
|
- dst[2] = (float) ((sample2 + last_sample2) * 0.5);
|
|
|
- dst[3] = (float) ((sample3 + last_sample3) * 0.5);
|
|
|
- dst[4] = (float) ((sample4 + last_sample4) * 0.5);
|
|
|
- dst[5] = (float) ((sample5 + last_sample5) * 0.5);
|
|
|
- dst[6] = (float) ((sample6 + last_sample6) * 0.5);
|
|
|
- dst[7] = (float) ((sample7 + last_sample7) * 0.5);
|
|
|
- last_sample0 = sample0;
|
|
|
- last_sample1 = sample1;
|
|
|
- last_sample2 = sample2;
|
|
|
- last_sample3 = sample3;
|
|
|
- last_sample4 = sample4;
|
|
|
- last_sample5 = sample5;
|
|
|
- last_sample6 = sample6;
|
|
|
- last_sample7 = sample7;
|
|
|
- dst += 8;
|
|
|
- }
|
|
|
-
|
|
|
- cvt->len_cvt = dstsize;
|
|
|
- if (cvt->filters[++cvt->filter_index]) {
|
|
|
- cvt->filters[cvt->filter_index] (cvt, format);
|
|
|
- }
|
|
|
-}
|
|
|
-
|
|
|
-static void SDLCALL
|
|
|
-SDL_Upsample_F32MSB_1c_x2(SDL_AudioCVT * cvt, SDL_AudioFormat format)
|
|
|
-{
|
|
|
-#if DEBUG_CONVERT
|
|
|
- fprintf(stderr, "Upsample (x2) AUDIO_F32MSB, 1 channels.\n");
|
|
|
-#endif
|
|
|
-
|
|
|
- const int dstsize = cvt->len_cvt * 2;
|
|
|
- float *dst = ((float *) (cvt->buf + dstsize)) - 1 * 2;
|
|
|
- const float *src = ((float *) (cvt->buf + cvt->len_cvt)) - 1;
|
|
|
- const float *target = ((const float *) cvt->buf);
|
|
|
- double last_sample0 = (double) SDL_SwapFloatBE(src[0]);
|
|
|
- while (dst >= target) {
|
|
|
- const double sample0 = (double) SDL_SwapFloatBE(src[0]);
|
|
|
- src--;
|
|
|
- dst[1] = (float) ((sample0 + last_sample0) * 0.5);
|
|
|
- dst[0] = (float) sample0;
|
|
|
- last_sample0 = sample0;
|
|
|
- dst -= 2;
|
|
|
- }
|
|
|
-
|
|
|
- cvt->len_cvt = dstsize;
|
|
|
- if (cvt->filters[++cvt->filter_index]) {
|
|
|
- cvt->filters[cvt->filter_index] (cvt, format);
|
|
|
- }
|
|
|
-}
|
|
|
-
|
|
|
-static void SDLCALL
|
|
|
-SDL_Downsample_F32MSB_1c_x2(SDL_AudioCVT * cvt, SDL_AudioFormat format)
|
|
|
-{
|
|
|
-#if DEBUG_CONVERT
|
|
|
- fprintf(stderr, "Downsample (x2) AUDIO_F32MSB, 1 channels.\n");
|
|
|
-#endif
|
|
|
-
|
|
|
- const int dstsize = cvt->len_cvt / 2;
|
|
|
- float *dst = (float *) cvt->buf;
|
|
|
- const float *src = (float *) cvt->buf;
|
|
|
- const float *target = (const float *) (cvt->buf + dstsize);
|
|
|
- double last_sample0 = (double) SDL_SwapFloatBE(src[0]);
|
|
|
- while (dst < target) {
|
|
|
- const double sample0 = (double) SDL_SwapFloatBE(src[0]);
|
|
|
- src += 2;
|
|
|
- dst[0] = (float) ((sample0 + last_sample0) * 0.5);
|
|
|
- last_sample0 = sample0;
|
|
|
- dst++;
|
|
|
- }
|
|
|
-
|
|
|
- cvt->len_cvt = dstsize;
|
|
|
- if (cvt->filters[++cvt->filter_index]) {
|
|
|
- cvt->filters[cvt->filter_index] (cvt, format);
|
|
|
- }
|
|
|
-}
|
|
|
-
|
|
|
-static void SDLCALL
|
|
|
-SDL_Upsample_F32MSB_1c_x4(SDL_AudioCVT * cvt, SDL_AudioFormat format)
|
|
|
-{
|
|
|
-#if DEBUG_CONVERT
|
|
|
- fprintf(stderr, "Upsample (x4) AUDIO_F32MSB, 1 channels.\n");
|
|
|
-#endif
|
|
|
-
|
|
|
- const int dstsize = cvt->len_cvt * 4;
|
|
|
- float *dst = ((float *) (cvt->buf + dstsize)) - 1 * 4;
|
|
|
- const float *src = ((float *) (cvt->buf + cvt->len_cvt)) - 1;
|
|
|
- const float *target = ((const float *) cvt->buf);
|
|
|
- double last_sample0 = (double) SDL_SwapFloatBE(src[0]);
|
|
|
- while (dst >= target) {
|
|
|
- const double sample0 = (double) SDL_SwapFloatBE(src[0]);
|
|
|
- src--;
|
|
|
- dst[3] = (float) ((sample0 + (3.0 * last_sample0)) * 0.25);
|
|
|
- dst[2] = (float) ((sample0 + last_sample0) * 0.5);
|
|
|
- dst[1] = (float) (((3.0 * sample0) + last_sample0) * 0.25);
|
|
|
- dst[0] = (float) sample0;
|
|
|
- last_sample0 = sample0;
|
|
|
- dst -= 4;
|
|
|
- }
|
|
|
-
|
|
|
- cvt->len_cvt = dstsize;
|
|
|
- if (cvt->filters[++cvt->filter_index]) {
|
|
|
- cvt->filters[cvt->filter_index] (cvt, format);
|
|
|
- }
|
|
|
-}
|
|
|
-
|
|
|
-static void SDLCALL
|
|
|
-SDL_Downsample_F32MSB_1c_x4(SDL_AudioCVT * cvt, SDL_AudioFormat format)
|
|
|
-{
|
|
|
-#if DEBUG_CONVERT
|
|
|
- fprintf(stderr, "Downsample (x4) AUDIO_F32MSB, 1 channels.\n");
|
|
|
-#endif
|
|
|
-
|
|
|
- const int dstsize = cvt->len_cvt / 4;
|
|
|
- float *dst = (float *) cvt->buf;
|
|
|
- const float *src = (float *) cvt->buf;
|
|
|
- const float *target = (const float *) (cvt->buf + dstsize);
|
|
|
- double last_sample0 = (double) SDL_SwapFloatBE(src[0]);
|
|
|
- while (dst < target) {
|
|
|
- const double sample0 = (double) SDL_SwapFloatBE(src[0]);
|
|
|
- src += 4;
|
|
|
- dst[0] = (float) ((sample0 + last_sample0) * 0.5);
|
|
|
- last_sample0 = sample0;
|
|
|
- dst++;
|
|
|
- }
|
|
|
-
|
|
|
- cvt->len_cvt = dstsize;
|
|
|
- if (cvt->filters[++cvt->filter_index]) {
|
|
|
- cvt->filters[cvt->filter_index] (cvt, format);
|
|
|
- }
|
|
|
-}
|
|
|
-
|
|
|
-static void SDLCALL
|
|
|
-SDL_Upsample_F32MSB_2c_x2(SDL_AudioCVT * cvt, SDL_AudioFormat format)
|
|
|
-{
|
|
|
-#if DEBUG_CONVERT
|
|
|
- fprintf(stderr, "Upsample (x2) AUDIO_F32MSB, 2 channels.\n");
|
|
|
-#endif
|
|
|
-
|
|
|
- const int dstsize = cvt->len_cvt * 2;
|
|
|
- float *dst = ((float *) (cvt->buf + dstsize)) - 2 * 2;
|
|
|
- const float *src = ((float *) (cvt->buf + cvt->len_cvt)) - 2;
|
|
|
- const float *target = ((const float *) cvt->buf);
|
|
|
- double last_sample1 = (double) SDL_SwapFloatBE(src[1]);
|
|
|
- double last_sample0 = (double) SDL_SwapFloatBE(src[0]);
|
|
|
- while (dst >= target) {
|
|
|
- const double sample1 = (double) SDL_SwapFloatBE(src[1]);
|
|
|
- const double sample0 = (double) SDL_SwapFloatBE(src[0]);
|
|
|
- src -= 2;
|
|
|
- dst[3] = (float) ((sample1 + last_sample1) * 0.5);
|
|
|
- dst[2] = (float) ((sample0 + last_sample0) * 0.5);
|
|
|
- dst[1] = (float) sample1;
|
|
|
- dst[0] = (float) sample0;
|
|
|
- last_sample1 = sample1;
|
|
|
- last_sample0 = sample0;
|
|
|
- dst -= 4;
|
|
|
- }
|
|
|
-
|
|
|
- cvt->len_cvt = dstsize;
|
|
|
- if (cvt->filters[++cvt->filter_index]) {
|
|
|
- cvt->filters[cvt->filter_index] (cvt, format);
|
|
|
- }
|
|
|
-}
|
|
|
-
|
|
|
-static void SDLCALL
|
|
|
-SDL_Downsample_F32MSB_2c_x2(SDL_AudioCVT * cvt, SDL_AudioFormat format)
|
|
|
-{
|
|
|
-#if DEBUG_CONVERT
|
|
|
- fprintf(stderr, "Downsample (x2) AUDIO_F32MSB, 2 channels.\n");
|
|
|
-#endif
|
|
|
-
|
|
|
- const int dstsize = cvt->len_cvt / 2;
|
|
|
- float *dst = (float *) cvt->buf;
|
|
|
- const float *src = (float *) cvt->buf;
|
|
|
- const float *target = (const float *) (cvt->buf + dstsize);
|
|
|
- double last_sample0 = (double) SDL_SwapFloatBE(src[0]);
|
|
|
- double last_sample1 = (double) SDL_SwapFloatBE(src[1]);
|
|
|
- while (dst < target) {
|
|
|
- const double sample0 = (double) SDL_SwapFloatBE(src[0]);
|
|
|
- const double sample1 = (double) SDL_SwapFloatBE(src[1]);
|
|
|
- src += 4;
|
|
|
- dst[0] = (float) ((sample0 + last_sample0) * 0.5);
|
|
|
- dst[1] = (float) ((sample1 + last_sample1) * 0.5);
|
|
|
- last_sample0 = sample0;
|
|
|
- last_sample1 = sample1;
|
|
|
- dst += 2;
|
|
|
- }
|
|
|
-
|
|
|
- cvt->len_cvt = dstsize;
|
|
|
- if (cvt->filters[++cvt->filter_index]) {
|
|
|
- cvt->filters[cvt->filter_index] (cvt, format);
|
|
|
- }
|
|
|
-}
|
|
|
-
|
|
|
-static void SDLCALL
|
|
|
-SDL_Upsample_F32MSB_2c_x4(SDL_AudioCVT * cvt, SDL_AudioFormat format)
|
|
|
-{
|
|
|
-#if DEBUG_CONVERT
|
|
|
- fprintf(stderr, "Upsample (x4) AUDIO_F32MSB, 2 channels.\n");
|
|
|
-#endif
|
|
|
-
|
|
|
- const int dstsize = cvt->len_cvt * 4;
|
|
|
- float *dst = ((float *) (cvt->buf + dstsize)) - 2 * 4;
|
|
|
- const float *src = ((float *) (cvt->buf + cvt->len_cvt)) - 2;
|
|
|
- const float *target = ((const float *) cvt->buf);
|
|
|
- double last_sample1 = (double) SDL_SwapFloatBE(src[1]);
|
|
|
- double last_sample0 = (double) SDL_SwapFloatBE(src[0]);
|
|
|
- while (dst >= target) {
|
|
|
- const double sample1 = (double) SDL_SwapFloatBE(src[1]);
|
|
|
- const double sample0 = (double) SDL_SwapFloatBE(src[0]);
|
|
|
- src -= 2;
|
|
|
- dst[7] = (float) ((sample1 + (3.0 * last_sample1)) * 0.25);
|
|
|
- dst[6] = (float) ((sample0 + (3.0 * last_sample0)) * 0.25);
|
|
|
- dst[5] = (float) ((sample1 + last_sample1) * 0.5);
|
|
|
- dst[4] = (float) ((sample0 + last_sample0) * 0.5);
|
|
|
- dst[3] = (float) (((3.0 * sample1) + last_sample1) * 0.25);
|
|
|
- dst[2] = (float) (((3.0 * sample0) + last_sample0) * 0.25);
|
|
|
- dst[1] = (float) sample1;
|
|
|
- dst[0] = (float) sample0;
|
|
|
- last_sample1 = sample1;
|
|
|
- last_sample0 = sample0;
|
|
|
- dst -= 8;
|
|
|
- }
|
|
|
-
|
|
|
- cvt->len_cvt = dstsize;
|
|
|
- if (cvt->filters[++cvt->filter_index]) {
|
|
|
- cvt->filters[cvt->filter_index] (cvt, format);
|
|
|
- }
|
|
|
-}
|
|
|
-
|
|
|
-static void SDLCALL
|
|
|
-SDL_Downsample_F32MSB_2c_x4(SDL_AudioCVT * cvt, SDL_AudioFormat format)
|
|
|
-{
|
|
|
-#if DEBUG_CONVERT
|
|
|
- fprintf(stderr, "Downsample (x4) AUDIO_F32MSB, 2 channels.\n");
|
|
|
-#endif
|
|
|
-
|
|
|
- const int dstsize = cvt->len_cvt / 4;
|
|
|
- float *dst = (float *) cvt->buf;
|
|
|
- const float *src = (float *) cvt->buf;
|
|
|
- const float *target = (const float *) (cvt->buf + dstsize);
|
|
|
- double last_sample0 = (double) SDL_SwapFloatBE(src[0]);
|
|
|
- double last_sample1 = (double) SDL_SwapFloatBE(src[1]);
|
|
|
- while (dst < target) {
|
|
|
- const double sample0 = (double) SDL_SwapFloatBE(src[0]);
|
|
|
- const double sample1 = (double) SDL_SwapFloatBE(src[1]);
|
|
|
- src += 8;
|
|
|
- dst[0] = (float) ((sample0 + last_sample0) * 0.5);
|
|
|
- dst[1] = (float) ((sample1 + last_sample1) * 0.5);
|
|
|
- last_sample0 = sample0;
|
|
|
- last_sample1 = sample1;
|
|
|
- dst += 2;
|
|
|
- }
|
|
|
-
|
|
|
- cvt->len_cvt = dstsize;
|
|
|
- if (cvt->filters[++cvt->filter_index]) {
|
|
|
- cvt->filters[cvt->filter_index] (cvt, format);
|
|
|
- }
|
|
|
-}
|
|
|
-
|
|
|
-static void SDLCALL
|
|
|
-SDL_Upsample_F32MSB_4c_x2(SDL_AudioCVT * cvt, SDL_AudioFormat format)
|
|
|
-{
|
|
|
-#if DEBUG_CONVERT
|
|
|
- fprintf(stderr, "Upsample (x2) AUDIO_F32MSB, 4 channels.\n");
|
|
|
-#endif
|
|
|
-
|
|
|
- const int dstsize = cvt->len_cvt * 2;
|
|
|
- float *dst = ((float *) (cvt->buf + dstsize)) - 4 * 2;
|
|
|
- const float *src = ((float *) (cvt->buf + cvt->len_cvt)) - 4;
|
|
|
- const float *target = ((const float *) cvt->buf);
|
|
|
- double last_sample3 = (double) SDL_SwapFloatBE(src[3]);
|
|
|
- double last_sample2 = (double) SDL_SwapFloatBE(src[2]);
|
|
|
- double last_sample1 = (double) SDL_SwapFloatBE(src[1]);
|
|
|
- double last_sample0 = (double) SDL_SwapFloatBE(src[0]);
|
|
|
- while (dst >= target) {
|
|
|
- const double sample3 = (double) SDL_SwapFloatBE(src[3]);
|
|
|
- const double sample2 = (double) SDL_SwapFloatBE(src[2]);
|
|
|
- const double sample1 = (double) SDL_SwapFloatBE(src[1]);
|
|
|
- const double sample0 = (double) SDL_SwapFloatBE(src[0]);
|
|
|
- src -= 4;
|
|
|
- dst[7] = (float) ((sample3 + last_sample3) * 0.5);
|
|
|
- dst[6] = (float) ((sample2 + last_sample2) * 0.5);
|
|
|
- dst[5] = (float) ((sample1 + last_sample1) * 0.5);
|
|
|
- dst[4] = (float) ((sample0 + last_sample0) * 0.5);
|
|
|
- dst[3] = (float) sample3;
|
|
|
- dst[2] = (float) sample2;
|
|
|
- dst[1] = (float) sample1;
|
|
|
- dst[0] = (float) sample0;
|
|
|
- last_sample3 = sample3;
|
|
|
- last_sample2 = sample2;
|
|
|
- last_sample1 = sample1;
|
|
|
- last_sample0 = sample0;
|
|
|
- dst -= 8;
|
|
|
- }
|
|
|
-
|
|
|
- cvt->len_cvt = dstsize;
|
|
|
- if (cvt->filters[++cvt->filter_index]) {
|
|
|
- cvt->filters[cvt->filter_index] (cvt, format);
|
|
|
- }
|
|
|
-}
|
|
|
-
|
|
|
-static void SDLCALL
|
|
|
-SDL_Downsample_F32MSB_4c_x2(SDL_AudioCVT * cvt, SDL_AudioFormat format)
|
|
|
-{
|
|
|
-#if DEBUG_CONVERT
|
|
|
- fprintf(stderr, "Downsample (x2) AUDIO_F32MSB, 4 channels.\n");
|
|
|
-#endif
|
|
|
-
|
|
|
- const int dstsize = cvt->len_cvt / 2;
|
|
|
- float *dst = (float *) cvt->buf;
|
|
|
- const float *src = (float *) cvt->buf;
|
|
|
- const float *target = (const float *) (cvt->buf + dstsize);
|
|
|
- double last_sample0 = (double) SDL_SwapFloatBE(src[0]);
|
|
|
- double last_sample1 = (double) SDL_SwapFloatBE(src[1]);
|
|
|
- double last_sample2 = (double) SDL_SwapFloatBE(src[2]);
|
|
|
- double last_sample3 = (double) SDL_SwapFloatBE(src[3]);
|
|
|
- while (dst < target) {
|
|
|
- const double sample0 = (double) SDL_SwapFloatBE(src[0]);
|
|
|
- const double sample1 = (double) SDL_SwapFloatBE(src[1]);
|
|
|
- const double sample2 = (double) SDL_SwapFloatBE(src[2]);
|
|
|
- const double sample3 = (double) SDL_SwapFloatBE(src[3]);
|
|
|
- src += 8;
|
|
|
- dst[0] = (float) ((sample0 + last_sample0) * 0.5);
|
|
|
- dst[1] = (float) ((sample1 + last_sample1) * 0.5);
|
|
|
- dst[2] = (float) ((sample2 + last_sample2) * 0.5);
|
|
|
- dst[3] = (float) ((sample3 + last_sample3) * 0.5);
|
|
|
- last_sample0 = sample0;
|
|
|
- last_sample1 = sample1;
|
|
|
- last_sample2 = sample2;
|
|
|
- last_sample3 = sample3;
|
|
|
- dst += 4;
|
|
|
- }
|
|
|
-
|
|
|
- cvt->len_cvt = dstsize;
|
|
|
- if (cvt->filters[++cvt->filter_index]) {
|
|
|
- cvt->filters[cvt->filter_index] (cvt, format);
|
|
|
- }
|
|
|
-}
|
|
|
-
|
|
|
-static void SDLCALL
|
|
|
-SDL_Upsample_F32MSB_4c_x4(SDL_AudioCVT * cvt, SDL_AudioFormat format)
|
|
|
-{
|
|
|
-#if DEBUG_CONVERT
|
|
|
- fprintf(stderr, "Upsample (x4) AUDIO_F32MSB, 4 channels.\n");
|
|
|
-#endif
|
|
|
-
|
|
|
- const int dstsize = cvt->len_cvt * 4;
|
|
|
- float *dst = ((float *) (cvt->buf + dstsize)) - 4 * 4;
|
|
|
- const float *src = ((float *) (cvt->buf + cvt->len_cvt)) - 4;
|
|
|
- const float *target = ((const float *) cvt->buf);
|
|
|
- double last_sample3 = (double) SDL_SwapFloatBE(src[3]);
|
|
|
- double last_sample2 = (double) SDL_SwapFloatBE(src[2]);
|
|
|
- double last_sample1 = (double) SDL_SwapFloatBE(src[1]);
|
|
|
- double last_sample0 = (double) SDL_SwapFloatBE(src[0]);
|
|
|
- while (dst >= target) {
|
|
|
- const double sample3 = (double) SDL_SwapFloatBE(src[3]);
|
|
|
- const double sample2 = (double) SDL_SwapFloatBE(src[2]);
|
|
|
- const double sample1 = (double) SDL_SwapFloatBE(src[1]);
|
|
|
- const double sample0 = (double) SDL_SwapFloatBE(src[0]);
|
|
|
- src -= 4;
|
|
|
- dst[15] = (float) ((sample3 + (3.0 * last_sample3)) * 0.25);
|
|
|
- dst[14] = (float) ((sample2 + (3.0 * last_sample2)) * 0.25);
|
|
|
- dst[13] = (float) ((sample1 + (3.0 * last_sample1)) * 0.25);
|
|
|
- dst[12] = (float) ((sample0 + (3.0 * last_sample0)) * 0.25);
|
|
|
- dst[11] = (float) ((sample3 + last_sample3) * 0.5);
|
|
|
- dst[10] = (float) ((sample2 + last_sample2) * 0.5);
|
|
|
- dst[9] = (float) ((sample1 + last_sample1) * 0.5);
|
|
|
- dst[8] = (float) ((sample0 + last_sample0) * 0.5);
|
|
|
- dst[7] = (float) (((3.0 * sample3) + last_sample3) * 0.25);
|
|
|
- dst[6] = (float) (((3.0 * sample2) + last_sample2) * 0.25);
|
|
|
- dst[5] = (float) (((3.0 * sample1) + last_sample1) * 0.25);
|
|
|
- dst[4] = (float) (((3.0 * sample0) + last_sample0) * 0.25);
|
|
|
- dst[3] = (float) sample3;
|
|
|
- dst[2] = (float) sample2;
|
|
|
- dst[1] = (float) sample1;
|
|
|
- dst[0] = (float) sample0;
|
|
|
- last_sample3 = sample3;
|
|
|
- last_sample2 = sample2;
|
|
|
- last_sample1 = sample1;
|
|
|
- last_sample0 = sample0;
|
|
|
- dst -= 16;
|
|
|
- }
|
|
|
-
|
|
|
- cvt->len_cvt = dstsize;
|
|
|
- if (cvt->filters[++cvt->filter_index]) {
|
|
|
- cvt->filters[cvt->filter_index] (cvt, format);
|
|
|
- }
|
|
|
-}
|
|
|
-
|
|
|
-static void SDLCALL
|
|
|
-SDL_Downsample_F32MSB_4c_x4(SDL_AudioCVT * cvt, SDL_AudioFormat format)
|
|
|
-{
|
|
|
-#if DEBUG_CONVERT
|
|
|
- fprintf(stderr, "Downsample (x4) AUDIO_F32MSB, 4 channels.\n");
|
|
|
-#endif
|
|
|
-
|
|
|
- const int dstsize = cvt->len_cvt / 4;
|
|
|
- float *dst = (float *) cvt->buf;
|
|
|
- const float *src = (float *) cvt->buf;
|
|
|
- const float *target = (const float *) (cvt->buf + dstsize);
|
|
|
- double last_sample0 = (double) SDL_SwapFloatBE(src[0]);
|
|
|
- double last_sample1 = (double) SDL_SwapFloatBE(src[1]);
|
|
|
- double last_sample2 = (double) SDL_SwapFloatBE(src[2]);
|
|
|
- double last_sample3 = (double) SDL_SwapFloatBE(src[3]);
|
|
|
- while (dst < target) {
|
|
|
- const double sample0 = (double) SDL_SwapFloatBE(src[0]);
|
|
|
- const double sample1 = (double) SDL_SwapFloatBE(src[1]);
|
|
|
- const double sample2 = (double) SDL_SwapFloatBE(src[2]);
|
|
|
- const double sample3 = (double) SDL_SwapFloatBE(src[3]);
|
|
|
- src += 16;
|
|
|
- dst[0] = (float) ((sample0 + last_sample0) * 0.5);
|
|
|
- dst[1] = (float) ((sample1 + last_sample1) * 0.5);
|
|
|
- dst[2] = (float) ((sample2 + last_sample2) * 0.5);
|
|
|
- dst[3] = (float) ((sample3 + last_sample3) * 0.5);
|
|
|
- last_sample0 = sample0;
|
|
|
- last_sample1 = sample1;
|
|
|
- last_sample2 = sample2;
|
|
|
- last_sample3 = sample3;
|
|
|
- dst += 4;
|
|
|
- }
|
|
|
-
|
|
|
- cvt->len_cvt = dstsize;
|
|
|
- if (cvt->filters[++cvt->filter_index]) {
|
|
|
- cvt->filters[cvt->filter_index] (cvt, format);
|
|
|
- }
|
|
|
-}
|
|
|
-
|
|
|
-static void SDLCALL
|
|
|
-SDL_Upsample_F32MSB_6c_x2(SDL_AudioCVT * cvt, SDL_AudioFormat format)
|
|
|
-{
|
|
|
-#if DEBUG_CONVERT
|
|
|
- fprintf(stderr, "Upsample (x2) AUDIO_F32MSB, 6 channels.\n");
|
|
|
-#endif
|
|
|
-
|
|
|
- const int dstsize = cvt->len_cvt * 2;
|
|
|
- float *dst = ((float *) (cvt->buf + dstsize)) - 6 * 2;
|
|
|
- const float *src = ((float *) (cvt->buf + cvt->len_cvt)) - 6;
|
|
|
- const float *target = ((const float *) cvt->buf);
|
|
|
- double last_sample5 = (double) SDL_SwapFloatBE(src[5]);
|
|
|
- double last_sample4 = (double) SDL_SwapFloatBE(src[4]);
|
|
|
- double last_sample3 = (double) SDL_SwapFloatBE(src[3]);
|
|
|
- double last_sample2 = (double) SDL_SwapFloatBE(src[2]);
|
|
|
- double last_sample1 = (double) SDL_SwapFloatBE(src[1]);
|
|
|
- double last_sample0 = (double) SDL_SwapFloatBE(src[0]);
|
|
|
- while (dst >= target) {
|
|
|
- const double sample5 = (double) SDL_SwapFloatBE(src[5]);
|
|
|
- const double sample4 = (double) SDL_SwapFloatBE(src[4]);
|
|
|
- const double sample3 = (double) SDL_SwapFloatBE(src[3]);
|
|
|
- const double sample2 = (double) SDL_SwapFloatBE(src[2]);
|
|
|
- const double sample1 = (double) SDL_SwapFloatBE(src[1]);
|
|
|
- const double sample0 = (double) SDL_SwapFloatBE(src[0]);
|
|
|
- src -= 6;
|
|
|
- dst[11] = (float) ((sample5 + last_sample5) * 0.5);
|
|
|
- dst[10] = (float) ((sample4 + last_sample4) * 0.5);
|
|
|
- dst[9] = (float) ((sample3 + last_sample3) * 0.5);
|
|
|
- dst[8] = (float) ((sample2 + last_sample2) * 0.5);
|
|
|
- dst[7] = (float) ((sample1 + last_sample1) * 0.5);
|
|
|
- dst[6] = (float) ((sample0 + last_sample0) * 0.5);
|
|
|
- dst[5] = (float) sample5;
|
|
|
- dst[4] = (float) sample4;
|
|
|
- dst[3] = (float) sample3;
|
|
|
- dst[2] = (float) sample2;
|
|
|
- dst[1] = (float) sample1;
|
|
|
- dst[0] = (float) sample0;
|
|
|
- last_sample5 = sample5;
|
|
|
- last_sample4 = sample4;
|
|
|
- last_sample3 = sample3;
|
|
|
- last_sample2 = sample2;
|
|
|
- last_sample1 = sample1;
|
|
|
- last_sample0 = sample0;
|
|
|
- dst -= 12;
|
|
|
- }
|
|
|
-
|
|
|
- cvt->len_cvt = dstsize;
|
|
|
- if (cvt->filters[++cvt->filter_index]) {
|
|
|
- cvt->filters[cvt->filter_index] (cvt, format);
|
|
|
- }
|
|
|
-}
|
|
|
-
|
|
|
-static void SDLCALL
|
|
|
-SDL_Downsample_F32MSB_6c_x2(SDL_AudioCVT * cvt, SDL_AudioFormat format)
|
|
|
-{
|
|
|
-#if DEBUG_CONVERT
|
|
|
- fprintf(stderr, "Downsample (x2) AUDIO_F32MSB, 6 channels.\n");
|
|
|
-#endif
|
|
|
-
|
|
|
- const int dstsize = cvt->len_cvt / 2;
|
|
|
- float *dst = (float *) cvt->buf;
|
|
|
- const float *src = (float *) cvt->buf;
|
|
|
- const float *target = (const float *) (cvt->buf + dstsize);
|
|
|
- double last_sample0 = (double) SDL_SwapFloatBE(src[0]);
|
|
|
- double last_sample1 = (double) SDL_SwapFloatBE(src[1]);
|
|
|
- double last_sample2 = (double) SDL_SwapFloatBE(src[2]);
|
|
|
- double last_sample3 = (double) SDL_SwapFloatBE(src[3]);
|
|
|
- double last_sample4 = (double) SDL_SwapFloatBE(src[4]);
|
|
|
- double last_sample5 = (double) SDL_SwapFloatBE(src[5]);
|
|
|
- while (dst < target) {
|
|
|
- const double sample0 = (double) SDL_SwapFloatBE(src[0]);
|
|
|
- const double sample1 = (double) SDL_SwapFloatBE(src[1]);
|
|
|
- const double sample2 = (double) SDL_SwapFloatBE(src[2]);
|
|
|
- const double sample3 = (double) SDL_SwapFloatBE(src[3]);
|
|
|
- const double sample4 = (double) SDL_SwapFloatBE(src[4]);
|
|
|
- const double sample5 = (double) SDL_SwapFloatBE(src[5]);
|
|
|
- src += 12;
|
|
|
- dst[0] = (float) ((sample0 + last_sample0) * 0.5);
|
|
|
- dst[1] = (float) ((sample1 + last_sample1) * 0.5);
|
|
|
- dst[2] = (float) ((sample2 + last_sample2) * 0.5);
|
|
|
- dst[3] = (float) ((sample3 + last_sample3) * 0.5);
|
|
|
- dst[4] = (float) ((sample4 + last_sample4) * 0.5);
|
|
|
- dst[5] = (float) ((sample5 + last_sample5) * 0.5);
|
|
|
- last_sample0 = sample0;
|
|
|
- last_sample1 = sample1;
|
|
|
- last_sample2 = sample2;
|
|
|
- last_sample3 = sample3;
|
|
|
- last_sample4 = sample4;
|
|
|
- last_sample5 = sample5;
|
|
|
- dst += 6;
|
|
|
- }
|
|
|
-
|
|
|
- cvt->len_cvt = dstsize;
|
|
|
- if (cvt->filters[++cvt->filter_index]) {
|
|
|
- cvt->filters[cvt->filter_index] (cvt, format);
|
|
|
- }
|
|
|
-}
|
|
|
-
|
|
|
-static void SDLCALL
|
|
|
-SDL_Upsample_F32MSB_6c_x4(SDL_AudioCVT * cvt, SDL_AudioFormat format)
|
|
|
-{
|
|
|
-#if DEBUG_CONVERT
|
|
|
- fprintf(stderr, "Upsample (x4) AUDIO_F32MSB, 6 channels.\n");
|
|
|
-#endif
|
|
|
-
|
|
|
- const int dstsize = cvt->len_cvt * 4;
|
|
|
- float *dst = ((float *) (cvt->buf + dstsize)) - 6 * 4;
|
|
|
- const float *src = ((float *) (cvt->buf + cvt->len_cvt)) - 6;
|
|
|
- const float *target = ((const float *) cvt->buf);
|
|
|
- double last_sample5 = (double) SDL_SwapFloatBE(src[5]);
|
|
|
- double last_sample4 = (double) SDL_SwapFloatBE(src[4]);
|
|
|
- double last_sample3 = (double) SDL_SwapFloatBE(src[3]);
|
|
|
- double last_sample2 = (double) SDL_SwapFloatBE(src[2]);
|
|
|
- double last_sample1 = (double) SDL_SwapFloatBE(src[1]);
|
|
|
- double last_sample0 = (double) SDL_SwapFloatBE(src[0]);
|
|
|
- while (dst >= target) {
|
|
|
- const double sample5 = (double) SDL_SwapFloatBE(src[5]);
|
|
|
- const double sample4 = (double) SDL_SwapFloatBE(src[4]);
|
|
|
- const double sample3 = (double) SDL_SwapFloatBE(src[3]);
|
|
|
- const double sample2 = (double) SDL_SwapFloatBE(src[2]);
|
|
|
- const double sample1 = (double) SDL_SwapFloatBE(src[1]);
|
|
|
- const double sample0 = (double) SDL_SwapFloatBE(src[0]);
|
|
|
- src -= 6;
|
|
|
- dst[23] = (float) ((sample5 + (3.0 * last_sample5)) * 0.25);
|
|
|
- dst[22] = (float) ((sample4 + (3.0 * last_sample4)) * 0.25);
|
|
|
- dst[21] = (float) ((sample3 + (3.0 * last_sample3)) * 0.25);
|
|
|
- dst[20] = (float) ((sample2 + (3.0 * last_sample2)) * 0.25);
|
|
|
- dst[19] = (float) ((sample1 + (3.0 * last_sample1)) * 0.25);
|
|
|
- dst[18] = (float) ((sample0 + (3.0 * last_sample0)) * 0.25);
|
|
|
- dst[17] = (float) ((sample5 + last_sample5) * 0.5);
|
|
|
- dst[16] = (float) ((sample4 + last_sample4) * 0.5);
|
|
|
- dst[15] = (float) ((sample3 + last_sample3) * 0.5);
|
|
|
- dst[14] = (float) ((sample2 + last_sample2) * 0.5);
|
|
|
- dst[13] = (float) ((sample1 + last_sample1) * 0.5);
|
|
|
- dst[12] = (float) ((sample0 + last_sample0) * 0.5);
|
|
|
- dst[11] = (float) (((3.0 * sample5) + last_sample5) * 0.25);
|
|
|
- dst[10] = (float) (((3.0 * sample4) + last_sample4) * 0.25);
|
|
|
- dst[9] = (float) (((3.0 * sample3) + last_sample3) * 0.25);
|
|
|
- dst[8] = (float) (((3.0 * sample2) + last_sample2) * 0.25);
|
|
|
- dst[7] = (float) (((3.0 * sample1) + last_sample1) * 0.25);
|
|
|
- dst[6] = (float) (((3.0 * sample0) + last_sample0) * 0.25);
|
|
|
- dst[5] = (float) sample5;
|
|
|
- dst[4] = (float) sample4;
|
|
|
- dst[3] = (float) sample3;
|
|
|
- dst[2] = (float) sample2;
|
|
|
- dst[1] = (float) sample1;
|
|
|
- dst[0] = (float) sample0;
|
|
|
- last_sample5 = sample5;
|
|
|
- last_sample4 = sample4;
|
|
|
- last_sample3 = sample3;
|
|
|
- last_sample2 = sample2;
|
|
|
- last_sample1 = sample1;
|
|
|
- last_sample0 = sample0;
|
|
|
- dst -= 24;
|
|
|
- }
|
|
|
-
|
|
|
- cvt->len_cvt = dstsize;
|
|
|
- if (cvt->filters[++cvt->filter_index]) {
|
|
|
- cvt->filters[cvt->filter_index] (cvt, format);
|
|
|
- }
|
|
|
-}
|
|
|
-
|
|
|
-static void SDLCALL
|
|
|
-SDL_Downsample_F32MSB_6c_x4(SDL_AudioCVT * cvt, SDL_AudioFormat format)
|
|
|
-{
|
|
|
-#if DEBUG_CONVERT
|
|
|
- fprintf(stderr, "Downsample (x4) AUDIO_F32MSB, 6 channels.\n");
|
|
|
-#endif
|
|
|
-
|
|
|
- const int dstsize = cvt->len_cvt / 4;
|
|
|
- float *dst = (float *) cvt->buf;
|
|
|
- const float *src = (float *) cvt->buf;
|
|
|
- const float *target = (const float *) (cvt->buf + dstsize);
|
|
|
- double last_sample0 = (double) SDL_SwapFloatBE(src[0]);
|
|
|
- double last_sample1 = (double) SDL_SwapFloatBE(src[1]);
|
|
|
- double last_sample2 = (double) SDL_SwapFloatBE(src[2]);
|
|
|
- double last_sample3 = (double) SDL_SwapFloatBE(src[3]);
|
|
|
- double last_sample4 = (double) SDL_SwapFloatBE(src[4]);
|
|
|
- double last_sample5 = (double) SDL_SwapFloatBE(src[5]);
|
|
|
- while (dst < target) {
|
|
|
- const double sample0 = (double) SDL_SwapFloatBE(src[0]);
|
|
|
- const double sample1 = (double) SDL_SwapFloatBE(src[1]);
|
|
|
- const double sample2 = (double) SDL_SwapFloatBE(src[2]);
|
|
|
- const double sample3 = (double) SDL_SwapFloatBE(src[3]);
|
|
|
- const double sample4 = (double) SDL_SwapFloatBE(src[4]);
|
|
|
- const double sample5 = (double) SDL_SwapFloatBE(src[5]);
|
|
|
- src += 24;
|
|
|
- dst[0] = (float) ((sample0 + last_sample0) * 0.5);
|
|
|
- dst[1] = (float) ((sample1 + last_sample1) * 0.5);
|
|
|
- dst[2] = (float) ((sample2 + last_sample2) * 0.5);
|
|
|
- dst[3] = (float) ((sample3 + last_sample3) * 0.5);
|
|
|
- dst[4] = (float) ((sample4 + last_sample4) * 0.5);
|
|
|
- dst[5] = (float) ((sample5 + last_sample5) * 0.5);
|
|
|
- last_sample0 = sample0;
|
|
|
- last_sample1 = sample1;
|
|
|
- last_sample2 = sample2;
|
|
|
- last_sample3 = sample3;
|
|
|
- last_sample4 = sample4;
|
|
|
- last_sample5 = sample5;
|
|
|
- dst += 6;
|
|
|
- }
|
|
|
-
|
|
|
- cvt->len_cvt = dstsize;
|
|
|
- if (cvt->filters[++cvt->filter_index]) {
|
|
|
- cvt->filters[cvt->filter_index] (cvt, format);
|
|
|
- }
|
|
|
-}
|
|
|
-
|
|
|
-static void SDLCALL
|
|
|
-SDL_Upsample_F32MSB_8c_x2(SDL_AudioCVT * cvt, SDL_AudioFormat format)
|
|
|
-{
|
|
|
-#if DEBUG_CONVERT
|
|
|
- fprintf(stderr, "Upsample (x2) AUDIO_F32MSB, 8 channels.\n");
|
|
|
-#endif
|
|
|
-
|
|
|
- const int dstsize = cvt->len_cvt * 2;
|
|
|
- float *dst = ((float *) (cvt->buf + dstsize)) - 8 * 2;
|
|
|
- const float *src = ((float *) (cvt->buf + cvt->len_cvt)) - 8;
|
|
|
- const float *target = ((const float *) cvt->buf);
|
|
|
- double last_sample7 = (double) SDL_SwapFloatBE(src[7]);
|
|
|
- double last_sample6 = (double) SDL_SwapFloatBE(src[6]);
|
|
|
- double last_sample5 = (double) SDL_SwapFloatBE(src[5]);
|
|
|
- double last_sample4 = (double) SDL_SwapFloatBE(src[4]);
|
|
|
- double last_sample3 = (double) SDL_SwapFloatBE(src[3]);
|
|
|
- double last_sample2 = (double) SDL_SwapFloatBE(src[2]);
|
|
|
- double last_sample1 = (double) SDL_SwapFloatBE(src[1]);
|
|
|
- double last_sample0 = (double) SDL_SwapFloatBE(src[0]);
|
|
|
- while (dst >= target) {
|
|
|
- const double sample7 = (double) SDL_SwapFloatBE(src[7]);
|
|
|
- const double sample6 = (double) SDL_SwapFloatBE(src[6]);
|
|
|
- const double sample5 = (double) SDL_SwapFloatBE(src[5]);
|
|
|
- const double sample4 = (double) SDL_SwapFloatBE(src[4]);
|
|
|
- const double sample3 = (double) SDL_SwapFloatBE(src[3]);
|
|
|
- const double sample2 = (double) SDL_SwapFloatBE(src[2]);
|
|
|
- const double sample1 = (double) SDL_SwapFloatBE(src[1]);
|
|
|
- const double sample0 = (double) SDL_SwapFloatBE(src[0]);
|
|
|
- src -= 8;
|
|
|
- dst[15] = (float) ((sample7 + last_sample7) * 0.5);
|
|
|
- dst[14] = (float) ((sample6 + last_sample6) * 0.5);
|
|
|
- dst[13] = (float) ((sample5 + last_sample5) * 0.5);
|
|
|
- dst[12] = (float) ((sample4 + last_sample4) * 0.5);
|
|
|
- dst[11] = (float) ((sample3 + last_sample3) * 0.5);
|
|
|
- dst[10] = (float) ((sample2 + last_sample2) * 0.5);
|
|
|
- dst[9] = (float) ((sample1 + last_sample1) * 0.5);
|
|
|
- dst[8] = (float) ((sample0 + last_sample0) * 0.5);
|
|
|
- dst[7] = (float) sample7;
|
|
|
- dst[6] = (float) sample6;
|
|
|
- dst[5] = (float) sample5;
|
|
|
- dst[4] = (float) sample4;
|
|
|
- dst[3] = (float) sample3;
|
|
|
- dst[2] = (float) sample2;
|
|
|
- dst[1] = (float) sample1;
|
|
|
- dst[0] = (float) sample0;
|
|
|
- last_sample7 = sample7;
|
|
|
- last_sample6 = sample6;
|
|
|
- last_sample5 = sample5;
|
|
|
- last_sample4 = sample4;
|
|
|
- last_sample3 = sample3;
|
|
|
- last_sample2 = sample2;
|
|
|
- last_sample1 = sample1;
|
|
|
- last_sample0 = sample0;
|
|
|
- dst -= 16;
|
|
|
- }
|
|
|
-
|
|
|
- cvt->len_cvt = dstsize;
|
|
|
- if (cvt->filters[++cvt->filter_index]) {
|
|
|
- cvt->filters[cvt->filter_index] (cvt, format);
|
|
|
- }
|
|
|
-}
|
|
|
-
|
|
|
-static void SDLCALL
|
|
|
-SDL_Downsample_F32MSB_8c_x2(SDL_AudioCVT * cvt, SDL_AudioFormat format)
|
|
|
-{
|
|
|
-#if DEBUG_CONVERT
|
|
|
- fprintf(stderr, "Downsample (x2) AUDIO_F32MSB, 8 channels.\n");
|
|
|
-#endif
|
|
|
-
|
|
|
- const int dstsize = cvt->len_cvt / 2;
|
|
|
- float *dst = (float *) cvt->buf;
|
|
|
- const float *src = (float *) cvt->buf;
|
|
|
- const float *target = (const float *) (cvt->buf + dstsize);
|
|
|
- double last_sample0 = (double) SDL_SwapFloatBE(src[0]);
|
|
|
- double last_sample1 = (double) SDL_SwapFloatBE(src[1]);
|
|
|
- double last_sample2 = (double) SDL_SwapFloatBE(src[2]);
|
|
|
- double last_sample3 = (double) SDL_SwapFloatBE(src[3]);
|
|
|
- double last_sample4 = (double) SDL_SwapFloatBE(src[4]);
|
|
|
- double last_sample5 = (double) SDL_SwapFloatBE(src[5]);
|
|
|
- double last_sample6 = (double) SDL_SwapFloatBE(src[6]);
|
|
|
- double last_sample7 = (double) SDL_SwapFloatBE(src[7]);
|
|
|
- while (dst < target) {
|
|
|
- const double sample0 = (double) SDL_SwapFloatBE(src[0]);
|
|
|
- const double sample1 = (double) SDL_SwapFloatBE(src[1]);
|
|
|
- const double sample2 = (double) SDL_SwapFloatBE(src[2]);
|
|
|
- const double sample3 = (double) SDL_SwapFloatBE(src[3]);
|
|
|
- const double sample4 = (double) SDL_SwapFloatBE(src[4]);
|
|
|
- const double sample5 = (double) SDL_SwapFloatBE(src[5]);
|
|
|
- const double sample6 = (double) SDL_SwapFloatBE(src[6]);
|
|
|
- const double sample7 = (double) SDL_SwapFloatBE(src[7]);
|
|
|
- src += 16;
|
|
|
- dst[0] = (float) ((sample0 + last_sample0) * 0.5);
|
|
|
- dst[1] = (float) ((sample1 + last_sample1) * 0.5);
|
|
|
- dst[2] = (float) ((sample2 + last_sample2) * 0.5);
|
|
|
- dst[3] = (float) ((sample3 + last_sample3) * 0.5);
|
|
|
- dst[4] = (float) ((sample4 + last_sample4) * 0.5);
|
|
|
- dst[5] = (float) ((sample5 + last_sample5) * 0.5);
|
|
|
- dst[6] = (float) ((sample6 + last_sample6) * 0.5);
|
|
|
- dst[7] = (float) ((sample7 + last_sample7) * 0.5);
|
|
|
- last_sample0 = sample0;
|
|
|
- last_sample1 = sample1;
|
|
|
- last_sample2 = sample2;
|
|
|
- last_sample3 = sample3;
|
|
|
- last_sample4 = sample4;
|
|
|
- last_sample5 = sample5;
|
|
|
- last_sample6 = sample6;
|
|
|
- last_sample7 = sample7;
|
|
|
- dst += 8;
|
|
|
- }
|
|
|
-
|
|
|
- cvt->len_cvt = dstsize;
|
|
|
- if (cvt->filters[++cvt->filter_index]) {
|
|
|
- cvt->filters[cvt->filter_index] (cvt, format);
|
|
|
- }
|
|
|
-}
|
|
|
-
|
|
|
-static void SDLCALL
|
|
|
-SDL_Upsample_F32MSB_8c_x4(SDL_AudioCVT * cvt, SDL_AudioFormat format)
|
|
|
-{
|
|
|
-#if DEBUG_CONVERT
|
|
|
- fprintf(stderr, "Upsample (x4) AUDIO_F32MSB, 8 channels.\n");
|
|
|
-#endif
|
|
|
-
|
|
|
- const int dstsize = cvt->len_cvt * 4;
|
|
|
- float *dst = ((float *) (cvt->buf + dstsize)) - 8 * 4;
|
|
|
- const float *src = ((float *) (cvt->buf + cvt->len_cvt)) - 8;
|
|
|
- const float *target = ((const float *) cvt->buf);
|
|
|
- double last_sample7 = (double) SDL_SwapFloatBE(src[7]);
|
|
|
- double last_sample6 = (double) SDL_SwapFloatBE(src[6]);
|
|
|
- double last_sample5 = (double) SDL_SwapFloatBE(src[5]);
|
|
|
- double last_sample4 = (double) SDL_SwapFloatBE(src[4]);
|
|
|
- double last_sample3 = (double) SDL_SwapFloatBE(src[3]);
|
|
|
- double last_sample2 = (double) SDL_SwapFloatBE(src[2]);
|
|
|
- double last_sample1 = (double) SDL_SwapFloatBE(src[1]);
|
|
|
- double last_sample0 = (double) SDL_SwapFloatBE(src[0]);
|
|
|
- while (dst >= target) {
|
|
|
- const double sample7 = (double) SDL_SwapFloatBE(src[7]);
|
|
|
- const double sample6 = (double) SDL_SwapFloatBE(src[6]);
|
|
|
- const double sample5 = (double) SDL_SwapFloatBE(src[5]);
|
|
|
- const double sample4 = (double) SDL_SwapFloatBE(src[4]);
|
|
|
- const double sample3 = (double) SDL_SwapFloatBE(src[3]);
|
|
|
- const double sample2 = (double) SDL_SwapFloatBE(src[2]);
|
|
|
- const double sample1 = (double) SDL_SwapFloatBE(src[1]);
|
|
|
- const double sample0 = (double) SDL_SwapFloatBE(src[0]);
|
|
|
- src -= 8;
|
|
|
- dst[31] = (float) ((sample7 + (3.0 * last_sample7)) * 0.25);
|
|
|
- dst[30] = (float) ((sample6 + (3.0 * last_sample6)) * 0.25);
|
|
|
- dst[29] = (float) ((sample5 + (3.0 * last_sample5)) * 0.25);
|
|
|
- dst[28] = (float) ((sample4 + (3.0 * last_sample4)) * 0.25);
|
|
|
- dst[27] = (float) ((sample3 + (3.0 * last_sample3)) * 0.25);
|
|
|
- dst[26] = (float) ((sample2 + (3.0 * last_sample2)) * 0.25);
|
|
|
- dst[25] = (float) ((sample1 + (3.0 * last_sample1)) * 0.25);
|
|
|
- dst[24] = (float) ((sample0 + (3.0 * last_sample0)) * 0.25);
|
|
|
- dst[23] = (float) ((sample7 + last_sample7) * 0.5);
|
|
|
- dst[22] = (float) ((sample6 + last_sample6) * 0.5);
|
|
|
- dst[21] = (float) ((sample5 + last_sample5) * 0.5);
|
|
|
- dst[20] = (float) ((sample4 + last_sample4) * 0.5);
|
|
|
- dst[19] = (float) ((sample3 + last_sample3) * 0.5);
|
|
|
- dst[18] = (float) ((sample2 + last_sample2) * 0.5);
|
|
|
- dst[17] = (float) ((sample1 + last_sample1) * 0.5);
|
|
|
- dst[16] = (float) ((sample0 + last_sample0) * 0.5);
|
|
|
- dst[15] = (float) (((3.0 * sample7) + last_sample7) * 0.25);
|
|
|
- dst[14] = (float) (((3.0 * sample6) + last_sample6) * 0.25);
|
|
|
- dst[13] = (float) (((3.0 * sample5) + last_sample5) * 0.25);
|
|
|
- dst[12] = (float) (((3.0 * sample4) + last_sample4) * 0.25);
|
|
|
- dst[11] = (float) (((3.0 * sample3) + last_sample3) * 0.25);
|
|
|
- dst[10] = (float) (((3.0 * sample2) + last_sample2) * 0.25);
|
|
|
- dst[9] = (float) (((3.0 * sample1) + last_sample1) * 0.25);
|
|
|
- dst[8] = (float) (((3.0 * sample0) + last_sample0) * 0.25);
|
|
|
- dst[7] = (float) sample7;
|
|
|
- dst[6] = (float) sample6;
|
|
|
- dst[5] = (float) sample5;
|
|
|
- dst[4] = (float) sample4;
|
|
|
- dst[3] = (float) sample3;
|
|
|
- dst[2] = (float) sample2;
|
|
|
- dst[1] = (float) sample1;
|
|
|
- dst[0] = (float) sample0;
|
|
|
- last_sample7 = sample7;
|
|
|
- last_sample6 = sample6;
|
|
|
- last_sample5 = sample5;
|
|
|
- last_sample4 = sample4;
|
|
|
- last_sample3 = sample3;
|
|
|
- last_sample2 = sample2;
|
|
|
- last_sample1 = sample1;
|
|
|
- last_sample0 = sample0;
|
|
|
- dst -= 32;
|
|
|
- }
|
|
|
-
|
|
|
- cvt->len_cvt = dstsize;
|
|
|
- if (cvt->filters[++cvt->filter_index]) {
|
|
|
- cvt->filters[cvt->filter_index] (cvt, format);
|
|
|
- }
|
|
|
-}
|
|
|
-
|
|
|
-static void SDLCALL
|
|
|
-SDL_Downsample_F32MSB_8c_x4(SDL_AudioCVT * cvt, SDL_AudioFormat format)
|
|
|
-{
|
|
|
-#if DEBUG_CONVERT
|
|
|
- fprintf(stderr, "Downsample (x4) AUDIO_F32MSB, 8 channels.\n");
|
|
|
-#endif
|
|
|
-
|
|
|
- const int dstsize = cvt->len_cvt / 4;
|
|
|
- float *dst = (float *) cvt->buf;
|
|
|
- const float *src = (float *) cvt->buf;
|
|
|
- const float *target = (const float *) (cvt->buf + dstsize);
|
|
|
- double last_sample0 = (double) SDL_SwapFloatBE(src[0]);
|
|
|
- double last_sample1 = (double) SDL_SwapFloatBE(src[1]);
|
|
|
- double last_sample2 = (double) SDL_SwapFloatBE(src[2]);
|
|
|
- double last_sample3 = (double) SDL_SwapFloatBE(src[3]);
|
|
|
- double last_sample4 = (double) SDL_SwapFloatBE(src[4]);
|
|
|
- double last_sample5 = (double) SDL_SwapFloatBE(src[5]);
|
|
|
- double last_sample6 = (double) SDL_SwapFloatBE(src[6]);
|
|
|
- double last_sample7 = (double) SDL_SwapFloatBE(src[7]);
|
|
|
- while (dst < target) {
|
|
|
- const double sample0 = (double) SDL_SwapFloatBE(src[0]);
|
|
|
- const double sample1 = (double) SDL_SwapFloatBE(src[1]);
|
|
|
- const double sample2 = (double) SDL_SwapFloatBE(src[2]);
|
|
|
- const double sample3 = (double) SDL_SwapFloatBE(src[3]);
|
|
|
- const double sample4 = (double) SDL_SwapFloatBE(src[4]);
|
|
|
- const double sample5 = (double) SDL_SwapFloatBE(src[5]);
|
|
|
- const double sample6 = (double) SDL_SwapFloatBE(src[6]);
|
|
|
- const double sample7 = (double) SDL_SwapFloatBE(src[7]);
|
|
|
- src += 32;
|
|
|
- dst[0] = (float) ((sample0 + last_sample0) * 0.5);
|
|
|
- dst[1] = (float) ((sample1 + last_sample1) * 0.5);
|
|
|
- dst[2] = (float) ((sample2 + last_sample2) * 0.5);
|
|
|
- dst[3] = (float) ((sample3 + last_sample3) * 0.5);
|
|
|
- dst[4] = (float) ((sample4 + last_sample4) * 0.5);
|
|
|
- dst[5] = (float) ((sample5 + last_sample5) * 0.5);
|
|
|
- dst[6] = (float) ((sample6 + last_sample6) * 0.5);
|
|
|
- dst[7] = (float) ((sample7 + last_sample7) * 0.5);
|
|
|
- last_sample0 = sample0;
|
|
|
- last_sample1 = sample1;
|
|
|
- last_sample2 = sample2;
|
|
|
- last_sample3 = sample3;
|
|
|
- last_sample4 = sample4;
|
|
|
- last_sample5 = sample5;
|
|
|
- last_sample6 = sample6;
|
|
|
- last_sample7 = sample7;
|
|
|
- dst += 8;
|
|
|
- }
|
|
|
-
|
|
|
- cvt->len_cvt = dstsize;
|
|
|
- if (cvt->filters[++cvt->filter_index]) {
|
|
|
- cvt->filters[cvt->filter_index] (cvt, format);
|
|
|
- }
|
|
|
-}
|
|
|
-
|
|
|
-#endif /* !LESS_RESAMPLERS */
|
|
|
-#endif /* !NO_RESAMPLERS */
|
|
|
-
|
|
|
-
|
|
|
-const SDL_AudioRateFilters sdl_audio_rate_filters[] =
|
|
|
-{
|
|
|
-#if !NO_RESAMPLERS
|
|
|
- { AUDIO_U8, 1, 0, 0, SDL_Downsample_U8_1c },
|
|
|
- { AUDIO_U8, 1, 1, 0, SDL_Upsample_U8_1c },
|
|
|
- { AUDIO_U8, 2, 0, 0, SDL_Downsample_U8_2c },
|
|
|
- { AUDIO_U8, 2, 1, 0, SDL_Upsample_U8_2c },
|
|
|
- { AUDIO_U8, 4, 0, 0, SDL_Downsample_U8_4c },
|
|
|
- { AUDIO_U8, 4, 1, 0, SDL_Upsample_U8_4c },
|
|
|
- { AUDIO_U8, 6, 0, 0, SDL_Downsample_U8_6c },
|
|
|
- { AUDIO_U8, 6, 1, 0, SDL_Upsample_U8_6c },
|
|
|
- { AUDIO_U8, 8, 0, 0, SDL_Downsample_U8_8c },
|
|
|
- { AUDIO_U8, 8, 1, 0, SDL_Upsample_U8_8c },
|
|
|
- { AUDIO_S8, 1, 0, 0, SDL_Downsample_S8_1c },
|
|
|
- { AUDIO_S8, 1, 1, 0, SDL_Upsample_S8_1c },
|
|
|
- { AUDIO_S8, 2, 0, 0, SDL_Downsample_S8_2c },
|
|
|
- { AUDIO_S8, 2, 1, 0, SDL_Upsample_S8_2c },
|
|
|
- { AUDIO_S8, 4, 0, 0, SDL_Downsample_S8_4c },
|
|
|
- { AUDIO_S8, 4, 1, 0, SDL_Upsample_S8_4c },
|
|
|
- { AUDIO_S8, 6, 0, 0, SDL_Downsample_S8_6c },
|
|
|
- { AUDIO_S8, 6, 1, 0, SDL_Upsample_S8_6c },
|
|
|
- { AUDIO_S8, 8, 0, 0, SDL_Downsample_S8_8c },
|
|
|
- { AUDIO_S8, 8, 1, 0, SDL_Upsample_S8_8c },
|
|
|
- { AUDIO_U16LSB, 1, 0, 0, SDL_Downsample_U16LSB_1c },
|
|
|
- { AUDIO_U16LSB, 1, 1, 0, SDL_Upsample_U16LSB_1c },
|
|
|
- { AUDIO_U16LSB, 2, 0, 0, SDL_Downsample_U16LSB_2c },
|
|
|
- { AUDIO_U16LSB, 2, 1, 0, SDL_Upsample_U16LSB_2c },
|
|
|
- { AUDIO_U16LSB, 4, 0, 0, SDL_Downsample_U16LSB_4c },
|
|
|
- { AUDIO_U16LSB, 4, 1, 0, SDL_Upsample_U16LSB_4c },
|
|
|
- { AUDIO_U16LSB, 6, 0, 0, SDL_Downsample_U16LSB_6c },
|
|
|
- { AUDIO_U16LSB, 6, 1, 0, SDL_Upsample_U16LSB_6c },
|
|
|
- { AUDIO_U16LSB, 8, 0, 0, SDL_Downsample_U16LSB_8c },
|
|
|
- { AUDIO_U16LSB, 8, 1, 0, SDL_Upsample_U16LSB_8c },
|
|
|
- { AUDIO_S16LSB, 1, 0, 0, SDL_Downsample_S16LSB_1c },
|
|
|
- { AUDIO_S16LSB, 1, 1, 0, SDL_Upsample_S16LSB_1c },
|
|
|
- { AUDIO_S16LSB, 2, 0, 0, SDL_Downsample_S16LSB_2c },
|
|
|
- { AUDIO_S16LSB, 2, 1, 0, SDL_Upsample_S16LSB_2c },
|
|
|
- { AUDIO_S16LSB, 4, 0, 0, SDL_Downsample_S16LSB_4c },
|
|
|
- { AUDIO_S16LSB, 4, 1, 0, SDL_Upsample_S16LSB_4c },
|
|
|
- { AUDIO_S16LSB, 6, 0, 0, SDL_Downsample_S16LSB_6c },
|
|
|
- { AUDIO_S16LSB, 6, 1, 0, SDL_Upsample_S16LSB_6c },
|
|
|
- { AUDIO_S16LSB, 8, 0, 0, SDL_Downsample_S16LSB_8c },
|
|
|
- { AUDIO_S16LSB, 8, 1, 0, SDL_Upsample_S16LSB_8c },
|
|
|
- { AUDIO_U16MSB, 1, 0, 0, SDL_Downsample_U16MSB_1c },
|
|
|
- { AUDIO_U16MSB, 1, 1, 0, SDL_Upsample_U16MSB_1c },
|
|
|
- { AUDIO_U16MSB, 2, 0, 0, SDL_Downsample_U16MSB_2c },
|
|
|
- { AUDIO_U16MSB, 2, 1, 0, SDL_Upsample_U16MSB_2c },
|
|
|
- { AUDIO_U16MSB, 4, 0, 0, SDL_Downsample_U16MSB_4c },
|
|
|
- { AUDIO_U16MSB, 4, 1, 0, SDL_Upsample_U16MSB_4c },
|
|
|
- { AUDIO_U16MSB, 6, 0, 0, SDL_Downsample_U16MSB_6c },
|
|
|
- { AUDIO_U16MSB, 6, 1, 0, SDL_Upsample_U16MSB_6c },
|
|
|
- { AUDIO_U16MSB, 8, 0, 0, SDL_Downsample_U16MSB_8c },
|
|
|
- { AUDIO_U16MSB, 8, 1, 0, SDL_Upsample_U16MSB_8c },
|
|
|
- { AUDIO_S16MSB, 1, 0, 0, SDL_Downsample_S16MSB_1c },
|
|
|
- { AUDIO_S16MSB, 1, 1, 0, SDL_Upsample_S16MSB_1c },
|
|
|
- { AUDIO_S16MSB, 2, 0, 0, SDL_Downsample_S16MSB_2c },
|
|
|
- { AUDIO_S16MSB, 2, 1, 0, SDL_Upsample_S16MSB_2c },
|
|
|
- { AUDIO_S16MSB, 4, 0, 0, SDL_Downsample_S16MSB_4c },
|
|
|
- { AUDIO_S16MSB, 4, 1, 0, SDL_Upsample_S16MSB_4c },
|
|
|
- { AUDIO_S16MSB, 6, 0, 0, SDL_Downsample_S16MSB_6c },
|
|
|
- { AUDIO_S16MSB, 6, 1, 0, SDL_Upsample_S16MSB_6c },
|
|
|
- { AUDIO_S16MSB, 8, 0, 0, SDL_Downsample_S16MSB_8c },
|
|
|
- { AUDIO_S16MSB, 8, 1, 0, SDL_Upsample_S16MSB_8c },
|
|
|
- { AUDIO_S32LSB, 1, 0, 0, SDL_Downsample_S32LSB_1c },
|
|
|
- { AUDIO_S32LSB, 1, 1, 0, SDL_Upsample_S32LSB_1c },
|
|
|
- { AUDIO_S32LSB, 2, 0, 0, SDL_Downsample_S32LSB_2c },
|
|
|
- { AUDIO_S32LSB, 2, 1, 0, SDL_Upsample_S32LSB_2c },
|
|
|
- { AUDIO_S32LSB, 4, 0, 0, SDL_Downsample_S32LSB_4c },
|
|
|
- { AUDIO_S32LSB, 4, 1, 0, SDL_Upsample_S32LSB_4c },
|
|
|
- { AUDIO_S32LSB, 6, 0, 0, SDL_Downsample_S32LSB_6c },
|
|
|
- { AUDIO_S32LSB, 6, 1, 0, SDL_Upsample_S32LSB_6c },
|
|
|
- { AUDIO_S32LSB, 8, 0, 0, SDL_Downsample_S32LSB_8c },
|
|
|
- { AUDIO_S32LSB, 8, 1, 0, SDL_Upsample_S32LSB_8c },
|
|
|
- { AUDIO_S32MSB, 1, 0, 0, SDL_Downsample_S32MSB_1c },
|
|
|
- { AUDIO_S32MSB, 1, 1, 0, SDL_Upsample_S32MSB_1c },
|
|
|
- { AUDIO_S32MSB, 2, 0, 0, SDL_Downsample_S32MSB_2c },
|
|
|
- { AUDIO_S32MSB, 2, 1, 0, SDL_Upsample_S32MSB_2c },
|
|
|
- { AUDIO_S32MSB, 4, 0, 0, SDL_Downsample_S32MSB_4c },
|
|
|
- { AUDIO_S32MSB, 4, 1, 0, SDL_Upsample_S32MSB_4c },
|
|
|
- { AUDIO_S32MSB, 6, 0, 0, SDL_Downsample_S32MSB_6c },
|
|
|
- { AUDIO_S32MSB, 6, 1, 0, SDL_Upsample_S32MSB_6c },
|
|
|
- { AUDIO_S32MSB, 8, 0, 0, SDL_Downsample_S32MSB_8c },
|
|
|
- { AUDIO_S32MSB, 8, 1, 0, SDL_Upsample_S32MSB_8c },
|
|
|
- { AUDIO_F32LSB, 1, 0, 0, SDL_Downsample_F32LSB_1c },
|
|
|
- { AUDIO_F32LSB, 1, 1, 0, SDL_Upsample_F32LSB_1c },
|
|
|
- { AUDIO_F32LSB, 2, 0, 0, SDL_Downsample_F32LSB_2c },
|
|
|
- { AUDIO_F32LSB, 2, 1, 0, SDL_Upsample_F32LSB_2c },
|
|
|
- { AUDIO_F32LSB, 4, 0, 0, SDL_Downsample_F32LSB_4c },
|
|
|
- { AUDIO_F32LSB, 4, 1, 0, SDL_Upsample_F32LSB_4c },
|
|
|
- { AUDIO_F32LSB, 6, 0, 0, SDL_Downsample_F32LSB_6c },
|
|
|
- { AUDIO_F32LSB, 6, 1, 0, SDL_Upsample_F32LSB_6c },
|
|
|
- { AUDIO_F32LSB, 8, 0, 0, SDL_Downsample_F32LSB_8c },
|
|
|
- { AUDIO_F32LSB, 8, 1, 0, SDL_Upsample_F32LSB_8c },
|
|
|
- { AUDIO_F32MSB, 1, 0, 0, SDL_Downsample_F32MSB_1c },
|
|
|
- { AUDIO_F32MSB, 1, 1, 0, SDL_Upsample_F32MSB_1c },
|
|
|
- { AUDIO_F32MSB, 2, 0, 0, SDL_Downsample_F32MSB_2c },
|
|
|
- { AUDIO_F32MSB, 2, 1, 0, SDL_Upsample_F32MSB_2c },
|
|
|
- { AUDIO_F32MSB, 4, 0, 0, SDL_Downsample_F32MSB_4c },
|
|
|
- { AUDIO_F32MSB, 4, 1, 0, SDL_Upsample_F32MSB_4c },
|
|
|
- { AUDIO_F32MSB, 6, 0, 0, SDL_Downsample_F32MSB_6c },
|
|
|
- { AUDIO_F32MSB, 6, 1, 0, SDL_Upsample_F32MSB_6c },
|
|
|
- { AUDIO_F32MSB, 8, 0, 0, SDL_Downsample_F32MSB_8c },
|
|
|
- { AUDIO_F32MSB, 8, 1, 0, SDL_Upsample_F32MSB_8c },
|
|
|
-#if !LESS_RESAMPLERS
|
|
|
- { AUDIO_U8, 1, 0, 2, SDL_Downsample_U8_1c_x2 },
|
|
|
- { AUDIO_U8, 1, 1, 2, SDL_Upsample_U8_1c_x2 },
|
|
|
- { AUDIO_U8, 1, 0, 4, SDL_Downsample_U8_1c_x4 },
|
|
|
- { AUDIO_U8, 1, 1, 4, SDL_Upsample_U8_1c_x4 },
|
|
|
- { AUDIO_U8, 2, 0, 2, SDL_Downsample_U8_2c_x2 },
|
|
|
- { AUDIO_U8, 2, 1, 2, SDL_Upsample_U8_2c_x2 },
|
|
|
- { AUDIO_U8, 2, 0, 4, SDL_Downsample_U8_2c_x4 },
|
|
|
- { AUDIO_U8, 2, 1, 4, SDL_Upsample_U8_2c_x4 },
|
|
|
- { AUDIO_U8, 4, 0, 2, SDL_Downsample_U8_4c_x2 },
|
|
|
- { AUDIO_U8, 4, 1, 2, SDL_Upsample_U8_4c_x2 },
|
|
|
- { AUDIO_U8, 4, 0, 4, SDL_Downsample_U8_4c_x4 },
|
|
|
- { AUDIO_U8, 4, 1, 4, SDL_Upsample_U8_4c_x4 },
|
|
|
- { AUDIO_U8, 6, 0, 2, SDL_Downsample_U8_6c_x2 },
|
|
|
- { AUDIO_U8, 6, 1, 2, SDL_Upsample_U8_6c_x2 },
|
|
|
- { AUDIO_U8, 6, 0, 4, SDL_Downsample_U8_6c_x4 },
|
|
|
- { AUDIO_U8, 6, 1, 4, SDL_Upsample_U8_6c_x4 },
|
|
|
- { AUDIO_U8, 8, 0, 2, SDL_Downsample_U8_8c_x2 },
|
|
|
- { AUDIO_U8, 8, 1, 2, SDL_Upsample_U8_8c_x2 },
|
|
|
- { AUDIO_U8, 8, 0, 4, SDL_Downsample_U8_8c_x4 },
|
|
|
- { AUDIO_U8, 8, 1, 4, SDL_Upsample_U8_8c_x4 },
|
|
|
- { AUDIO_S8, 1, 0, 2, SDL_Downsample_S8_1c_x2 },
|
|
|
- { AUDIO_S8, 1, 1, 2, SDL_Upsample_S8_1c_x2 },
|
|
|
- { AUDIO_S8, 1, 0, 4, SDL_Downsample_S8_1c_x4 },
|
|
|
- { AUDIO_S8, 1, 1, 4, SDL_Upsample_S8_1c_x4 },
|
|
|
- { AUDIO_S8, 2, 0, 2, SDL_Downsample_S8_2c_x2 },
|
|
|
- { AUDIO_S8, 2, 1, 2, SDL_Upsample_S8_2c_x2 },
|
|
|
- { AUDIO_S8, 2, 0, 4, SDL_Downsample_S8_2c_x4 },
|
|
|
- { AUDIO_S8, 2, 1, 4, SDL_Upsample_S8_2c_x4 },
|
|
|
- { AUDIO_S8, 4, 0, 2, SDL_Downsample_S8_4c_x2 },
|
|
|
- { AUDIO_S8, 4, 1, 2, SDL_Upsample_S8_4c_x2 },
|
|
|
- { AUDIO_S8, 4, 0, 4, SDL_Downsample_S8_4c_x4 },
|
|
|
- { AUDIO_S8, 4, 1, 4, SDL_Upsample_S8_4c_x4 },
|
|
|
- { AUDIO_S8, 6, 0, 2, SDL_Downsample_S8_6c_x2 },
|
|
|
- { AUDIO_S8, 6, 1, 2, SDL_Upsample_S8_6c_x2 },
|
|
|
- { AUDIO_S8, 6, 0, 4, SDL_Downsample_S8_6c_x4 },
|
|
|
- { AUDIO_S8, 6, 1, 4, SDL_Upsample_S8_6c_x4 },
|
|
|
- { AUDIO_S8, 8, 0, 2, SDL_Downsample_S8_8c_x2 },
|
|
|
- { AUDIO_S8, 8, 1, 2, SDL_Upsample_S8_8c_x2 },
|
|
|
- { AUDIO_S8, 8, 0, 4, SDL_Downsample_S8_8c_x4 },
|
|
|
- { AUDIO_S8, 8, 1, 4, SDL_Upsample_S8_8c_x4 },
|
|
|
- { AUDIO_U16LSB, 1, 0, 2, SDL_Downsample_U16LSB_1c_x2 },
|
|
|
- { AUDIO_U16LSB, 1, 1, 2, SDL_Upsample_U16LSB_1c_x2 },
|
|
|
- { AUDIO_U16LSB, 1, 0, 4, SDL_Downsample_U16LSB_1c_x4 },
|
|
|
- { AUDIO_U16LSB, 1, 1, 4, SDL_Upsample_U16LSB_1c_x4 },
|
|
|
- { AUDIO_U16LSB, 2, 0, 2, SDL_Downsample_U16LSB_2c_x2 },
|
|
|
- { AUDIO_U16LSB, 2, 1, 2, SDL_Upsample_U16LSB_2c_x2 },
|
|
|
- { AUDIO_U16LSB, 2, 0, 4, SDL_Downsample_U16LSB_2c_x4 },
|
|
|
- { AUDIO_U16LSB, 2, 1, 4, SDL_Upsample_U16LSB_2c_x4 },
|
|
|
- { AUDIO_U16LSB, 4, 0, 2, SDL_Downsample_U16LSB_4c_x2 },
|
|
|
- { AUDIO_U16LSB, 4, 1, 2, SDL_Upsample_U16LSB_4c_x2 },
|
|
|
- { AUDIO_U16LSB, 4, 0, 4, SDL_Downsample_U16LSB_4c_x4 },
|
|
|
- { AUDIO_U16LSB, 4, 1, 4, SDL_Upsample_U16LSB_4c_x4 },
|
|
|
- { AUDIO_U16LSB, 6, 0, 2, SDL_Downsample_U16LSB_6c_x2 },
|
|
|
- { AUDIO_U16LSB, 6, 1, 2, SDL_Upsample_U16LSB_6c_x2 },
|
|
|
- { AUDIO_U16LSB, 6, 0, 4, SDL_Downsample_U16LSB_6c_x4 },
|
|
|
- { AUDIO_U16LSB, 6, 1, 4, SDL_Upsample_U16LSB_6c_x4 },
|
|
|
- { AUDIO_U16LSB, 8, 0, 2, SDL_Downsample_U16LSB_8c_x2 },
|
|
|
- { AUDIO_U16LSB, 8, 1, 2, SDL_Upsample_U16LSB_8c_x2 },
|
|
|
- { AUDIO_U16LSB, 8, 0, 4, SDL_Downsample_U16LSB_8c_x4 },
|
|
|
- { AUDIO_U16LSB, 8, 1, 4, SDL_Upsample_U16LSB_8c_x4 },
|
|
|
- { AUDIO_S16LSB, 1, 0, 2, SDL_Downsample_S16LSB_1c_x2 },
|
|
|
- { AUDIO_S16LSB, 1, 1, 2, SDL_Upsample_S16LSB_1c_x2 },
|
|
|
- { AUDIO_S16LSB, 1, 0, 4, SDL_Downsample_S16LSB_1c_x4 },
|
|
|
- { AUDIO_S16LSB, 1, 1, 4, SDL_Upsample_S16LSB_1c_x4 },
|
|
|
- { AUDIO_S16LSB, 2, 0, 2, SDL_Downsample_S16LSB_2c_x2 },
|
|
|
- { AUDIO_S16LSB, 2, 1, 2, SDL_Upsample_S16LSB_2c_x2 },
|
|
|
- { AUDIO_S16LSB, 2, 0, 4, SDL_Downsample_S16LSB_2c_x4 },
|
|
|
- { AUDIO_S16LSB, 2, 1, 4, SDL_Upsample_S16LSB_2c_x4 },
|
|
|
- { AUDIO_S16LSB, 4, 0, 2, SDL_Downsample_S16LSB_4c_x2 },
|
|
|
- { AUDIO_S16LSB, 4, 1, 2, SDL_Upsample_S16LSB_4c_x2 },
|
|
|
- { AUDIO_S16LSB, 4, 0, 4, SDL_Downsample_S16LSB_4c_x4 },
|
|
|
- { AUDIO_S16LSB, 4, 1, 4, SDL_Upsample_S16LSB_4c_x4 },
|
|
|
- { AUDIO_S16LSB, 6, 0, 2, SDL_Downsample_S16LSB_6c_x2 },
|
|
|
- { AUDIO_S16LSB, 6, 1, 2, SDL_Upsample_S16LSB_6c_x2 },
|
|
|
- { AUDIO_S16LSB, 6, 0, 4, SDL_Downsample_S16LSB_6c_x4 },
|
|
|
- { AUDIO_S16LSB, 6, 1, 4, SDL_Upsample_S16LSB_6c_x4 },
|
|
|
- { AUDIO_S16LSB, 8, 0, 2, SDL_Downsample_S16LSB_8c_x2 },
|
|
|
- { AUDIO_S16LSB, 8, 1, 2, SDL_Upsample_S16LSB_8c_x2 },
|
|
|
- { AUDIO_S16LSB, 8, 0, 4, SDL_Downsample_S16LSB_8c_x4 },
|
|
|
- { AUDIO_S16LSB, 8, 1, 4, SDL_Upsample_S16LSB_8c_x4 },
|
|
|
- { AUDIO_U16MSB, 1, 0, 2, SDL_Downsample_U16MSB_1c_x2 },
|
|
|
- { AUDIO_U16MSB, 1, 1, 2, SDL_Upsample_U16MSB_1c_x2 },
|
|
|
- { AUDIO_U16MSB, 1, 0, 4, SDL_Downsample_U16MSB_1c_x4 },
|
|
|
- { AUDIO_U16MSB, 1, 1, 4, SDL_Upsample_U16MSB_1c_x4 },
|
|
|
- { AUDIO_U16MSB, 2, 0, 2, SDL_Downsample_U16MSB_2c_x2 },
|
|
|
- { AUDIO_U16MSB, 2, 1, 2, SDL_Upsample_U16MSB_2c_x2 },
|
|
|
- { AUDIO_U16MSB, 2, 0, 4, SDL_Downsample_U16MSB_2c_x4 },
|
|
|
- { AUDIO_U16MSB, 2, 1, 4, SDL_Upsample_U16MSB_2c_x4 },
|
|
|
- { AUDIO_U16MSB, 4, 0, 2, SDL_Downsample_U16MSB_4c_x2 },
|
|
|
- { AUDIO_U16MSB, 4, 1, 2, SDL_Upsample_U16MSB_4c_x2 },
|
|
|
- { AUDIO_U16MSB, 4, 0, 4, SDL_Downsample_U16MSB_4c_x4 },
|
|
|
- { AUDIO_U16MSB, 4, 1, 4, SDL_Upsample_U16MSB_4c_x4 },
|
|
|
- { AUDIO_U16MSB, 6, 0, 2, SDL_Downsample_U16MSB_6c_x2 },
|
|
|
- { AUDIO_U16MSB, 6, 1, 2, SDL_Upsample_U16MSB_6c_x2 },
|
|
|
- { AUDIO_U16MSB, 6, 0, 4, SDL_Downsample_U16MSB_6c_x4 },
|
|
|
- { AUDIO_U16MSB, 6, 1, 4, SDL_Upsample_U16MSB_6c_x4 },
|
|
|
- { AUDIO_U16MSB, 8, 0, 2, SDL_Downsample_U16MSB_8c_x2 },
|
|
|
- { AUDIO_U16MSB, 8, 1, 2, SDL_Upsample_U16MSB_8c_x2 },
|
|
|
- { AUDIO_U16MSB, 8, 0, 4, SDL_Downsample_U16MSB_8c_x4 },
|
|
|
- { AUDIO_U16MSB, 8, 1, 4, SDL_Upsample_U16MSB_8c_x4 },
|
|
|
- { AUDIO_S16MSB, 1, 0, 2, SDL_Downsample_S16MSB_1c_x2 },
|
|
|
- { AUDIO_S16MSB, 1, 1, 2, SDL_Upsample_S16MSB_1c_x2 },
|
|
|
- { AUDIO_S16MSB, 1, 0, 4, SDL_Downsample_S16MSB_1c_x4 },
|
|
|
- { AUDIO_S16MSB, 1, 1, 4, SDL_Upsample_S16MSB_1c_x4 },
|
|
|
- { AUDIO_S16MSB, 2, 0, 2, SDL_Downsample_S16MSB_2c_x2 },
|
|
|
- { AUDIO_S16MSB, 2, 1, 2, SDL_Upsample_S16MSB_2c_x2 },
|
|
|
- { AUDIO_S16MSB, 2, 0, 4, SDL_Downsample_S16MSB_2c_x4 },
|
|
|
- { AUDIO_S16MSB, 2, 1, 4, SDL_Upsample_S16MSB_2c_x4 },
|
|
|
- { AUDIO_S16MSB, 4, 0, 2, SDL_Downsample_S16MSB_4c_x2 },
|
|
|
- { AUDIO_S16MSB, 4, 1, 2, SDL_Upsample_S16MSB_4c_x2 },
|
|
|
- { AUDIO_S16MSB, 4, 0, 4, SDL_Downsample_S16MSB_4c_x4 },
|
|
|
- { AUDIO_S16MSB, 4, 1, 4, SDL_Upsample_S16MSB_4c_x4 },
|
|
|
- { AUDIO_S16MSB, 6, 0, 2, SDL_Downsample_S16MSB_6c_x2 },
|
|
|
- { AUDIO_S16MSB, 6, 1, 2, SDL_Upsample_S16MSB_6c_x2 },
|
|
|
- { AUDIO_S16MSB, 6, 0, 4, SDL_Downsample_S16MSB_6c_x4 },
|
|
|
- { AUDIO_S16MSB, 6, 1, 4, SDL_Upsample_S16MSB_6c_x4 },
|
|
|
- { AUDIO_S16MSB, 8, 0, 2, SDL_Downsample_S16MSB_8c_x2 },
|
|
|
- { AUDIO_S16MSB, 8, 1, 2, SDL_Upsample_S16MSB_8c_x2 },
|
|
|
- { AUDIO_S16MSB, 8, 0, 4, SDL_Downsample_S16MSB_8c_x4 },
|
|
|
- { AUDIO_S16MSB, 8, 1, 4, SDL_Upsample_S16MSB_8c_x4 },
|
|
|
- { AUDIO_S32LSB, 1, 0, 2, SDL_Downsample_S32LSB_1c_x2 },
|
|
|
- { AUDIO_S32LSB, 1, 1, 2, SDL_Upsample_S32LSB_1c_x2 },
|
|
|
- { AUDIO_S32LSB, 1, 0, 4, SDL_Downsample_S32LSB_1c_x4 },
|
|
|
- { AUDIO_S32LSB, 1, 1, 4, SDL_Upsample_S32LSB_1c_x4 },
|
|
|
- { AUDIO_S32LSB, 2, 0, 2, SDL_Downsample_S32LSB_2c_x2 },
|
|
|
- { AUDIO_S32LSB, 2, 1, 2, SDL_Upsample_S32LSB_2c_x2 },
|
|
|
- { AUDIO_S32LSB, 2, 0, 4, SDL_Downsample_S32LSB_2c_x4 },
|
|
|
- { AUDIO_S32LSB, 2, 1, 4, SDL_Upsample_S32LSB_2c_x4 },
|
|
|
- { AUDIO_S32LSB, 4, 0, 2, SDL_Downsample_S32LSB_4c_x2 },
|
|
|
- { AUDIO_S32LSB, 4, 1, 2, SDL_Upsample_S32LSB_4c_x2 },
|
|
|
- { AUDIO_S32LSB, 4, 0, 4, SDL_Downsample_S32LSB_4c_x4 },
|
|
|
- { AUDIO_S32LSB, 4, 1, 4, SDL_Upsample_S32LSB_4c_x4 },
|
|
|
- { AUDIO_S32LSB, 6, 0, 2, SDL_Downsample_S32LSB_6c_x2 },
|
|
|
- { AUDIO_S32LSB, 6, 1, 2, SDL_Upsample_S32LSB_6c_x2 },
|
|
|
- { AUDIO_S32LSB, 6, 0, 4, SDL_Downsample_S32LSB_6c_x4 },
|
|
|
- { AUDIO_S32LSB, 6, 1, 4, SDL_Upsample_S32LSB_6c_x4 },
|
|
|
- { AUDIO_S32LSB, 8, 0, 2, SDL_Downsample_S32LSB_8c_x2 },
|
|
|
- { AUDIO_S32LSB, 8, 1, 2, SDL_Upsample_S32LSB_8c_x2 },
|
|
|
- { AUDIO_S32LSB, 8, 0, 4, SDL_Downsample_S32LSB_8c_x4 },
|
|
|
- { AUDIO_S32LSB, 8, 1, 4, SDL_Upsample_S32LSB_8c_x4 },
|
|
|
- { AUDIO_S32MSB, 1, 0, 2, SDL_Downsample_S32MSB_1c_x2 },
|
|
|
- { AUDIO_S32MSB, 1, 1, 2, SDL_Upsample_S32MSB_1c_x2 },
|
|
|
- { AUDIO_S32MSB, 1, 0, 4, SDL_Downsample_S32MSB_1c_x4 },
|
|
|
- { AUDIO_S32MSB, 1, 1, 4, SDL_Upsample_S32MSB_1c_x4 },
|
|
|
- { AUDIO_S32MSB, 2, 0, 2, SDL_Downsample_S32MSB_2c_x2 },
|
|
|
- { AUDIO_S32MSB, 2, 1, 2, SDL_Upsample_S32MSB_2c_x2 },
|
|
|
- { AUDIO_S32MSB, 2, 0, 4, SDL_Downsample_S32MSB_2c_x4 },
|
|
|
- { AUDIO_S32MSB, 2, 1, 4, SDL_Upsample_S32MSB_2c_x4 },
|
|
|
- { AUDIO_S32MSB, 4, 0, 2, SDL_Downsample_S32MSB_4c_x2 },
|
|
|
- { AUDIO_S32MSB, 4, 1, 2, SDL_Upsample_S32MSB_4c_x2 },
|
|
|
- { AUDIO_S32MSB, 4, 0, 4, SDL_Downsample_S32MSB_4c_x4 },
|
|
|
- { AUDIO_S32MSB, 4, 1, 4, SDL_Upsample_S32MSB_4c_x4 },
|
|
|
- { AUDIO_S32MSB, 6, 0, 2, SDL_Downsample_S32MSB_6c_x2 },
|
|
|
- { AUDIO_S32MSB, 6, 1, 2, SDL_Upsample_S32MSB_6c_x2 },
|
|
|
- { AUDIO_S32MSB, 6, 0, 4, SDL_Downsample_S32MSB_6c_x4 },
|
|
|
- { AUDIO_S32MSB, 6, 1, 4, SDL_Upsample_S32MSB_6c_x4 },
|
|
|
- { AUDIO_S32MSB, 8, 0, 2, SDL_Downsample_S32MSB_8c_x2 },
|
|
|
- { AUDIO_S32MSB, 8, 1, 2, SDL_Upsample_S32MSB_8c_x2 },
|
|
|
- { AUDIO_S32MSB, 8, 0, 4, SDL_Downsample_S32MSB_8c_x4 },
|
|
|
- { AUDIO_S32MSB, 8, 1, 4, SDL_Upsample_S32MSB_8c_x4 },
|
|
|
- { AUDIO_F32LSB, 1, 0, 2, SDL_Downsample_F32LSB_1c_x2 },
|
|
|
- { AUDIO_F32LSB, 1, 1, 2, SDL_Upsample_F32LSB_1c_x2 },
|
|
|
- { AUDIO_F32LSB, 1, 0, 4, SDL_Downsample_F32LSB_1c_x4 },
|
|
|
- { AUDIO_F32LSB, 1, 1, 4, SDL_Upsample_F32LSB_1c_x4 },
|
|
|
- { AUDIO_F32LSB, 2, 0, 2, SDL_Downsample_F32LSB_2c_x2 },
|
|
|
- { AUDIO_F32LSB, 2, 1, 2, SDL_Upsample_F32LSB_2c_x2 },
|
|
|
- { AUDIO_F32LSB, 2, 0, 4, SDL_Downsample_F32LSB_2c_x4 },
|
|
|
- { AUDIO_F32LSB, 2, 1, 4, SDL_Upsample_F32LSB_2c_x4 },
|
|
|
- { AUDIO_F32LSB, 4, 0, 2, SDL_Downsample_F32LSB_4c_x2 },
|
|
|
- { AUDIO_F32LSB, 4, 1, 2, SDL_Upsample_F32LSB_4c_x2 },
|
|
|
- { AUDIO_F32LSB, 4, 0, 4, SDL_Downsample_F32LSB_4c_x4 },
|
|
|
- { AUDIO_F32LSB, 4, 1, 4, SDL_Upsample_F32LSB_4c_x4 },
|
|
|
- { AUDIO_F32LSB, 6, 0, 2, SDL_Downsample_F32LSB_6c_x2 },
|
|
|
- { AUDIO_F32LSB, 6, 1, 2, SDL_Upsample_F32LSB_6c_x2 },
|
|
|
- { AUDIO_F32LSB, 6, 0, 4, SDL_Downsample_F32LSB_6c_x4 },
|
|
|
- { AUDIO_F32LSB, 6, 1, 4, SDL_Upsample_F32LSB_6c_x4 },
|
|
|
- { AUDIO_F32LSB, 8, 0, 2, SDL_Downsample_F32LSB_8c_x2 },
|
|
|
- { AUDIO_F32LSB, 8, 1, 2, SDL_Upsample_F32LSB_8c_x2 },
|
|
|
- { AUDIO_F32LSB, 8, 0, 4, SDL_Downsample_F32LSB_8c_x4 },
|
|
|
- { AUDIO_F32LSB, 8, 1, 4, SDL_Upsample_F32LSB_8c_x4 },
|
|
|
- { AUDIO_F32MSB, 1, 0, 2, SDL_Downsample_F32MSB_1c_x2 },
|
|
|
- { AUDIO_F32MSB, 1, 1, 2, SDL_Upsample_F32MSB_1c_x2 },
|
|
|
- { AUDIO_F32MSB, 1, 0, 4, SDL_Downsample_F32MSB_1c_x4 },
|
|
|
- { AUDIO_F32MSB, 1, 1, 4, SDL_Upsample_F32MSB_1c_x4 },
|
|
|
- { AUDIO_F32MSB, 2, 0, 2, SDL_Downsample_F32MSB_2c_x2 },
|
|
|
- { AUDIO_F32MSB, 2, 1, 2, SDL_Upsample_F32MSB_2c_x2 },
|
|
|
- { AUDIO_F32MSB, 2, 0, 4, SDL_Downsample_F32MSB_2c_x4 },
|
|
|
- { AUDIO_F32MSB, 2, 1, 4, SDL_Upsample_F32MSB_2c_x4 },
|
|
|
- { AUDIO_F32MSB, 4, 0, 2, SDL_Downsample_F32MSB_4c_x2 },
|
|
|
- { AUDIO_F32MSB, 4, 1, 2, SDL_Upsample_F32MSB_4c_x2 },
|
|
|
- { AUDIO_F32MSB, 4, 0, 4, SDL_Downsample_F32MSB_4c_x4 },
|
|
|
- { AUDIO_F32MSB, 4, 1, 4, SDL_Upsample_F32MSB_4c_x4 },
|
|
|
- { AUDIO_F32MSB, 6, 0, 2, SDL_Downsample_F32MSB_6c_x2 },
|
|
|
- { AUDIO_F32MSB, 6, 1, 2, SDL_Upsample_F32MSB_6c_x2 },
|
|
|
- { AUDIO_F32MSB, 6, 0, 4, SDL_Downsample_F32MSB_6c_x4 },
|
|
|
- { AUDIO_F32MSB, 6, 1, 4, SDL_Upsample_F32MSB_6c_x4 },
|
|
|
- { AUDIO_F32MSB, 8, 0, 2, SDL_Downsample_F32MSB_8c_x2 },
|
|
|
- { AUDIO_F32MSB, 8, 1, 2, SDL_Upsample_F32MSB_8c_x2 },
|
|
|
- { AUDIO_F32MSB, 8, 0, 4, SDL_Downsample_F32MSB_8c_x4 },
|
|
|
- { AUDIO_F32MSB, 8, 1, 4, SDL_Upsample_F32MSB_8c_x4 },
|
|
|
-#endif /* !LESS_RESAMPLERS */
|
|
|
-#endif /* !NO_RESAMPLERS */
|
|
|
- { 0, 0, 0, 0, NULL }
|
|
|
-};
|
|
|
-
|
|
|
-/* 390 converters generated. */
|
|
|
-
|
|
|
-/* *INDENT-ON* */
|
|
|
-
|
|
|
/* vi: set ts=4 sw=4 expandtab: */
|