Index: ppapi/cpp/dev/audio_input_dev.cc |
diff --git a/ppapi/cpp/dev/audio_input_dev.cc b/ppapi/cpp/dev/audio_input_dev.cc |
index 4c161a15552044bd9857ae8ef291feac5f9ecf6d..cc0f08b4527465cf4870f9e0ed9a5810db1cdac0 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 |