OLD | NEW |
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 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_RENDERER_MEDIA_VIDEO_CAPTURE_IMPL_H_ | 5 #ifndef CONTENT_RENDERER_MEDIA_VIDEO_CAPTURE_IMPL_H_ |
6 #define CONTENT_RENDERER_MEDIA_VIDEO_CAPTURE_IMPL_H_ | 6 #define CONTENT_RENDERER_MEDIA_VIDEO_CAPTURE_IMPL_H_ |
7 | 7 |
8 #include <stdint.h> | 8 #include <stdint.h> |
9 | 9 |
10 #include <list> | 10 #include <list> |
11 #include <map> | 11 #include <map> |
12 | 12 |
13 #include "base/macros.h" | 13 #include "base/macros.h" |
14 #include "base/memory/weak_ptr.h" | 14 #include "base/memory/weak_ptr.h" |
15 #include "base/threading/thread_checker.h" | 15 #include "base/threading/thread_checker.h" |
16 #include "content/common/content_export.h" | 16 #include "content/common/content_export.h" |
17 #include "content/common/media/video_capture.h" | 17 #include "content/common/media/video_capture.h" |
| 18 #include "content/common/video_capture.mojom.h" |
18 #include "content/public/renderer/media_stream_video_sink.h" | 19 #include "content/public/renderer/media_stream_video_sink.h" |
19 #include "content/renderer/media/video_capture_message_filter.h" | 20 #include "content/renderer/media/video_capture_message_filter.h" |
20 #include "media/base/video_capture_types.h" | 21 #include "media/base/video_capture_types.h" |
21 | 22 |
22 namespace base { | 23 namespace base { |
23 class SingleThreadTaskRunner; | 24 class SingleThreadTaskRunner; |
24 } // namespace base | 25 } // namespace base |
25 | 26 |
26 namespace media { | 27 namespace media { |
27 class VideoFrame; | 28 class VideoFrame; |
(...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
76 // Get capturing formats supported by this device. | 77 // Get capturing formats supported by this device. |
77 // |callback| will be invoked with the results. | 78 // |callback| will be invoked with the results. |
78 void GetDeviceSupportedFormats(const VideoCaptureDeviceFormatsCB& callback); | 79 void GetDeviceSupportedFormats(const VideoCaptureDeviceFormatsCB& callback); |
79 | 80 |
80 // Get capturing formats currently in use by this device. | 81 // Get capturing formats currently in use by this device. |
81 // |callback| will be invoked with the results. | 82 // |callback| will be invoked with the results. |
82 void GetDeviceFormatsInUse(const VideoCaptureDeviceFormatsCB& callback); | 83 void GetDeviceFormatsInUse(const VideoCaptureDeviceFormatsCB& callback); |
83 | 84 |
84 media::VideoCaptureSessionId session_id() const { return session_id_; } | 85 media::VideoCaptureSessionId session_id() const { return session_id_; } |
85 | 86 |
| 87 void SetVideoCaptureHostForTesting(mojom::VideoCaptureHost* service) { |
| 88 video_capture_host_for_testing_ = service; |
| 89 } |
| 90 |
86 protected: | 91 protected: |
87 // Note: Overridden only by unit test subclasses. | 92 // Note: Overridden only by unit test subclasses. |
88 virtual void Send(IPC::Message* message); | 93 virtual void Send(IPC::Message* message); |
89 | 94 |
90 private: | 95 private: |
91 friend class VideoCaptureImplTest; | 96 friend class VideoCaptureImplTest; |
92 friend class MockVideoCaptureImpl; | 97 friend class MockVideoCaptureImpl; |
93 | 98 |
94 // Carries a shared memory for transferring video frames from browser to | 99 // Carries a shared memory for transferring video frames from browser to |
95 // renderer. | 100 // renderer. |
(...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
145 const gpu::SyncToken& release_sync_token, | 150 const gpu::SyncToken& release_sync_token, |
146 double consumer_resource_utilization); | 151 double consumer_resource_utilization); |
147 | 152 |
148 void StopDevice(); | 153 void StopDevice(); |
149 void RestartCapture(); | 154 void RestartCapture(); |
150 void StartCaptureInternal(); | 155 void StartCaptureInternal(); |
151 | 156 |
152 // Helpers. | 157 // Helpers. |
153 bool RemoveClient(int client_id, ClientInfoMap* clients); | 158 bool RemoveClient(int client_id, ClientInfoMap* clients); |
154 | 159 |
| 160 mojom::VideoCaptureHost* GetVideoCaptureHost(); |
| 161 |
155 // Called (by an unknown thread) when all consumers are done with a VideoFrame | 162 // Called (by an unknown thread) when all consumers are done with a VideoFrame |
156 // and its ref-count has gone to zero. This helper function grabs the | 163 // and its ref-count has gone to zero. This helper function grabs the |
157 // RESOURCE_UTILIZATION value from the |metadata| and then runs the given | 164 // RESOURCE_UTILIZATION value from the |metadata| and then runs the given |
158 // callback, to trampoline back to the IO thread with the values. | 165 // callback, to trampoline back to the IO thread with the values. |
159 static void DidFinishConsumingFrame( | 166 static void DidFinishConsumingFrame( |
160 const media::VideoFrameMetadata* metadata, | 167 const media::VideoFrameMetadata* metadata, |
161 std::unique_ptr<gpu::SyncToken> release_sync_token, | 168 std::unique_ptr<gpu::SyncToken> release_sync_token, |
162 const BufferFinishedCallback& callback_to_io_thread); | 169 const BufferFinishedCallback& callback_to_io_thread); |
163 | 170 |
164 const scoped_refptr<VideoCaptureMessageFilter> message_filter_; | 171 const scoped_refptr<VideoCaptureMessageFilter> message_filter_; |
165 int device_id_; | 172 int device_id_; |
166 const int session_id_; | 173 const int session_id_; |
167 | 174 |
| 175 mojom::VideoCaptureHostAssociatedPtr video_capture_host_; |
| 176 mojom::VideoCaptureHost* video_capture_host_for_testing_; |
| 177 |
168 // Vector of callbacks to be notified of device format enumerations, used only | 178 // Vector of callbacks to be notified of device format enumerations, used only |
169 // on IO Thread. | 179 // on IO Thread. |
170 std::vector<VideoCaptureDeviceFormatsCB> device_formats_cb_queue_; | 180 std::vector<VideoCaptureDeviceFormatsCB> device_formats_cb_queue_; |
171 // Vector of callbacks to be notified of a device's in use capture format(s), | 181 // Vector of callbacks to be notified of a device's in use capture format(s), |
172 // used only on IO Thread. | 182 // used only on IO Thread. |
173 std::vector<VideoCaptureDeviceFormatsCB> device_formats_in_use_cb_queue_; | 183 std::vector<VideoCaptureDeviceFormatsCB> device_formats_in_use_cb_queue_; |
174 | 184 |
175 // Buffers available for sending to the client. | 185 // Buffers available for sending to the client. |
176 typedef std::map<int32_t, scoped_refptr<ClientBuffer>> ClientBufferMap; | 186 typedef std::map<int32_t, scoped_refptr<ClientBuffer>> ClientBufferMap; |
177 ClientBufferMap client_buffers_; | 187 ClientBufferMap client_buffers_; |
(...skipping 23 matching lines...) Expand all Loading... |
201 // in |client_buffers_|. | 211 // in |client_buffers_|. |
202 // NOTE: Weak pointers must be invalidated before all other member variables. | 212 // NOTE: Weak pointers must be invalidated before all other member variables. |
203 base::WeakPtrFactory<VideoCaptureImpl> weak_factory_; | 213 base::WeakPtrFactory<VideoCaptureImpl> weak_factory_; |
204 | 214 |
205 DISALLOW_COPY_AND_ASSIGN(VideoCaptureImpl); | 215 DISALLOW_COPY_AND_ASSIGN(VideoCaptureImpl); |
206 }; | 216 }; |
207 | 217 |
208 } // namespace content | 218 } // namespace content |
209 | 219 |
210 #endif // CONTENT_RENDERER_MEDIA_VIDEO_CAPTURE_IMPL_H_ | 220 #endif // CONTENT_RENDERER_MEDIA_VIDEO_CAPTURE_IMPL_H_ |
OLD | NEW |