Index: experimental/conways_life/audio/audio_player.cc |
diff --git a/experimental/conways_life/audio/audio_player.cc b/experimental/conways_life/audio/audio_player.cc |
deleted file mode 100644 |
index a4adbc66318d189ae5115cdc74a053c3d40cb4af..0000000000000000000000000000000000000000 |
--- a/experimental/conways_life/audio/audio_player.cc |
+++ /dev/null |
@@ -1,143 +0,0 @@ |
-// Copyright (c) 2011 The Native Client Authors. All rights reserved. |
-// Use of this source code is governed by a BSD-style license that can be |
-// found in the LICENSE file. |
- |
-#include "experimental/conways_life/audio/audio_player.h" |
- |
-#include <stdio.h> |
-#include <string.h> |
-#include <algorithm> |
- |
-#include "experimental/conways_life/audio/audio_source.h" |
-#include "experimental/conways_life/threading/scoped_mutex_lock.h" |
-#include "ppapi/c/pp_errors.h" |
-#include "ppapi/cpp/audio.h" |
-#include "ppapi/cpp/audio_config.h" |
-#include "ppapi/cpp/module.h" |
- |
-namespace audio { |
- |
-AudioPlayer::AudioPlayer(pp::Instance* instance) |
- : audio_source_(NULL), |
- playback_offset_(0), |
- pp_audio_(NULL), |
- instance_(instance), |
- factory_(this) { |
- pthread_mutex_init(&mutex_, NULL); |
-} |
- |
-AudioPlayer::~AudioPlayer() { |
- ClearAudioSource(); |
- ClearPepperAudio(); |
- pthread_mutex_destroy(&mutex_); |
-} |
- |
-void AudioPlayer::AssignAudioSource(AudioSource* source) { |
- threading::ScopedMutexLock scoped_mutex(&mutex_); |
- ClearPepperAudio(); |
- playback_offset_ = 0; |
- if (audio_source_ != source) { |
- ClearAudioSource(); |
- audio_source_ = source; |
- } |
-} |
- |
-void AudioPlayer::Play() { |
- assert(audio_source_ != NULL); // Forgot to assign a sound source? |
- pp::CompletionCallback cc = factory_.NewCallback(&AudioPlayer::InternalPlay); |
- pp::Module::Get()->core()->CallOnMainThread(0, cc, PP_OK); |
-} |
- |
-void AudioPlayer::Stop() { |
- pp::CompletionCallback cc = factory_.NewCallback(&AudioPlayer::InternalStop); |
- pp::Module::Get()->core()->CallOnMainThread(0, cc, PP_OK); |
-} |
- |
-bool AudioPlayer::IsReady() const { |
- return audio_source_ != NULL && audio_source_->IsReady(); |
-} |
- |
-void AudioPlayer::AudioCallback(void* sample_buffer, |
- uint32_t out_buffer_size, |
- void* user_data) { |
- AudioPlayer* player = reinterpret_cast<AudioPlayer*>(user_data); |
- char* out_buffer = reinterpret_cast<char*>(sample_buffer); |
- |
- // Copy the next chunk of samples from the audio source. |
- AudioSource* audio_source = player->audio_source_; |
- const char* src_buffer = audio_source->GetAudioData(); |
- uint32_t src_buffer_size = audio_source->GetAudioDataSize(); |
- uint32_t remaining_bytes = src_buffer_size - player->playback_offset_ + 1; |
- uint32_t copy_size = std::min(out_buffer_size, remaining_bytes); |
- |
- if (copy_size == 0) { |
- // No samples left; fill the buffer with 0s and stop the player. |
- ::memset(out_buffer, 0, out_buffer_size); |
- player->Stop(); |
- } else { |
- // Copy the next chunk of samples to the audio buffer; if it's not enough |
- // to fill the buffer add 0s. |
- const char* src_buffer_start = src_buffer + player->playback_offset_; |
- ::memcpy(out_buffer, src_buffer_start, copy_size); |
- if (copy_size < out_buffer_size) { |
- ::memset(out_buffer + copy_size, 0, out_buffer_size - copy_size); |
- } |
- player->playback_offset_ += copy_size; |
- } |
-} |
- |
-void AudioPlayer::InternalPlay(int32_t result) { |
- assert(pp::Module::Get()->core()->IsMainThread()); |
- threading::ScopedMutexLock scoped_mutex(&mutex_); |
- if (pp_audio_ == NULL && audio_source_->IsReady()) { |
- CreatePepperAudio(); |
- } |
- if (pp_audio_ != NULL) { |
- playback_offset_ = 0; |
- pp_audio_->StartPlayback(); |
- } |
-} |
- |
-void AudioPlayer::InternalStop(int32_t result) { |
- assert((pp::Module::Get()->core()->IsMainThread())); |
- threading::ScopedMutexLock scoped_mutex(&mutex_); |
- if (pp_audio_ != NULL) { |
- pp_audio_->StopPlayback(); |
- } |
-} |
- |
-void AudioPlayer::ClearAudioSource() { |
- if (audio_source_ != NULL) { |
- delete audio_source_; |
- audio_source_ = NULL; |
- } |
-} |
- |
-void AudioPlayer::ClearPepperAudio() { |
- if (pp_audio_ != NULL) { |
- delete pp_audio_; |
- pp_audio_ = NULL; |
- } |
-} |
- |
-bool AudioPlayer::CreatePepperAudio() { |
- assert(pp::Module::Get()->core()->IsMainThread()); |
- |
- // Create audio config per sound info. |
- PP_AudioSampleRate rate = (audio_source_->GetSampleRate() == 44100) ? |
- PP_AUDIOSAMPLERATE_44100 : PP_AUDIOSAMPLERATE_48000; |
- pp::AudioConfig config(instance_, rate, 4096); |
- if (config.is_null()) { |
- printf("Error: could not create audio config.\n"); |
- return false; |
- } |
- // Create audio object. |
- pp_audio_ = new pp::Audio(instance_, config, AudioCallback, this); |
- if (pp_audio_->is_null()) { |
- printf("Error: could not create audio player.\n"); |
- ClearPepperAudio(); |
- } |
- return true; |
-} |
- |
-} // namespace audio |