• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 // Copyright (c) 2011 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4 
5 #ifndef CHROME_BROWSER_CHROMEOS_LOGIN_CAMERA_CONTROLLER_H_
6 #define CHROME_BROWSER_CHROMEOS_LOGIN_CAMERA_CONTROLLER_H_
7 #pragma once
8 
9 #include "base/memory/scoped_ptr.h"
10 #include "base/threading/thread.h"
11 #include "chrome/browser/chromeos/login/camera.h"
12 #include "third_party/skia/include/core/SkBitmap.h"
13 
14 namespace chromeos {
15 
16 class CameraController: public Camera::Delegate {
17  public:
18   class Delegate {
19    public:
~Delegate()20     virtual ~Delegate() {}
21 
22     // Called when new frame was captured by camera.
23     virtual void OnCaptureSuccess() = 0;
24 
25     // Called when camera failed to initialize or get the next frame.
26     virtual void OnCaptureFailure() = 0;
27   };
28 
29   explicit CameraController(Delegate* delegate);
30   virtual ~CameraController();
31 
set_frame_width(int width)32   void set_frame_width(int width) { frame_width_ = width; }
frame_width()33   int frame_width() const { return frame_width_; }
34 
set_frame_height(int height)35   void set_frame_height(int height) { frame_height_ = height; }
frame_height()36   int frame_height() const { return frame_height_; }
37 
38   // Initializes camera and starts video capturing.
39   void Start();
40 
41   // Stops video capturing and deinitializes camera.
42   void Stop();
43 
44   // Returns the last captured frame from the camera.
45   void GetFrame(SkBitmap* frame) const;
46 
47   // Camera::Delegate implementation:
48   virtual void OnInitializeSuccess();
49   virtual void OnInitializeFailure();
50   virtual void OnStartCapturingSuccess();
51   virtual void OnStartCapturingFailure();
52   virtual void OnCaptureSuccess();
53   virtual void OnCaptureFailure();
54 
55  private:
56   // Size of frame we want to receive.
57   int frame_width_;
58   int frame_height_;
59 
60   // Object that handles video capturing.
61   scoped_refptr<Camera> camera_;
62 
63   // Counts how many times in a row capture failed.
64   int capture_failure_counter_;
65 
66   // Counts how many times camera initialization failed.
67   int camera_init_failure_counter_;
68 
69   // Thread for camera to work on.
70   scoped_ptr<base::Thread> camera_thread_;
71 
72   Delegate* delegate_;
73 
74   DISALLOW_COPY_AND_ASSIGN(CameraController);
75 };
76 
77 }  // namespace chromeos
78 
79 #endif  // CHROME_BROWSER_CHROMEOS_LOGIN_CAMERA_CONTROLLER_H_
80 
81