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/dev/audio_input_dev.h" 6 7#include "ppapi/c/pp_bool.h" 8#include "ppapi/c/pp_errors.h" 9#include "ppapi/cpp/instance_handle.h" 10#include "ppapi/cpp/module_impl.h" 11 12namespace pp { 13 14namespace { 15 16template <> const char* interface_name<PPB_AudioInput_Dev_0_3>() { 17 return PPB_AUDIO_INPUT_DEV_INTERFACE_0_3; 18} 19 20template <> const char* interface_name<PPB_AudioInput_Dev_0_4>() { 21 return PPB_AUDIO_INPUT_DEV_INTERFACE_0_4; 22} 23 24} // namespace 25 26AudioInput_Dev::AudioInput_Dev() { 27} 28 29AudioInput_Dev::AudioInput_Dev(const InstanceHandle& instance) { 30 if (has_interface<PPB_AudioInput_Dev_0_4>()) { 31 PassRefFromConstructor(get_interface<PPB_AudioInput_Dev_0_4>()->Create( 32 instance.pp_instance())); 33 } else if (has_interface<PPB_AudioInput_Dev_0_3>()) { 34 PassRefFromConstructor(get_interface<PPB_AudioInput_Dev_0_3>()->Create( 35 instance.pp_instance())); 36 } 37} 38 39AudioInput_Dev::~AudioInput_Dev() { 40} 41 42// static 43bool AudioInput_Dev::IsAvailable() { 44 return has_interface<PPB_AudioInput_Dev_0_4>() || 45 has_interface<PPB_AudioInput_Dev_0_3>(); 46} 47 48int32_t AudioInput_Dev::EnumerateDevices( 49 const CompletionCallbackWithOutput<std::vector<DeviceRef_Dev> >& callback) { 50 if (has_interface<PPB_AudioInput_Dev_0_4>()) { 51 return get_interface<PPB_AudioInput_Dev_0_4>()->EnumerateDevices( 52 pp_resource(), callback.output(), callback.pp_completion_callback()); 53 } 54 if (has_interface<PPB_AudioInput_Dev_0_3>()) { 55 return get_interface<PPB_AudioInput_Dev_0_3>()->EnumerateDevices( 56 pp_resource(), callback.output(), callback.pp_completion_callback()); 57 } 58 59 return callback.MayForce(PP_ERROR_NOINTERFACE); 60} 61 62int32_t AudioInput_Dev::MonitorDeviceChange( 63 PP_MonitorDeviceChangeCallback callback, 64 void* user_data) { 65 if (has_interface<PPB_AudioInput_Dev_0_4>()) { 66 return get_interface<PPB_AudioInput_Dev_0_4>()->MonitorDeviceChange( 67 pp_resource(), callback, user_data); 68 } 69 if (has_interface<PPB_AudioInput_Dev_0_3>()) { 70 return get_interface<PPB_AudioInput_Dev_0_3>()->MonitorDeviceChange( 71 pp_resource(), callback, user_data); 72 } 73 74 return PP_ERROR_NOINTERFACE; 75} 76 77int32_t AudioInput_Dev::Open(const DeviceRef_Dev& device_ref, 78 const AudioConfig& config, 79 PPB_AudioInput_Callback audio_input_callback, 80 void* user_data, 81 const CompletionCallback& callback) { 82 if (has_interface<PPB_AudioInput_Dev_0_4>()) { 83 return get_interface<PPB_AudioInput_Dev_0_4>()->Open( 84 pp_resource(), device_ref.pp_resource(), config.pp_resource(), 85 audio_input_callback, user_data, callback.pp_completion_callback()); 86 } 87 88 return callback.MayForce(PP_ERROR_NOINTERFACE); 89} 90 91int32_t AudioInput_Dev::Open( 92 const DeviceRef_Dev& device_ref, 93 const AudioConfig& config, 94 PPB_AudioInput_Callback_0_3 audio_input_callback_0_3, 95 void* user_data, 96 const CompletionCallback& callback) { 97 if (has_interface<PPB_AudioInput_Dev_0_3>()) { 98 return get_interface<PPB_AudioInput_Dev_0_3>()->Open( 99 pp_resource(), device_ref.pp_resource(), config.pp_resource(), 100 audio_input_callback_0_3, user_data, callback.pp_completion_callback()); 101 } 102 103 return callback.MayForce(PP_ERROR_NOINTERFACE); 104} 105 106bool AudioInput_Dev::StartCapture() { 107 if (has_interface<PPB_AudioInput_Dev_0_4>()) { 108 return PP_ToBool(get_interface<PPB_AudioInput_Dev_0_4>()->StartCapture( 109 pp_resource())); 110 } 111 if (has_interface<PPB_AudioInput_Dev_0_3>()) { 112 return PP_ToBool(get_interface<PPB_AudioInput_Dev_0_3>()->StartCapture( 113 pp_resource())); 114 } 115 116 return false; 117} 118 119bool AudioInput_Dev::StopCapture() { 120 if (has_interface<PPB_AudioInput_Dev_0_4>()) { 121 return PP_ToBool(get_interface<PPB_AudioInput_Dev_0_4>()->StopCapture( 122 pp_resource())); 123 } 124 if (has_interface<PPB_AudioInput_Dev_0_3>()) { 125 return PP_ToBool(get_interface<PPB_AudioInput_Dev_0_3>()->StopCapture( 126 pp_resource())); 127 } 128 129 return false; 130} 131 132void AudioInput_Dev::Close() { 133 if (has_interface<PPB_AudioInput_Dev_0_4>()) { 134 get_interface<PPB_AudioInput_Dev_0_4>()->Close(pp_resource()); 135 } else if (has_interface<PPB_AudioInput_Dev_0_3>()) { 136 get_interface<PPB_AudioInput_Dev_0_3>()->Close(pp_resource()); 137 } 138} 139 140} // namespace pp 141