12a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved. 22a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 32a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// found in the LICENSE file. 42a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 52a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "ppapi/c/dev/ppb_audio_input_dev.h" 62a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "ppapi/c/pp_completion_callback.h" 72a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "ppapi/c/pp_errors.h" 82a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "ppapi/shared_impl/tracked_callback.h" 92a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "ppapi/thunk/enter.h" 102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "ppapi/thunk/ppb_audio_input_api.h" 112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "ppapi/thunk/ppb_instance_api.h" 122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "ppapi/thunk/resource_creation_api.h" 132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "ppapi/thunk/thunk.h" 142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)namespace ppapi { 162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)namespace thunk { 172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)namespace { 192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)PP_Resource Create(PP_Instance instance) { 21c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) VLOG(4) << "PPB_AudioInput_Dev::Create()"; 222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EnterResourceCreation enter(instance); 232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (enter.failed()) 242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return 0; 252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return enter.functions()->CreateAudioInput(instance); 262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)PP_Bool IsAudioInput(PP_Resource resource) { 29c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) VLOG(4) << "PPB_AudioInput_Dev::IsAudioInput()"; 302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EnterResource<PPB_AudioInput_API> enter(resource, false); 312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return PP_FromBool(enter.succeeded()); 322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)int32_t EnumerateDevices(PP_Resource audio_input, 352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) struct PP_ArrayOutput output, 362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) struct PP_CompletionCallback callback) { 37c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) VLOG(4) << "PPB_AudioInput_Dev::EnumerateDevices()"; 382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EnterResource<PPB_AudioInput_API> enter(audio_input, callback, true); 392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (enter.failed()) 402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return enter.retval(); 412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return enter.SetResult(enter.object()->EnumerateDevices(output, 422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) enter.callback())); 432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)int32_t MonitorDeviceChange(PP_Resource audio_input, 462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) PP_MonitorDeviceChangeCallback callback, 472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void* user_data) { 48c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) VLOG(4) << "PPB_AudioInput_Dev::MonitorDeviceChange()"; 492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EnterResource<PPB_AudioInput_API> enter(audio_input, true); 502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (enter.failed()) 512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return enter.retval(); 522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return enter.object()->MonitorDeviceChange(callback, user_data); 532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 555d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)int32_t Open_0_3(PP_Resource audio_input, 56eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch PP_Resource device_ref, 57eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch PP_Resource config, 585d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) PPB_AudioInput_Callback_0_3 audio_input_callback, 59eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch void* user_data, 60eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch struct PP_CompletionCallback callback) { 61eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch VLOG(4) << "PPB_AudioInput_Dev::Open()"; 62eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch EnterResource<PPB_AudioInput_API> enter(audio_input, callback, true); 63eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch if (enter.failed()) 64eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch return enter.retval(); 655d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) return enter.SetResult(enter.object()->Open0_3(device_ref, 66eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch config, 67eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch audio_input_callback, 68eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch user_data, 69eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch enter.callback())); 70eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch} 71eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)int32_t Open(PP_Resource audio_input, 732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) PP_Resource device_ref, 742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) PP_Resource config, 752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) PPB_AudioInput_Callback audio_input_callback, 762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void* user_data, 772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) struct PP_CompletionCallback callback) { 78c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) VLOG(4) << "PPB_AudioInput_Dev::Open()"; 792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EnterResource<PPB_AudioInput_API> enter(audio_input, callback, true); 802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (enter.failed()) 812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return enter.retval(); 822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return enter.SetResult(enter.object()->Open(device_ref, 832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) config, 842a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) audio_input_callback, 852a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) user_data, 862a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) enter.callback())); 872a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 882a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 892a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)PP_Resource GetCurrentConfig(PP_Resource audio_input) { 90c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) VLOG(4) << "PPB_AudioInput_Dev::GetCurrentConfig()"; 912a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EnterResource<PPB_AudioInput_API> enter(audio_input, true); 922a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (enter.failed()) 932a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return 0; 942a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return enter.object()->GetCurrentConfig(); 952a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 962a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 972a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)PP_Bool StartCapture(PP_Resource audio_input) { 98c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) VLOG(4) << "PPB_AudioInput_Dev::StartCapture()"; 992a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EnterResource<PPB_AudioInput_API> enter(audio_input, true); 1002a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (enter.failed()) 1012a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return PP_FALSE; 1022a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return enter.object()->StartCapture(); 1032a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 1042a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1052a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)PP_Bool StopCapture(PP_Resource audio_input) { 106c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) VLOG(4) << "PPB_AudioInput_Dev::StopCapture()"; 1072a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EnterResource<PPB_AudioInput_API> enter(audio_input, true); 1082a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (enter.failed()) 1092a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return PP_FALSE; 1102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return enter.object()->StopCapture(); 1112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 1122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void Close(PP_Resource audio_input) { 114c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) VLOG(4) << "PPB_AudioInput_Dev::Close()"; 1152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EnterResource<PPB_AudioInput_API> enter(audio_input, true); 116c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) if (enter.failed()) 117c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) return; 118c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) enter.object()->Close(); 1192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 1202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)const PPB_AudioInput_Dev_0_3 g_ppb_audioinput_dev_thunk_0_3 = { 1222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) &Create, 1232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) &IsAudioInput, 1242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) &EnumerateDevices, 1252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) &MonitorDeviceChange, 1265d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) &Open_0_3, 127eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch &GetCurrentConfig, 128eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch &StartCapture, 129eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch &StopCapture, 130eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch &Close 131eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch}; 132eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 133eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdochconst PPB_AudioInput_Dev_0_4 g_ppb_audioinput_dev_thunk_0_4 = { 134eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch &Create, 135eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch &IsAudioInput, 136eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch &EnumerateDevices, 137eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch &MonitorDeviceChange, 1382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) &Open, 1392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) &GetCurrentConfig, 1402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) &StartCapture, 1412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) &StopCapture, 1422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) &Close 1432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}; 1442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} // namespace 1462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)const PPB_AudioInput_Dev_0_3* GetPPB_AudioInput_Dev_0_3_Thunk() { 1482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return &g_ppb_audioinput_dev_thunk_0_3; 1492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 1502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 151eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdochconst PPB_AudioInput_Dev_0_4* GetPPB_AudioInput_Dev_0_4_Thunk() { 152eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch return &g_ppb_audioinput_dev_thunk_0_4; 153eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch} 154eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 1552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} // namespace thunk 1562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} // namespace ppapi 157