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

Unified Diff: chrome/browser/chromeos/login/camera.cc

Issue 4228002: Moved ownership of camera thread to user image screen (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Compile fix Created 10 years, 1 month 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
« no previous file with comments | « chrome/browser/chromeos/login/camera.h ('k') | chrome/browser/chromeos/login/user_image_screen.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: chrome/browser/chromeos/login/camera.cc
diff --git a/chrome/browser/chromeos/login/camera.cc b/chrome/browser/chromeos/login/camera.cc
index 1fb85f8ee3261f32e48f8a06ba31869a7d73cc4c..59e77d32b3b381e6e8a61158f99d11a56d49923c 100644
--- a/chrome/browser/chromeos/login/camera.cc
+++ b/chrome/browser/chromeos/login/camera.cc
@@ -22,6 +22,7 @@
#include "base/logging.h"
#include "base/string_util.h"
#include "base/stringprintf.h"
+#include "base/thread.h"
#include "base/time.h"
#include "chrome/browser/browser_thread.h"
#include "gfx/size.h"
@@ -113,8 +114,6 @@ gfx::Size get_best_frame_size(int fd,
// Default camera device name.
const char kDeviceName[] = "/dev/video0";
-// Name for camera thread.
-const char kCameraThreadName[] = "Chrome_CameraThread";
// Default width of each frame received from the camera.
const int kFrameWidth = 640;
// Default height of each frame received from the camera.
@@ -126,18 +125,12 @@ const long kSelectTimeout = 1 * base::Time::kMicrosecondsPerSecond;
} // namespace
-// static
-Lock Camera::image_lock_;
-
-// static
-Lock Camera::thread_lock_;
-
///////////////////////////////////////////////////////////////////////////////
// Camera, public members:
-Camera::Camera(Delegate* delegate, bool mirrored)
+Camera::Camera(Delegate* delegate, base::Thread* thread, bool mirrored)
: delegate_(delegate),
- camera_thread_(kCameraThreadName),
+ thread_(thread),
device_name_(kDeviceName),
device_descriptor_(-1),
is_capturing_(false),
@@ -152,7 +145,6 @@ Camera::~Camera() {
DCHECK_EQ(-1, device_descriptor_) << "Don't forget to uninitialize camera.";
}
-// If this method is called there's no need to call PostCameraThreadAck().
void Camera::ReportFailure() {
DCHECK(IsOnCameraThread());
if (device_descriptor_ == -1) {
@@ -179,6 +171,7 @@ void Camera::ReportFailure() {
void Camera::Initialize(int desired_width, int desired_height) {
DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
PostCameraTask(
+ FROM_HERE,
NewRunnableMethod(this,
&Camera::DoInitialize,
desired_width,
@@ -187,11 +180,9 @@ void Camera::Initialize(int desired_width, int desired_height) {
void Camera::DoInitialize(int desired_width, int desired_height) {
DCHECK(IsOnCameraThread());
- DCHECK(delegate_);
if (device_descriptor_ != -1) {
LOG(WARNING) << "Camera is initialized already.";
- PostCameraThreadAck();
return;
}
@@ -247,34 +238,21 @@ void Camera::DoInitialize(int desired_width, int desired_height) {
frame_height_ = frame_size.height();
desired_width_ = desired_width;
desired_height_ = desired_height;
- // No need to call PostCameraThreadAck() back as this method
- // is being posted instead.
BrowserThread::PostTask(
BrowserThread::UI,
FROM_HERE,
NewRunnableMethod(this, &Camera::OnInitializeSuccess));
}
-void Camera::CameraThreadAck() {
-}
-
-void Camera::PostCameraThreadAck() {
- BrowserThread::PostTask(
- BrowserThread::UI,
- FROM_HERE,
- NewRunnableMethod(this, &Camera::CameraThreadAck));
-}
-
void Camera::Uninitialize() {
DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
- PostCameraTask(NewRunnableMethod(this, &Camera::DoUninitialize));
+ PostCameraTask(FROM_HERE, NewRunnableMethod(this, &Camera::DoUninitialize));
}
void Camera::DoUninitialize() {
DCHECK(IsOnCameraThread());
if (device_descriptor_ == -1) {
LOG(WARNING) << "Calling uninitialize for uninitialized camera.";
- PostCameraThreadAck();
return;
}
DoStopCapturing();
@@ -282,20 +260,18 @@ void Camera::DoUninitialize() {
if (close(device_descriptor_) == -1)
log_errno("Closing the device failed.");
device_descriptor_ = -1;
- // Maintain a reference so that camera object isn't deleted on wrong thread.
- PostCameraThreadAck();
}
void Camera::StartCapturing() {
DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
- PostCameraTask(NewRunnableMethod(this, &Camera::DoStartCapturing));
+ PostCameraTask(FROM_HERE,
+ NewRunnableMethod(this, &Camera::DoStartCapturing));
}
void Camera::DoStartCapturing() {
DCHECK(IsOnCameraThread());
if (is_capturing_) {
LOG(WARNING) << "Capturing is already started.";
- PostCameraThreadAck();
return;
}
@@ -324,18 +300,19 @@ void Camera::DoStartCapturing() {
NewRunnableMethod(this,
&Camera::OnStartCapturingSuccess));
is_capturing_ = true;
- PostCameraTask(NewRunnableMethod(this, &Camera::OnCapture));
+ PostCameraTask(FROM_HERE,
+ NewRunnableMethod(this, &Camera::OnCapture));
}
void Camera::StopCapturing() {
DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
- PostCameraTask(NewRunnableMethod(this, &Camera::DoStopCapturing));
+ PostCameraTask(FROM_HERE,
+ NewRunnableMethod(this, &Camera::DoStopCapturing));
}
void Camera::DoStopCapturing() {
DCHECK(IsOnCameraThread());
if (!is_capturing_) {
- PostCameraThreadAck();
LOG(WARNING) << "Calling StopCapturing when capturing is not started.";
return;
}
@@ -344,8 +321,6 @@ void Camera::DoStopCapturing() {
v4l2_buf_type type = V4L2_BUF_TYPE_VIDEO_CAPTURE;
if (xioctl(device_descriptor_, VIDIOC_STREAMOFF, &type) == -1)
log_errno("VIDIOC_STREAMOFF failed.");
- // Maintain a reference so that camera object isn't deleted on wrong thread.
- PostCameraThreadAck();
}
void Camera::GetFrame(SkBitmap* frame) {
@@ -430,11 +405,8 @@ void Camera::UnmapVideoBuffers() {
void Camera::OnCapture() {
DCHECK(IsOnCameraThread());
- if (!is_capturing_) {
- // Maintain a reference so that camera object isn't deleted on wrong thread.
- PostCameraThreadAck();
+ if (!is_capturing_)
return;
- }
do {
fd_set fds;
@@ -461,7 +433,8 @@ void Camera::OnCapture() {
// EAGAIN - continue select loop.
} while (!ReadFrame());
- PostCameraTask(NewRunnableMethod(this, &Camera::OnCapture));
+ PostCameraTask(FROM_HERE,
+ NewRunnableMethod(this, &Camera::OnCapture));
}
bool Camera::ReadFrame() {
@@ -601,14 +574,16 @@ void Camera::OnCaptureFailure() {
bool Camera::IsOnCameraThread() const {
AutoLock lock(thread_lock_);
- return MessageLoop::current() == camera_thread_.message_loop();
+ return thread_ && MessageLoop::current() == thread_->message_loop();
}
-void Camera::PostCameraTask(Task* task) {
+void Camera::PostCameraTask(const tracked_objects::Location& from_here,
+ Task* task) {
AutoLock lock(thread_lock_);
- if (!camera_thread_.IsRunning())
- camera_thread_.Start();
- camera_thread_.message_loop()->PostTask(FROM_HERE, task);
+ if (!thread_)
+ return;
+ DCHECK(thread_->IsRunning());
+ thread_->message_loop()->PostTask(from_here, task);
}
} // namespace chromeos
« no previous file with comments | « chrome/browser/chromeos/login/camera.h ('k') | chrome/browser/chromeos/login/user_image_screen.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698