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

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

Issue 1418263006: Extend VideoCaptureDevice::Client::OnError() to have a tracked_objects::Location param. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 5 years, 2 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 88f50759ea9853970fb76826799cb5cf9927a906..4bb2b8a1bd1ccb05b76e7029e13b86faf37f051e 100644
--- a/media/capture/video/linux/v4l2_capture_delegate.cc
+++ b/media/capture/video/linux/v4l2_capture_delegate.cc
@@ -180,7 +180,7 @@ void V4L2CaptureDelegate::AllocateAndStart(
// Need to open camera with O_RDWR after Linux kernel 3.3.
device_fd_.reset(HANDLE_EINTR(open(device_name_.id().c_str(), O_RDWR)));
if (!device_fd_.is_valid()) {
- SetErrorState("Failed to open V4L2 device driver file.");
+ SetErrorState(FROM_HERE, "Failed to open V4L2 device driver file.");
return;
}
@@ -191,7 +191,7 @@ void V4L2CaptureDelegate::AllocateAndStart(
!(cap.capabilities & V4L2_CAP_VIDEO_OUTPUT) &&
!(cap.capabilities & V4L2_CAP_VIDEO_OUTPUT_MPLANE)))) {
device_fd_.reset();
- SetErrorState("This is not a V4L2 video capture device");
+ SetErrorState(FROM_HERE, "This is not a V4L2 video capture device");
return;
}
@@ -208,7 +208,7 @@ void V4L2CaptureDelegate::AllocateAndStart(
best = std::find(desired_v4l2_formats.begin(), best, fmtdesc.pixelformat);
}
if (best == desired_v4l2_formats.end()) {
- SetErrorState("Failed to find a supported camera format.");
+ SetErrorState(FROM_HERE, "Failed to find a supported camera format.");
return;
}
@@ -216,18 +216,18 @@ void V4L2CaptureDelegate::AllocateAndStart(
video_fmt_.type = capture_type_;
if (!FillV4L2Format(&video_fmt_, width, height, *best)) {
- SetErrorState("Failed filling in V4L2 Format");
+ SetErrorState(FROM_HERE, "Failed filling in V4L2 Format");
return;
}
if (HANDLE_EINTR(ioctl(device_fd_.get(), VIDIOC_S_FMT, &video_fmt_)) < 0) {
- SetErrorState("Failed to set video capture format");
+ SetErrorState(FROM_HERE, "Failed to set video capture format");
return;
}
const VideoPixelFormat pixel_format =
V4l2FourCcToChromiumPixelFormat(video_fmt_.fmt.pix.pixelformat);
if (pixel_format == PIXEL_FORMAT_UNKNOWN) {
- SetErrorState("Unsupported pixel format");
+ SetErrorState(FROM_HERE, "Unsupported pixel format");
return;
}
@@ -247,7 +247,7 @@ void V4L2CaptureDelegate::AllocateAndStart(
if (HANDLE_EINTR(ioctl(device_fd_.get(), VIDIOC_S_PARM, &streamparm)) <
0) {
- SetErrorState("Failed to set camera framerate");
+ SetErrorState(FROM_HERE, "Failed to set camera framerate");
return;
}
DVLOG(2) << "Actual camera driverframerate: "
@@ -282,19 +282,19 @@ void V4L2CaptureDelegate::AllocateAndStart(
r_buffer.memory = V4L2_MEMORY_MMAP;
r_buffer.count = kNumVideoBuffers;
if (HANDLE_EINTR(ioctl(device_fd_.get(), VIDIOC_REQBUFS, &r_buffer)) < 0) {
- SetErrorState("Error requesting MMAP buffers from V4L2");
+ SetErrorState(FROM_HERE, "Error requesting MMAP buffers from V4L2");
return;
}
for (unsigned int i = 0; i < r_buffer.count; ++i) {
if (!MapAndQueueBuffer(i)) {
- SetErrorState("Allocate buffer failed");
+ SetErrorState(FROM_HERE, "Allocate buffer failed");
return;
}
}
if (HANDLE_EINTR(ioctl(device_fd_.get(), VIDIOC_STREAMON, &capture_type_)) <
0) {
- SetErrorState("VIDIOC_STREAMON failed");
+ SetErrorState(FROM_HERE, "VIDIOC_STREAMON failed");
return;
}
@@ -310,7 +310,7 @@ void V4L2CaptureDelegate::StopAndDeAllocate() {
// thus munmap()ing the v4l2_buffers, and then return them to the OS.
if (HANDLE_EINTR(ioctl(device_fd_.get(), VIDIOC_STREAMOFF, &capture_type_)) <
0) {
- SetErrorState("VIDIOC_STREAMOFF failed");
+ SetErrorState(FROM_HERE, "VIDIOC_STREAMOFF failed");
return;
}
@@ -321,7 +321,7 @@ void V4L2CaptureDelegate::StopAndDeAllocate() {
r_buffer.memory = V4L2_MEMORY_MMAP;
r_buffer.count = 0;
if (HANDLE_EINTR(ioctl(device_fd_.get(), VIDIOC_REQBUFS, &r_buffer)) < 0)
- SetErrorState("Failed to VIDIOC_REQBUFS with count = 0");
+ SetErrorState(FROM_HERE, "Failed to VIDIOC_REQBUFS with count = 0");
// At this point we can close the device.
// This is also needed for correctly changing settings later via VIDIOC_S_FMT.
@@ -377,7 +377,7 @@ void V4L2CaptureDelegate::DoCapture() {
device_pfd.events = POLLIN;
const int result = HANDLE_EINTR(poll(&device_pfd, 1, kCaptureTimeoutMs));
if (result < 0) {
- SetErrorState("Poll failed");
+ SetErrorState(FROM_HERE, "Poll failed");
return;
}
// Check if poll() timed out; track the amount of times it did in a row and
@@ -385,7 +385,8 @@ void V4L2CaptureDelegate::DoCapture() {
if (result == 0) {
timeout_count_++;
if (timeout_count_ >= kContinuousTimeoutLimit) {
- SetErrorState("Multiple continuous timeouts while read-polling.");
+ SetErrorState(FROM_HERE,
+ "Multiple continuous timeouts while read-polling.");
timeout_count_ = 0;
return;
}
@@ -399,7 +400,7 @@ void V4L2CaptureDelegate::DoCapture() {
FillV4L2Buffer(&buffer, 0);
if (HANDLE_EINTR(ioctl(device_fd_.get(), VIDIOC_DQBUF, &buffer)) < 0) {
- SetErrorState("Failed to dequeue capture buffer");
+ SetErrorState(FROM_HERE, "Failed to dequeue capture buffer");
return;
}
@@ -407,7 +408,7 @@ void V4L2CaptureDelegate::DoCapture() {
SendBuffer(buffer_tracker_pool_[buffer.index], video_fmt_);
if (HANDLE_EINTR(ioctl(device_fd_.get(), VIDIOC_QBUF, &buffer)) < 0) {
- SetErrorState("Failed to enqueue capture buffer");
+ SetErrorState(FROM_HERE, "Failed to enqueue capture buffer");
return;
}
}
@@ -416,10 +417,12 @@ void V4L2CaptureDelegate::DoCapture() {
FROM_HERE, base::Bind(&V4L2CaptureDelegate::DoCapture, this));
}
-void V4L2CaptureDelegate::SetErrorState(const std::string& reason) {
+void V4L2CaptureDelegate::SetErrorState(
+ const tracked_objects::Location& from_here,
+ const std::string& reason) {
DCHECK(v4l2_task_runner_->BelongsToCurrentThread());
is_capturing_ = false;
- client_->OnError(reason);
+ client_->OnError(from_here, reason);
}
} // namespace media

Powered by Google App Engine
This is Rietveld 408576698