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

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

Issue 270263008: Add a ChromeOS implementation of VideoCaptureDevice (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Rebase 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
diff --git a/media/video/capture/linux/video_capture_device_linux.cc b/media/video/capture/linux/video_capture_device_linux.cc
index 6893743d5110db0f634b58820b69718cf55a5a1d..0b1b28a09ce03d11b81f03846462a852afa9933f 100644
--- a/media/video/capture/linux/video_capture_device_linux.cc
+++ b/media/video/capture/linux/video_capture_device_linux.cc
@@ -22,6 +22,7 @@
#include "base/files/scoped_file.h"
#include "base/posix/eintr_wrapper.h"
#include "base/strings/stringprintf.h"
+#include "ui/gfx/screen.h"
namespace media {
@@ -271,9 +272,22 @@ VideoCaptureDeviceLinux::VideoCaptureDeviceLinux(const Name& device_name)
v4l2_thread_("V4L2Thread"),
buffer_pool_(NULL),
buffer_pool_size_(0),
- timeout_count_(0) {}
+ timeout_count_(0),
+ display_rotation_(gfx::Display::ROTATE_0) {
+ gfx::Screen* screen =
perkj_chrome 2014/05/09 10:11:28 This will be called on a special thread used only
+ gfx::Screen::GetScreenByType(gfx::SCREEN_TYPE_ALTERNATE);
+ if (screen) {
+ SetDisplayRotation(screen->GetPrimaryDisplay());
+ screen->AddObserver(this);
+ }
+}
VideoCaptureDeviceLinux::~VideoCaptureDeviceLinux() {
+ gfx::Screen* screen =
+ gfx::Screen::GetScreenByType(gfx::SCREEN_TYPE_ALTERNATE);
perkj_chrome 2014/05/09 10:11:28 Can there be a race here? ie, is it ok to not call
+ if (screen)
+ screen->RemoveObserver(this);
+
state_ = kIdle;
// Check if the thread is running.
// This means that the device have not been DeAllocated properly.
@@ -313,6 +327,27 @@ void VideoCaptureDeviceLinux::StopAndDeAllocate() {
DeAllocateVideoBuffers();
}
+void VideoCaptureDeviceLinux::OnDisplayBoundsChanged(
+ const gfx::Display& display) {
+ v4l2_thread_.message_loop()->PostTask(
perkj_chrome 2014/05/09 10:11:28 This thread is started in AllocateAndStart. So you
perkj_chrome 2014/05/09 10:28:44 oh- btw - this need a thread check to make sure it
+ FROM_HERE,
+ base::Bind(&VideoCaptureDeviceLinux::SetDisplayRotation,
+ base::Unretained(this), display));
+}
+
+void VideoCaptureDeviceLinux::OnDisplayAdded(
+ const gfx::Display& /*new_display*/) {}
+
+void VideoCaptureDeviceLinux::OnDisplayRemoved(
+ const gfx::Display& /*old_display*/) {}
+
+void VideoCaptureDeviceLinux::SetDisplayRotation(const gfx::Display& display) {
+ DCHECK(!v4l2_thread_.IsRunning() ||
+ v4l2_thread_.message_loop() == base::MessageLoop::current());
+ if (display.IsInternal())
+ display_rotation_ = display.rotation();
perkj_chrome 2014/05/09 10:18:52 Add a todo and a comment that this will in fact ro
+}
+
void VideoCaptureDeviceLinux::OnAllocateAndStart(int width,
int height,
int frame_rate,
@@ -521,7 +556,7 @@ void VideoCaptureDeviceLinux::OnCaptureTask() {
static_cast<uint8*>(buffer_pool_[buffer.index].start),
buffer.bytesused,
capture_format_,
- 0,
+ display_rotation_ * 90,
base::TimeTicks::Now());
// Enqueue the buffer again.

Powered by Google App Engine
This is Rietveld 408576698