22#include "../../SDL_internal.h"
24#if SDL_AUDIO_DRIVER_NACL
30#include "../SDL_audio_c.h"
31#include "../SDL_audiodev_c.h"
33#include "ppapi/c/pp_errors.h"
34#include "ppapi/c/pp_instance.h"
35#include "ppapi_simple/ps.h"
36#include "ppapi_simple/ps_interface.h"
37#include "ppapi_simple/ps_event.h"
40#define NACLAUDIO_DRIVER_NAME "nacl"
42#define SAMPLE_FRAME_COUNT 4096
45static void nacl_audio_callback(
void*
samples,
uint32_t buffer_size, PP_TimeDelta latency,
void*
data);
48static void nacl_audio_callback(
void*
stream,
uint32_t buffer_size, PP_TimeDelta latency,
void*
data) {
49 const int len = (int) buffer_size;
71 const int stream_len =
_this->callbackspec.size;
92 const PPB_Core *core = PSInterfaceCore();
93 const PPB_Audio *ppb_audio = PSInterfaceAudio();
96 ppb_audio->StopPlayback(hidden->
audio);
98 core->ReleaseResource(hidden->
audio);
102NACLAUDIO_OpenDevice(
_THIS,
void *
handle,
const char *devname,
int iscapture) {
103 PP_Instance instance = PSGetInstanceId();
104 const PPB_Audio *ppb_audio = PSInterfaceAudio();
105 const PPB_AudioConfig *ppb_audiocfg = PSInterfaceAudioConfig();
108 if (
private ==
NULL) {
113 _this->spec.freq = 44100;
115 _this->spec.channels = 2;
116 _this->spec.samples = ppb_audiocfg->RecommendSampleFrameCount(
118 PP_AUDIOSAMPLERATE_44100,
124 private->audio = ppb_audio->Create(
126 ppb_audiocfg->CreateStereo16Bit(instance, PP_AUDIOSAMPLERATE_44100,
_this->spec.samples),
131 ppb_audio->StartPlayback(
private->audio);
139 if (PSGetInstanceId() == 0) {
159 NACLAUDIO_DRIVER_NAME,
"SDL NaCl Audio Driver",
#define SDL_assert(condition)
void SDL_CalculateAudioSpec(SDL_AudioSpec *spec)
void(* SDL_AudioCallback)(void *userdata, Uint8 *stream, int len)
#define SDL_AudioStreamGet
#define SDL_AudioStreamClear
#define SDL_AudioStreamAvailable
#define SDL_AudioStreamPut
#define SDL_OutOfMemory()
GLint GLenum GLsizei GLsizei GLsizei GLint GLsizei const GLvoid * data
AudioBootStrap NACLAUDIO_bootstrap
static SDL_VideoDevice * _this
EGLImageKHR EGLint EGLint * handle
static SDL_AudioDeviceID device
void(* CloseDevice)(_THIS)
int OnlyHasDefaultOutputDevice
int(* OpenDevice)(_THIS, void *handle, const char *devname, int iscapture)
int ProvidesOwnCallbackThread
static Uint32 callback(Uint32 interval, void *param)