OLD | NEW |
---|---|
1 diff -Naur openal-soft-1.13/Alc/ALc.c openal-soft-1.13-nacl/Alc/ALc.c | 1 diff -Naur openal-soft-1.13/Alc/ALc.c openal-soft-1.13-nacl/Alc/ALc.c |
2 --- openal-soft-1.13/Alc/ALc.c 2011-02-09 11:52:19.000000000 -0800 | 2 --- openal-soft-1.13/Alc/ALc.c 2011-02-09 11:52:19.000000000 -0800 |
3 +++ openal-soft-1.13-nacl/Alc/ALc.c 2012-01-23 15:45:38.000000000 -0800 | 3 +++ openal-soft-1.13-nacl/Alc/ALc.c 2012-01-23 15:45:38.000000000 -0800 |
4 @@ -23,7 +23,7 @@ | 4 @@ -23,7 +23,7 @@ |
5 #include <math.h> | 5 #include <math.h> |
6 #include <stdlib.h> | 6 #include <stdlib.h> |
7 #include <stdio.h> | 7 #include <stdio.h> |
8 -#include <memory.h> | 8 -#include <memory.h> |
9 +#include <string.h> | 9 +#include <string.h> |
10 #include <ctype.h> | 10 #include <ctype.h> |
11 | 11 |
12 #include "alMain.h" | 12 #include "alMain.h" |
13 @@ -69,7 +69,9 @@ | 13 @@ -69,7 +69,9 @@ |
14 #ifdef HAVE_PORTAUDIO | 14 #ifdef HAVE_PORTAUDIO |
15 { "port", alc_pa_init, alc_pa_deinit, alc_pa_probe, EmptyFuncs }, | 15 { "port", alc_pa_init, alc_pa_deinit, alc_pa_probe, EmptyFuncs }, |
16 #endif | 16 #endif |
17 - | 17 - |
18 +#ifdef HAVE_PPAPI | 18 +#ifdef HAVE_PPAPI |
19 + { "ppapi", alc_ppapi_init, alc_ppapi_deinit, alc_ppapi_probe, EmptyFuncs }, | 19 + { "ppapi", alc_ppapi_init, alc_ppapi_deinit, alc_ppapi_probe, EmptyFuncs }, |
20 +#endif | 20 +#endif |
21 { "null", alc_null_init, alc_null_deinit, alc_null_probe, EmptyFuncs }, | 21 { "null", alc_null_init, alc_null_deinit, alc_null_probe, EmptyFuncs }, |
22 #ifdef HAVE_WAVE | 22 #ifdef HAVE_WAVE |
23 { "wave", alc_wave_init, alc_wave_deinit, alc_wave_probe, EmptyFuncs }, | 23 { "wave", alc_wave_init, alc_wave_deinit, alc_wave_probe, EmptyFuncs }, |
24 diff -Naur openal-soft-1.13/Alc/ppapi.c openal-soft-1.13-nacl/Alc/ppapi.c | 24 diff -Naur openal-soft-1.13/Alc/ppapi.c openal-soft-1.13.nacl/Alc/ppapi.c |
25 --- openal-soft-1.13/Alc/ppapi.c 1969-12-31 16:00:00.000000000 -0800 | 25 --- openal-soft-1.13/Alc/ppapi.c 1969-12-31 16:00:00.000000000 -0800 |
26 +++ openal-soft-1.13-nacl/Alc/ppapi.c» 2012-01-23 15:46:21.000000000 -0800 | 26 +++ openal-soft-1.13.nacl/Alc/ppapi.c» 2013-01-31 08:54:09.078478389 -0800 |
27 @@ -0,0 +1,411 @@ | 27 @@ -0,0 +1,421 @@ |
28 +/** | 28 +/** |
29 + * OpenAL cross platform audio library | 29 + * OpenAL cross platform audio library |
30 + * Copyright (C) 2012 | 30 + * Copyright (C) 2012 |
31 + * This library is free software; you can redistribute it and/or | 31 + * This library is free software; you can redistribute it and/or |
32 + * modify it under the terms of the GNU Library General Public | 32 + * modify it under the terms of the GNU Library General Public |
33 + * License as published by the Free Software Foundation; either | 33 + * License as published by the Free Software Foundation; either |
34 + * version 2 of the License, or (at your option) any later version. | 34 + * version 2 of the License, or (at your option) any later version. |
35 + * | 35 + * |
36 + * This library is distributed in the hope that it will be useful, | 36 + * This library is distributed in the hope that it will be useful, |
37 + * but WITHOUT ANY WARRANTY; without even the implied warranty of | 37 + * but WITHOUT ANY WARRANTY; without even the implied warranty of |
(...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
77 + ALvoid *buffer; | 77 + ALvoid *buffer; |
78 + ALuint size; | 78 + ALuint size; |
79 + | 79 + |
80 + PPB_AudioConfig* audio_config; | 80 + PPB_AudioConfig* audio_config; |
81 + PPB_Audio* audio; | 81 + PPB_Audio* audio; |
82 + PPB_Core* core; | 82 + PPB_Core* core; |
83 + | 83 + |
84 + PP_Resource audio_config_resource; | 84 + PP_Resource audio_config_resource; |
85 + PP_Resource audio_resource; | 85 + PP_Resource audio_resource; |
86 + ALuint sample_frame_count; | 86 + ALuint sample_frame_count; |
87 + | 87 + |
88 + volatile ALuint read_ptr; | 88 + volatile ALuint read_ptr; |
89 + volatile ALuint write_ptr; | 89 + volatile ALuint write_ptr; |
90 + | 90 + |
91 + ALCdevice *device; | 91 + ALCdevice *device; |
92 + | 92 + |
93 + volatile int killNow; | 93 + volatile int killNow; |
94 + ALvoid *thread; | 94 + ALvoid *thread; |
95 + volatile ALuint main_thread_init_status; | 95 + volatile ALuint main_thread_init_status; |
96 + ALuint buffer_ready; | 96 + ALuint buffer_ready; |
97 +} ppapi_data; | 97 +} ppapi_data; |
(...skipping 12 matching lines...) Expand all Loading... | |
110 + uint32_t buffer_size_in_bytes, | 110 + uint32_t buffer_size_in_bytes, |
111 + void* user_data) | 111 + void* user_data) |
112 +{ | 112 +{ |
113 + ppapi_data* data = (ppapi_data*)user_data; | 113 + ppapi_data* data = (ppapi_data*)user_data; |
114 + if (!data->buffer_ready) return; | 114 + if (!data->buffer_ready) return; |
115 + | 115 + |
116 + ALuint write_proxy = data->write_ptr; | 116 + ALuint write_proxy = data->write_ptr; |
117 + if (data->read_ptr > data->write_ptr) | 117 + if (data->read_ptr > data->write_ptr) |
118 + write_proxy = data->write_ptr + data->size; | 118 + write_proxy = data->write_ptr + data->size; |
119 + | 119 + |
120 + if (data->read_ptr + buffer_size_in_bytes > write_proxy) | 120 + int available_bytes = write_proxy - data->read_ptr; |
121 + if (available_bytes < buffer_size_in_bytes) | |
121 + { | 122 + { |
122 + AL_PRINT("buffer underrun\n"); | 123 + AL_PRINT("buffer underrun (buffer size=%d) (only buffering %d)\n", buff er_size_in_bytes, available_bytes); |
123 + return; | 124 + /* Zero the part of the buffer that we cannot fill */ |
nfullagar1
2013/01/31 18:58:50
Might sound slightly better to replicate the last
| |
125 + memset(sample_buffer + available_bytes, 0, buffer_size_in_bytes - avail able_bytes); | |
126 + buffer_size_in_bytes = available_bytes; | |
124 + } | 127 + } |
125 + | 128 + |
126 + if (data->read_ptr + buffer_size_in_bytes > data->size) | 129 + if (data->read_ptr + buffer_size_in_bytes > data->size) |
127 + { | 130 + { |
128 + /* This read straddles the buffer boundary, split it up. */ | 131 + /* This read straddles the buffer boundary, split it up. */ |
129 + memcpy(sample_buffer, | 132 + memcpy(sample_buffer, |
130 + data->buffer + data->read_ptr, | 133 + data->buffer + data->read_ptr, |
131 + data->size - data->read_ptr); | 134 + data->size - data->read_ptr); |
132 + memcpy(sample_buffer + (data->size - data->read_ptr), | 135 + memcpy(sample_buffer + (data->size - data->read_ptr), |
133 + data->buffer, | 136 + data->buffer, |
(...skipping 13 matching lines...) Expand all Loading... | |
147 + | 150 + |
148 +static const ALCchar ppapiDevice[] = "PPAPI Output"; | 151 +static const ALCchar ppapiDevice[] = "PPAPI Output"; |
149 + | 152 + |
150 +static ALuint PpapiProc(ALvoid *ptr) | 153 +static ALuint PpapiProc(ALvoid *ptr) |
151 +{ | 154 +{ |
152 + ALCdevice *Device = (ALCdevice*)ptr; | 155 + ALCdevice *Device = (ALCdevice*)ptr; |
153 + ppapi_data *data = (ppapi_data*)Device->ExtraData; | 156 + ppapi_data *data = (ppapi_data*)Device->ExtraData; |
154 + | 157 + |
155 + ALuint UpdateSizeInBytes = Device->UpdateSize * kFrameSizeInBytes; | 158 + ALuint UpdateSizeInBytes = Device->UpdateSize * kFrameSizeInBytes; |
156 + ALuint SampleFrameInBytes = data->sample_frame_count * kFrameSizeInBytes; | 159 + ALuint SampleFrameInBytes = data->sample_frame_count * kFrameSizeInBytes; |
160 + | |
157 + /* Start to buffer when less than this many bytes are buffered. Keep this | 161 + /* Start to buffer when less than this many bytes are buffered. Keep this |
158 + * small for low latency but large enough so we don't starve Pepper. | 162 + * small for low latency but large enough so we don't starve Pepper. |
163 + * | |
164 + * SampleFrameInBytes is the size of the buffer that PPAPI asks for each | |
165 + * callback. We want to keep twice this amount in the buffer at any given | |
166 + * time. | |
159 + */ | 167 + */ |
160 + const ALuint MinBufferSizeInBytes = | 168 + const ALuint MinBufferSizeInBytes = max(SampleFrameInBytes*2, |
161 + min(max(SampleFrameInBytes*4, UpdateSizeInBytes), data->size/2); | 169 + UpdateSizeInBytes); |
162 + | 170 + |
163 + while(!data->killNow && Device->Connected) | 171 + while(!data->killNow && Device->Connected) |
164 + { | 172 + { |
165 + ALuint write_proxy = data->write_ptr; | 173 + ALuint write_proxy = data->write_ptr; |
166 + if (data->read_ptr > data->write_ptr) | 174 + if (data->read_ptr > data->write_ptr) |
167 + write_proxy = data->write_ptr + data->size; | 175 + write_proxy = data->write_ptr + data->size; |
168 + | 176 + |
169 + if (data->read_ptr + MinBufferSizeInBytes >= write_proxy) | 177 + if (data->read_ptr + MinBufferSizeInBytes >= write_proxy) |
170 + { | 178 + { |
171 + aluMixData(Device, | 179 + aluMixData(Device, |
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
209 +#endif | 217 +#endif |
210 + rate, | 218 + rate, |
211 + kRequestedFrameCount); | 219 + kRequestedFrameCount); |
212 + | 220 + |
213 + data->audio_config_resource = | 221 + data->audio_config_resource = |
214 + data->audio_config->CreateStereo16Bit(gInstance, | 222 + data->audio_config->CreateStereo16Bit(gInstance, |
215 + rate, | 223 + rate, |
216 + data->sample_frame_count); | 224 + data->sample_frame_count); |
217 + | 225 + |
218 + if (PP_FALSE == data->audio_config->IsAudioConfig(data->audio_config_resour ce)) { | 226 + if (PP_FALSE == data->audio_config->IsAudioConfig(data->audio_config_resour ce)) { |
219 + AL_PRINT("PPAPI initialization: audio config creation failed."); | 227 + AL_PRINT("PPAPI initialization: audio config creation failed."); |
220 + data->main_thread_init_status = -1; | 228 + data->main_thread_init_status = -1; |
221 + return; | 229 + return; |
222 + } | 230 + } |
223 + | 231 + |
224 + data->audio_resource = data->audio->Create(gInstance, | 232 + data->audio_resource = data->audio->Create(gInstance, |
225 + data->audio_config_resource, | 233 + data->audio_config_resource, |
226 + PPAPI_Audio_Callback, | 234 + PPAPI_Audio_Callback, |
227 + (void*)data); | 235 + (void*)data); |
228 + | 236 + |
229 + if (PP_FALSE == data->audio->IsAudio(data->audio_resource)) { | 237 + if (PP_FALSE == data->audio->IsAudio(data->audio_resource)) { |
230 + AL_PRINT("PPAPI initialization: audio resource creation failed."); | 238 + AL_PRINT("PPAPI initialization: audio resource creation failed."); |
231 + data->main_thread_init_status = -1; | 239 + data->main_thread_init_status = -1; |
232 + return; | 240 + return; |
233 + } | 241 + } |
234 + | 242 + |
235 + if (PP_FALSE == data->audio->StartPlayback(data->audio_resource)) { | 243 + if (PP_FALSE == data->audio->StartPlayback(data->audio_resource)) { |
236 + AL_PRINT("PPAPI initialization: start playback failed."); | 244 + AL_PRINT("PPAPI initialization: start playback failed."); |
237 + data->main_thread_init_status = -1; | 245 + data->main_thread_init_status = -1; |
238 + return; | 246 + return; |
239 + } | 247 + } |
240 + | 248 + |
241 + data->main_thread_init_status = 1; | 249 + data->main_thread_init_status = 1; |
242 +} | 250 +} |
243 + | 251 + |
244 +static ALCboolean ppapi_open_playback(ALCdevice *device, | 252 +static ALCboolean ppapi_open_playback(ALCdevice *device, |
245 + const ALCchar *deviceName) | 253 + const ALCchar *deviceName) |
246 +{ | 254 +{ |
247 + ppapi_data *data; | 255 + ppapi_data *data; |
248 + | 256 + |
249 + if(!deviceName) | 257 + if (!deviceName) |
250 + deviceName = ppapiDevice; | 258 + deviceName = ppapiDevice; |
251 + else if(strcmp(deviceName, ppapiDevice) != 0) | 259 + else if (strcmp(deviceName, ppapiDevice) != 0) |
252 + return ALC_FALSE; | 260 + return ALC_FALSE; |
253 + | 261 + |
254 + int channels = ChannelsFromDevFmt(device->FmtChans); | 262 + int channels = ChannelsFromDevFmt(device->FmtChans); |
255 + int bytes = BytesFromDevFmt(device->FmtType); | 263 + int bytes = BytesFromDevFmt(device->FmtType); |
256 + | 264 + |
257 + if (channels != 2) | 265 + if (channels != 2) |
258 + { | 266 + { |
259 + AL_PRINT("PPAPI only supports 2 channel output\n"); | 267 + AL_PRINT("PPAPI only supports 2 channel output\n"); |
260 + return ALC_FALSE; | 268 + return ALC_FALSE; |
261 + } | 269 + } |
(...skipping 84 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
346 + } | 354 + } |
347 + | 355 + |
348 + device->ExtraData = NULL; | 356 + device->ExtraData = NULL; |
349 +} | 357 +} |
350 + | 358 + |
351 +static ALCboolean ppapi_reset_playback(ALCdevice *device) | 359 +static ALCboolean ppapi_reset_playback(ALCdevice *device) |
352 +{ | 360 +{ |
353 + ppapi_data *data = (ppapi_data*)device->ExtraData; | 361 + ppapi_data *data = (ppapi_data*)device->ExtraData; |
354 + | 362 + |
355 + ALuint UpdateSizeInBytes = device->UpdateSize * kFrameSizeInBytes; | 363 + ALuint UpdateSizeInBytes = device->UpdateSize * kFrameSizeInBytes; |
364 + ALuint SampleFrameInBytes = data->sample_frame_count * kFrameSizeInBytes; | |
356 + /* kBufferPadMult is added to protect against buffer underruns. */ | 365 + /* kBufferPadMult is added to protect against buffer underruns. */ |
357 + data->size = UpdateSizeInBytes * kBufferPadMult; | 366 + data->size = max(UpdateSizeInBytes, SampleFrameInBytes) * kBufferPadMult; |
367 + | |
358 + /* Extra UpdateSize added so we can read off the end of the buffer in one | 368 + /* Extra UpdateSize added so we can read off the end of the buffer in one |
359 + * shot from aluMixData, but treat the buffer like it's of size data->size. | 369 + * shot from aluMixData, but treat the buffer like it's of size data->size. |
360 + */ | 370 + */ |
361 + data->buffer = calloc(1, data->size + UpdateSizeInBytes); | 371 + data->buffer = calloc(1, data->size + UpdateSizeInBytes); |
362 + if(!data->buffer) | 372 + if (!data->buffer) |
363 + { | 373 + { |
364 + AL_PRINT("buffer malloc failed\n"); | 374 + AL_PRINT("buffer malloc failed\n"); |
365 + return ALC_FALSE; | 375 + return ALC_FALSE; |
366 + } | 376 + } |
367 + SetDefaultWFXChannelOrder(device); | 377 + SetDefaultWFXChannelOrder(device); |
368 + | 378 + |
369 + data->read_ptr = 0; | 379 + data->read_ptr = 0; |
370 + data->write_ptr = 0; | 380 + data->write_ptr = 0; |
371 + data->thread = StartThread(PpapiProc, device); | 381 + data->thread = StartThread(PpapiProc, device); |
372 + if(data->thread == NULL) | 382 + if (data->thread == NULL) |
373 + { | 383 + { |
374 + free(data->buffer); | 384 + free(data->buffer); |
375 + data->buffer = NULL; | 385 + data->buffer = NULL; |
376 + return ALC_FALSE; | 386 + return ALC_FALSE; |
377 + } | 387 + } |
378 + data->buffer_ready = 1; | 388 + data->buffer_ready = 1; |
379 + return ALC_TRUE; | 389 + return ALC_TRUE; |
380 +} | 390 +} |
381 + | 391 + |
382 +static void ppapi_stop_playback(ALCdevice *device) | 392 +static void ppapi_stop_playback(ALCdevice *device) |
383 +{ | 393 +{ |
384 + ppapi_data *data = (ppapi_data*)device->ExtraData; | 394 + ppapi_data *data = (ppapi_data*)device->ExtraData; |
385 + | 395 + |
386 + if(!data->thread) | 396 + if (!data->thread) |
387 + return; | 397 + return; |
388 + | 398 + |
389 + data->killNow = 1; | 399 + data->killNow = 1; |
390 + StopThread(data->thread); | 400 + StopThread(data->thread); |
391 + data->thread = NULL; | 401 + data->thread = NULL; |
392 + | 402 + |
393 + data->killNow = 0; | 403 + data->killNow = 0; |
394 + | 404 + |
395 + data->buffer_ready = 0; | 405 + data->buffer_ready = 0; |
396 + free(data->buffer); | 406 + free(data->buffer); |
(...skipping 27 matching lines...) Expand all Loading... | |
424 +{ | 434 +{ |
425 + *func_list = ppapi_funcs; | 435 + *func_list = ppapi_funcs; |
426 +} | 436 +} |
427 + | 437 + |
428 +void alc_ppapi_deinit(void) | 438 +void alc_ppapi_deinit(void) |
429 +{ | 439 +{ |
430 +} | 440 +} |
431 + | 441 + |
432 +void alc_ppapi_probe(int type) | 442 +void alc_ppapi_probe(int type) |
433 +{ | 443 +{ |
434 + if(type == DEVICE_PROBE) | 444 + if (type == DEVICE_PROBE) |
435 + AppendDeviceList(ppapiDevice); | 445 + AppendDeviceList(ppapiDevice); |
436 + else if(type == ALL_DEVICE_PROBE) | 446 + else if (type == ALL_DEVICE_PROBE) |
437 + AppendAllDeviceList(ppapiDevice); | 447 + AppendAllDeviceList(ppapiDevice); |
438 +} | 448 +} |
439 diff -Naur openal-soft-1.13/Alc/wave.c openal-soft-1.13-nacl/Alc/wave.c | 449 diff -Naur openal-soft-1.13/Alc/wave.c openal-soft-1.13-nacl/Alc/wave.c |
440 --- openal-soft-1.13/Alc/wave.c 2010-12-04 17:51:16.000000000 -0800 | 450 --- openal-soft-1.13/Alc/wave.c 2010-12-04 17:51:16.000000000 -0800 |
441 +++ openal-soft-1.13-nacl/Alc/wave.c 2012-01-23 15:45:38.000000000 -0800 | 451 +++ openal-soft-1.13-nacl/Alc/wave.c 2012-01-23 15:45:38.000000000 -0800 |
442 @@ -22,7 +22,7 @@ | 452 @@ -22,7 +22,7 @@ |
443 | 453 |
444 #include <stdlib.h> | 454 #include <stdlib.h> |
445 #include <stdio.h> | 455 #include <stdio.h> |
446 -#include <memory.h> | 456 -#include <memory.h> |
(...skipping 87 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
534 +SET(CMAKE_FIND_ROOT_PATH ${NACL_TOOLCHAIN_ROOT}) | 544 +SET(CMAKE_FIND_ROOT_PATH ${NACL_TOOLCHAIN_ROOT}) |
535 + | 545 + |
536 +# adjust the default behaviour of the FIND_XXX() commands: | 546 +# adjust the default behaviour of the FIND_XXX() commands: |
537 +# search headers and libraries in the target environment, search | 547 +# search headers and libraries in the target environment, search |
538 +# programs in the host environment | 548 +# programs in the host environment |
539 +set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER) | 549 +set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER) |
540 +set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY) | 550 +set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY) |
541 +set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY) | 551 +set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY) |
542 +set(CMAKE_REQUIRED_INCLUDES "${NACL_SDK_ROOT}/include") | 552 +set(CMAKE_REQUIRED_INCLUDES "${NACL_SDK_ROOT}/include") |
543 +include_directories(${NACL_SDK_ROOT}/include) | 553 +include_directories(${NACL_SDK_ROOT}/include) |
OLD | NEW |