OLD | NEW |
---|---|
1 // Copyright 2013 The Chromium Authors. All rights reserved. | 1 // Copyright 2013 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #ifndef CONTENT_BROWSER_RENDERER_HOST_VIDEO_CAPTURE_DEVICE_IMPL_H_ | 5 #ifndef CONTENT_BROWSER_RENDERER_HOST_VIDEO_CAPTURE_DEVICE_IMPL_H_ |
6 #define CONTENT_BROWSER_RENDERER_HOST_VIDEO_CAPTURE_DEVICE_IMPL_H_ | 6 #define CONTENT_BROWSER_RENDERER_HOST_VIDEO_CAPTURE_DEVICE_IMPL_H_ |
7 | 7 |
8 #include <string> | 8 #include <string> |
9 | 9 |
10 #include "base/memory/scoped_ptr.h" | 10 #include "base/memory/scoped_ptr.h" |
11 #include "base/memory/weak_ptr.h" | 11 #include "base/memory/weak_ptr.h" |
12 #include "base/threading/thread.h" | 12 #include "base/threading/thread.h" |
13 #include "base/threading/thread_checker.h" | 13 #include "base/threading/thread_checker.h" |
14 #include "content/browser/renderer_host/media/video_capture_oracle.h" | 14 #include "content/browser/renderer_host/media/video_capture_oracle.h" |
15 #include "content/common/content_export.h" | 15 #include "content/common/content_export.h" |
16 #include "media/video/capture/video_capture_device.h" | 16 #include "media/video/capture/video_capture_device.h" |
17 | 17 |
18 namespace media { | |
19 | |
20 class VideoFrame; | |
21 | |
22 } // namespace media | |
23 | |
18 namespace content { | 24 namespace content { |
19 | 25 |
20 const int kMinFrameWidth = 2; | 26 const int kMinFrameWidth = 2; |
21 const int kMinFrameHeight = 2; | 27 const int kMinFrameHeight = 2; |
22 | 28 |
23 // Returns the nearest even integer closer to zero. | 29 // Returns the nearest even integer closer to zero. |
24 template<typename IntType> | 30 template<typename IntType> |
25 IntType MakeEven(IntType x) { | 31 IntType MakeEven(IntType x) { |
26 return x & static_cast<IntType>(-2); | 32 return x & static_cast<IntType>(-2); |
27 } | 33 } |
(...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
72 | 78 |
73 // Signal an error to the client. | 79 // Signal an error to the client. |
74 void ReportError(); | 80 void ReportError(); |
75 | 81 |
76 private: | 82 private: |
77 friend class base::RefCountedThreadSafe<ThreadSafeCaptureOracle>; | 83 friend class base::RefCountedThreadSafe<ThreadSafeCaptureOracle>; |
78 virtual ~ThreadSafeCaptureOracle(); | 84 virtual ~ThreadSafeCaptureOracle(); |
79 | 85 |
80 // Callback invoked on completion of all captures. | 86 // Callback invoked on completion of all captures. |
81 void DidCaptureFrame( | 87 void DidCaptureFrame( |
82 scoped_refptr<media::VideoCaptureDevice::Client::Buffer> buffer, | 88 const scoped_refptr<media::VideoCaptureDevice::Client::Buffer>& buffer, |
89 const scoped_refptr<media::VideoFrame>& frame, | |
83 int frame_number, | 90 int frame_number, |
84 base::TimeTicks timestamp, | 91 base::TimeTicks timestamp, |
85 bool success); | 92 bool success); |
86 // Protects everything below it. | 93 // Protects everything below it. |
87 base::Lock lock_; | 94 base::Lock lock_; |
88 | 95 |
89 // Recipient of our capture activity. | 96 // Recipient of our capture activity. |
90 scoped_ptr<media::VideoCaptureDevice::Client> client_; | 97 scoped_ptr<media::VideoCaptureDevice::Client> client_; |
91 | 98 |
92 // Makes the decision to capture a frame. | 99 // Makes the decision to capture a frame. |
(...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
131 // The "meat" of the video capture implementation. | 138 // The "meat" of the video capture implementation. |
132 // | 139 // |
133 // Separating this from the "shell classes" WebContentsVideoCaptureDevice and | 140 // Separating this from the "shell classes" WebContentsVideoCaptureDevice and |
134 // BrowserCompositorCaptureDevice allows safe destruction without needing to | 141 // BrowserCompositorCaptureDevice allows safe destruction without needing to |
135 // block any threads (e.g., the IO BrowserThread), as well as code sharing. | 142 // block any threads (e.g., the IO BrowserThread), as well as code sharing. |
136 // | 143 // |
137 // VideoCaptureDeviceImpl manages a simple state machine and the pipeline (see | 144 // VideoCaptureDeviceImpl manages a simple state machine and the pipeline (see |
138 // notes at top of this file). It times the start of successive | 145 // notes at top of this file). It times the start of successive |
139 // captures and facilitates the processing of each through the stages of the | 146 // captures and facilitates the processing of each through the stages of the |
140 // pipeline. | 147 // pipeline. |
141 class CONTENT_EXPORT VideoCaptureDeviceImpl | 148 class CONTENT_EXPORT VideoCaptureDeviceImpl |
jiayl
2014/01/23 22:18:52
The naming of the class seems very confusing becau
sheu
2014/01/29 01:19:20
A little out of the scope of this change, probably
jiayl
2014/01/31 19:32:38
Then open a bug and add a TODO linked to the bug.
sheu
2014/02/07 00:37:25
It's also used for the desktop capture device in A
jiayl
2014/02/07 01:22:08
I hope we can avoid "impl", e.g. VideoCaptureDevic
| |
142 : public base::SupportsWeakPtr<VideoCaptureDeviceImpl> { | 149 : public base::SupportsWeakPtr<VideoCaptureDeviceImpl> { |
143 public: | 150 public: |
144 VideoCaptureDeviceImpl(scoped_ptr<VideoCaptureMachine> capture_machine); | 151 VideoCaptureDeviceImpl(scoped_ptr<VideoCaptureMachine> capture_machine); |
145 virtual ~VideoCaptureDeviceImpl(); | 152 virtual ~VideoCaptureDeviceImpl(); |
146 | 153 |
147 // Asynchronous requests to change VideoCaptureDeviceImpl state. | 154 // Asynchronous requests to change VideoCaptureDeviceImpl state. |
148 void AllocateAndStart(const media::VideoCaptureParams& params, | 155 void AllocateAndStart(const media::VideoCaptureParams& params, |
149 scoped_ptr<media::VideoCaptureDevice::Client> client); | 156 scoped_ptr<media::VideoCaptureDevice::Client> client); |
150 void StopAndDeAllocate(); | 157 void StopAndDeAllocate(); |
151 | 158 |
(...skipping 30 matching lines...) Expand all Loading... | |
182 // system with direct access to |client_|. | 189 // system with direct access to |client_|. |
183 scoped_refptr<ThreadSafeCaptureOracle> oracle_proxy_; | 190 scoped_refptr<ThreadSafeCaptureOracle> oracle_proxy_; |
184 | 191 |
185 DISALLOW_COPY_AND_ASSIGN(VideoCaptureDeviceImpl); | 192 DISALLOW_COPY_AND_ASSIGN(VideoCaptureDeviceImpl); |
186 }; | 193 }; |
187 | 194 |
188 | 195 |
189 } // namespace content | 196 } // namespace content |
190 | 197 |
191 #endif // CONTENT_BROWSER_RENDERER_HOST_VIDEO_CAPTURE_DEVICE_IMPL_H_ | 198 #endif // CONTENT_BROWSER_RENDERER_HOST_VIDEO_CAPTURE_DEVICE_IMPL_H_ |
OLD | NEW |