summaryrefslogtreecommitdiffstats
path: root/ppapi/cpp
diff options
context:
space:
mode:
authoryzshen@chromium.org <yzshen@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2012-12-05 02:44:18 +0000
committeryzshen@chromium.org <yzshen@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2012-12-05 02:44:18 +0000
commit4f01c76ed760e674cb86f2b0a17a779431e2aa71 (patch)
treea2d874fb3f21b65e07f0d75db567487f6bd4a38a /ppapi/cpp
parent4afef6e27ecbcf6430c5d37881eca04c6b1f8d78 (diff)
downloadchromium_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.cc73
-rw-r--r--ppapi/cpp/dev/audio_input_dev.h3
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,