Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1348)

Unified Diff: extensions/browser/api/webcam_private/v4l2_webcam.cc

Issue 1281263003: Change webcamPrivate.set/get/reset to async APIs. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Address Zach's comments. Created 5 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: extensions/browser/api/webcam_private/v4l2_webcam.cc
diff --git a/extensions/browser/api/webcam_private/v4l2_webcam.cc b/extensions/browser/api/webcam_private/v4l2_webcam.cc
index f6d53c50c0dbb60bc5328b89a2965587c6c9e258..546b691beadc845c3b6dedead49021e416fc77b8 100644
--- a/extensions/browser/api/webcam_private/v4l2_webcam.cc
+++ b/extensions/browser/api/webcam_private/v4l2_webcam.cc
@@ -85,55 +85,38 @@ bool V4L2Webcam::GetWebcamParameter(int fd, uint32_t control_id, int* value) {
return true;
}
-void V4L2Webcam::Reset(bool pan, bool tilt, bool zoom) {
- if (pan || tilt) {
- if (EnsureLogitechCommandsMapped()) {
- SetWebcamParameter(fd_.get(), V4L2_CID_PANTILT_CMD,
- kLogitechMenuIndexGoHome);
- } else {
- if (pan) {
- struct v4l2_control v4l2_ctrl = {V4L2_CID_PAN_RESET};
- HANDLE_EINTR(ioctl(fd_.get(), VIDIOC_S_CTRL, &v4l2_ctrl));
- }
-
- if (tilt) {
- struct v4l2_control v4l2_ctrl = {V4L2_CID_TILT_RESET};
- HANDLE_EINTR(ioctl(fd_.get(), VIDIOC_S_CTRL, &v4l2_ctrl));
- }
- }
- }
-
- if (zoom) {
- const int kDefaultZoom = 100;
- SetWebcamParameter(fd_.get(), V4L2_CID_ZOOM_ABSOLUTE, kDefaultZoom);
- }
-}
-
-bool V4L2Webcam::GetPan(int* value) {
- return GetWebcamParameter(fd_.get(), V4L2_CID_PAN_ABSOLUTE, value);
+void V4L2Webcam::GetPan(const GetPTZCompleteCallback& callback) {
+ int value = 0;
+ bool success = GetWebcamParameter(fd_.get(), V4L2_CID_PAN_ABSOLUTE, &value);
+ callback.Run(success, value);
}
-bool V4L2Webcam::GetTilt(int* value) {
- return GetWebcamParameter(fd_.get(), V4L2_CID_TILT_ABSOLUTE, value);
+void V4L2Webcam::GetTilt(const GetPTZCompleteCallback& callback) {
+ int value = 0;
+ bool success = GetWebcamParameter(fd_.get(), V4L2_CID_TILT_ABSOLUTE, &value);
+ callback.Run(success, value);
}
-bool V4L2Webcam::GetZoom(int* value) {
- return GetWebcamParameter(fd_.get(), V4L2_CID_ZOOM_ABSOLUTE, value);
+void V4L2Webcam::GetZoom(const GetPTZCompleteCallback& callback) {
+ int value = 0;
+ bool success = GetWebcamParameter(fd_.get(), V4L2_CID_ZOOM_ABSOLUTE, &value);
+ callback.Run(success, value);
}
-bool V4L2Webcam::SetPan(int value) {
- return SetWebcamParameter(fd_.get(), V4L2_CID_PAN_ABSOLUTE, value);
+void V4L2Webcam::SetPan(int value, const SetPTZCompleteCallback& callback) {
+ callback.Run(SetWebcamParameter(fd_.get(), V4L2_CID_PAN_ABSOLUTE, value));
}
-bool V4L2Webcam::SetTilt(int value) {
- return SetWebcamParameter(fd_.get(), V4L2_CID_TILT_ABSOLUTE, value);
+void V4L2Webcam::SetTilt(int value, const SetPTZCompleteCallback& callback) {
+ callback.Run(SetWebcamParameter(fd_.get(), V4L2_CID_TILT_ABSOLUTE, value));
}
-bool V4L2Webcam::SetZoom(int value) {
- return SetWebcamParameter(fd_.get(), V4L2_CID_ZOOM_ABSOLUTE, value);
+void V4L2Webcam::SetZoom(int value, const SetPTZCompleteCallback& callback) {
+ callback.Run(SetWebcamParameter(fd_.get(), V4L2_CID_ZOOM_ABSOLUTE, value));
}
-bool V4L2Webcam::SetPanDirection(PanDirection direction) {
+void V4L2Webcam::SetPanDirection(PanDirection direction,
+ const SetPTZCompleteCallback& callback) {
int direction_value = 0;
switch (direction) {
case PAN_STOP:
@@ -148,10 +131,12 @@ bool V4L2Webcam::SetPanDirection(PanDirection direction) {
direction_value = -1;
break;
}
- return SetWebcamParameter(fd_.get(), V4L2_CID_PAN_SPEED, direction_value);
+ callback.Run(
+ SetWebcamParameter(fd_.get(), V4L2_CID_PAN_SPEED, direction_value));
}
-bool V4L2Webcam::SetTiltDirection(TiltDirection direction) {
+void V4L2Webcam::SetTiltDirection(TiltDirection direction,
+ const SetPTZCompleteCallback& callback) {
int direction_value = 0;
switch (direction) {
case TILT_STOP:
@@ -166,7 +151,49 @@ bool V4L2Webcam::SetTiltDirection(TiltDirection direction) {
direction_value = -1;
break;
}
- return SetWebcamParameter(fd_.get(), V4L2_CID_TILT_SPEED, direction_value);
+ callback.Run(
+ SetWebcamParameter(fd_.get(), V4L2_CID_TILT_SPEED, direction_value));
+}
+
+void V4L2Webcam::Reset(bool pan,
+ bool tilt,
+ bool zoom,
+ const SetPTZCompleteCallback& callback) {
+ if (pan || tilt) {
+ if (EnsureLogitechCommandsMapped()) {
+ if (!SetWebcamParameter(fd_.get(), V4L2_CID_PANTILT_CMD,
+ kLogitechMenuIndexGoHome)) {
+ callback.Run(false);
+ return;
+ }
+ } else {
+ if (pan) {
+ struct v4l2_control v4l2_ctrl = {V4L2_CID_PAN_RESET};
+ if (!HANDLE_EINTR(ioctl(fd_.get(), VIDIOC_S_CTRL, &v4l2_ctrl))) {
+ callback.Run(false);
+ return;
+ }
+ }
+
+ if (tilt) {
+ struct v4l2_control v4l2_ctrl = {V4L2_CID_TILT_RESET};
+ if (!HANDLE_EINTR(ioctl(fd_.get(), VIDIOC_S_CTRL, &v4l2_ctrl))) {
+ callback.Run(false);
+ return;
+ }
+ }
+ }
+ }
+
+ if (zoom) {
+ const int kDefaultZoom = 100;
+ if (!SetWebcamParameter(fd_.get(), V4L2_CID_ZOOM_ABSOLUTE, kDefaultZoom)) {
+ callback.Run(false);
+ return;
+ }
+ }
+
+ callback.Run(true);
}
} // namespace extensions
« no previous file with comments | « extensions/browser/api/webcam_private/v4l2_webcam.h ('k') | extensions/browser/api/webcam_private/visca_webcam.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698