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

Unified Diff: media/capture/video/linux/v4l2_capture_delegate.cc

Issue 2806743003: Image Capture: split {white_balance,exposure,focus}_modes into current_ and supported_ (Closed)
Patch Set: reillyg@ comment and fix in v4l2_capture_delegate.cc Created 3 years, 8 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: media/capture/video/linux/v4l2_capture_delegate.cc
diff --git a/media/capture/video/linux/v4l2_capture_delegate.cc b/media/capture/video/linux/v4l2_capture_delegate.cc
index 322cb46c4f14d71bfbcc754fe26c3f0ec3b2a5f8..2f16c203996b82851c6181e67ac4a3f07b96c8a6 100644
--- a/media/capture/video/linux/v4l2_capture_delegate.cc
+++ b/media/capture/video/linux/v4l2_capture_delegate.cc
@@ -21,6 +21,8 @@
#include "media/capture/video/blob_utils.h"
#include "media/capture/video/linux/video_capture_device_linux.h"
+using media::mojom::MeteringMode;
+
#if LINUX_VERSION_CODE < KERNEL_VERSION(4, 6, 0)
// 16 bit depth, Realsense F200.
#define V4L2_PIX_FMT_Z16 v4l2_fourcc('Z', '1', '6', ' ')
@@ -550,40 +552,72 @@ void V4L2CaptureDelegate::GetPhotoCapabilities(
photo_capabilities->zoom =
RetrieveUserControlRange(device_fd_.get(), V4L2_CID_ZOOM_ABSOLUTE);
- photo_capabilities->focus_mode = mojom::MeteringMode::NONE;
+ v4l2_queryctrl manual_focus_ctrl = {};
+ manual_focus_ctrl.id = V4L2_CID_FOCUS_ABSOLUTE;
+ if (RunIoctl(device_fd_.get(), VIDIOC_QUERYCTRL, &manual_focus_ctrl))
+ photo_capabilities->supported_focus_modes.push_back(MeteringMode::MANUAL);
+
+ v4l2_queryctrl auto_focus_ctrl = {};
+ auto_focus_ctrl.id = V4L2_CID_FOCUS_AUTO;
+ if (RunIoctl(device_fd_.get(), VIDIOC_QUERYCTRL, &auto_focus_ctrl)) {
+ photo_capabilities->supported_focus_modes.push_back(
+ MeteringMode::CONTINUOUS);
+ }
+
+ photo_capabilities->current_focus_mode = MeteringMode::NONE;
v4l2_control auto_focus_current = {};
auto_focus_current.id = V4L2_CID_FOCUS_AUTO;
if (HANDLE_EINTR(
ioctl(device_fd_.get(), VIDIOC_G_CTRL, &auto_focus_current)) >= 0) {
- photo_capabilities->focus_mode = auto_focus_current.value
- ? mojom::MeteringMode::CONTINUOUS
- : mojom::MeteringMode::MANUAL;
+ photo_capabilities->current_focus_mode = auto_focus_current.value
+ ? MeteringMode::CONTINUOUS
+ : MeteringMode::MANUAL;
}
- photo_capabilities->exposure_mode = mojom::MeteringMode::NONE;
+ v4l2_queryctrl auto_exposure_ctrl = {};
+ auto_exposure_ctrl.id = V4L2_CID_EXPOSURE_AUTO;
+ if (RunIoctl(device_fd_.get(), VIDIOC_QUERYCTRL, &auto_exposure_ctrl)) {
+ photo_capabilities->supported_exposure_modes.push_back(
+ MeteringMode::MANUAL);
+ photo_capabilities->supported_exposure_modes.push_back(
+ MeteringMode::CONTINUOUS);
+ }
+
+ photo_capabilities->current_exposure_mode = MeteringMode::NONE;
v4l2_control exposure_current = {};
exposure_current.id = V4L2_CID_EXPOSURE_AUTO;
if (HANDLE_EINTR(ioctl(device_fd_.get(), VIDIOC_G_CTRL, &exposure_current)) >=
0) {
- photo_capabilities->exposure_mode =
+ photo_capabilities->current_exposure_mode =
exposure_current.value == V4L2_EXPOSURE_MANUAL
- ? mojom::MeteringMode::MANUAL
- : mojom::MeteringMode::CONTINUOUS;
+ ? MeteringMode::MANUAL
+ : MeteringMode::CONTINUOUS;
}
- photo_capabilities->white_balance_mode = mojom::MeteringMode::NONE;
+ photo_capabilities->color_temperature = RetrieveUserControlRange(
+ device_fd_.get(), V4L2_CID_WHITE_BALANCE_TEMPERATURE);
+ if (photo_capabilities->color_temperature) {
+ photo_capabilities->supported_white_balance_modes.push_back(
+ MeteringMode::MANUAL);
+ }
+
+ v4l2_queryctrl white_balance_ctrl = {};
+ white_balance_ctrl.id = V4L2_CID_AUTO_WHITE_BALANCE;
+ if (RunIoctl(device_fd_.get(), VIDIOC_QUERYCTRL, &white_balance_ctrl)) {
+ photo_capabilities->supported_white_balance_modes.push_back(
+ MeteringMode::CONTINUOUS);
+ }
+
+ photo_capabilities->current_white_balance_mode = MeteringMode::NONE;
v4l2_control white_balance_current = {};
white_balance_current.id = V4L2_CID_AUTO_WHITE_BALANCE;
if (HANDLE_EINTR(ioctl(device_fd_.get(), VIDIOC_G_CTRL,
&white_balance_current)) >= 0) {
- photo_capabilities->white_balance_mode =
- white_balance_current.value ? mojom::MeteringMode::CONTINUOUS
- : mojom::MeteringMode::MANUAL;
+ photo_capabilities->current_white_balance_mode =
+ white_balance_current.value ? MeteringMode::CONTINUOUS
+ : MeteringMode::MANUAL;
}
- photo_capabilities->color_temperature = RetrieveUserControlRange(
- device_fd_.get(), V4L2_CID_WHITE_BALANCE_TEMPERATURE);
-
photo_capabilities->iso = mojom::Range::New();
photo_capabilities->height = mojom::Range::New();
photo_capabilities->width = mojom::Range::New();

Powered by Google App Engine
This is Rietveld 408576698