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
45 static void nacl_audio_callback(
void*
samples,
uint32_t buffer_size, PP_TimeDelta latency,
void*
data);
48 static 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);
102 NACLAUDIO_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",