Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #ifndef PPAPI_SHARED_IMPL_PPB_AUDIO_SHARED_H_ | 5 #ifndef PPAPI_SHARED_IMPL_PPB_AUDIO_SHARED_H_ |
| 6 #define PPAPI_SHARED_IMPL_PPB_AUDIO_SHARED_H_ | 6 #define PPAPI_SHARED_IMPL_PPB_AUDIO_SHARED_H_ |
| 7 | 7 |
| 8 #include "base/memory/scoped_ptr.h" | 8 #include "base/memory/scoped_ptr.h" |
| 9 #include "base/memory/shared_memory.h" | 9 #include "base/memory/shared_memory.h" |
| 10 #include "base/sync_socket.h" | 10 #include "base/sync_socket.h" |
| 11 #include "base/threading/simple_thread.h" | 11 #include "base/threading/simple_thread.h" |
| 12 #include "media/base/audio_bus.h" | 12 #include "media/base/audio_bus.h" |
| 13 #include "ppapi/c/ppb_audio.h" | 13 #include "ppapi/c/ppb_audio.h" |
| 14 #include "ppapi/c/ppb_audio_config.h" | |
| 14 #include "ppapi/shared_impl/resource.h" | 15 #include "ppapi/shared_impl/resource.h" |
| 15 #include "ppapi/thunk/ppb_audio_api.h" | 16 #include "ppapi/thunk/ppb_audio_api.h" |
| 16 | 17 |
| 17 #if defined(OS_NACL) | 18 #if defined(OS_NACL) |
| 18 #include "native_client/src/untrusted/irt/irt_ppapi.h" | 19 #include "native_client/src/untrusted/irt/irt_ppapi.h" |
| 19 #endif | 20 #endif |
| 20 | 21 |
| 21 namespace ppapi { | 22 namespace ppapi { |
| 22 | 23 |
| 24 class PPAPI_SHARED_EXPORT AudioCallback { | |
|
dmichael (off chromium)
2013/08/06 19:43:25
We used the suffix "Combined" in another place whe
yzshen1
2013/08/07 20:51:06
Done.
| |
| 25 public: | |
| 26 AudioCallback(); | |
| 27 AudioCallback(PPB_Audio_Callback_1_0 callback_1_0); | |
| 28 AudioCallback(PPB_Audio_Callback callback); | |
|
dmichael (off chromium)
2013/08/06 19:43:25
nit: explicit for both of these
yzshen1
2013/08/07 20:51:06
Done.
| |
| 29 | |
| 30 ~AudioCallback(); | |
| 31 | |
| 32 bool IsValid() const; | |
| 33 | |
| 34 void Run(void* sample_buffer, | |
| 35 uint32_t buffer_size_in_bytes, | |
| 36 PP_TimeDelta latency, | |
| 37 void* user_data) const; | |
| 38 | |
| 39 private: | |
| 40 PPB_Audio_Callback_1_0 callback_1_0_; | |
| 41 PPB_Audio_Callback callback_; | |
| 42 }; | |
| 43 | |
| 23 // Implements the logic to map shared memory and run the audio thread signaled | 44 // Implements the logic to map shared memory and run the audio thread signaled |
| 24 // from the sync socket. Both the proxy and the renderer implementation use | 45 // from the sync socket. Both the proxy and the renderer implementation use |
| 25 // this code. | 46 // this code. |
| 26 class PPAPI_SHARED_EXPORT PPB_Audio_Shared | 47 class PPAPI_SHARED_EXPORT PPB_Audio_Shared |
| 27 : public thunk::PPB_Audio_API, | 48 : public thunk::PPB_Audio_API, |
| 28 public base::DelegateSimpleThread::Delegate { | 49 public base::DelegateSimpleThread::Delegate { |
| 29 public: | 50 public: |
| 30 PPB_Audio_Shared(); | 51 PPB_Audio_Shared(); |
| 31 virtual ~PPB_Audio_Shared(); | 52 virtual ~PPB_Audio_Shared(); |
| 32 | 53 |
| 33 bool playing() const { return playing_; } | 54 bool playing() const { return playing_; } |
| 34 | 55 |
| 35 // Sets the callback information that the background thread will use. This | 56 // Sets the callback information that the background thread will use. This |
| 36 // is optional. Without a callback, the thread will not be run. This | 57 // is optional. Without a callback, the thread will not be run. This |
| 37 // non-callback mode is used in the renderer with the proxy, since the proxy | 58 // non-callback mode is used in the renderer with the proxy, since the proxy |
| 38 // handles the callback entirely within the plugin process. | 59 // handles the callback entirely within the plugin process. |
| 39 void SetCallback(PPB_Audio_Callback callback, void* user_data); | 60 void SetCallback(const AudioCallback& callback, void* user_data); |
| 40 | 61 |
| 41 // Configures the current state to be playing or not. The caller is | 62 // Configures the current state to be playing or not. The caller is |
| 42 // responsible for ensuring the new state is the opposite of the current one. | 63 // responsible for ensuring the new state is the opposite of the current one. |
| 43 // | 64 // |
| 44 // This is the implementation for PPB_Audio.Start/StopPlayback, except that | 65 // This is the implementation for PPB_Audio.Start/StopPlayback, except that |
| 45 // it does not actually notify the audio system to stop playback, it just | 66 // it does not actually notify the audio system to stop playback, it just |
| 46 // configures our object to stop generating callbacks. The actual stop | 67 // configures our object to stop generating callbacks. The actual stop |
| 47 // playback request will be done in the derived classes and will be different | 68 // playback request will be done in the derived classes and will be different |
| 48 // from the proxy and the renderer. | 69 // from the proxy and the renderer. |
| 49 void SetStartPlaybackState(); | 70 void SetStartPlaybackState(); |
| 50 void SetStopPlaybackState(); | 71 void SetStopPlaybackState(); |
| 51 | 72 |
| 52 // Sets the shared memory and socket handles. This will automatically start | 73 // Sets the shared memory and socket handles. This will automatically start |
| 53 // playback if we're currently set to play. | 74 // playback if we're currently set to play. |
| 54 void SetStreamInfo(PP_Instance instance, | 75 void SetStreamInfo(PP_Instance instance, |
| 55 base::SharedMemoryHandle shared_memory_handle, | 76 base::SharedMemoryHandle shared_memory_handle, |
| 56 size_t shared_memory_size, | 77 size_t shared_memory_size, |
| 57 base::SyncSocket::Handle socket_handle, | 78 base::SyncSocket::Handle socket_handle, |
| 79 PP_AudioSampleRate sample_rate, | |
| 58 int sample_frame_count); | 80 int sample_frame_count); |
| 59 | 81 |
| 60 #if defined(OS_NACL) | 82 #if defined(OS_NACL) |
| 61 // NaCl has a special API for IRT code to create threads that can call back | 83 // NaCl has a special API for IRT code to create threads that can call back |
| 62 // into user code. | 84 // into user code. |
| 63 static void SetThreadFunctions(const struct PP_ThreadFunctions* functions); | 85 static void SetThreadFunctions(const struct PP_ThreadFunctions* functions); |
| 64 #endif | 86 #endif |
| 65 | 87 |
| 66 private: | 88 private: |
| 67 // Starts execution of the audio thread. | 89 // Starts execution of the audio thread. |
| (...skipping 24 matching lines...) Expand all Loading... | |
| 92 // When the callback is set, this thread is spawned for calling it. | 114 // When the callback is set, this thread is spawned for calling it. |
| 93 scoped_ptr<base::DelegateSimpleThread> audio_thread_; | 115 scoped_ptr<base::DelegateSimpleThread> audio_thread_; |
| 94 #else | 116 #else |
| 95 uintptr_t thread_id_; | 117 uintptr_t thread_id_; |
| 96 bool thread_active_; | 118 bool thread_active_; |
| 97 | 119 |
| 98 static void CallRun(void* self); | 120 static void CallRun(void* self); |
| 99 #endif | 121 #endif |
| 100 | 122 |
| 101 // Callback to call when audio is ready to accept new samples. | 123 // Callback to call when audio is ready to accept new samples. |
| 102 PPB_Audio_Callback callback_; | 124 AudioCallback callback_; |
| 103 | 125 |
| 104 // User data pointer passed verbatim to the callback function. | 126 // User data pointer passed verbatim to the callback function. |
| 105 void* user_data_; | 127 void* user_data_; |
| 106 | 128 |
| 107 // AudioBus for shuttling data across the shared memory. | 129 // AudioBus for shuttling data across the shared memory. |
| 108 scoped_ptr<media::AudioBus> audio_bus_; | 130 scoped_ptr<media::AudioBus> audio_bus_; |
| 109 | 131 |
| 110 // Internal buffer for client's integer audio data. | 132 // Internal buffer for client's integer audio data. |
| 111 int client_buffer_size_bytes_; | 133 int client_buffer_size_bytes_; |
| 112 scoped_ptr<uint8_t[]> client_buffer_; | 134 scoped_ptr<uint8_t[]> client_buffer_; |
| 113 | 135 |
| 136 // The size (in bytes) of one second of audio data. Used to calculate latency. | |
| 137 size_t bytes_per_second_; | |
| 138 | |
| 114 DISALLOW_COPY_AND_ASSIGN(PPB_Audio_Shared); | 139 DISALLOW_COPY_AND_ASSIGN(PPB_Audio_Shared); |
| 115 }; | 140 }; |
| 116 | 141 |
| 117 } // namespace ppapi | 142 } // namespace ppapi |
| 118 | 143 |
| 119 #endif // PPAPI_SHARED_IMPL_PPB_AUDIO_SHARED_H_ | 144 #endif // PPAPI_SHARED_IMPL_PPB_AUDIO_SHARED_H_ |
| OLD | NEW |