Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(224)

Unified Diff: ppapi/native_client/src/shared/ppapi_proxy/plugin_ppb_audio.cc

Issue 10832285: Switch OnMoreData() to use AudioBus. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Comments. Created 8 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: ppapi/native_client/src/shared/ppapi_proxy/plugin_ppb_audio.cc
diff --git a/ppapi/native_client/src/shared/ppapi_proxy/plugin_ppb_audio.cc b/ppapi/native_client/src/shared/ppapi_proxy/plugin_ppb_audio.cc
index 18558e6370a576a8848024d31cb1264e2047642f..6a4cfd9d7bfbe0de3a887a7f808eea3e29997e4e 100644
--- a/ppapi/native_client/src/shared/ppapi_proxy/plugin_ppb_audio.cc
+++ b/ppapi/native_client/src/shared/ppapi_proxy/plugin_ppb_audio.cc
@@ -30,6 +30,10 @@ size_t ceil64k(size_t n) {
return (n + 0xFFFF) & (~0xFFFF);
}
+// Hard coded values from PepperPlatformAudioOutputImpl.
+// TODO(???): PPAPI shouldn't hard code these values for all clients.
+enum { kChannels = 2, kBytesPerSample = 2 };
+
} // namespace
PluginAudio::PluginAudio() :
@@ -42,7 +46,8 @@ PluginAudio::PluginAudio() :
thread_id_(),
thread_active_(false),
user_callback_(NULL),
- user_data_(NULL) {
+ user_data_(NULL),
+ audio_buffer_size_(0) {
DebugPrintf("PluginAudio::PluginAudio\n");
}
@@ -53,10 +58,13 @@ PluginAudio::~PluginAudio() {
GetInterface()->StopPlayback(resource_);
// Unmap the shared memory buffer, if present.
if (shm_buffer_) {
+ audio_bus_.reset();
+ audio_buffer_.reset();
munmap(shm_buffer_,
ceil64k(media::TotalSharedMemorySizeInBytes(shm_size_)));
shm_buffer_ = NULL;
shm_size_ = 0;
+ audio_buffer_size_ = 0;
}
// Close the handles.
if (shm_ != -1) {
@@ -87,9 +95,15 @@ void PluginAudio::AudioThread(void* self) {
if ((sizeof(sync_value) != r) || (-1 == sync_value))
break;
// Invoke user callback, get next buffer of audio data.
- audio->user_callback_(audio->shm_buffer_,
- audio->shm_size_,
+ audio->user_callback_(audio->audio_buffer_.get(),
+ audio->audio_buffer_size_,
audio->user_data_);
+
+ // Deinterleave the audio data into the shared memory as float.
+ audio->audio_bus_->FromInterleaved(
+ audio->audio_buffer_.get(), audio->audio_bus_->frames(),
+ kBytesPerSample);
+
// Signal audio backend by writing buffer length at end of buffer.
// (Note: NaCl applications will always write the entire buffer.)
media::SetActualDataSizeInBytes(audio->shm_buffer_,
@@ -112,6 +126,14 @@ void PluginAudio::StreamCreated(NaClSrpcImcDescType socket,
shm,
0);
if (MAP_FAILED != shm_buffer_) {
+ // Deduce the frame count from the size using hard coded channel count.
+ audio_bus_ = media::AudioBus::WrapMemory(
+ kChannels, shm_size_ / (sizeof(float) * kChannels), shm_buffer_);
+ // Setup integer audio buffer for user audio data.
+ audio_buffer_size_ =
+ audio_bus_->frames() * audio_bus_->channels() * kBytesPerSample;
+ audio_buffer_.reset(new uint8_t[audio_buffer_size_]);
+
if (state() == AUDIO_PENDING) {
StartAudioThread();
} else {
@@ -126,6 +148,7 @@ bool PluginAudio::StartAudioThread() {
// clear contents of shm buffer before spinning up audio thread
DebugPrintf("PluginAudio::StartAudioThread\n");
memset(shm_buffer_, 0, shm_size_);
+ memset(audio_buffer_.get(), 0, audio_buffer_size_);
const struct PP_ThreadFunctions* thread_funcs = GetThreadCreator();
if (NULL == thread_funcs->thread_create ||
NULL == thread_funcs->thread_join) {

Powered by Google App Engine
This is Rietveld 408576698