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/c/dev/ppb_audio_input_dev.h" 6 #include "ppapi/c/pp_completion_callback.h" 7 #include "ppapi/c/pp_errors.h" 8 #include "ppapi/shared_impl/tracked_callback.h" 9 #include "ppapi/thunk/enter.h" 10 #include "ppapi/thunk/ppb_audio_input_api.h" 11 #include "ppapi/thunk/ppb_instance_api.h" 12 #include "ppapi/thunk/resource_creation_api.h" 13 #include "ppapi/thunk/thunk.h" 14 15 namespace ppapi { 16 namespace thunk { 17 18 namespace { 19 20 PP_Resource Create(PP_Instance instance) { 21 VLOG(4) << "PPB_AudioInput_Dev::Create()"; 22 EnterResourceCreation enter(instance); 23 if (enter.failed()) 24 return 0; 25 return enter.functions()->CreateAudioInput(instance); 26 } 27 28 PP_Bool IsAudioInput(PP_Resource resource) { 29 VLOG(4) << "PPB_AudioInput_Dev::IsAudioInput()"; 30 EnterResource<PPB_AudioInput_API> enter(resource, false); 31 return PP_FromBool(enter.succeeded()); 32 } 33 34 int32_t EnumerateDevices_0_2(PP_Resource audio_input, 35 PP_Resource* devices, 36 struct PP_CompletionCallback callback) { 37 VLOG(4) << "PPB_AudioInput_Dev::EnumerateDevices()"; 38 EnterResource<PPB_AudioInput_API> enter(audio_input, callback, true); 39 if (enter.failed()) 40 return enter.retval(); 41 return enter.SetResult(enter.object()->EnumerateDevices0_2( 42 devices, 43 enter.callback())); 44 } 45 46 int32_t EnumerateDevices(PP_Resource audio_input, 47 struct PP_ArrayOutput output, 48 struct PP_CompletionCallback callback) { 49 VLOG(4) << "PPB_AudioInput_Dev::EnumerateDevices()"; 50 EnterResource<PPB_AudioInput_API> enter(audio_input, callback, true); 51 if (enter.failed()) 52 return enter.retval(); 53 return enter.SetResult(enter.object()->EnumerateDevices(output, 54 enter.callback())); 55 } 56 57 int32_t MonitorDeviceChange(PP_Resource audio_input, 58 PP_MonitorDeviceChangeCallback callback, 59 void* user_data) { 60 VLOG(4) << "PPB_AudioInput_Dev::MonitorDeviceChange()"; 61 EnterResource<PPB_AudioInput_API> enter(audio_input, true); 62 if (enter.failed()) 63 return enter.retval(); 64 return enter.object()->MonitorDeviceChange(callback, user_data); 65 } 66 67 int32_t Open_0_2(PP_Resource audio_input, 68 PP_Resource device_ref, 69 PP_Resource config, 70 PPB_AudioInput_Callback_0_2 audio_input_callback, 71 void* user_data, 72 struct PP_CompletionCallback callback) { 73 VLOG(4) << "PPB_AudioInput_Dev::Open()"; 74 EnterResource<PPB_AudioInput_API> enter(audio_input, callback, true); 75 if (enter.failed()) 76 return enter.retval(); 77 return enter.SetResult(enter.object()->Open0_2(device_ref, 78 config, 79 audio_input_callback, 80 user_data, 81 enter.callback())); 82 } 83 84 int32_t Open(PP_Resource audio_input, 85 PP_Resource device_ref, 86 PP_Resource config, 87 PPB_AudioInput_Callback audio_input_callback, 88 void* user_data, 89 struct PP_CompletionCallback callback) { 90 VLOG(4) << "PPB_AudioInput_Dev::Open()"; 91 EnterResource<PPB_AudioInput_API> enter(audio_input, callback, true); 92 if (enter.failed()) 93 return enter.retval(); 94 return enter.SetResult(enter.object()->Open(device_ref, 95 config, 96 audio_input_callback, 97 user_data, 98 enter.callback())); 99 } 100 101 PP_Resource GetCurrentConfig(PP_Resource audio_input) { 102 VLOG(4) << "PPB_AudioInput_Dev::GetCurrentConfig()"; 103 EnterResource<PPB_AudioInput_API> enter(audio_input, true); 104 if (enter.failed()) 105 return 0; 106 return enter.object()->GetCurrentConfig(); 107 } 108 109 PP_Bool StartCapture(PP_Resource audio_input) { 110 VLOG(4) << "PPB_AudioInput_Dev::StartCapture()"; 111 EnterResource<PPB_AudioInput_API> enter(audio_input, true); 112 if (enter.failed()) 113 return PP_FALSE; 114 return enter.object()->StartCapture(); 115 } 116 117 PP_Bool StopCapture(PP_Resource audio_input) { 118 VLOG(4) << "PPB_AudioInput_Dev::StopCapture()"; 119 EnterResource<PPB_AudioInput_API> enter(audio_input, true); 120 if (enter.failed()) 121 return PP_FALSE; 122 return enter.object()->StopCapture(); 123 } 124 125 void Close(PP_Resource audio_input) { 126 VLOG(4) << "PPB_AudioInput_Dev::Close()"; 127 EnterResource<PPB_AudioInput_API> enter(audio_input, true); 128 if (enter.failed()) 129 return; 130 enter.object()->Close(); 131 } 132 133 const PPB_AudioInput_Dev_0_2 g_ppb_audioinput_dev_thunk_0_2 = { 134 &Create, 135 &IsAudioInput, 136 &EnumerateDevices_0_2, 137 &Open_0_2, 138 &GetCurrentConfig, 139 &StartCapture, 140 &StopCapture, 141 &Close 142 }; 143 144 const PPB_AudioInput_Dev_0_3 g_ppb_audioinput_dev_thunk_0_3 = { 145 &Create, 146 &IsAudioInput, 147 &EnumerateDevices, 148 &MonitorDeviceChange, 149 &Open_0_2, 150 &GetCurrentConfig, 151 &StartCapture, 152 &StopCapture, 153 &Close 154 }; 155 156 const PPB_AudioInput_Dev_0_4 g_ppb_audioinput_dev_thunk_0_4 = { 157 &Create, 158 &IsAudioInput, 159 &EnumerateDevices, 160 &MonitorDeviceChange, 161 &Open, 162 &GetCurrentConfig, 163 &StartCapture, 164 &StopCapture, 165 &Close 166 }; 167 168 } // namespace 169 170 const PPB_AudioInput_Dev_0_2* GetPPB_AudioInput_Dev_0_2_Thunk() { 171 return &g_ppb_audioinput_dev_thunk_0_2; 172 } 173 174 const PPB_AudioInput_Dev_0_3* GetPPB_AudioInput_Dev_0_3_Thunk() { 175 return &g_ppb_audioinput_dev_thunk_0_3; 176 } 177 178 const PPB_AudioInput_Dev_0_4* GetPPB_AudioInput_Dev_0_4_Thunk() { 179 return &g_ppb_audioinput_dev_thunk_0_4; 180 } 181 182 } // namespace thunk 183 } // namespace ppapi 184