SDL  2.0
SDL_audio_c.h File Reference
#include "../SDL_internal.h"
+ Include dependency graph for SDL_audio_c.h:
+ This graph shows which files directly or indirectly include this file:

Go to the source code of this file.

Data Structures

struct  SDL_AudioTypeFilters
 
struct  SDL_AudioRateFilters
 

Functions

SDL_AudioFormat SDL_FirstAudioFormat (SDL_AudioFormat format)
 
SDL_AudioFormat SDL_NextAudioFormat (void)
 
void SDL_CalculateAudioSpec (SDL_AudioSpec *spec)
 
int SDL_RunAudio (void *audiop)
 

Variables

const SDL_AudioTypeFilters sdl_audio_type_filters []
 
const SDL_AudioRateFilters sdl_audio_rate_filters []
 

Function Documentation

void SDL_CalculateAudioSpec ( SDL_AudioSpec spec)

Definition at line 1419 of file SDL_audio.c.

References AUDIO_U8, SDL_AudioSpec::channels, SDL_AudioSpec::format, SDL_AudioSpec::samples, SDL_AUDIO_BITSIZE, SDL_AudioSpec::silence, and SDL_AudioSpec::size.

Referenced by open_audio_device(), and prepare_audiospec().

1420 {
1421  switch (spec->format) {
1422  case AUDIO_U8:
1423  spec->silence = 0x80;
1424  break;
1425  default:
1426  spec->silence = 0x00;
1427  break;
1428  }
1429  spec->size = SDL_AUDIO_BITSIZE(spec->format) / 8;
1430  spec->size *= spec->channels;
1431  spec->size *= spec->samples;
1432 }
Uint8 silence
Definition: SDL_audio.h:173
Uint16 samples
Definition: SDL_audio.h:174
#define AUDIO_U8
Definition: SDL_audio.h:89
Uint8 channels
Definition: SDL_audio.h:172
#define SDL_AUDIO_BITSIZE(x)
Definition: SDL_audio.h:75
Uint32 size
Definition: SDL_audio.h:176
SDL_AudioFormat format
Definition: SDL_audio.h:171
SDL_AudioFormat SDL_FirstAudioFormat ( SDL_AudioFormat  format)

Definition at line 1398 of file SDL_audio.c.

References format_idx, format_idx_sub, format_list, NUM_FORMATS, and SDL_NextAudioFormat().

1399 {
1400  for (format_idx = 0; format_idx < NUM_FORMATS; ++format_idx) {
1401  if (format_list[format_idx][0] == format) {
1402  break;
1403  }
1404  }
1405  format_idx_sub = 0;
1406  return SDL_NextAudioFormat();
1407 }
static int format_idx_sub
Definition: SDL_audio.c:1373
static int format_idx
Definition: SDL_audio.c:1372
static SDL_AudioFormat format_list[NUM_FORMATS][NUM_FORMATS]
Definition: SDL_audio.c:1374
SDL_AudioFormat SDL_NextAudioFormat(void)
Definition: SDL_audio.c:1410
#define NUM_FORMATS
Definition: SDL_audio.c:1371
GLint GLint GLsizei GLsizei GLsizei GLint GLenum format
Definition: SDL_opengl.h:1565
SDL_AudioFormat SDL_NextAudioFormat ( void  )

Definition at line 1410 of file SDL_audio.c.

References format_idx, format_idx_sub, format_list, and NUM_FORMATS.

Referenced by SDL_FirstAudioFormat().

1411 {
1412  if ((format_idx == NUM_FORMATS) || (format_idx_sub == NUM_FORMATS)) {
1413  return 0;
1414  }
1416 }
static int format_idx_sub
Definition: SDL_audio.c:1373
static int format_idx
Definition: SDL_audio.c:1372
static SDL_AudioFormat format_list[NUM_FORMATS][NUM_FORMATS]
Definition: SDL_audio.c:1374
#define NUM_FORMATS
Definition: SDL_audio.c:1371
int SDL_RunAudio ( void audiop)

Definition at line 595 of file SDL_audio.c.

References SDL_AudioCVT::buf, SDL_AudioSpec::callback, SDL_AudioDevice::convert, SDL_AudioDevice::enabled, SDL_AudioDevice::fake_stream, SDL_AudioSpec::freq, SDL_AudioDriverImpl::GetDeviceBuf, SDL_AudioDriver::impl, SDL_AudioCVT::len, SDL_AudioCVT::len_cvt, SDL_AudioDevice::mixer_lock, SDL_AudioCVT::needed, NULL, SDL_AudioDevice::paused, SDL_AudioDriverImpl::PlayDevice, SDL_AudioSpec::samples, SDL_ConvertAudio, SDL_Delay, SDL_LockMutex, SDL_memcpy, SDL_memset, SDL_SetThreadPriority, SDL_THREAD_PRIORITY_HIGH, SDL_ThreadID, SDL_UnlockMutex, SDLCALL, SDL_AudioDevice::shutdown, SDL_AudioSpec::silence, SDL_AudioSpec::size, SDL_AudioDevice::spec, SDL_AudioDevice::threadid, SDL_AudioDriverImpl::ThreadInit, SDL_AudioSpec::userdata, void, SDL_AudioDriverImpl::WaitDevice, and SDL_AudioDriverImpl::WaitDone.

