diff options
author | yzshen@chromium.org <yzshen@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2012-12-05 02:44:18 +0000 |
---|---|---|
committer | yzshen@chromium.org <yzshen@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2012-12-05 02:44:18 +0000 |
commit | 4f01c76ed760e674cb86f2b0a17a779431e2aa71 (patch) | |
tree | a2d874fb3f21b65e07f0d75db567487f6bd4a38a /ppapi/cpp | |
parent | 4afef6e27ecbcf6430c5d37881eca04c6b1f8d78 (diff) | |
download | chromium_src-4f01c76ed760e674cb86f2b0a17a779431e2aa71.zip chromium_src-4f01c76ed760e674cb86f2b0a17a779431e2aa71.tar.gz chromium_src-4f01c76ed760e674cb86f2b0a17a779431e2aa71.tar.bz2 |
Introduce PPB_AudioInput_Dev v0.3 and refactor the device enumeration code:
- Add MonitorDeviceChange() for PPB_AudioInput_Dev.
- Change EnumerateDevices() to use PP_ArrayOutput.
- Move device enumeration code out of the audio input implementation, so that it can be shared by video capture.
- Update the audio_input manual test.
- Add unittests for the device enumeration code.
TEST=None
BUG=137799
Review URL: https://chromiumcodereview.appspot.com/11411047
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@171132 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'ppapi/cpp')
-rw-r--r-- | ppapi/cpp/dev/audio_input_dev.cc | 73 | ||||
-rw-r--r-- | ppapi/cpp/dev/audio_input_dev.h | 3 |
2 files changed, 60 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 diff --git a/ppapi/cpp/dev/audio_input_dev.h b/ppapi/cpp/dev/audio_input_dev.h index fc336a9..22408cdf 100644 --- a/ppapi/cpp/dev/audio_input_dev.h +++ b/ppapi/cpp/dev/audio_input_dev.h @@ -37,6 +37,9 @@ class AudioInput_Dev : public Resource { const CompletionCallbackWithOutput<std::vector<DeviceRef_Dev> >& callback); + int32_t MonitorDeviceChange(PP_MonitorDeviceChangeCallback callback, + void* user_data); + /// If |device_ref| is null (i.e., is_null() returns true), the default device /// will be used. int32_t Open(const DeviceRef_Dev& device_ref, |