summaryrefslogtreecommitdiffstats
path: root/ppapi/cpp/dev/audio_input_dev.cc
diff options
context:
space:
mode:
Diffstat (limited to 'ppapi/cpp/dev/audio_input_dev.cc')
-rw-r--r--ppapi/cpp/dev/audio_input_dev.cc73
1 files changed, 57 insertions, 16 deletions
diff --git a/ppapi/cpp/dev/audio_input_dev.cc b/ppapi/cpp/dev/audio_input_dev.cc
index 4c161a1..cc0f08b 100644
--- a/ppapi/cpp/dev/audio_input_dev.cc
+++ b/ppapi/cpp/dev/audio_input_dev.cc
@@ -18,13 +18,20 @@ template <> const char* interface_name<PPB_AudioInput_Dev_0_2>() {
return PPB_AUDIO_INPUT_DEV_INTERFACE_0_2;
}
+template <> const char* interface_name<PPB_AudioInput_Dev_0_3>() {
+ return PPB_AUDIO_INPUT_DEV_INTERFACE_0_3;
+}
+
} // namespace
AudioInput_Dev::AudioInput_Dev() {
}
AudioInput_Dev::AudioInput_Dev(const InstanceHandle& instance) {
- if (has_interface<PPB_AudioInput_Dev_0_2>()) {
+ if (has_interface<PPB_AudioInput_Dev_0_3>()) {
+ PassRefFromConstructor(get_interface<PPB_AudioInput_Dev_0_3>()->Create(
+ instance.pp_instance()));
+ } else if (has_interface<PPB_AudioInput_Dev_0_2>()) {
PassRefFromConstructor(get_interface<PPB_AudioInput_Dev_0_2>()->Create(
instance.pp_instance()));
}
@@ -35,24 +42,42 @@ AudioInput_Dev::~AudioInput_Dev() {
// static
bool AudioInput_Dev::IsAvailable() {
- return has_interface<PPB_AudioInput_Dev_0_2>();
+ return has_interface<PPB_AudioInput_Dev_0_3>() ||
+ has_interface<PPB_AudioInput_Dev_0_2>();
}
int32_t AudioInput_Dev::EnumerateDevices(
const CompletionCallbackWithOutput<std::vector<DeviceRef_Dev> >& callback) {
- if (!has_interface<PPB_AudioInput_Dev_0_2>())
- return callback.MayForce(PP_ERROR_NOINTERFACE);
- if (!callback.pp_completion_callback().func)
- return callback.MayForce(PP_ERROR_BLOCKS_MAIN_THREAD);
-
- // ArrayOutputCallbackConverter is responsible to delete it.
- ResourceArray_Dev::ArrayOutputCallbackData* data =
- new ResourceArray_Dev::ArrayOutputCallbackData(
- callback.output(), callback.pp_completion_callback());
- return get_interface<PPB_AudioInput_Dev_0_2>()->EnumerateDevices(
- pp_resource(), &data->resource_array_output,
- PP_MakeCompletionCallback(
- &ResourceArray_Dev::ArrayOutputCallbackConverter, data));
+ if (has_interface<PPB_AudioInput_Dev_0_3>()) {
+ return get_interface<PPB_AudioInput_Dev_0_3>()->EnumerateDevices(
+ pp_resource(), callback.output(), callback.pp_completion_callback());
+ }
+ if (has_interface<PPB_AudioInput_Dev_0_2>()) {
+ if (!callback.pp_completion_callback().func)
+ return callback.MayForce(PP_ERROR_BLOCKS_MAIN_THREAD);
+
+ // ArrayOutputCallbackConverter is responsible to delete it.
+ ResourceArray_Dev::ArrayOutputCallbackData* data =
+ new ResourceArray_Dev::ArrayOutputCallbackData(
+ callback.output(), callback.pp_completion_callback());
+ return get_interface<PPB_AudioInput_Dev_0_2>()->EnumerateDevices(
+ pp_resource(), &data->resource_array_output,
+ PP_MakeCompletionCallback(
+ &ResourceArray_Dev::ArrayOutputCallbackConverter, data));
+ }
+
+ return callback.MayForce(PP_ERROR_NOINTERFACE);
+}
+
+int32_t AudioInput_Dev::MonitorDeviceChange(
+ PP_MonitorDeviceChangeCallback callback,
+ void* user_data) {
+ if (has_interface<PPB_AudioInput_Dev_0_3>()) {
+ return get_interface<PPB_AudioInput_Dev_0_3>()->MonitorDeviceChange(
+ pp_resource(), callback, user_data);
+ }
+
+ return PP_ERROR_NOINTERFACE;
}
int32_t AudioInput_Dev::Open(const DeviceRef_Dev& device_ref,
@@ -60,6 +85,11 @@ int32_t AudioInput_Dev::Open(const DeviceRef_Dev& device_ref,
PPB_AudioInput_Callback audio_input_callback,
void* user_data,
const CompletionCallback& callback) {
+ if (has_interface<PPB_AudioInput_Dev_0_3>()) {
+ return get_interface<PPB_AudioInput_Dev_0_3>()->Open(
+ pp_resource(), device_ref.pp_resource(), config.pp_resource(),
+ audio_input_callback, user_data, callback.pp_completion_callback());
+ }
if (has_interface<PPB_AudioInput_Dev_0_2>()) {
return get_interface<PPB_AudioInput_Dev_0_2>()->Open(
pp_resource(), device_ref.pp_resource(), config.pp_resource(),
@@ -70,6 +100,10 @@ int32_t AudioInput_Dev::Open(const DeviceRef_Dev& device_ref,
}
bool AudioInput_Dev::StartCapture() {
+ if (has_interface<PPB_AudioInput_Dev_0_3>()) {
+ return PP_ToBool(get_interface<PPB_AudioInput_Dev_0_3>()->StartCapture(
+ pp_resource()));
+ }
if (has_interface<PPB_AudioInput_Dev_0_2>()) {
return PP_ToBool(get_interface<PPB_AudioInput_Dev_0_2>()->StartCapture(
pp_resource()));
@@ -79,6 +113,10 @@ bool AudioInput_Dev::StartCapture() {
}
bool AudioInput_Dev::StopCapture() {
+ if (has_interface<PPB_AudioInput_Dev_0_3>()) {
+ return PP_ToBool(get_interface<PPB_AudioInput_Dev_0_3>()->StopCapture(
+ pp_resource()));
+ }
if (has_interface<PPB_AudioInput_Dev_0_2>()) {
return PP_ToBool(get_interface<PPB_AudioInput_Dev_0_2>()->StopCapture(
pp_resource()));
@@ -88,8 +126,11 @@ bool AudioInput_Dev::StopCapture() {
}
void AudioInput_Dev::Close() {
- if (has_interface<PPB_AudioInput_Dev_0_2>())
+ if (has_interface<PPB_AudioInput_Dev_0_3>()) {
+ get_interface<PPB_AudioInput_Dev_0_3>()->Close(pp_resource());
+ } else if (has_interface<PPB_AudioInput_Dev_0_2>()) {
get_interface<PPB_AudioInput_Dev_0_2>()->Close(pp_resource());
+ }
}
} // namespace pp