mirror of
https://github.com/love2d/megasource.git
synced 2026-08-18 19:54:37 +02:00
Added SDL 1c0f6952e65e.
This commit is contained in:
+261
-30
@@ -51,6 +51,7 @@ extern AudioBootStrap QSAAUDIO_bootstrap;
|
||||
extern AudioBootStrap SUNAUDIO_bootstrap;
|
||||
extern AudioBootStrap ARTS_bootstrap;
|
||||
extern AudioBootStrap ESD_bootstrap;
|
||||
extern AudioBootStrap NACLAUD_bootstrap;
|
||||
extern AudioBootStrap NAS_bootstrap;
|
||||
extern AudioBootStrap XAUDIO2_bootstrap;
|
||||
extern AudioBootStrap DSOUND_bootstrap;
|
||||
@@ -68,6 +69,8 @@ extern AudioBootStrap FUSIONSOUND_bootstrap;
|
||||
extern AudioBootStrap ANDROIDAUD_bootstrap;
|
||||
extern AudioBootStrap PSPAUD_bootstrap;
|
||||
extern AudioBootStrap SNDIO_bootstrap;
|
||||
extern AudioBootStrap EmscriptenAudio_bootstrap;
|
||||
|
||||
|
||||
/* Available audio drivers */
|
||||
static const AudioBootStrap *const bootstrap[] = {
|
||||
@@ -98,6 +101,9 @@ static const AudioBootStrap *const bootstrap[] = {
|
||||
#if SDL_AUDIO_DRIVER_ESD
|
||||
&ESD_bootstrap,
|
||||
#endif
|
||||
#if SDL_AUDIO_DRIVER_NACL
|
||||
&NACLAUD_bootstrap,
|
||||
#endif
|
||||
#if SDL_AUDIO_DRIVER_NAS
|
||||
&NAS_bootstrap,
|
||||
#endif
|
||||
@@ -133,6 +139,9 @@ static const AudioBootStrap *const bootstrap[] = {
|
||||
#endif
|
||||
#if SDL_AUDIO_DRIVER_PSP
|
||||
&PSPAUD_bootstrap,
|
||||
#endif
|
||||
#if SDL_AUDIO_DRIVER_EMSCRIPTEN
|
||||
&EmscriptenAudio_bootstrap,
|
||||
#endif
|
||||
NULL
|
||||
};
|
||||
@@ -171,6 +180,12 @@ SDL_AudioPlayDevice_Default(_THIS)
|
||||
{ /* no-op. */
|
||||
}
|
||||
|
||||
static int
|
||||
SDL_AudioGetPendingBytes_Default(_THIS)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
static Uint8 *
|
||||
SDL_AudioGetDeviceBuf_Default(_THIS)
|
||||
{
|
||||
@@ -198,22 +213,34 @@ SDL_AudioOpenDevice_Default(_THIS, const char *devname, int iscapture)
|
||||
return -1;
|
||||
}
|
||||
|
||||
static SDL_INLINE SDL_bool
|
||||
is_in_audio_device_thread(SDL_AudioDevice * device)
|
||||
{
|
||||
/* The device thread locks the same mutex, but not through the public API.
|
||||
This check is in case the application, in the audio callback,
|
||||
tries to lock the thread that we've already locked from the
|
||||
device thread...just in case we only have non-recursive mutexes. */
|
||||
if (device->thread && (SDL_ThreadID() == device->threadid)) {
|
||||
return SDL_TRUE;
|
||||
}
|
||||
|
||||
return SDL_FALSE;
|
||||
}
|
||||
|
||||
static void
|
||||
SDL_AudioLockDevice_Default(SDL_AudioDevice * device)
|
||||
{
|
||||
if (device->thread && (SDL_ThreadID() == device->threadid)) {
|
||||
return;
|
||||
if (!is_in_audio_device_thread(device)) {
|
||||
SDL_LockMutex(device->mixer_lock);
|
||||
}
|
||||
SDL_LockMutex(device->mixer_lock);
|
||||
}
|
||||
|
||||
static void
|
||||
SDL_AudioUnlockDevice_Default(SDL_AudioDevice * device)
|
||||
{
|
||||
if (device->thread && (SDL_ThreadID() == device->threadid)) {
|
||||
return;
|
||||
if (!is_in_audio_device_thread(device)) {
|
||||
SDL_UnlockMutex(device->mixer_lock);
|
||||
}
|
||||
SDL_UnlockMutex(device->mixer_lock);
|
||||
}
|
||||
|
||||
|
||||
@@ -234,6 +261,7 @@ finalize_audio_entry_points(void)
|
||||
FILL_STUB(ThreadInit);
|
||||
FILL_STUB(WaitDevice);
|
||||
FILL_STUB(PlayDevice);
|
||||
FILL_STUB(GetPendingBytes);
|
||||
FILL_STUB(GetDeviceBuf);
|
||||
FILL_STUB(WaitDone);
|
||||
FILL_STUB(CloseDevice);
|
||||
@@ -243,6 +271,7 @@ finalize_audio_entry_points(void)
|
||||
#undef FILL_STUB
|
||||
}
|
||||
|
||||
#if 0 /* !!! FIXME: rewrite/remove this streamer code. */
|
||||
/* Streaming functions (for when the input and output buffer sizes are different) */
|
||||
/* Write [length] bytes from buf into the streamer */
|
||||
static void
|
||||
@@ -302,8 +331,184 @@ SDL_StreamDeinit(SDL_AudioStreamer * stream)
|
||||
{
|
||||
SDL_free(stream->buffer);
|
||||
}
|
||||
#endif
|
||||
|
||||
#if defined(ANDROID)
|
||||
|
||||
/* buffer queueing support... */
|
||||
|
||||
/* this expects that you managed thread safety elsewhere. */
|
||||
static void
|
||||
free_audio_queue(SDL_AudioBufferQueue *buffer)
|
||||
{
|
||||
while (buffer) {
|
||||
SDL_AudioBufferQueue *next = buffer->next;
|
||||
SDL_free(buffer);
|
||||
buffer = next;
|
||||
}
|
||||
}
|
||||
|
||||
static void SDLCALL
|
||||
SDL_BufferQueueDrainCallback(void *userdata, Uint8 *stream, int _len)
|
||||
{
|
||||
/* this function always holds the mixer lock before being called. */
|
||||
Uint32 len = (Uint32) _len;
|
||||
SDL_AudioDevice *device = (SDL_AudioDevice *) userdata;
|
||||
SDL_AudioBufferQueue *buffer;
|
||||
|
||||
SDL_assert(device != NULL); /* this shouldn't ever happen, right?! */
|
||||
SDL_assert(_len >= 0); /* this shouldn't ever happen, right?! */
|
||||
|
||||
while ((len > 0) && ((buffer = device->buffer_queue_head) != NULL)) {
|
||||
const Uint32 avail = buffer->datalen - buffer->startpos;
|
||||
const Uint32 cpy = SDL_min(len, avail);
|
||||
SDL_assert(device->queued_bytes >= avail);
|
||||
|
||||
SDL_memcpy(stream, buffer->data + buffer->startpos, cpy);
|
||||
buffer->startpos += cpy;
|
||||
stream += cpy;
|
||||
device->queued_bytes -= cpy;
|
||||
len -= cpy;
|
||||
|
||||
if (buffer->startpos == buffer->datalen) { /* packet is done, put it in the pool. */
|
||||
device->buffer_queue_head = buffer->next;
|
||||
SDL_assert((buffer->next != NULL) || (buffer == device->buffer_queue_tail));
|
||||
buffer->next = device->buffer_queue_pool;
|
||||
device->buffer_queue_pool = buffer;
|
||||
}
|
||||
}
|
||||
|
||||
SDL_assert((device->buffer_queue_head != NULL) == (device->queued_bytes != 0));
|
||||
|
||||
if (len > 0) { /* fill any remaining space in the stream with silence. */
|
||||
SDL_assert(device->buffer_queue_head == NULL);
|
||||
SDL_memset(stream, device->spec.silence, len);
|
||||
}
|
||||
|
||||
if (device->buffer_queue_head == NULL) {
|
||||
device->buffer_queue_tail = NULL; /* in case we drained the queue entirely. */
|
||||
}
|
||||
}
|
||||
|
||||
int
|
||||
SDL_QueueAudio(SDL_AudioDeviceID devid, const void *_data, Uint32 len)
|
||||
{
|
||||
SDL_AudioDevice *device = get_audio_device(devid);
|
||||
const Uint8 *data = (const Uint8 *) _data;
|
||||
SDL_AudioBufferQueue *orighead;
|
||||
SDL_AudioBufferQueue *origtail;
|
||||
Uint32 origlen;
|
||||
Uint32 datalen;
|
||||
|
||||
if (!device) {
|
||||
return -1; /* get_audio_device() will have set the error state */
|
||||
}
|
||||
|
||||
if (device->spec.callback != SDL_BufferQueueDrainCallback) {
|
||||
return SDL_SetError("Audio device has a callback, queueing not allowed");
|
||||
}
|
||||
|
||||
current_audio.impl.LockDevice(device);
|
||||
|
||||
orighead = device->buffer_queue_head;
|
||||
origtail = device->buffer_queue_tail;
|
||||
origlen = origtail ? origtail->datalen : 0;
|
||||
|
||||
while (len > 0) {
|
||||
SDL_AudioBufferQueue *packet = device->buffer_queue_tail;
|
||||
SDL_assert(!packet || (packet->datalen <= SDL_AUDIOBUFFERQUEUE_PACKETLEN));
|
||||
if (!packet || (packet->datalen >= SDL_AUDIOBUFFERQUEUE_PACKETLEN)) {
|
||||
/* tail packet missing or completely full; we need a new packet. */
|
||||
packet = device->buffer_queue_pool;
|
||||
if (packet != NULL) {
|
||||
/* we have one available in the pool. */
|
||||
device->buffer_queue_pool = packet->next;
|
||||
} else {
|
||||
/* Have to allocate a new one! */
|
||||
packet = (SDL_AudioBufferQueue *) SDL_malloc(sizeof (SDL_AudioBufferQueue));
|
||||
if (packet == NULL) {
|
||||
/* uhoh, reset so we've queued nothing new, free what we can. */
|
||||
if (!origtail) {
|
||||
packet = device->buffer_queue_head; /* whole queue. */
|
||||
} else {
|
||||
packet = origtail->next; /* what we added to existing queue. */
|
||||
origtail->next = NULL;
|
||||
origtail->datalen = origlen;
|
||||
}
|
||||
device->buffer_queue_head = orighead;
|
||||
device->buffer_queue_tail = origtail;
|
||||
device->buffer_queue_pool = NULL;
|
||||
|
||||
current_audio.impl.UnlockDevice(device);
|
||||
|
||||
free_audio_queue(packet); /* give back what we can. */
|
||||
|
||||
return SDL_OutOfMemory();
|
||||
}
|
||||
}
|
||||
packet->datalen = 0;
|
||||
packet->startpos = 0;
|
||||
packet->next = NULL;
|
||||
|
||||
SDL_assert((device->buffer_queue_head != NULL) == (device->queued_bytes != 0));
|
||||
if (device->buffer_queue_tail == NULL) {
|
||||
device->buffer_queue_head = packet;
|
||||
} else {
|
||||
device->buffer_queue_tail->next = packet;
|
||||
}
|
||||
device->buffer_queue_tail = packet;
|
||||
}
|
||||
|
||||
datalen = SDL_min(len, SDL_AUDIOBUFFERQUEUE_PACKETLEN - packet->datalen);
|
||||
SDL_memcpy(packet->data + packet->datalen, data, datalen);
|
||||
data += datalen;
|
||||
len -= datalen;
|
||||
packet->datalen += datalen;
|
||||
device->queued_bytes += datalen;
|
||||
}
|
||||
|
||||
current_audio.impl.UnlockDevice(device);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
Uint32
|
||||
SDL_GetQueuedAudioSize(SDL_AudioDeviceID devid)
|
||||
{
|
||||
Uint32 retval = 0;
|
||||
SDL_AudioDevice *device = get_audio_device(devid);
|
||||
|
||||
/* Nothing to do unless we're set up for queueing. */
|
||||
if (device && (device->spec.callback == SDL_BufferQueueDrainCallback)) {
|
||||
current_audio.impl.LockDevice(device);
|
||||
retval = device->queued_bytes + current_audio.impl.GetPendingBytes(device);
|
||||
current_audio.impl.UnlockDevice(device);
|
||||
}
|
||||
|
||||
return retval;
|
||||
}
|
||||
|
||||
void
|
||||
SDL_ClearQueuedAudio(SDL_AudioDeviceID devid)
|
||||
{
|
||||
SDL_AudioDevice *device = get_audio_device(devid);
|
||||
SDL_AudioBufferQueue *buffer = NULL;
|
||||
if (!device) {
|
||||
return; /* nothing to do. */
|
||||
}
|
||||
|
||||
/* Blank out the device and release the mutex. Free it afterwards. */
|
||||
current_audio.impl.LockDevice(device);
|
||||
buffer = device->buffer_queue_head;
|
||||
device->buffer_queue_tail = NULL;
|
||||
device->buffer_queue_head = NULL;
|
||||
device->queued_bytes = 0;
|
||||
current_audio.impl.UnlockDevice(device);
|
||||
|
||||
free_audio_queue(buffer);
|
||||
}
|
||||
|
||||
|
||||
#if defined(__ANDROID__)
|
||||
#include <android/log.h>
|
||||
#endif
|
||||
|
||||
@@ -317,9 +522,12 @@ SDL_RunAudio(void *devicep)
|
||||
void *udata;
|
||||
void (SDLCALL * fill) (void *userdata, Uint8 * stream, int len);
|
||||
Uint32 delay;
|
||||
|
||||
#if 0 /* !!! FIXME: rewrite/remove this streamer code. */
|
||||
/* For streaming when the buffer sizes don't match up */
|
||||
Uint8 *istream;
|
||||
int istream_len = 0;
|
||||
#endif
|
||||
|
||||
/* The audio mixing is always a high priority thread */
|
||||
SDL_SetThreadPriority(SDL_THREAD_PRIORITY_HIGH);
|
||||
@@ -367,6 +575,7 @@ SDL_RunAudio(void *devicep)
|
||||
delay = ((device->spec.samples * 1000) / device->spec.freq);
|
||||
|
||||
/* Determine if the streamer is necessary here */
|
||||
#if 0 /* !!! FIXME: rewrite/remove this streamer code. */
|
||||
if (device->use_streamer == 1) {
|
||||
/* This code is almost the same as the old code. The difference is, instead of reading
|
||||
directly from the callback into "stream", then converting and sending the audio off,
|
||||
@@ -455,7 +664,9 @@ SDL_RunAudio(void *devicep)
|
||||
}
|
||||
|
||||
}
|
||||
} else {
|
||||
} else
|
||||
#endif
|
||||
{
|
||||
/* Otherwise, do not use the streamer. This is the old code. */
|
||||
const int silence = (int) device->spec.silence;
|
||||
|
||||
@@ -510,10 +721,12 @@ SDL_RunAudio(void *devicep)
|
||||
current_audio.impl.WaitDone(device);
|
||||
|
||||
/* If necessary, deinit the streamer */
|
||||
#if 0 /* !!! FIXME: rewrite/remove this streamer code. */
|
||||
if (device->use_streamer == 1)
|
||||
SDL_StreamDeinit(&device->streamer);
|
||||
#endif
|
||||
|
||||
return (0);
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
@@ -546,16 +759,16 @@ SDL_ParseAudioFormat(const char *string)
|
||||
int
|
||||
SDL_GetNumAudioDrivers(void)
|
||||
{
|
||||
return (SDL_arraysize(bootstrap) - 1);
|
||||
return SDL_arraysize(bootstrap) - 1;
|
||||
}
|
||||
|
||||
const char *
|
||||
SDL_GetAudioDriver(int index)
|
||||
{
|
||||
if (index >= 0 && index < SDL_GetNumAudioDrivers()) {
|
||||
return (bootstrap[index]->name);
|
||||
return bootstrap[index]->name;
|
||||
}
|
||||
return (NULL);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
int
|
||||
@@ -603,12 +816,12 @@ SDL_AudioInit(const char *driver_name)
|
||||
}
|
||||
|
||||
SDL_memset(¤t_audio, 0, sizeof(current_audio));
|
||||
return (-1); /* No driver was available, so fail. */
|
||||
return -1; /* No driver was available, so fail. */
|
||||
}
|
||||
|
||||
finalize_audio_entry_points();
|
||||
|
||||
return (0);
|
||||
return 0;
|
||||
}
|
||||
|
||||
/*
|
||||
@@ -771,6 +984,10 @@ close_audio_device(SDL_AudioDevice * device)
|
||||
current_audio.impl.CloseDevice(device);
|
||||
device->opened = 0;
|
||||
}
|
||||
|
||||
free_audio_queue(device->buffer_queue_head);
|
||||
free_audio_queue(device->buffer_queue_pool);
|
||||
|
||||
SDL_FreeAudioMem(device);
|
||||
}
|
||||
|
||||
@@ -785,11 +1002,6 @@ prepare_audiospec(const SDL_AudioSpec * orig, SDL_AudioSpec * prepared)
|
||||
{
|
||||
SDL_memcpy(prepared, orig, sizeof(SDL_AudioSpec));
|
||||
|
||||
if (orig->callback == NULL) {
|
||||
SDL_SetError("SDL_OpenAudio() passed a NULL callback");
|
||||
return 0;
|
||||
}
|
||||
|
||||
if (orig->freq == 0) {
|
||||
const char *env = SDL_getenv("SDL_AUDIO_FREQUENCY");
|
||||
if ((!env) || ((prepared->freq = SDL_atoi(env)) == 0)) {
|
||||
@@ -842,7 +1054,6 @@ prepare_audiospec(const SDL_AudioSpec * orig, SDL_AudioSpec * prepared)
|
||||
return 1;
|
||||
}
|
||||
|
||||
|
||||
static SDL_AudioDeviceID
|
||||
open_audio_device(const char *devname, int iscapture,
|
||||
const SDL_AudioSpec * desired, SDL_AudioSpec * obtained,
|
||||
@@ -921,7 +1132,7 @@ open_audio_device(const char *devname, int iscapture,
|
||||
SDL_OutOfMemory();
|
||||
return 0;
|
||||
}
|
||||
SDL_memset(device, '\0', sizeof(SDL_AudioDevice));
|
||||
SDL_zerop(device);
|
||||
device->spec = *obtained;
|
||||
device->enabled = 1;
|
||||
device->paused = 1;
|
||||
@@ -939,8 +1150,9 @@ open_audio_device(const char *devname, int iscapture,
|
||||
|
||||
/* force a device detection if we haven't done one yet. */
|
||||
if ( ((iscapture) && (current_audio.inputDevices == NULL)) ||
|
||||
((!iscapture) && (current_audio.outputDevices == NULL)) )
|
||||
((!iscapture) && (current_audio.outputDevices == NULL)) ) {
|
||||
SDL_GetNumAudioDevices(iscapture);
|
||||
}
|
||||
|
||||
if (current_audio.impl.OpenDevice(device, devname, iscapture) < 0) {
|
||||
close_audio_device(device);
|
||||
@@ -1014,6 +1226,25 @@ open_audio_device(const char *devname, int iscapture,
|
||||
}
|
||||
}
|
||||
|
||||
if (device->spec.callback == NULL) { /* use buffer queueing? */
|
||||
/* pool a few packets to start. Enough for two callbacks. */
|
||||
const int packetlen = SDL_AUDIOBUFFERQUEUE_PACKETLEN;
|
||||
const int wantbytes = ((device->convert.needed) ? device->convert.len : device->spec.size) * 2;
|
||||
const int wantpackets = (wantbytes / packetlen) + ((wantbytes % packetlen) ? packetlen : 0);
|
||||
for (i = 0; i < wantpackets; i++) {
|
||||
SDL_AudioBufferQueue *packet = (SDL_AudioBufferQueue *) SDL_malloc(sizeof (SDL_AudioBufferQueue));
|
||||
if (packet) { /* don't care if this fails, we'll deal later. */
|
||||
packet->datalen = 0;
|
||||
packet->startpos = 0;
|
||||
packet->next = device->buffer_queue_pool;
|
||||
device->buffer_queue_pool = packet;
|
||||
}
|
||||
}
|
||||
|
||||
device->spec.callback = SDL_BufferQueueDrainCallback;
|
||||
device->spec.userdata = device;
|
||||
}
|
||||
|
||||
/* Find an available device ID and store the structure... */
|
||||
for (id = min_id - 1; id < SDL_arraysize(open_devices); id++) {
|
||||
if (open_devices[id] == NULL) {
|
||||
@@ -1063,25 +1294,25 @@ SDL_OpenAudio(SDL_AudioSpec * desired, SDL_AudioSpec * obtained)
|
||||
/* Start up the audio driver, if necessary. This is legacy behaviour! */
|
||||
if (!SDL_WasInit(SDL_INIT_AUDIO)) {
|
||||
if (SDL_InitSubSystem(SDL_INIT_AUDIO) < 0) {
|
||||
return (-1);
|
||||
return -1;
|
||||
}
|
||||
}
|
||||
|
||||
/* SDL_OpenAudio() is legacy and can only act on Device ID #1. */
|
||||
if (open_devices[0] != NULL) {
|
||||
SDL_SetError("Audio device is already opened");
|
||||
return (-1);
|
||||
return -1;
|
||||
}
|
||||
|
||||
if (obtained) {
|
||||
id = open_audio_device(NULL, 0, desired, obtained,
|
||||
SDL_AUDIO_ALLOW_ANY_CHANGE, 1);
|
||||
} else {
|
||||
id = open_audio_device(NULL, 0, desired, desired, 0, 1);
|
||||
id = open_audio_device(NULL, 0, desired, NULL, 0, 1);
|
||||
}
|
||||
|
||||
SDL_assert((id == 0) || (id == 1));
|
||||
return ((id == 0) ? -1 : 0);
|
||||
return (id == 0) ? -1 : 0;
|
||||
}
|
||||
|
||||
SDL_AudioDeviceID
|
||||
@@ -1105,7 +1336,7 @@ SDL_GetAudioDeviceStatus(SDL_AudioDeviceID devid)
|
||||
status = SDL_AUDIO_PLAYING;
|
||||
}
|
||||
}
|
||||
return (status);
|
||||
return status;
|
||||
}
|
||||
|
||||
|
||||
@@ -1241,16 +1472,16 @@ SDL_FirstAudioFormat(SDL_AudioFormat format)
|
||||
}
|
||||
}
|
||||
format_idx_sub = 0;
|
||||
return (SDL_NextAudioFormat());
|
||||
return SDL_NextAudioFormat();
|
||||
}
|
||||
|
||||
SDL_AudioFormat
|
||||
SDL_NextAudioFormat(void)
|
||||
{
|
||||
if ((format_idx == NUM_FORMATS) || (format_idx_sub == NUM_FORMATS)) {
|
||||
return (0);
|
||||
return 0;
|
||||
}
|
||||
return (format_list[format_idx][format_idx_sub++]);
|
||||
return format_list[format_idx][format_idx_sub++];
|
||||
}
|
||||
|
||||
void
|
||||
|
||||
@@ -2300,7 +2300,7 @@ SDL_Upsample_U8_1c(SDL_AudioCVT * cvt, SDL_AudioFormat format)
|
||||
#endif
|
||||
|
||||
const int srcsize = cvt->len_cvt - 16;
|
||||
const int dstsize = (int) (((double)cvt->len_cvt) * cvt->rate_incr);
|
||||
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;
|
||||
@@ -2332,7 +2332,7 @@ SDL_Downsample_U8_1c(SDL_AudioCVT * cvt, SDL_AudioFormat format)
|
||||
#endif
|
||||
|
||||
const int srcsize = cvt->len_cvt - 16;
|
||||
const int dstsize = (int) (((double)cvt->len_cvt) * cvt->rate_incr);
|
||||
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;
|
||||
@@ -2364,7 +2364,7 @@ SDL_Upsample_U8_2c(SDL_AudioCVT * cvt, SDL_AudioFormat format)
|
||||
#endif
|
||||
|
||||
const int srcsize = cvt->len_cvt - 32;
|
||||
const int dstsize = (int) (((double)cvt->len_cvt) * cvt->rate_incr);
|
||||
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;
|
||||
@@ -2401,7 +2401,7 @@ SDL_Downsample_U8_2c(SDL_AudioCVT * cvt, SDL_AudioFormat format)
|
||||
#endif
|
||||
|
||||
const int srcsize = cvt->len_cvt - 32;
|
||||
const int dstsize = (int) (((double)cvt->len_cvt) * cvt->rate_incr);
|
||||
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;
|
||||
@@ -2438,7 +2438,7 @@ SDL_Upsample_U8_4c(SDL_AudioCVT * cvt, SDL_AudioFormat format)
|
||||
#endif
|
||||
|
||||
const int srcsize = cvt->len_cvt - 64;
|
||||
const int dstsize = (int) (((double)cvt->len_cvt) * cvt->rate_incr);
|
||||
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;
|
||||
@@ -2485,7 +2485,7 @@ SDL_Downsample_U8_4c(SDL_AudioCVT * cvt, SDL_AudioFormat format)
|
||||
#endif
|
||||
|
||||
const int srcsize = cvt->len_cvt - 64;
|
||||
const int dstsize = (int) (((double)cvt->len_cvt) * cvt->rate_incr);
|
||||
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;
|
||||
@@ -2532,7 +2532,7 @@ SDL_Upsample_U8_6c(SDL_AudioCVT * cvt, SDL_AudioFormat format)
|
||||
#endif
|
||||
|
||||
const int srcsize = cvt->len_cvt - 96;
|
||||
const int dstsize = (int) (((double)cvt->len_cvt) * cvt->rate_incr);
|
||||
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;
|
||||
@@ -2589,7 +2589,7 @@ SDL_Downsample_U8_6c(SDL_AudioCVT * cvt, SDL_AudioFormat format)
|
||||
#endif
|
||||
|
||||
const int srcsize = cvt->len_cvt - 96;
|
||||
const int dstsize = (int) (((double)cvt->len_cvt) * cvt->rate_incr);
|
||||
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;
|
||||
@@ -2646,7 +2646,7 @@ SDL_Upsample_U8_8c(SDL_AudioCVT * cvt, SDL_AudioFormat format)
|
||||
#endif
|
||||
|
||||
const int srcsize = cvt->len_cvt - 128;
|
||||
const int dstsize = (int) (((double)cvt->len_cvt) * cvt->rate_incr);
|
||||
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;
|
||||
@@ -2713,7 +2713,7 @@ SDL_Downsample_U8_8c(SDL_AudioCVT * cvt, SDL_AudioFormat format)
|
||||
#endif
|
||||
|
||||
const int srcsize = cvt->len_cvt - 128;
|
||||
const int dstsize = (int) (((double)cvt->len_cvt) * cvt->rate_incr);
|
||||
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;
|
||||
@@ -2780,7 +2780,7 @@ SDL_Upsample_S8_1c(SDL_AudioCVT * cvt, SDL_AudioFormat format)
|
||||
#endif
|
||||
|
||||
const int srcsize = cvt->len_cvt - 16;
|
||||
const int dstsize = (int) (((double)cvt->len_cvt) * cvt->rate_incr);
|
||||
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;
|
||||
@@ -2812,7 +2812,7 @@ SDL_Downsample_S8_1c(SDL_AudioCVT * cvt, SDL_AudioFormat format)
|
||||
#endif
|
||||
|
||||
const int srcsize = cvt->len_cvt - 16;
|
||||
const int dstsize = (int) (((double)cvt->len_cvt) * cvt->rate_incr);
|
||||
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;
|
||||
@@ -2844,7 +2844,7 @@ SDL_Upsample_S8_2c(SDL_AudioCVT * cvt, SDL_AudioFormat format)
|
||||
#endif
|
||||
|
||||
const int srcsize = cvt->len_cvt - 32;
|
||||
const int dstsize = (int) (((double)cvt->len_cvt) * cvt->rate_incr);
|
||||
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;
|
||||
@@ -2881,7 +2881,7 @@ SDL_Downsample_S8_2c(SDL_AudioCVT * cvt, SDL_AudioFormat format)
|
||||
#endif
|
||||
|
||||
const int srcsize = cvt->len_cvt - 32;
|
||||
const int dstsize = (int) (((double)cvt->len_cvt) * cvt->rate_incr);
|
||||
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;
|
||||
@@ -2918,7 +2918,7 @@ SDL_Upsample_S8_4c(SDL_AudioCVT * cvt, SDL_AudioFormat format)
|
||||
#endif
|
||||
|
||||
const int srcsize = cvt->len_cvt - 64;
|
||||
const int dstsize = (int) (((double)cvt->len_cvt) * cvt->rate_incr);
|
||||
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;
|
||||
@@ -2965,7 +2965,7 @@ SDL_Downsample_S8_4c(SDL_AudioCVT * cvt, SDL_AudioFormat format)
|
||||
#endif
|
||||
|
||||
const int srcsize = cvt->len_cvt - 64;
|
||||
const int dstsize = (int) (((double)cvt->len_cvt) * cvt->rate_incr);
|
||||
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;
|
||||
@@ -3012,7 +3012,7 @@ SDL_Upsample_S8_6c(SDL_AudioCVT * cvt, SDL_AudioFormat format)
|
||||
#endif
|
||||
|
||||
const int srcsize = cvt->len_cvt - 96;
|
||||
const int dstsize = (int) (((double)cvt->len_cvt) * cvt->rate_incr);
|
||||
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;
|
||||
@@ -3069,7 +3069,7 @@ SDL_Downsample_S8_6c(SDL_AudioCVT * cvt, SDL_AudioFormat format)
|
||||
#endif
|
||||
|
||||
const int srcsize = cvt->len_cvt - 96;
|
||||
const int dstsize = (int) (((double)cvt->len_cvt) * cvt->rate_incr);
|
||||
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;
|
||||
@@ -3126,7 +3126,7 @@ SDL_Upsample_S8_8c(SDL_AudioCVT * cvt, SDL_AudioFormat format)
|
||||
#endif
|
||||
|
||||
const int srcsize = cvt->len_cvt - 128;
|
||||
const int dstsize = (int) (((double)cvt->len_cvt) * cvt->rate_incr);
|
||||
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;
|
||||
@@ -3193,7 +3193,7 @@ SDL_Downsample_S8_8c(SDL_AudioCVT * cvt, SDL_AudioFormat format)
|
||||
#endif
|
||||
|
||||
const int srcsize = cvt->len_cvt - 128;
|
||||
const int dstsize = (int) (((double)cvt->len_cvt) * cvt->rate_incr);
|
||||
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;
|
||||
@@ -3260,7 +3260,7 @@ SDL_Upsample_U16LSB_1c(SDL_AudioCVT * cvt, SDL_AudioFormat format)
|
||||
#endif
|
||||
|
||||
const int srcsize = cvt->len_cvt - 32;
|
||||
const int dstsize = (int) (((double)cvt->len_cvt) * cvt->rate_incr);
|
||||
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;
|
||||
@@ -3292,7 +3292,7 @@ SDL_Downsample_U16LSB_1c(SDL_AudioCVT * cvt, SDL_AudioFormat format)
|
||||
#endif
|
||||
|
||||
const int srcsize = cvt->len_cvt - 32;
|
||||
const int dstsize = (int) (((double)cvt->len_cvt) * cvt->rate_incr);
|
||||
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;
|
||||
@@ -3324,7 +3324,7 @@ SDL_Upsample_U16LSB_2c(SDL_AudioCVT * cvt, SDL_AudioFormat format)
|
||||
#endif
|
||||
|
||||
const int srcsize = cvt->len_cvt - 64;
|
||||
const int dstsize = (int) (((double)cvt->len_cvt) * cvt->rate_incr);
|
||||
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;
|
||||
@@ -3361,7 +3361,7 @@ SDL_Downsample_U16LSB_2c(SDL_AudioCVT * cvt, SDL_AudioFormat format)
|
||||
#endif
|
||||
|
||||
const int srcsize = cvt->len_cvt - 64;
|
||||
const int dstsize = (int) (((double)cvt->len_cvt) * cvt->rate_incr);
|
||||
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;
|
||||
@@ -3398,7 +3398,7 @@ SDL_Upsample_U16LSB_4c(SDL_AudioCVT * cvt, SDL_AudioFormat format)
|
||||
#endif
|
||||
|
||||
const int srcsize = cvt->len_cvt - 128;
|
||||
const int dstsize = (int) (((double)cvt->len_cvt) * cvt->rate_incr);
|
||||
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;
|
||||
@@ -3445,7 +3445,7 @@ SDL_Downsample_U16LSB_4c(SDL_AudioCVT * cvt, SDL_AudioFormat format)
|
||||
#endif
|
||||
|
||||
const int srcsize = cvt->len_cvt - 128;
|
||||
const int dstsize = (int) (((double)cvt->len_cvt) * cvt->rate_incr);
|
||||
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;
|
||||
@@ -3492,7 +3492,7 @@ SDL_Upsample_U16LSB_6c(SDL_AudioCVT * cvt, SDL_AudioFormat format)
|
||||
#endif
|
||||
|
||||
const int srcsize = cvt->len_cvt - 192;
|
||||
const int dstsize = (int) (((double)cvt->len_cvt) * cvt->rate_incr);
|
||||
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;
|
||||
@@ -3549,7 +3549,7 @@ SDL_Downsample_U16LSB_6c(SDL_AudioCVT * cvt, SDL_AudioFormat format)
|
||||
#endif
|
||||
|
||||
const int srcsize = cvt->len_cvt - 192;
|
||||
const int dstsize = (int) (((double)cvt->len_cvt) * cvt->rate_incr);
|
||||
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;
|
||||
@@ -3606,7 +3606,7 @@ SDL_Upsample_U16LSB_8c(SDL_AudioCVT * cvt, SDL_AudioFormat format)
|
||||
#endif
|
||||
|
||||
const int srcsize = cvt->len_cvt - 256;
|
||||
const int dstsize = (int) (((double)cvt->len_cvt) * cvt->rate_incr);
|
||||
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;
|
||||
@@ -3673,7 +3673,7 @@ SDL_Downsample_U16LSB_8c(SDL_AudioCVT * cvt, SDL_AudioFormat format)
|
||||
#endif
|
||||
|
||||
const int srcsize = cvt->len_cvt - 256;
|
||||
const int dstsize = (int) (((double)cvt->len_cvt) * cvt->rate_incr);
|
||||
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;
|
||||
@@ -3740,7 +3740,7 @@ SDL_Upsample_S16LSB_1c(SDL_AudioCVT * cvt, SDL_AudioFormat format)
|
||||
#endif
|
||||
|
||||
const int srcsize = cvt->len_cvt - 32;
|
||||
const int dstsize = (int) (((double)cvt->len_cvt) * cvt->rate_incr);
|
||||
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;
|
||||
@@ -3772,7 +3772,7 @@ SDL_Downsample_S16LSB_1c(SDL_AudioCVT * cvt, SDL_AudioFormat format)
|
||||
#endif
|
||||
|
||||
const int srcsize = cvt->len_cvt - 32;
|
||||
const int dstsize = (int) (((double)cvt->len_cvt) * cvt->rate_incr);
|
||||
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;
|
||||
@@ -3804,7 +3804,7 @@ SDL_Upsample_S16LSB_2c(SDL_AudioCVT * cvt, SDL_AudioFormat format)
|
||||
#endif
|
||||
|
||||
const int srcsize = cvt->len_cvt - 64;
|
||||
const int dstsize = (int) (((double)cvt->len_cvt) * cvt->rate_incr);
|
||||
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;
|
||||
@@ -3841,7 +3841,7 @@ SDL_Downsample_S16LSB_2c(SDL_AudioCVT * cvt, SDL_AudioFormat format)
|
||||
#endif
|
||||
|
||||
const int srcsize = cvt->len_cvt - 64;
|
||||
const int dstsize = (int) (((double)cvt->len_cvt) * cvt->rate_incr);
|
||||
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;
|
||||
@@ -3878,7 +3878,7 @@ SDL_Upsample_S16LSB_4c(SDL_AudioCVT * cvt, SDL_AudioFormat format)
|
||||
#endif
|
||||
|
||||
const int srcsize = cvt->len_cvt - 128;
|
||||
const int dstsize = (int) (((double)cvt->len_cvt) * cvt->rate_incr);
|
||||
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;
|
||||
@@ -3925,7 +3925,7 @@ SDL_Downsample_S16LSB_4c(SDL_AudioCVT * cvt, SDL_AudioFormat format)
|
||||
#endif
|
||||
|
||||
const int srcsize = cvt->len_cvt - 128;
|
||||
const int dstsize = (int) (((double)cvt->len_cvt) * cvt->rate_incr);
|
||||
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;
|
||||
@@ -3972,7 +3972,7 @@ SDL_Upsample_S16LSB_6c(SDL_AudioCVT * cvt, SDL_AudioFormat format)
|
||||
#endif
|
||||
|
||||
const int srcsize = cvt->len_cvt - 192;
|
||||
const int dstsize = (int) (((double)cvt->len_cvt) * cvt->rate_incr);
|
||||
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;
|
||||
@@ -4029,7 +4029,7 @@ SDL_Downsample_S16LSB_6c(SDL_AudioCVT * cvt, SDL_AudioFormat format)
|
||||
#endif
|
||||
|
||||
const int srcsize = cvt->len_cvt - 192;
|
||||
const int dstsize = (int) (((double)cvt->len_cvt) * cvt->rate_incr);
|
||||
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;
|
||||
@@ -4086,7 +4086,7 @@ SDL_Upsample_S16LSB_8c(SDL_AudioCVT * cvt, SDL_AudioFormat format)
|
||||
#endif
|
||||
|
||||
const int srcsize = cvt->len_cvt - 256;
|
||||
const int dstsize = (int) (((double)cvt->len_cvt) * cvt->rate_incr);
|
||||
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;
|
||||
@@ -4153,7 +4153,7 @@ SDL_Downsample_S16LSB_8c(SDL_AudioCVT * cvt, SDL_AudioFormat format)
|
||||
#endif
|
||||
|
||||
const int srcsize = cvt->len_cvt - 256;
|
||||
const int dstsize = (int) (((double)cvt->len_cvt) * cvt->rate_incr);
|
||||
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;
|
||||
@@ -4220,7 +4220,7 @@ SDL_Upsample_U16MSB_1c(SDL_AudioCVT * cvt, SDL_AudioFormat format)
|
||||
#endif
|
||||
|
||||
const int srcsize = cvt->len_cvt - 32;
|
||||
const int dstsize = (int) (((double)cvt->len_cvt) * cvt->rate_incr);
|
||||
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;
|
||||
@@ -4252,7 +4252,7 @@ SDL_Downsample_U16MSB_1c(SDL_AudioCVT * cvt, SDL_AudioFormat format)
|
||||
#endif
|
||||
|
||||
const int srcsize = cvt->len_cvt - 32;
|
||||
const int dstsize = (int) (((double)cvt->len_cvt) * cvt->rate_incr);
|
||||
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;
|
||||
@@ -4284,7 +4284,7 @@ SDL_Upsample_U16MSB_2c(SDL_AudioCVT * cvt, SDL_AudioFormat format)
|
||||
#endif
|
||||
|
||||
const int srcsize = cvt->len_cvt - 64;
|
||||
const int dstsize = (int) (((double)cvt->len_cvt) * cvt->rate_incr);
|
||||
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;
|
||||
@@ -4321,7 +4321,7 @@ SDL_Downsample_U16MSB_2c(SDL_AudioCVT * cvt, SDL_AudioFormat format)
|
||||
#endif
|
||||
|
||||
const int srcsize = cvt->len_cvt - 64;
|
||||
const int dstsize = (int) (((double)cvt->len_cvt) * cvt->rate_incr);
|
||||
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;
|
||||
@@ -4358,7 +4358,7 @@ SDL_Upsample_U16MSB_4c(SDL_AudioCVT * cvt, SDL_AudioFormat format)
|
||||
#endif
|
||||
|
||||
const int srcsize = cvt->len_cvt - 128;
|
||||
const int dstsize = (int) (((double)cvt->len_cvt) * cvt->rate_incr);
|
||||
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;
|
||||
@@ -4405,7 +4405,7 @@ SDL_Downsample_U16MSB_4c(SDL_AudioCVT * cvt, SDL_AudioFormat format)
|
||||
#endif
|
||||
|
||||
const int srcsize = cvt->len_cvt - 128;
|
||||
const int dstsize = (int) (((double)cvt->len_cvt) * cvt->rate_incr);
|
||||
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;
|
||||
@@ -4452,7 +4452,7 @@ SDL_Upsample_U16MSB_6c(SDL_AudioCVT * cvt, SDL_AudioFormat format)
|
||||
#endif
|
||||
|
||||
const int srcsize = cvt->len_cvt - 192;
|
||||
const int dstsize = (int) (((double)cvt->len_cvt) * cvt->rate_incr);
|
||||
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;
|
||||
@@ -4509,7 +4509,7 @@ SDL_Downsample_U16MSB_6c(SDL_AudioCVT * cvt, SDL_AudioFormat format)
|
||||
#endif
|
||||
|
||||
const int srcsize = cvt->len_cvt - 192;
|
||||
const int dstsize = (int) (((double)cvt->len_cvt) * cvt->rate_incr);
|
||||
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;
|
||||
@@ -4566,7 +4566,7 @@ SDL_Upsample_U16MSB_8c(SDL_AudioCVT * cvt, SDL_AudioFormat format)
|
||||
#endif
|
||||
|
||||
const int srcsize = cvt->len_cvt - 256;
|
||||
const int dstsize = (int) (((double)cvt->len_cvt) * cvt->rate_incr);
|
||||
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;
|
||||
@@ -4633,7 +4633,7 @@ SDL_Downsample_U16MSB_8c(SDL_AudioCVT * cvt, SDL_AudioFormat format)
|
||||
#endif
|
||||
|
||||
const int srcsize = cvt->len_cvt - 256;
|
||||
const int dstsize = (int) (((double)cvt->len_cvt) * cvt->rate_incr);
|
||||
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;
|
||||
@@ -4700,7 +4700,7 @@ SDL_Upsample_S16MSB_1c(SDL_AudioCVT * cvt, SDL_AudioFormat format)
|
||||
#endif
|
||||
|
||||
const int srcsize = cvt->len_cvt - 32;
|
||||
const int dstsize = (int) (((double)cvt->len_cvt) * cvt->rate_incr);
|
||||
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;
|
||||
@@ -4732,7 +4732,7 @@ SDL_Downsample_S16MSB_1c(SDL_AudioCVT * cvt, SDL_AudioFormat format)
|
||||
#endif
|
||||
|
||||
const int srcsize = cvt->len_cvt - 32;
|
||||
const int dstsize = (int) (((double)cvt->len_cvt) * cvt->rate_incr);
|
||||
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;
|
||||
@@ -4764,7 +4764,7 @@ SDL_Upsample_S16MSB_2c(SDL_AudioCVT * cvt, SDL_AudioFormat format)
|
||||
#endif
|
||||
|
||||
const int srcsize = cvt->len_cvt - 64;
|
||||
const int dstsize = (int) (((double)cvt->len_cvt) * cvt->rate_incr);
|
||||
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;
|
||||
@@ -4801,7 +4801,7 @@ SDL_Downsample_S16MSB_2c(SDL_AudioCVT * cvt, SDL_AudioFormat format)
|
||||
#endif
|
||||
|
||||
const int srcsize = cvt->len_cvt - 64;
|
||||
const int dstsize = (int) (((double)cvt->len_cvt) * cvt->rate_incr);
|
||||
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;
|
||||
@@ -4838,7 +4838,7 @@ SDL_Upsample_S16MSB_4c(SDL_AudioCVT * cvt, SDL_AudioFormat format)
|
||||
#endif
|
||||
|
||||
const int srcsize = cvt->len_cvt - 128;
|
||||
const int dstsize = (int) (((double)cvt->len_cvt) * cvt->rate_incr);
|
||||
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;
|
||||
@@ -4885,7 +4885,7 @@ SDL_Downsample_S16MSB_4c(SDL_AudioCVT * cvt, SDL_AudioFormat format)
|
||||
#endif
|
||||
|
||||
const int srcsize = cvt->len_cvt - 128;
|
||||
const int dstsize = (int) (((double)cvt->len_cvt) * cvt->rate_incr);
|
||||
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;
|
||||
@@ -4932,7 +4932,7 @@ SDL_Upsample_S16MSB_6c(SDL_AudioCVT * cvt, SDL_AudioFormat format)
|
||||
#endif
|
||||
|
||||
const int srcsize = cvt->len_cvt - 192;
|
||||
const int dstsize = (int) (((double)cvt->len_cvt) * cvt->rate_incr);
|
||||
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;
|
||||
@@ -4989,7 +4989,7 @@ SDL_Downsample_S16MSB_6c(SDL_AudioCVT * cvt, SDL_AudioFormat format)
|
||||
#endif
|
||||
|
||||
const int srcsize = cvt->len_cvt - 192;
|
||||
const int dstsize = (int) (((double)cvt->len_cvt) * cvt->rate_incr);
|
||||
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;
|
||||
@@ -5046,7 +5046,7 @@ SDL_Upsample_S16MSB_8c(SDL_AudioCVT * cvt, SDL_AudioFormat format)
|
||||
#endif
|
||||
|
||||
const int srcsize = cvt->len_cvt - 256;
|
||||
const int dstsize = (int) (((double)cvt->len_cvt) * cvt->rate_incr);
|
||||
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;
|
||||
@@ -5113,7 +5113,7 @@ SDL_Downsample_S16MSB_8c(SDL_AudioCVT * cvt, SDL_AudioFormat format)
|
||||
#endif
|
||||
|
||||
const int srcsize = cvt->len_cvt - 256;
|
||||
const int dstsize = (int) (((double)cvt->len_cvt) * cvt->rate_incr);
|
||||
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;
|
||||
@@ -5180,7 +5180,7 @@ SDL_Upsample_S32LSB_1c(SDL_AudioCVT * cvt, SDL_AudioFormat format)
|
||||
#endif
|
||||
|
||||
const int srcsize = cvt->len_cvt - 64;
|
||||
const int dstsize = (int) (((double)cvt->len_cvt) * cvt->rate_incr);
|
||||
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;
|
||||
@@ -5212,7 +5212,7 @@ SDL_Downsample_S32LSB_1c(SDL_AudioCVT * cvt, SDL_AudioFormat format)
|
||||
#endif
|
||||
|
||||
const int srcsize = cvt->len_cvt - 64;
|
||||
const int dstsize = (int) (((double)cvt->len_cvt) * cvt->rate_incr);
|
||||
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;
|
||||
@@ -5244,7 +5244,7 @@ SDL_Upsample_S32LSB_2c(SDL_AudioCVT * cvt, SDL_AudioFormat format)
|
||||
#endif
|
||||
|
||||
const int srcsize = cvt->len_cvt - 128;
|
||||
const int dstsize = (int) (((double)cvt->len_cvt) * cvt->rate_incr);
|
||||
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;
|
||||
@@ -5281,7 +5281,7 @@ SDL_Downsample_S32LSB_2c(SDL_AudioCVT * cvt, SDL_AudioFormat format)
|
||||
#endif
|
||||
|
||||
const int srcsize = cvt->len_cvt - 128;
|
||||
const int dstsize = (int) (((double)cvt->len_cvt) * cvt->rate_incr);
|
||||
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;
|
||||
@@ -5318,7 +5318,7 @@ SDL_Upsample_S32LSB_4c(SDL_AudioCVT * cvt, SDL_AudioFormat format)
|
||||
#endif
|
||||
|
||||
const int srcsize = cvt->len_cvt - 256;
|
||||
const int dstsize = (int) (((double)cvt->len_cvt) * cvt->rate_incr);
|
||||
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;
|
||||
@@ -5365,7 +5365,7 @@ SDL_Downsample_S32LSB_4c(SDL_AudioCVT * cvt, SDL_AudioFormat format)
|
||||
#endif
|
||||
|
||||
const int srcsize = cvt->len_cvt - 256;
|
||||
const int dstsize = (int) (((double)cvt->len_cvt) * cvt->rate_incr);
|
||||
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;
|
||||
@@ -5412,7 +5412,7 @@ SDL_Upsample_S32LSB_6c(SDL_AudioCVT * cvt, SDL_AudioFormat format)
|
||||
#endif
|
||||
|
||||
const int srcsize = cvt->len_cvt - 384;
|
||||
const int dstsize = (int) (((double)cvt->len_cvt) * cvt->rate_incr);
|
||||
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;
|
||||
@@ -5469,7 +5469,7 @@ SDL_Downsample_S32LSB_6c(SDL_AudioCVT * cvt, SDL_AudioFormat format)
|
||||
#endif
|
||||
|
||||
const int srcsize = cvt->len_cvt - 384;
|
||||
const int dstsize = (int) (((double)cvt->len_cvt) * cvt->rate_incr);
|
||||
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;
|
||||
@@ -5526,7 +5526,7 @@ SDL_Upsample_S32LSB_8c(SDL_AudioCVT * cvt, SDL_AudioFormat format)
|
||||
#endif
|
||||
|
||||
const int srcsize = cvt->len_cvt - 512;
|
||||
const int dstsize = (int) (((double)cvt->len_cvt) * cvt->rate_incr);
|
||||
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;
|
||||
@@ -5593,7 +5593,7 @@ SDL_Downsample_S32LSB_8c(SDL_AudioCVT * cvt, SDL_AudioFormat format)
|
||||
#endif
|
||||
|
||||
const int srcsize = cvt->len_cvt - 512;
|
||||
const int dstsize = (int) (((double)cvt->len_cvt) * cvt->rate_incr);
|
||||
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;
|
||||
@@ -5660,7 +5660,7 @@ SDL_Upsample_S32MSB_1c(SDL_AudioCVT * cvt, SDL_AudioFormat format)
|
||||
#endif
|
||||
|
||||
const int srcsize = cvt->len_cvt - 64;
|
||||
const int dstsize = (int) (((double)cvt->len_cvt) * cvt->rate_incr);
|
||||
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;
|
||||
@@ -5692,7 +5692,7 @@ SDL_Downsample_S32MSB_1c(SDL_AudioCVT * cvt, SDL_AudioFormat format)
|
||||
#endif
|
||||
|
||||
const int srcsize = cvt->len_cvt - 64;
|
||||
const int dstsize = (int) (((double)cvt->len_cvt) * cvt->rate_incr);
|
||||
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;
|
||||
@@ -5724,7 +5724,7 @@ SDL_Upsample_S32MSB_2c(SDL_AudioCVT * cvt, SDL_AudioFormat format)
|
||||
#endif
|
||||
|
||||
const int srcsize = cvt->len_cvt - 128;
|
||||
const int dstsize = (int) (((double)cvt->len_cvt) * cvt->rate_incr);
|
||||
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;
|
||||
@@ -5761,7 +5761,7 @@ SDL_Downsample_S32MSB_2c(SDL_AudioCVT * cvt, SDL_AudioFormat format)
|
||||
#endif
|
||||
|
||||
const int srcsize = cvt->len_cvt - 128;
|
||||
const int dstsize = (int) (((double)cvt->len_cvt) * cvt->rate_incr);
|
||||
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;
|
||||
@@ -5798,7 +5798,7 @@ SDL_Upsample_S32MSB_4c(SDL_AudioCVT * cvt, SDL_AudioFormat format)
|
||||
#endif
|
||||
|
||||
const int srcsize = cvt->len_cvt - 256;
|
||||
const int dstsize = (int) (((double)cvt->len_cvt) * cvt->rate_incr);
|
||||
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;
|
||||
@@ -5845,7 +5845,7 @@ SDL_Downsample_S32MSB_4c(SDL_AudioCVT * cvt, SDL_AudioFormat format)
|
||||
#endif
|
||||
|
||||
const int srcsize = cvt->len_cvt - 256;
|
||||
const int dstsize = (int) (((double)cvt->len_cvt) * cvt->rate_incr);
|
||||
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;
|
||||
@@ -5892,7 +5892,7 @@ SDL_Upsample_S32MSB_6c(SDL_AudioCVT * cvt, SDL_AudioFormat format)
|
||||
#endif
|
||||
|
||||
const int srcsize = cvt->len_cvt - 384;
|
||||
const int dstsize = (int) (((double)cvt->len_cvt) * cvt->rate_incr);
|
||||
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;
|
||||
@@ -5949,7 +5949,7 @@ SDL_Downsample_S32MSB_6c(SDL_AudioCVT * cvt, SDL_AudioFormat format)
|
||||
#endif
|
||||
|
||||
const int srcsize = cvt->len_cvt - 384;
|
||||
const int dstsize = (int) (((double)cvt->len_cvt) * cvt->rate_incr);
|
||||
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;
|
||||
@@ -6006,7 +6006,7 @@ SDL_Upsample_S32MSB_8c(SDL_AudioCVT * cvt, SDL_AudioFormat format)
|
||||
#endif
|
||||
|
||||
const int srcsize = cvt->len_cvt - 512;
|
||||
const int dstsize = (int) (((double)cvt->len_cvt) * cvt->rate_incr);
|
||||
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;
|
||||
@@ -6073,7 +6073,7 @@ SDL_Downsample_S32MSB_8c(SDL_AudioCVT * cvt, SDL_AudioFormat format)
|
||||
#endif
|
||||
|
||||
const int srcsize = cvt->len_cvt - 512;
|
||||
const int dstsize = (int) (((double)cvt->len_cvt) * cvt->rate_incr);
|
||||
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;
|
||||
@@ -6140,7 +6140,7 @@ SDL_Upsample_F32LSB_1c(SDL_AudioCVT * cvt, SDL_AudioFormat format)
|
||||
#endif
|
||||
|
||||
const int srcsize = cvt->len_cvt - 64;
|
||||
const int dstsize = (int) (((double)cvt->len_cvt) * cvt->rate_incr);
|
||||
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;
|
||||
@@ -6172,7 +6172,7 @@ SDL_Downsample_F32LSB_1c(SDL_AudioCVT * cvt, SDL_AudioFormat format)
|
||||
#endif
|
||||
|
||||
const int srcsize = cvt->len_cvt - 64;
|
||||
const int dstsize = (int) (((double)cvt->len_cvt) * cvt->rate_incr);
|
||||
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;
|
||||
@@ -6204,7 +6204,7 @@ SDL_Upsample_F32LSB_2c(SDL_AudioCVT * cvt, SDL_AudioFormat format)
|
||||
#endif
|
||||
|
||||
const int srcsize = cvt->len_cvt - 128;
|
||||
const int dstsize = (int) (((double)cvt->len_cvt) * cvt->rate_incr);
|
||||
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;
|
||||
@@ -6241,7 +6241,7 @@ SDL_Downsample_F32LSB_2c(SDL_AudioCVT * cvt, SDL_AudioFormat format)
|
||||
#endif
|
||||
|
||||
const int srcsize = cvt->len_cvt - 128;
|
||||
const int dstsize = (int) (((double)cvt->len_cvt) * cvt->rate_incr);
|
||||
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;
|
||||
@@ -6278,7 +6278,7 @@ SDL_Upsample_F32LSB_4c(SDL_AudioCVT * cvt, SDL_AudioFormat format)
|
||||
#endif
|
||||
|
||||
const int srcsize = cvt->len_cvt - 256;
|
||||
const int dstsize = (int) (((double)cvt->len_cvt) * cvt->rate_incr);
|
||||
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;
|
||||
@@ -6325,7 +6325,7 @@ SDL_Downsample_F32LSB_4c(SDL_AudioCVT * cvt, SDL_AudioFormat format)
|
||||
#endif
|
||||
|
||||
const int srcsize = cvt->len_cvt - 256;
|
||||
const int dstsize = (int) (((double)cvt->len_cvt) * cvt->rate_incr);
|
||||
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;
|
||||
@@ -6372,7 +6372,7 @@ SDL_Upsample_F32LSB_6c(SDL_AudioCVT * cvt, SDL_AudioFormat format)
|
||||
#endif
|
||||
|
||||
const int srcsize = cvt->len_cvt - 384;
|
||||
const int dstsize = (int) (((double)cvt->len_cvt) * cvt->rate_incr);
|
||||
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;
|
||||
@@ -6429,7 +6429,7 @@ SDL_Downsample_F32LSB_6c(SDL_AudioCVT * cvt, SDL_AudioFormat format)
|
||||
#endif
|
||||
|
||||
const int srcsize = cvt->len_cvt - 384;
|
||||
const int dstsize = (int) (((double)cvt->len_cvt) * cvt->rate_incr);
|
||||
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;
|
||||
@@ -6486,7 +6486,7 @@ SDL_Upsample_F32LSB_8c(SDL_AudioCVT * cvt, SDL_AudioFormat format)
|
||||
#endif
|
||||
|
||||
const int srcsize = cvt->len_cvt - 512;
|
||||
const int dstsize = (int) (((double)cvt->len_cvt) * cvt->rate_incr);
|
||||
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;
|
||||
@@ -6553,7 +6553,7 @@ SDL_Downsample_F32LSB_8c(SDL_AudioCVT * cvt, SDL_AudioFormat format)
|
||||
#endif
|
||||
|
||||
const int srcsize = cvt->len_cvt - 512;
|
||||
const int dstsize = (int) (((double)cvt->len_cvt) * cvt->rate_incr);
|
||||
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;
|
||||
@@ -6620,7 +6620,7 @@ SDL_Upsample_F32MSB_1c(SDL_AudioCVT * cvt, SDL_AudioFormat format)
|
||||
#endif
|
||||
|
||||
const int srcsize = cvt->len_cvt - 64;
|
||||
const int dstsize = (int) (((double)cvt->len_cvt) * cvt->rate_incr);
|
||||
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;
|
||||
@@ -6652,7 +6652,7 @@ SDL_Downsample_F32MSB_1c(SDL_AudioCVT * cvt, SDL_AudioFormat format)
|
||||
#endif
|
||||
|
||||
const int srcsize = cvt->len_cvt - 64;
|
||||
const int dstsize = (int) (((double)cvt->len_cvt) * cvt->rate_incr);
|
||||
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;
|
||||
@@ -6684,7 +6684,7 @@ SDL_Upsample_F32MSB_2c(SDL_AudioCVT * cvt, SDL_AudioFormat format)
|
||||
#endif
|
||||
|
||||
const int srcsize = cvt->len_cvt - 128;
|
||||
const int dstsize = (int) (((double)cvt->len_cvt) * cvt->rate_incr);
|
||||
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;
|
||||
@@ -6721,7 +6721,7 @@ SDL_Downsample_F32MSB_2c(SDL_AudioCVT * cvt, SDL_AudioFormat format)
|
||||
#endif
|
||||
|
||||
const int srcsize = cvt->len_cvt - 128;
|
||||
const int dstsize = (int) (((double)cvt->len_cvt) * cvt->rate_incr);
|
||||
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;
|
||||
@@ -6758,7 +6758,7 @@ SDL_Upsample_F32MSB_4c(SDL_AudioCVT * cvt, SDL_AudioFormat format)
|
||||
#endif
|
||||
|
||||
const int srcsize = cvt->len_cvt - 256;
|
||||
const int dstsize = (int) (((double)cvt->len_cvt) * cvt->rate_incr);
|
||||
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;
|
||||
@@ -6805,7 +6805,7 @@ SDL_Downsample_F32MSB_4c(SDL_AudioCVT * cvt, SDL_AudioFormat format)
|
||||
#endif
|
||||
|
||||
const int srcsize = cvt->len_cvt - 256;
|
||||
const int dstsize = (int) (((double)cvt->len_cvt) * cvt->rate_incr);
|
||||
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;
|
||||
@@ -6852,7 +6852,7 @@ SDL_Upsample_F32MSB_6c(SDL_AudioCVT * cvt, SDL_AudioFormat format)
|
||||
#endif
|
||||
|
||||
const int srcsize = cvt->len_cvt - 384;
|
||||
const int dstsize = (int) (((double)cvt->len_cvt) * cvt->rate_incr);
|
||||
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;
|
||||
@@ -6909,7 +6909,7 @@ SDL_Downsample_F32MSB_6c(SDL_AudioCVT * cvt, SDL_AudioFormat format)
|
||||
#endif
|
||||
|
||||
const int srcsize = cvt->len_cvt - 384;
|
||||
const int dstsize = (int) (((double)cvt->len_cvt) * cvt->rate_incr);
|
||||
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;
|
||||
@@ -6966,7 +6966,7 @@ SDL_Upsample_F32MSB_8c(SDL_AudioCVT * cvt, SDL_AudioFormat format)
|
||||
#endif
|
||||
|
||||
const int srcsize = cvt->len_cvt - 512;
|
||||
const int dstsize = (int) (((double)cvt->len_cvt) * cvt->rate_incr);
|
||||
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;
|
||||
@@ -7033,7 +7033,7 @@ SDL_Downsample_F32MSB_8c(SDL_AudioCVT * cvt, SDL_AudioFormat format)
|
||||
#endif
|
||||
|
||||
const int srcsize = cvt->len_cvt - 512;
|
||||
const int dstsize = (int) (((double)cvt->len_cvt) * cvt->rate_incr);
|
||||
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;
|
||||
|
||||
@@ -33,6 +33,26 @@ typedef struct SDL_AudioDevice SDL_AudioDevice;
|
||||
/* Used by audio targets during DetectDevices() */
|
||||
typedef void (*SDL_AddAudioDevice)(const char *name);
|
||||
|
||||
/* This is the size of a packet when using SDL_QueueAudio(). We allocate
|
||||
these as necessary and pool them, under the assumption that we'll
|
||||
eventually end up with a handful that keep recycling, meeting whatever
|
||||
the app needs. We keep packing data tightly as more arrives to avoid
|
||||
wasting space, and if we get a giant block of data, we'll split them
|
||||
into multiple packets behind the scenes. My expectation is that most
|
||||
apps will have 2-3 of these in the pool. 8k should cover most needs, but
|
||||
if this is crippling for some embedded system, we can #ifdef this.
|
||||
The system preallocates enough packets for 2 callbacks' worth of data. */
|
||||
#define SDL_AUDIOBUFFERQUEUE_PACKETLEN (8 * 1024)
|
||||
|
||||
/* Used by apps that queue audio instead of using the callback. */
|
||||
typedef struct SDL_AudioBufferQueue
|
||||
{
|
||||
Uint8 data[SDL_AUDIOBUFFERQUEUE_PACKETLEN]; /* packet data. */
|
||||
Uint32 datalen; /* bytes currently in use in this packet. */
|
||||
Uint32 startpos; /* bytes currently consumed in this packet. */
|
||||
struct SDL_AudioBufferQueue *next; /* next item in linked list. */
|
||||
} SDL_AudioBufferQueue;
|
||||
|
||||
typedef struct SDL_AudioDriverImpl
|
||||
{
|
||||
void (*DetectDevices) (int iscapture, SDL_AddAudioDevice addfn);
|
||||
@@ -40,6 +60,7 @@ typedef struct SDL_AudioDriverImpl
|
||||
void (*ThreadInit) (_THIS); /* Called by audio thread at start */
|
||||
void (*WaitDevice) (_THIS);
|
||||
void (*PlayDevice) (_THIS);
|
||||
int (*GetPendingBytes) (_THIS);
|
||||
Uint8 *(*GetDeviceBuf) (_THIS);
|
||||
void (*WaitDone) (_THIS);
|
||||
void (*CloseDevice) (_THIS);
|
||||
@@ -119,6 +140,12 @@ struct SDL_AudioDevice
|
||||
SDL_Thread *thread;
|
||||
SDL_threadID threadid;
|
||||
|
||||
/* Queued buffers (if app not using callback). */
|
||||
SDL_AudioBufferQueue *buffer_queue_head; /* device fed from here. */
|
||||
SDL_AudioBufferQueue *buffer_queue_tail; /* queue fills to here. */
|
||||
SDL_AudioBufferQueue *buffer_queue_pool; /* these are unused packets. */
|
||||
Uint32 queued_bytes; /* number of bytes of audio data in the queue. */
|
||||
|
||||
/* * * */
|
||||
/* Data private to this driver */
|
||||
struct SDL_PrivateAudioData *hidden;
|
||||
|
||||
@@ -121,7 +121,8 @@ MS_ADPCM_decode(Uint8 ** audio_buf, Uint32 * audio_len)
|
||||
struct MS_ADPCM_decodestate *state[2];
|
||||
Uint8 *freeable, *encoded, *decoded;
|
||||
Sint32 encoded_len, samplesleft;
|
||||
Sint8 nybble, stereo;
|
||||
Sint8 nybble;
|
||||
Uint8 stereo;
|
||||
Sint16 *coeff[2];
|
||||
Sint32 new_sample;
|
||||
|
||||
@@ -278,7 +279,8 @@ IMA_ADPCM_nibble(struct IMA_ADPCM_decodestate *state, Uint8 nybble)
|
||||
} else if (state->index < 0) {
|
||||
state->index = 0;
|
||||
}
|
||||
step = step_table[state->index];
|
||||
/* explicit cast to avoid gcc warning about using 'char' as array index */
|
||||
step = step_table[(int)state->index];
|
||||
delta = step >> 3;
|
||||
if (nybble & 0x04)
|
||||
delta += step;
|
||||
@@ -343,8 +345,8 @@ IMA_ADPCM_decode(Uint8 ** audio_buf, Uint32 * audio_len)
|
||||
/* Check to make sure we have enough variables in the state array */
|
||||
channels = IMA_ADPCM_state.wavefmt.channels;
|
||||
if (channels > SDL_arraysize(IMA_ADPCM_state.state)) {
|
||||
SDL_SetError("IMA ADPCM decoder can only handle %d channels",
|
||||
SDL_arraysize(IMA_ADPCM_state.state));
|
||||
SDL_SetError("IMA ADPCM decoder can only handle %u channels",
|
||||
(unsigned int)SDL_arraysize(IMA_ADPCM_state.state));
|
||||
return (-1);
|
||||
}
|
||||
state = IMA_ADPCM_state.state;
|
||||
@@ -458,7 +460,7 @@ SDL_LoadWAV_RW(SDL_RWops * src, int freesrc,
|
||||
}
|
||||
/* 2 Uint32's for chunk header+len, plus the lenread */
|
||||
headerDiff += lenread + 2 * sizeof(Uint32);
|
||||
} while ((chunk.magic == FACT) || (chunk.magic == LIST));
|
||||
} while ((chunk.magic == FACT) || (chunk.magic == LIST) || (chunk.magic == BEXT) || (chunk.magic == JUNK));
|
||||
|
||||
/* Decode the audio data format */
|
||||
format = (WaveFMT *) chunk.data;
|
||||
@@ -493,8 +495,7 @@ SDL_LoadWAV_RW(SDL_RWops * src, int freesrc,
|
||||
IMA_ADPCM_encoded = 1;
|
||||
break;
|
||||
case MP3_CODE:
|
||||
SDL_SetError("MPEG Layer 3 data not supported",
|
||||
SDL_SwapLE16(format->encoding));
|
||||
SDL_SetError("MPEG Layer 3 data not supported");
|
||||
was_error = 1;
|
||||
goto done;
|
||||
default:
|
||||
|
||||
@@ -29,6 +29,8 @@
|
||||
#define WAVE 0x45564157 /* "WAVE" */
|
||||
#define FACT 0x74636166 /* "fact" */
|
||||
#define LIST 0x5453494c /* "LIST" */
|
||||
#define BEXT 0x74786562 /* "bext" */
|
||||
#define JUNK 0x4B4E554A /* "JUNK" */
|
||||
#define FMT 0x20746D66 /* "fmt " */
|
||||
#define DATA 0x61746164 /* "data" */
|
||||
#define PCM_CODE 0x0001
|
||||
|
||||
@@ -32,7 +32,7 @@
|
||||
|
||||
#include <android/log.h>
|
||||
|
||||
static void * audioDevice;
|
||||
static SDL_AudioDevice* audioDevice = NULL;
|
||||
|
||||
static int
|
||||
AndroidAUD_OpenDevice(_THIS, const char *devname, int iscapture)
|
||||
@@ -49,6 +49,11 @@ AndroidAUD_OpenDevice(_THIS, const char *devname, int iscapture)
|
||||
}
|
||||
|
||||
audioDevice = this;
|
||||
|
||||
this->hidden = (struct SDL_PrivateAudioData *) SDL_calloc(1, (sizeof *this->hidden));
|
||||
if (this->hidden == NULL) {
|
||||
return SDL_OutOfMemory();
|
||||
}
|
||||
|
||||
test_format = SDL_FirstAudioFormat(this->spec.format);
|
||||
while (test_format != 0) { /* no "UNKNOWN" constant */
|
||||
@@ -110,6 +115,10 @@ AndroidAUD_CloseDevice(_THIS)
|
||||
Android_JNI_CloseAudioDevice();
|
||||
|
||||
if (audioDevice == this) {
|
||||
if (audioDevice->hidden != NULL) {
|
||||
SDL_free(this->hidden);
|
||||
this->hidden = NULL;
|
||||
}
|
||||
audioDevice = NULL;
|
||||
}
|
||||
}
|
||||
@@ -135,6 +144,41 @@ AudioBootStrap ANDROIDAUD_bootstrap = {
|
||||
"android", "SDL Android audio driver", AndroidAUD_Init, 0
|
||||
};
|
||||
|
||||
/* Pause (block) all non already paused audio devices by taking their mixer lock */
|
||||
void AndroidAUD_PauseDevices(void)
|
||||
{
|
||||
/* TODO: Handle multiple devices? */
|
||||
struct SDL_PrivateAudioData *private;
|
||||
if(audioDevice != NULL && audioDevice->hidden != NULL) {
|
||||
private = (struct SDL_PrivateAudioData *) audioDevice->hidden;
|
||||
if (audioDevice->paused) {
|
||||
/* The device is already paused, leave it alone */
|
||||
private->resume = SDL_FALSE;
|
||||
}
|
||||
else {
|
||||
SDL_LockMutex(audioDevice->mixer_lock);
|
||||
audioDevice->paused = SDL_TRUE;
|
||||
private->resume = SDL_TRUE;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/* Resume (unblock) all non already paused audio devices by releasing their mixer lock */
|
||||
void AndroidAUD_ResumeDevices(void)
|
||||
{
|
||||
/* TODO: Handle multiple devices? */
|
||||
struct SDL_PrivateAudioData *private;
|
||||
if(audioDevice != NULL && audioDevice->hidden != NULL) {
|
||||
private = (struct SDL_PrivateAudioData *) audioDevice->hidden;
|
||||
if (private->resume) {
|
||||
audioDevice->paused = SDL_FALSE;
|
||||
private->resume = SDL_FALSE;
|
||||
SDL_UnlockMutex(audioDevice->mixer_lock);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
#endif /* SDL_AUDIO_DRIVER_ANDROID */
|
||||
|
||||
/* vi: set ts=4 sw=4 expandtab: */
|
||||
|
||||
@@ -30,6 +30,8 @@
|
||||
|
||||
struct SDL_PrivateAudioData
|
||||
{
|
||||
/* Resume device if it was paused automatically */
|
||||
int resume;
|
||||
};
|
||||
|
||||
static void AndroidAUD_CloseDevice(_THIS);
|
||||
|
||||
@@ -19,6 +19,9 @@
|
||||
3. This notice may not be removed or altered from any source distribution.
|
||||
*/
|
||||
#include "../../SDL_internal.h"
|
||||
|
||||
#if SDL_AUDIO_DRIVER_COREAUDIO
|
||||
|
||||
#include "SDL_audio.h"
|
||||
#include "../SDL_audio_c.h"
|
||||
#include "../SDL_sysaudio.h"
|
||||
@@ -319,7 +322,6 @@ COREAUDIO_CloseDevice(_THIS)
|
||||
{
|
||||
if (this->hidden != NULL) {
|
||||
if (this->hidden->audioUnitOpened) {
|
||||
OSStatus result = noErr;
|
||||
AURenderCallbackStruct callback;
|
||||
const AudioUnitElement output_bus = 0;
|
||||
const AudioUnitElement input_bus = 1;
|
||||
@@ -331,14 +333,13 @@ COREAUDIO_CloseDevice(_THIS)
|
||||
kAudioUnitScope_Input);
|
||||
|
||||
/* stop processing the audio unit */
|
||||
result = AudioOutputUnitStop(this->hidden->audioUnit);
|
||||
AudioOutputUnitStop(this->hidden->audioUnit);
|
||||
|
||||
/* Remove the input callback */
|
||||
SDL_memset(&callback, 0, sizeof(AURenderCallbackStruct));
|
||||
result = AudioUnitSetProperty(this->hidden->audioUnit,
|
||||
kAudioUnitProperty_SetRenderCallback,
|
||||
scope, bus, &callback,
|
||||
sizeof(callback));
|
||||
AudioUnitSetProperty(this->hidden->audioUnit,
|
||||
kAudioUnitProperty_SetRenderCallback,
|
||||
scope, bus, &callback, sizeof(callback));
|
||||
|
||||
#if MACOSX_COREAUDIO
|
||||
CloseComponent(this->hidden->audioUnit);
|
||||
@@ -556,4 +557,6 @@ AudioBootStrap COREAUDIO_bootstrap = {
|
||||
"coreaudio", "CoreAudio", COREAUDIO_Init, 0
|
||||
};
|
||||
|
||||
#endif /* SDL_AUDIO_DRIVER_COREAUDIO */
|
||||
|
||||
/* vi: set ts=4 sw=4 expandtab: */
|
||||
|
||||
@@ -23,7 +23,7 @@
|
||||
#ifndef _SDL_directsound_h
|
||||
#define _SDL_directsound_h
|
||||
|
||||
#include "directx.h"
|
||||
#include "../../core/windows/SDL_directx.h"
|
||||
|
||||
#include "../SDL_sysaudio.h"
|
||||
|
||||
|
||||
@@ -1,102 +0,0 @@
|
||||
/*
|
||||
Simple DirectMedia Layer
|
||||
Copyright (C) 1997-2014 Sam Lantinga <slouken@libsdl.org>
|
||||
|
||||
This software is provided 'as-is', without any express or implied
|
||||
warranty. In no event will the authors be held liable for any damages
|
||||
arising from the use of this software.
|
||||
|
||||
Permission is granted to anyone to use this software for any purpose,
|
||||
including commercial applications, and to alter it and redistribute it
|
||||
freely, subject to the following restrictions:
|
||||
|
||||
1. The origin of this software must not be misrepresented; you must not
|
||||
claim that you wrote the original software. If you use this software
|
||||
in a product, an acknowledgment in the product documentation would be
|
||||
appreciated but is not required.
|
||||
2. Altered source versions must be plainly marked as such, and must not be
|
||||
misrepresented as being the original software.
|
||||
3. This notice may not be removed or altered from any source distribution.
|
||||
*/
|
||||
|
||||
#ifndef _directx_h
|
||||
#define _directx_h
|
||||
|
||||
/* Include all of the DirectX 8.0 headers and adds any necessary tweaks */
|
||||
|
||||
#include "../../core/windows/SDL_windows.h"
|
||||
#include <mmsystem.h>
|
||||
#ifndef WIN32
|
||||
#define WIN32
|
||||
#endif
|
||||
#undef WINNT
|
||||
|
||||
/* Far pointers don't exist in 32-bit code */
|
||||
#ifndef FAR
|
||||
#define FAR
|
||||
#endif
|
||||
|
||||
/* Error codes not yet included in Win32 API header files */
|
||||
#ifndef MAKE_HRESULT
|
||||
#define MAKE_HRESULT(sev,fac,code) \
|
||||
((HRESULT)(((unsigned long)(sev)<<31) | ((unsigned long)(fac)<<16) | ((unsigned long)(code))))
|
||||
#endif
|
||||
|
||||
#ifndef S_OK
|
||||
#define S_OK (HRESULT)0x00000000L
|
||||
#endif
|
||||
|
||||
#ifndef SUCCEEDED
|
||||
#define SUCCEEDED(x) ((HRESULT)(x) >= 0)
|
||||
#endif
|
||||
#ifndef FAILED
|
||||
#define FAILED(x) ((HRESULT)(x)<0)
|
||||
#endif
|
||||
|
||||
#ifndef E_FAIL
|
||||
#define E_FAIL (HRESULT)0x80000008L
|
||||
#endif
|
||||
#ifndef E_NOINTERFACE
|
||||
#define E_NOINTERFACE (HRESULT)0x80004002L
|
||||
#endif
|
||||
#ifndef E_OUTOFMEMORY
|
||||
#define E_OUTOFMEMORY (HRESULT)0x8007000EL
|
||||
#endif
|
||||
#ifndef E_INVALIDARG
|
||||
#define E_INVALIDARG (HRESULT)0x80070057L
|
||||
#endif
|
||||
#ifndef E_NOTIMPL
|
||||
#define E_NOTIMPL (HRESULT)0x80004001L
|
||||
#endif
|
||||
#ifndef REGDB_E_CLASSNOTREG
|
||||
#define REGDB_E_CLASSNOTREG (HRESULT)0x80040154L
|
||||
#endif
|
||||
|
||||
/* Severity codes */
|
||||
#ifndef SEVERITY_ERROR
|
||||
#define SEVERITY_ERROR 1
|
||||
#endif
|
||||
|
||||
/* Error facility codes */
|
||||
#ifndef FACILITY_WIN32
|
||||
#define FACILITY_WIN32 7
|
||||
#endif
|
||||
|
||||
#ifndef FIELD_OFFSET
|
||||
#define FIELD_OFFSET(type, field) ((LONG)&(((type *)0)->field))
|
||||
#endif
|
||||
|
||||
/* DirectX headers (if it isn't included, I haven't tested it yet)
|
||||
*/
|
||||
/* We need these defines to mark what version of DirectX API we use */
|
||||
#define DIRECTDRAW_VERSION 0x0700
|
||||
#define DIRECTSOUND_VERSION 0x0800
|
||||
#define DIRECTINPUT_VERSION 0x0500
|
||||
|
||||
#include <ddraw.h>
|
||||
#include <dsound.h>
|
||||
#include <dinput.h>
|
||||
|
||||
#endif /* _directx_h */
|
||||
|
||||
/* vi: set ts=4 sw=4 expandtab: */
|
||||
@@ -0,0 +1,275 @@
|
||||
/*
|
||||
Simple DirectMedia Layer
|
||||
Copyright (C) 1997-2014 Sam Lantinga <slouken@libsdl.org>
|
||||
|
||||
This software is provided 'as-is', without any express or implied
|
||||
warranty. In no event will the authors be held liable for any damages
|
||||
arising from the use of this software.
|
||||
|
||||
Permission is granted to anyone to use this software for any purpose,
|
||||
including commercial applications, and to alter it and redistribute it
|
||||
freely, subject to the following restrictions:
|
||||
|
||||
1. The origin of this software must not be misrepresented; you must not
|
||||
claim that you wrote the original software. If you use this software
|
||||
in a product, an acknowledgment in the product documentation would be
|
||||
appreciated but is not required.
|
||||
2. Altered source versions must be plainly marked as such, and must not be
|
||||
misrepresented as being the original software.
|
||||
3. This notice may not be removed or altered from any source distribution.
|
||||
*/
|
||||
#include "../../SDL_internal.h"
|
||||
|
||||
#if SDL_AUDIO_DRIVER_EMSCRIPTEN
|
||||
|
||||
#include "SDL_audio.h"
|
||||
#include "SDL_log.h"
|
||||
#include "../SDL_audio_c.h"
|
||||
#include "SDL_emscriptenaudio.h"
|
||||
|
||||
#include <emscripten/emscripten.h>
|
||||
|
||||
static int
|
||||
copyData(_THIS)
|
||||
{
|
||||
int byte_len;
|
||||
|
||||
if (this->hidden->write_off + this->convert.len_cvt > this->hidden->mixlen) {
|
||||
if (this->hidden->write_off > this->hidden->read_off) {
|
||||
SDL_memmove(this->hidden->mixbuf,
|
||||
this->hidden->mixbuf + this->hidden->read_off,
|
||||
this->hidden->mixlen - this->hidden->read_off);
|
||||
this->hidden->write_off = this->hidden->write_off - this->hidden->read_off;
|
||||
} else {
|
||||
this->hidden->write_off = 0;
|
||||
}
|
||||
this->hidden->read_off = 0;
|
||||
}
|
||||
|
||||
SDL_memcpy(this->hidden->mixbuf + this->hidden->write_off,
|
||||
this->convert.buf,
|
||||
this->convert.len_cvt);
|
||||
this->hidden->write_off += this->convert.len_cvt;
|
||||
byte_len = this->hidden->write_off - this->hidden->read_off;
|
||||
|
||||
return byte_len;
|
||||
}
|
||||
|
||||
static void
|
||||
HandleAudioProcess(_THIS)
|
||||
{
|
||||
Uint8 *buf = NULL;
|
||||
int byte_len = 0;
|
||||
int bytes = SDL_AUDIO_BITSIZE(this->spec.format) / 8;
|
||||
int bytes_in = SDL_AUDIO_BITSIZE(this->convert.src_format) / 8;
|
||||
|
||||
/* Only do soemthing if audio is enabled */
|
||||
if (!this->enabled)
|
||||
return;
|
||||
|
||||
if (this->paused)
|
||||
return;
|
||||
|
||||
if (this->convert.needed) {
|
||||
if (this->hidden->conv_in_len != 0) {
|
||||
this->convert.len = this->hidden->conv_in_len * bytes_in * this->spec.channels;
|
||||
}
|
||||
|
||||
(*this->spec.callback) (this->spec.userdata,
|
||||
this->convert.buf,
|
||||
this->convert.len);
|
||||
SDL_ConvertAudio(&this->convert);
|
||||
buf = this->convert.buf;
|
||||
byte_len = this->convert.len_cvt;
|
||||
|
||||
/* size mismatch*/
|
||||
if (byte_len != this->spec.size) {
|
||||
if (!this->hidden->mixbuf) {
|
||||
this->hidden->mixlen = this->spec.size > byte_len ? this->spec.size * 2 : byte_len * 2;
|
||||
this->hidden->mixbuf = SDL_malloc(this->hidden->mixlen);
|
||||
}
|
||||
|
||||
/* copy existing data */
|
||||
byte_len = copyData(this);
|
||||
|
||||
/* read more data*/
|
||||
while (byte_len < this->spec.size) {
|
||||
(*this->spec.callback) (this->spec.userdata,
|
||||
this->convert.buf,
|
||||
this->convert.len);
|
||||
SDL_ConvertAudio(&this->convert);
|
||||
byte_len = copyData(this);
|
||||
}
|
||||
|
||||
byte_len = this->spec.size;
|
||||
buf = this->hidden->mixbuf + this->hidden->read_off;
|
||||
this->hidden->read_off += byte_len;
|
||||
}
|
||||
|
||||
} else {
|
||||
if (!this->hidden->mixbuf) {
|
||||
this->hidden->mixlen = this->spec.size;
|
||||
this->hidden->mixbuf = SDL_malloc(this->hidden->mixlen);
|
||||
}
|
||||
(*this->spec.callback) (this->spec.userdata,
|
||||
this->hidden->mixbuf,
|
||||
this->hidden->mixlen);
|
||||
buf = this->hidden->mixbuf;
|
||||
byte_len = this->hidden->mixlen;
|
||||
}
|
||||
|
||||
if (buf) {
|
||||
EM_ASM_ARGS({
|
||||
var numChannels = SDL2.audio.currentOutputBuffer['numberOfChannels'];
|
||||
for (var c = 0; c < numChannels; ++c) {
|
||||
var channelData = SDL2.audio.currentOutputBuffer['getChannelData'](c);
|
||||
if (channelData.length != $1) {
|
||||
throw 'Web Audio output buffer length mismatch! Destination size: ' + channelData.length + ' samples vs expected ' + $1 + ' samples!';
|
||||
}
|
||||
|
||||
for (var j = 0; j < $1; ++j) {
|
||||
channelData[j] = getValue($0 + (j*numChannels + c)*4, 'float');
|
||||
}
|
||||
}
|
||||
}, buf, byte_len / bytes / this->spec.channels);
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
Emscripten_CloseDevice(_THIS)
|
||||
{
|
||||
if (this->hidden != NULL) {
|
||||
if (this->hidden->mixbuf != NULL) {
|
||||
/* Clean up the audio buffer */
|
||||
SDL_free(this->hidden->mixbuf);
|
||||
this->hidden->mixbuf = NULL;
|
||||
}
|
||||
|
||||
SDL_free(this->hidden);
|
||||
this->hidden = NULL;
|
||||
}
|
||||
}
|
||||
|
||||
static int
|
||||
Emscripten_OpenDevice(_THIS, const char *devname, int iscapture)
|
||||
{
|
||||
SDL_bool valid_format = SDL_FALSE;
|
||||
SDL_AudioFormat test_format = SDL_FirstAudioFormat(this->spec.format);
|
||||
int i;
|
||||
float f;
|
||||
int result;
|
||||
|
||||
while ((!valid_format) && (test_format)) {
|
||||
switch (test_format) {
|
||||
case AUDIO_F32: /* web audio only supports floats */
|
||||
this->spec.format = test_format;
|
||||
|
||||
valid_format = SDL_TRUE;
|
||||
break;
|
||||
}
|
||||
test_format = SDL_NextAudioFormat();
|
||||
}
|
||||
|
||||
if (!valid_format) {
|
||||
/* Didn't find a compatible format :( */
|
||||
return SDL_SetError("No compatible audio format!");
|
||||
}
|
||||
|
||||
/* Initialize all variables that we clean on shutdown */
|
||||
this->hidden = (struct SDL_PrivateAudioData *)
|
||||
SDL_malloc((sizeof *this->hidden));
|
||||
if (this->hidden == NULL) {
|
||||
return SDL_OutOfMemory();
|
||||
}
|
||||
SDL_memset(this->hidden, 0, (sizeof *this->hidden));
|
||||
|
||||
/* based on parts of library_sdl.js */
|
||||
|
||||
/* create context (TODO: this puts stuff in the global namespace...)*/
|
||||
result = EM_ASM_INT_V({
|
||||
if(typeof(SDL2) === 'undefined')
|
||||
SDL2 = {};
|
||||
|
||||
if(typeof(SDL2.audio) === 'undefined')
|
||||
SDL2.audio = {};
|
||||
|
||||
if (!SDL2.audioContext) {
|
||||
if (typeof(AudioContext) !== 'undefined') {
|
||||
SDL2.audioContext = new AudioContext();
|
||||
} else if (typeof(webkitAudioContext) !== 'undefined') {
|
||||
SDL2.audioContext = new webkitAudioContext();
|
||||
} else {
|
||||
return -1;
|
||||
}
|
||||
}
|
||||
return 0;
|
||||
});
|
||||
if (result < 0) {
|
||||
return SDL_SetError("Web Audio API is not available!");
|
||||
}
|
||||
|
||||
/* limit to native freq */
|
||||
int sampleRate = EM_ASM_INT_V({
|
||||
return SDL2.audioContext['sampleRate'];
|
||||
});
|
||||
|
||||
if(this->spec.freq != sampleRate) {
|
||||
for (i = this->spec.samples; i > 0; i--) {
|
||||
f = (float)i / (float)sampleRate * (float)this->spec.freq;
|
||||
if (SDL_floor(f) == f) {
|
||||
this->hidden->conv_in_len = SDL_floor(f);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
this->spec.freq = sampleRate;
|
||||
}
|
||||
|
||||
SDL_CalculateAudioSpec(&this->spec);
|
||||
|
||||
/* setup a ScriptProcessorNode */
|
||||
EM_ASM_ARGS({
|
||||
SDL2.audio.scriptProcessorNode = SDL2.audioContext['createScriptProcessor']($1, 0, $0);
|
||||
SDL2.audio.scriptProcessorNode['onaudioprocess'] = function (e) {
|
||||
SDL2.audio.currentOutputBuffer = e['outputBuffer'];
|
||||
Runtime.dynCall('vi', $2, [$3]);
|
||||
};
|
||||
SDL2.audio.scriptProcessorNode['connect'](SDL2.audioContext['destination']);
|
||||
}, this->spec.channels, this->spec.samples, HandleAudioProcess, this);
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int
|
||||
Emscripten_Init(SDL_AudioDriverImpl * impl)
|
||||
{
|
||||
/* Set the function pointers */
|
||||
impl->OpenDevice = Emscripten_OpenDevice;
|
||||
impl->CloseDevice = Emscripten_CloseDevice;
|
||||
|
||||
/* only one output */
|
||||
impl->OnlyHasDefaultOutputDevice = 1;
|
||||
|
||||
/* no threads here */
|
||||
impl->SkipMixerLock = 1;
|
||||
impl->ProvidesOwnCallbackThread = 1;
|
||||
|
||||
/* check availability */
|
||||
int available = EM_ASM_INT_V({
|
||||
if (typeof(AudioContext) !== 'undefined') {
|
||||
return 1;
|
||||
} else if (typeof(webkitAudioContext) !== 'undefined') {
|
||||
return 1;
|
||||
}
|
||||
return 0;
|
||||
});
|
||||
|
||||
return available;
|
||||
}
|
||||
|
||||
AudioBootStrap EmscriptenAudio_bootstrap = {
|
||||
"emscripten", "SDL emscripten audio driver", Emscripten_Init, 0
|
||||
};
|
||||
|
||||
#endif /* SDL_AUDIO_DRIVER_EMSCRIPTEN */
|
||||
|
||||
/* vi: set ts=4 sw=4 expandtab: */
|
||||
@@ -0,0 +1,42 @@
|
||||
/*
|
||||
Simple DirectMedia Layer
|
||||
Copyright (C) 1997-2014 Sam Lantinga <slouken@libsdl.org>
|
||||
|
||||
This software is provided 'as-is', without any express or implied
|
||||
warranty. In no event will the authors be held liable for any damages
|
||||
arising from the use of this software.
|
||||
|
||||
Permission is granted to anyone to use this software for any purpose,
|
||||
including commercial applications, and to alter it and redistribute it
|
||||
freely, subject to the following restrictions:
|
||||
|
||||
1. The origin of this software must not be misrepresented; you must not
|
||||
claim that you wrote the original software. If you use this software
|
||||
in a product, an acknowledgment in the product documentation would be
|
||||
appreciated but is not required.
|
||||
2. Altered source versions must be plainly marked as such, and must not be
|
||||
misrepresented as being the original software.
|
||||
3. This notice may not be removed or altered from any source distribution.
|
||||
*/
|
||||
#include "../../SDL_internal.h"
|
||||
|
||||
#ifndef _SDL_emscriptenaudio_h
|
||||
#define _SDL_emscriptenaudio_h
|
||||
|
||||
#include "../SDL_sysaudio.h"
|
||||
|
||||
/* Hidden "this" pointer for the audio functions */
|
||||
#define _THIS SDL_AudioDevice *this
|
||||
|
||||
struct SDL_PrivateAudioData
|
||||
{
|
||||
Uint8 *mixbuf;
|
||||
Uint32 mixlen;
|
||||
|
||||
Uint32 conv_in_len;
|
||||
|
||||
Uint32 write_off, read_off;
|
||||
};
|
||||
|
||||
#endif /* _SDL_emscriptenaudio_h */
|
||||
/* vi: set ts=4 sw=4 expandtab: */
|
||||
@@ -0,0 +1,154 @@
|
||||
/*
|
||||
Simple DirectMedia Layer
|
||||
Copyright (C) 1997-2014 Sam Lantinga <slouken@libsdl.org>
|
||||
|
||||
This software is provided 'as-is', without any express or implied
|
||||
warranty. In no event will the authors be held liable for any damages
|
||||
arising from the use of this software.
|
||||
|
||||
Permission is granted to anyone to use this software for any purpose,
|
||||
including commercial applications, and to alter it and redistribute it
|
||||
freely, subject to the following restrictions:
|
||||
|
||||
1. The origin of this software must not be misrepresented; you must not
|
||||
claim that you wrote the original software. If you use this software
|
||||
in a product, an acknowledgment in the product documentation would be
|
||||
appreciated but is not required.
|
||||
2. Altered source versions must be plainly marked as such, and must not be
|
||||
misrepresented as being the original software.
|
||||
3. This notice may not be removed or altered from any source distribution.
|
||||
*/
|
||||
|
||||
#include "../../SDL_internal.h"
|
||||
|
||||
#if SDL_AUDIO_DRIVER_NACL
|
||||
|
||||
#include "SDL_naclaudio.h"
|
||||
|
||||
#include "SDL_audio.h"
|
||||
#include "SDL_mutex.h"
|
||||
#include "../SDL_audiomem.h"
|
||||
#include "../SDL_audio_c.h"
|
||||
#include "../SDL_audiodev_c.h"
|
||||
|
||||
#include "ppapi/c/pp_errors.h"
|
||||
#include "ppapi/c/pp_instance.h"
|
||||
#include "ppapi_simple/ps.h"
|
||||
#include "ppapi_simple/ps_interface.h"
|
||||
#include "ppapi_simple/ps_event.h"
|
||||
|
||||
/* The tag name used by NACL audio */
|
||||
#define NACLAUD_DRIVER_NAME "nacl"
|
||||
|
||||
#define SAMPLE_FRAME_COUNT 4096
|
||||
|
||||
/* Audio driver functions */
|
||||
static int NACLAUD_OpenDevice(_THIS, const char *devname, int iscapture);
|
||||
static void NACLAUD_CloseDevice(_THIS);
|
||||
static void nacl_audio_callback(void* samples, uint32_t buffer_size, PP_TimeDelta latency, void* data);
|
||||
|
||||
/* FIXME: Make use of latency if needed */
|
||||
static void nacl_audio_callback(void* samples, uint32_t buffer_size, PP_TimeDelta latency, void* data) {
|
||||
SDL_AudioDevice* _this = (SDL_AudioDevice*) data;
|
||||
|
||||
SDL_LockMutex(private->mutex);
|
||||
|
||||
if (_this->enabled && !_this->paused) {
|
||||
if (_this->convert.needed) {
|
||||
SDL_LockMutex(_this->mixer_lock);
|
||||
(*_this->spec.callback) (_this->spec.userdata,
|
||||
(Uint8 *) _this->convert.buf,
|
||||
_this->convert.len);
|
||||
SDL_UnlockMutex(_this->mixer_lock);
|
||||
SDL_ConvertAudio(&_this->convert);
|
||||
SDL_memcpy(samples, _this->convert.buf, _this->convert.len_cvt);
|
||||
} else {
|
||||
SDL_LockMutex(_this->mixer_lock);
|
||||
(*_this->spec.callback) (_this->spec.userdata, (Uint8 *) samples, buffer_size);
|
||||
SDL_UnlockMutex(_this->mixer_lock);
|
||||
}
|
||||
} else {
|
||||
SDL_memset(samples, 0, buffer_size);
|
||||
}
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
static void NACLAUD_CloseDevice(SDL_AudioDevice *device) {
|
||||
const PPB_Core *core = PSInterfaceCore();
|
||||
const PPB_Audio *ppb_audio = PSInterfaceAudio();
|
||||
SDL_PrivateAudioData *hidden = (SDL_PrivateAudioData *) device->hidden;
|
||||
|
||||
ppb_audio->StopPlayback(hidden->audio);
|
||||
SDL_DestroyMutex(hidden->mutex);
|
||||
core->ReleaseResource(hidden->audio);
|
||||
}
|
||||
|
||||
static int
|
||||
NACLAUD_OpenDevice(_THIS, const char *devname, int iscapture) {
|
||||
PP_Instance instance = PSGetInstanceId();
|
||||
const PPB_Audio *ppb_audio = PSInterfaceAudio();
|
||||
const PPB_AudioConfig *ppb_audiocfg = PSInterfaceAudioConfig();
|
||||
|
||||
private = (SDL_PrivateAudioData *) SDL_calloc(1, (sizeof *private));
|
||||
if (private == NULL) {
|
||||
SDL_OutOfMemory();
|
||||
return 0;
|
||||
}
|
||||
|
||||
private->mutex = SDL_CreateMutex();
|
||||
_this->spec.freq = 44100;
|
||||
_this->spec.format = AUDIO_S16LSB;
|
||||
_this->spec.channels = 2;
|
||||
_this->spec.samples = ppb_audiocfg->RecommendSampleFrameCount(
|
||||
instance,
|
||||
PP_AUDIOSAMPLERATE_44100,
|
||||
SAMPLE_FRAME_COUNT);
|
||||
|
||||
/* Calculate the final parameters for this audio specification */
|
||||
SDL_CalculateAudioSpec(&_this->spec);
|
||||
|
||||
private->audio = ppb_audio->Create(
|
||||
instance,
|
||||
ppb_audiocfg->CreateStereo16Bit(instance, PP_AUDIOSAMPLERATE_44100, _this->spec.samples),
|
||||
nacl_audio_callback,
|
||||
_this);
|
||||
|
||||
/* Start audio playback while we are still on the main thread. */
|
||||
ppb_audio->StartPlayback(private->audio);
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
static int
|
||||
NACLAUD_Init(SDL_AudioDriverImpl * impl)
|
||||
{
|
||||
if (PSGetInstanceId() == 0) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
/* Set the function pointers */
|
||||
impl->OpenDevice = NACLAUD_OpenDevice;
|
||||
impl->CloseDevice = NACLAUD_CloseDevice;
|
||||
impl->HasCaptureSupport = 0;
|
||||
impl->OnlyHasDefaultOutputDevice = 1;
|
||||
impl->OnlyHasDefaultInputDevice = 1;
|
||||
impl->ProvidesOwnCallbackThread = 1;
|
||||
/*
|
||||
* impl->WaitDevice = NACLAUD_WaitDevice;
|
||||
* impl->GetDeviceBuf = NACLAUD_GetDeviceBuf;
|
||||
* impl->PlayDevice = NACLAUD_PlayDevice;
|
||||
* impl->Deinitialize = NACLAUD_Deinitialize;
|
||||
*/
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
AudioBootStrap NACLAUD_bootstrap = {
|
||||
NACLAUD_DRIVER_NAME, "SDL NaCl Audio Driver",
|
||||
NACLAUD_Init, 0
|
||||
};
|
||||
|
||||
#endif /* SDL_AUDIO_DRIVER_NACL */
|
||||
|
||||
/* vi: set ts=4 sw=4 expandtab: */
|
||||
@@ -0,0 +1,41 @@
|
||||
/*
|
||||
Simple DirectMedia Layer
|
||||
Copyright (C) 1997-2014 Sam Lantinga <slouken@libsdl.org>
|
||||
|
||||
This software is provided 'as-is', without any express or implied
|
||||
warranty. In no event will the authors be held liable for any damages
|
||||
arising from the use of this software.
|
||||
|
||||
Permission is granted to anyone to use this software for any purpose,
|
||||
including commercial applications, and to alter it and redistribute it
|
||||
freely, subject to the following restrictions:
|
||||
|
||||
1. The origin of this software must not be misrepresented; you must not
|
||||
claim that you wrote the original software. If you use this software
|
||||
in a product, an acknowledgment in the product documentation would be
|
||||
appreciated but is not required.
|
||||
2. Altered source versions must be plainly marked as such, and must not be
|
||||
misrepresented as being the original software.
|
||||
3. This notice may not be removed or altered from any source distribution.
|
||||
*/
|
||||
|
||||
#include "../../SDL_internal.h"
|
||||
|
||||
#ifndef _SDL_naclaudio_h
|
||||
#define _SDL_naclaudio_h
|
||||
|
||||
#include "SDL_audio.h"
|
||||
#include "../SDL_sysaudio.h"
|
||||
#include "SDL_mutex.h"
|
||||
|
||||
#include "ppapi/c/ppb_audio.h"
|
||||
|
||||
#define _THIS SDL_AudioDevice *_this
|
||||
#define private _this->hidden
|
||||
|
||||
typedef struct SDL_PrivateAudioData {
|
||||
SDL_mutex* mutex;
|
||||
PP_Resource audio;
|
||||
} SDL_PrivateAudioData;
|
||||
|
||||
#endif /* _SDL_naclaudio_h */
|
||||
@@ -18,6 +18,9 @@
|
||||
misrepresented as being the original software.
|
||||
3. This notice may not be removed or altered from any source distribution.
|
||||
*/
|
||||
#include "../../SDL_internal.h"
|
||||
|
||||
#if SDL_AUDIO_DRIVER_PSP
|
||||
|
||||
#include <stdio.h>
|
||||
#include <string.h>
|
||||
@@ -191,5 +194,6 @@ AudioBootStrap PSPAUD_bootstrap = {
|
||||
|
||||
/* SDL_AUDI */
|
||||
|
||||
#endif /* SDL_AUDIO_DRIVER_PSP */
|
||||
|
||||
|
||||
/* vi: set ts=4 sw=4 expandtab: */
|
||||
|
||||
@@ -24,7 +24,7 @@
|
||||
|
||||
#include "../SDL_sysaudio.h"
|
||||
|
||||
/* Hidden "this" pointer for the video functions */
|
||||
/* Hidden "this" pointer for the audio functions */
|
||||
#define _THIS SDL_AudioDevice *this
|
||||
|
||||
#define NUM_BUFFERS 2
|
||||
|
||||
@@ -383,6 +383,7 @@ sub buildArbitraryResampleFunc {
|
||||
my $eps_adjust = ($upsample) ? 'dstsize' : 'srcsize';
|
||||
my $incr = '';
|
||||
my $incr2 = '';
|
||||
my $block_align = $channels * $fsize/8;
|
||||
|
||||
|
||||
# !!! FIXME: DEBUG_CONVERT should report frequencies.
|
||||
@@ -395,7 +396,7 @@ ${sym}(SDL_AudioCVT * cvt, SDL_AudioFormat format)
|
||||
#endif
|
||||
|
||||
const int srcsize = cvt->len_cvt - $fudge;
|
||||
const int dstsize = (int) (((double)cvt->len_cvt) * cvt->rate_incr);
|
||||
const int dstsize = (int) (((double)(cvt->len_cvt/${block_align})) * cvt->rate_incr) * ${block_align};
|
||||
register int eps = 0;
|
||||
EOF
|
||||
|
||||
|
||||
@@ -209,7 +209,7 @@ SNDIO_OpenDevice(_THIS, const char *devname, int iscapture)
|
||||
this->hidden->mixlen = this->spec.size;
|
||||
|
||||
/* !!! FIXME: SIO_DEVANY can be a specific device... */
|
||||
if ((this->hidden->dev = SNDIO_sio_open(NULL, SIO_PLAY, 0)) == NULL) {
|
||||
if ((this->hidden->dev = SNDIO_sio_open(SIO_DEVANY, SIO_PLAY, 0)) == NULL) {
|
||||
SNDIO_CloseDevice(this);
|
||||
return SDL_SetError("sio_open() failed");
|
||||
}
|
||||
@@ -229,7 +229,17 @@ SNDIO_OpenDevice(_THIS, const char *devname, int iscapture)
|
||||
par.sig = SDL_AUDIO_ISSIGNED(test_format) ? 1 : 0;
|
||||
par.bits = SDL_AUDIO_BITSIZE(test_format);
|
||||
|
||||
if (SNDIO_sio_setpar(this->hidden->dev, &par) == 1) {
|
||||
if (SNDIO_sio_setpar(this->hidden->dev, &par) == 0) {
|
||||
continue;
|
||||
}
|
||||
if (SNDIO_sio_getpar(this->hidden->dev, &par) == 0) {
|
||||
SNDIO_CloseDevice(this);
|
||||
return SDL_SetError("sio_getpar() failed");
|
||||
}
|
||||
if (par.bps != SIO_BPS(par.bits)) {
|
||||
continue;
|
||||
}
|
||||
if ((par.bits == 8 * par.bps) || (par.msb)) {
|
||||
status = 0;
|
||||
break;
|
||||
}
|
||||
@@ -242,26 +252,21 @@ SNDIO_OpenDevice(_THIS, const char *devname, int iscapture)
|
||||
return SDL_SetError("sndio: Couldn't find any hardware audio formats");
|
||||
}
|
||||
|
||||
if (SNDIO_sio_getpar(this->hidden->dev, &par) == 0) {
|
||||
SNDIO_CloseDevice(this);
|
||||
return SDL_SetError("sio_getpar() failed");
|
||||
}
|
||||
|
||||
if ((par.bits == 32) && (par.sig) && (par.le))
|
||||
if ((par.bps == 4) && (par.sig) && (par.le))
|
||||
this->spec.format = AUDIO_S32LSB;
|
||||
else if ((par.bits == 32) && (par.sig) && (!par.le))
|
||||
else if ((par.bps == 4) && (par.sig) && (!par.le))
|
||||
this->spec.format = AUDIO_S32MSB;
|
||||
else if ((par.bits == 16) && (par.sig) && (par.le))
|
||||
else if ((par.bps == 2) && (par.sig) && (par.le))
|
||||
this->spec.format = AUDIO_S16LSB;
|
||||
else if ((par.bits == 16) && (par.sig) && (!par.le))
|
||||
else if ((par.bps == 2) && (par.sig) && (!par.le))
|
||||
this->spec.format = AUDIO_S16MSB;
|
||||
else if ((par.bits == 16) && (!par.sig) && (par.le))
|
||||
else if ((par.bps == 2) && (!par.sig) && (par.le))
|
||||
this->spec.format = AUDIO_U16LSB;
|
||||
else if ((par.bits == 16) && (!par.sig) && (!par.le))
|
||||
else if ((par.bps == 2) && (!par.sig) && (!par.le))
|
||||
this->spec.format = AUDIO_U16MSB;
|
||||
else if ((par.bits == 8) && (par.sig))
|
||||
else if ((par.bps == 1) && (par.sig))
|
||||
this->spec.format = AUDIO_S8;
|
||||
else if ((par.bits == 8) && (!par.sig))
|
||||
else if ((par.bps == 1) && (!par.sig))
|
||||
this->spec.format = AUDIO_U8;
|
||||
else {
|
||||
SNDIO_CloseDevice(this);
|
||||
|
||||
@@ -58,7 +58,7 @@
|
||||
/* The configure script already did any necessary checking */
|
||||
# define SDL_XAUDIO2_HAS_SDK 1
|
||||
#elif defined(__WINRT__)
|
||||
/* WinRT always has access to the .the XAudio 2 SDK */
|
||||
/* WinRT always has access to the XAudio 2 SDK */
|
||||
# define SDL_XAUDIO2_HAS_SDK
|
||||
#else
|
||||
/* XAudio2 exists as of the March 2008 DirectX SDK
|
||||
@@ -241,14 +241,14 @@ XAUDIO2_WaitDone(_THIS)
|
||||
SDL_assert(!this->enabled); /* flag that stops playing. */
|
||||
IXAudio2SourceVoice_Discontinuity(source);
|
||||
#if SDL_XAUDIO2_WIN8
|
||||
IXAudio2SourceVoice_GetState(source, &state, 0);
|
||||
IXAudio2SourceVoice_GetState(source, &state, XAUDIO2_VOICE_NOSAMPLESPLAYED);
|
||||
#else
|
||||
IXAudio2SourceVoice_GetState(source, &state);
|
||||
#endif
|
||||
while (state.BuffersQueued > 0) {
|
||||
SDL_SemWait(this->hidden->semaphore);
|
||||
#if SDL_XAUDIO2_WIN8
|
||||
IXAudio2SourceVoice_GetState(source, &state, 0);
|
||||
IXAudio2SourceVoice_GetState(source, &state, XAUDIO2_VOICE_NOSAMPLESPLAYED);
|
||||
#else
|
||||
IXAudio2SourceVoice_GetState(source, &state);
|
||||
#endif
|
||||
|
||||
Reference in New Issue
Block a user