Referenced by open_audio_device().

596 {
597  SDL_AudioDevice *device = (SDL_AudioDevice *) devicep;
598  const int silence = (int) device->spec.silence;
599  const Uint32 delay = ((device->spec.samples * 1000) / device->spec.freq);
600  const int stream_len = (device->convert.needed) ? device->convert.len : device->spec.size;
601  Uint8 *stream;
602  void *udata = device->spec.userdata;
603  void (SDLCALL *fill) (void *, Uint8 *, int) = device->spec.callback;
604 
605  /* The audio mixing is always a high priority thread */
607 
608  /* Perform any thread setup */
609  device->threadid = SDL_ThreadID();
610  current_audio.impl.ThreadInit(device);
611 
612  /* Loop, filling the audio buffers */
613  while (!device->shutdown) {
614  /* Fill the current buffer with sound */
615  if (device->convert.needed) {
616  stream = device->convert.buf;
617  } else if (device->enabled) {
619  } else {
620  /* if the device isn't enabled, we still write to the
621  fake_stream, so the app's callback will fire with
622  a regular frequency, in case they depend on that
623  for timing or progress. They can use hotplug
624  now to know if the device failed. */
625  stream = NULL;
626  }
627 
628  if (stream == NULL) {
629  stream = device->fake_stream;
630  }
631 
632  /* !!! FIXME: this should be LockDevice. */
633  SDL_LockMutex(device->mixer_lock);
634  if (device->paused) {
635  SDL_memset(stream, silence, stream_len);
636  } else {
637  (*fill) (udata, stream, stream_len);
638  }
639  SDL_UnlockMutex(device->mixer_lock);
640 
641  /* Convert the audio if necessary */
642  if (device->enabled && device->convert.needed) {
643  SDL_ConvertAudio(&device->convert);
645  if (stream == NULL) {
646  stream = device->fake_stream;
647  } else {
648  SDL_memcpy(stream, device->convert.buf,
649  device->convert.len_cvt);
650  }
651  }
652 
653  /* Ready current buffer for play and change current buffer */
654  if (stream == device->fake_stream) {
655  SDL_Delay(delay);
656  } else {
657  current_audio.impl.PlayDevice(device);
658  current_audio.impl.WaitDevice(device);
659  }
660  }
661 
662  /* Wait for the audio to drain. */
663  current_audio.impl.WaitDone(device);
664 
665  return 0;
666 }
#define SDL_ThreadID
#define SDL_LockMutex
SDL_mutex * mixer_lock
Definition: SDL_sysaudio.h:171
uint32_t Uint32
An unsigned 32-bit integer type.
Definition: SDL_stdinc.h:155
Uint8 silence
Definition: SDL_audio.h:173
Uint8 * buf
Definition: SDL_audio.h:206
GLuint GLuint stream
SDL_threadID threadid
Definition: SDL_sysaudio.h:175
void(* PlayDevice)(_THIS)
Definition: SDL_sysaudio.h:75
Uint16 samples
Definition: SDL_audio.h:174
void(* WaitDevice)(_THIS)
Definition: SDL_sysaudio.h:74
SDL_AudioSpec spec
Definition: SDL_sysaudio.h:150
static SDL_AudioDriver current_audio
Definition: SDL_audio.c:33
#define SDL_memcpy
void(* ThreadInit)(_THIS)
Definition: SDL_sysaudio.h:73
#define SDL_ConvertAudio
uint8_t Uint8
An unsigned 8-bit integer type.
Definition: SDL_stdinc.h:139
SDL_AudioCallback callback
Definition: SDL_audio.h:177
Uint8 * fake_stream
Definition: SDL_sysaudio.h:168
#define SDL_Delay
Uint32 size
Definition: SDL_audio.h:176
#define NULL
Definition: begin_code.h:143
SDL_PRINTF_FORMAT_STRING const char int SDL_PRINTF_FORMAT_STRING const char int SDL_PRINTF_FORMAT_STRING const char int SDL_PRINTF_FORMAT_STRING const char const char SDL_SCANF_FORMAT_STRING const char return SDL_ThreadFunction const char void return Uint32 return Uint32 void
SDL_AudioDriverImpl impl
Definition: SDL_sysaudio.h:120
Uint8 *(* GetDeviceBuf)(_THIS)
Definition: SDL_sysaudio.h:77
void * userdata
Definition: SDL_audio.h:178
#define SDL_UnlockMutex
SDL_AudioCVT convert
Definition: SDL_sysaudio.h:153
#define SDLCALL
Definition: SDL_internal.h:31
#define SDL_SetThreadPriority
#define SDL_memset
void(* WaitDone)(_THIS)
Definition: SDL_sysaudio.h:78

Variable Documentation

const SDL_AudioRateFilters sdl_audio_rate_filters[]

Definition at line 15702 of file SDL_audiotypecvt.c.

Referenced by SDL_BuildAudioResampleCVT().

const SDL_AudioTypeFilters sdl_audio_type_filters[]

Definition at line 2195 of file SDL_audiotypecvt.c.

Referenced by SDL_BuildAudioTypeCVT().