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

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

Issue 292663010: Merge 271560 "Add a ChromeOS implementation of VideoCaptureDevic..." (Closed) Base URL: svn://svn.chromium.org/chrome/branches/1985/src/
Patch Set: Created 6 years, 7 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/video/capture/linux/video_capture_device_linux.cc
===================================================================
--- media/video/capture/linux/video_capture_device_linux.cc (revision 271940)
+++ media/video/capture/linux/video_capture_device_linux.cc (working copy)
@@ -23,6 +23,10 @@
#include "base/posix/eintr_wrapper.h"
#include "base/strings/stringprintf.h"
+#if defined(OS_CHROMEOS)
+#include "media/video/capture/linux/video_capture_device_chromeos.h"
+#endif
+
namespace media {
// Max number of video buffers VideoCaptureDeviceLinux can allocate.
@@ -248,8 +252,15 @@
return usb_id;
}
-VideoCaptureDevice* VideoCaptureDevice::Create(const Name& device_name) {
+VideoCaptureDevice* VideoCaptureDevice::Create(
+ scoped_refptr<base::SingleThreadTaskRunner> ui_task_runner,
+ const Name& device_name) {
+#if defined(OS_CHROMEOS)
+ VideoCaptureDeviceChromeOS* self =
+ new VideoCaptureDeviceChromeOS(ui_task_runner, device_name);
+#else
VideoCaptureDeviceLinux* self = new VideoCaptureDeviceLinux(device_name);
+#endif
if (!self)
return NULL;
// Test opening the device driver. This is to make sure it is available.
@@ -271,7 +282,9 @@
v4l2_thread_("V4L2Thread"),
buffer_pool_(NULL),
buffer_pool_size_(0),
- timeout_count_(0) {}
+ timeout_count_(0),
+ rotation_(0) {
+}
VideoCaptureDeviceLinux::~VideoCaptureDeviceLinux() {
state_ = kIdle;
@@ -313,6 +326,25 @@
DeAllocateVideoBuffers();
}
+void VideoCaptureDeviceLinux::SetRotation(int rotation) {
+ if (v4l2_thread_.IsRunning()) {
+ v4l2_thread_.message_loop()->PostTask(
+ FROM_HERE,
+ base::Bind(&VideoCaptureDeviceLinux::SetRotationOnV4L2Thread,
+ base::Unretained(this), rotation));
+ } else {
+ // If the |v4l2_thread_| is not running, there's no race condition and
+ // |rotation_| can be set directly.
+ rotation_ = rotation;
+ }
+}
+
+void VideoCaptureDeviceLinux::SetRotationOnV4L2Thread(int rotation) {
+ DCHECK_EQ(v4l2_thread_.message_loop(), base::MessageLoop::current());
+ DCHECK(rotation >= 0 && rotation < 360 && rotation % 90 == 0);
+ rotation_ = rotation;
+}
+
void VideoCaptureDeviceLinux::OnAllocateAndStart(int width,
int height,
int frame_rate,
@@ -521,7 +553,7 @@
static_cast<uint8*>(buffer_pool_[buffer.index].start),
buffer.bytesused,
capture_format_,
- 0,
+ rotation_,
base::TimeTicks::Now());
// Enqueue the buffer again.
« no previous file with comments | « media/video/capture/linux/video_capture_device_linux.h ('k') | media/video/capture/mac/video_capture_device_mac.mm » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698