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
15namespace ppapi {
16namespace thunk {
17
18namespace {
19
20PP_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
28PP_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
34int32_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
46int32_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
57int32_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
67int32_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
84int32_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
101PP_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
109PP_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
117PP_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
125void 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
133const 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
144const 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
156const 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
170const PPB_AudioInput_Dev_0_2* GetPPB_AudioInput_Dev_0_2_Thunk() {
171  return &g_ppb_audioinput_dev_thunk_0_2;
172}
173
174const PPB_AudioInput_Dev_0_3* GetPPB_AudioInput_Dev_0_3_Thunk() {
175  return &g_ppb_audioinput_dev_thunk_0_3;
176}
177
178const 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