OLD | NEW |
1 // Copyright (c) 2010 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2010 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 #include "webkit/plugins/ppapi/ppb_audio_impl.h" | 5 #include "webkit/plugins/ppapi/ppb_audio_impl.h" |
6 | 6 |
7 #include "base/logging.h" | 7 #include "base/logging.h" |
8 #include "ppapi/c/pp_completion_callback.h" | 8 #include "ppapi/c/pp_completion_callback.h" |
9 #include "ppapi/c/ppb_audio.h" | 9 #include "ppapi/c/ppb_audio.h" |
10 #include "ppapi/c/ppb_audio_config.h" | 10 #include "ppapi/c/ppb_audio_config.h" |
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
42 | 42 |
43 scoped_refptr<PPB_AudioConfig_Impl> config( | 43 scoped_refptr<PPB_AudioConfig_Impl> config( |
44 new PPB_AudioConfig_Impl(instance, sample_rate, sample_frame_count)); | 44 new PPB_AudioConfig_Impl(instance, sample_rate, sample_frame_count)); |
45 return config->GetReference(); | 45 return config->GetReference(); |
46 } | 46 } |
47 | 47 |
48 uint32_t RecommendSampleFrameCount(PP_AudioSampleRate sample_rate, | 48 uint32_t RecommendSampleFrameCount(PP_AudioSampleRate sample_rate, |
49 uint32_t requested_sample_frame_count) { | 49 uint32_t requested_sample_frame_count) { |
50 // TODO(brettw) Currently we don't actually query to get a value from the | 50 // TODO(brettw) Currently we don't actually query to get a value from the |
51 // hardware, so we always return the input for in-range values. | 51 // hardware, so we always return the input for in-range values. |
| 52 // |
| 53 // Danger: this code is duplicated in the audio config proxy. |
52 if (requested_sample_frame_count < PP_AUDIOMINSAMPLEFRAMECOUNT) | 54 if (requested_sample_frame_count < PP_AUDIOMINSAMPLEFRAMECOUNT) |
53 return PP_AUDIOMINSAMPLEFRAMECOUNT; | 55 return PP_AUDIOMINSAMPLEFRAMECOUNT; |
54 if (requested_sample_frame_count > PP_AUDIOMAXSAMPLEFRAMECOUNT) | 56 if (requested_sample_frame_count > PP_AUDIOMAXSAMPLEFRAMECOUNT) |
55 return PP_AUDIOMAXSAMPLEFRAMECOUNT; | 57 return PP_AUDIOMAXSAMPLEFRAMECOUNT; |
56 return requested_sample_frame_count; | 58 return requested_sample_frame_count; |
57 } | 59 } |
58 | 60 |
59 PP_Bool IsAudioConfig(PP_Resource resource) { | 61 PP_Bool IsAudioConfig(PP_Resource resource) { |
60 scoped_refptr<PPB_AudioConfig_Impl> config = | 62 scoped_refptr<PPB_AudioConfig_Impl> config = |
61 Resource::GetAs<PPB_AudioConfig_Impl>(resource); | 63 Resource::GetAs<PPB_AudioConfig_Impl>(resource); |
(...skipping 150 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
212 | 214 |
213 PPB_Audio_Impl::PPB_Audio_Impl(PluginInstance* instance) | 215 PPB_Audio_Impl::PPB_Audio_Impl(PluginInstance* instance) |
214 : Resource(instance), | 216 : Resource(instance), |
215 audio_(NULL), | 217 audio_(NULL), |
216 create_callback_pending_(false) { | 218 create_callback_pending_(false) { |
217 create_callback_ = PP_MakeCompletionCallback(NULL, NULL); | 219 create_callback_ = PP_MakeCompletionCallback(NULL, NULL); |
218 } | 220 } |
219 | 221 |
220 PPB_Audio_Impl::~PPB_Audio_Impl() { | 222 PPB_Audio_Impl::~PPB_Audio_Impl() { |
221 // Calling ShutDown() makes sure StreamCreated cannot be called anymore. | 223 // Calling ShutDown() makes sure StreamCreated cannot be called anymore. |
222 audio_->ShutDown(); | 224 if (audio_) { |
223 audio_ = NULL; | 225 audio_->ShutDown(); |
| 226 audio_ = NULL; |
| 227 } |
224 | 228 |
225 // If the completion callback hasn't fired yet, do so here | 229 // If the completion callback hasn't fired yet, do so here |
226 // with an error condition. | 230 // with an error condition. |
227 if (create_callback_pending_) { | 231 if (create_callback_pending_) { |
228 PP_RunCompletionCallback(&create_callback_, PP_ERROR_ABORTED); | 232 PP_RunCompletionCallback(&create_callback_, PP_ERROR_ABORTED); |
229 create_callback_pending_ = false; | 233 create_callback_pending_ = false; |
230 } | 234 } |
231 } | 235 } |
232 | 236 |
233 const PPB_Audio* PPB_Audio_Impl::GetInterface() { | 237 const PPB_Audio* PPB_Audio_Impl::GetInterface() { |
(...skipping 22 matching lines...) Expand all Loading... |
256 config_->sample_frame_count(), | 260 config_->sample_frame_count(), |
257 this); | 261 this); |
258 return audio_ != NULL; | 262 return audio_ != NULL; |
259 } | 263 } |
260 | 264 |
261 PP_Resource PPB_Audio_Impl::GetCurrentConfig() { | 265 PP_Resource PPB_Audio_Impl::GetCurrentConfig() { |
262 return config_->GetReference(); | 266 return config_->GetReference(); |
263 } | 267 } |
264 | 268 |
265 bool PPB_Audio_Impl::StartPlayback() { | 269 bool PPB_Audio_Impl::StartPlayback() { |
| 270 if (!audio_) |
| 271 return false; |
266 if (playing()) | 272 if (playing()) |
267 return true; | 273 return true; |
268 SetStartPlaybackState(); | 274 SetStartPlaybackState(); |
269 return audio_->StartPlayback(); | 275 return audio_->StartPlayback(); |
270 } | 276 } |
271 | 277 |
272 bool PPB_Audio_Impl::StopPlayback() { | 278 bool PPB_Audio_Impl::StopPlayback() { |
| 279 if (!audio_) |
| 280 return false; |
273 if (!playing()) | 281 if (!playing()) |
274 return true; | 282 return true; |
275 if (!audio_->StopPlayback()) | 283 if (!audio_->StopPlayback()) |
276 return false; | 284 return false; |
277 SetStopPlaybackState(); | 285 SetStopPlaybackState(); |
278 return true; | 286 return true; |
279 } | 287 } |
280 | 288 |
281 int32_t PPB_Audio_Impl::Open(PluginDelegate* plugin_delegate, | 289 int32_t PPB_Audio_Impl::Open(PluginDelegate* plugin_delegate, |
282 PP_Resource config_id, | 290 PP_Resource config_id, |
(...skipping 72 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
355 // the I/O thread and back, but this extra complexity doesn't seem worth it | 363 // the I/O thread and back, but this extra complexity doesn't seem worth it |
356 // just to clean up these handles faster. | 364 // just to clean up these handles faster. |
357 } else { | 365 } else { |
358 SetStreamInfo(shared_memory_handle, shared_memory_size, socket_handle); | 366 SetStreamInfo(shared_memory_handle, shared_memory_size, socket_handle); |
359 } | 367 } |
360 } | 368 } |
361 | 369 |
362 } // namespace ppapi | 370 } // namespace ppapi |
363 } // namespace webkit | 371 } // namespace webkit |
364 | 372 |
OLD | NEW |