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 3 // found in the LICENSE file. 4 5 #include "ppapi/cpp/audio.h" 6 7 #include "ppapi/cpp/instance_handle.h" 8 #include "ppapi/cpp/module_impl.h" 9 10 namespace pp { 11 12 namespace { 13 14 template <> const char* interface_name<PPB_Audio_1_0>() { 15 return PPB_AUDIO_INTERFACE_1_0; 16 } 17 18 template <> const char* interface_name<PPB_Audio_1_1>() { 19 return PPB_AUDIO_INTERFACE_1_1; 20 } 21 22 } // namespace 23 24 Audio::Audio(const InstanceHandle& instance, 25 const AudioConfig& config, 26 PPB_Audio_Callback callback, 27 void* user_data) 28 : config_(config), 29 use_1_0_interface_(false) { 30 if (has_interface<PPB_Audio_1_1>()) { 31 PassRefFromConstructor(get_interface<PPB_Audio_1_1>()->Create( 32 instance.pp_instance(), config.pp_resource(), callback, user_data)); 33 } 34 } 35 36 Audio::Audio(const InstanceHandle& instance, 37 const AudioConfig& config, 38 PPB_Audio_Callback_1_0 callback, 39 void* user_data) 40 : config_(config), 41 use_1_0_interface_(true) { 42 if (has_interface<PPB_Audio_1_0>()) { 43 PassRefFromConstructor(get_interface<PPB_Audio_1_0>()->Create( 44 instance.pp_instance(), config.pp_resource(), callback, user_data)); 45 } 46 } 47 48 bool Audio::StartPlayback() { 49 if (has_interface<PPB_Audio_1_1>() && !use_1_0_interface_) { 50 return PP_ToBool(get_interface<PPB_Audio_1_1>()->StartPlayback( 51 pp_resource())); 52 } 53 if (has_interface<PPB_Audio_1_0>()) { 54 return PP_ToBool(get_interface<PPB_Audio_1_0>()->StartPlayback( 55 pp_resource())); 56 } 57 return false; 58 } 59 60 bool Audio::StopPlayback() { 61 if (has_interface<PPB_Audio_1_1>() && !use_1_0_interface_) { 62 return PP_ToBool(get_interface<PPB_Audio_1_1>()->StopPlayback( 63 pp_resource())); 64 } 65 if (has_interface<PPB_Audio_1_0>()) { 66 return PP_ToBool(get_interface<PPB_Audio_1_0>()->StopPlayback( 67 pp_resource())); 68 } 69 return false; 70 } 71 72 } // namespace pp 73