Chromium Code Reviews| 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 #include "content/browser/renderer_host/media/video_capture_host.h" | 5 #include "content/browser/renderer_host/media/video_capture_host.h" |
| 6 | 6 |
| 7 #include "base/bind.h" | 7 #include "base/bind.h" |
| 8 #include "base/memory/scoped_ptr.h" | 8 #include "base/memory/scoped_ptr.h" |
| 9 #include "content/browser/browser_main_loop.h" | 9 #include "content/browser/browser_main_loop.h" |
| 10 #include "content/browser/renderer_host/media/media_stream_manager.h" | 10 #include "content/browser/renderer_host/media/media_stream_manager.h" |
| (...skipping 51 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 62 int buffer_id) { | 62 int buffer_id) { |
| 63 BrowserThread::PostTask( | 63 BrowserThread::PostTask( |
| 64 BrowserThread::IO, FROM_HERE, | 64 BrowserThread::IO, FROM_HERE, |
| 65 base::Bind(&VideoCaptureHost::DoSendFreeBufferOnIOThread, | 65 base::Bind(&VideoCaptureHost::DoSendFreeBufferOnIOThread, |
| 66 this, controller_id, buffer_id)); | 66 this, controller_id, buffer_id)); |
| 67 } | 67 } |
| 68 | 68 |
| 69 void VideoCaptureHost::OnBufferReady( | 69 void VideoCaptureHost::OnBufferReady( |
| 70 const VideoCaptureControllerID& controller_id, | 70 const VideoCaptureControllerID& controller_id, |
| 71 int buffer_id, | 71 int buffer_id, |
| 72 base::TimeTicks timestamp, | 72 const media::VideoCaptureFormat& frame_format, |
| 73 const media::VideoCaptureFormat& frame_format) { | 73 base::TimeTicks timestamp) { |
| 74 BrowserThread::PostTask( | 74 BrowserThread::PostTask( |
| 75 BrowserThread::IO, FROM_HERE, | 75 BrowserThread::IO, |
| 76 FROM_HERE, | |
| 76 base::Bind(&VideoCaptureHost::DoSendFilledBufferOnIOThread, | 77 base::Bind(&VideoCaptureHost::DoSendFilledBufferOnIOThread, |
| 77 this, controller_id, buffer_id, timestamp, | 78 this, |
| 78 frame_format)); | 79 controller_id, |
| 80 buffer_id, | |
| 81 frame_format, | |
| 82 timestamp)); | |
| 83 } | |
| 84 | |
| 85 void VideoCaptureHost::OnMailboxBufferReady( | |
| 86 const VideoCaptureControllerID& controller_id, | |
| 87 int buffer_id, | |
| 88 const gpu::MailboxHolder& mailbox_holder, | |
| 89 const media::VideoCaptureFormat& frame_format, | |
| 90 base::TimeTicks timestamp) { | |
| 91 BrowserThread::PostTask( | |
| 92 BrowserThread::IO, | |
| 93 FROM_HERE, | |
| 94 base::Bind(&VideoCaptureHost::DoSendFilledMailboxBufferOnIOThread, | |
|
mcasas
2014/01/21 14:34:02
If the call to VideoCaptureHost::OnMailboxBufferRe
sheu
2014/01/29 01:19:20
Most of the trampolining seems unnecessary here, b
| |
| 95 this, | |
| 96 controller_id, | |
| 97 buffer_id, | |
| 98 mailbox_holder, | |
| 99 frame_format, | |
| 100 timestamp)); | |
| 79 } | 101 } |
| 80 | 102 |
| 81 void VideoCaptureHost::OnEnded(const VideoCaptureControllerID& controller_id) { | 103 void VideoCaptureHost::OnEnded(const VideoCaptureControllerID& controller_id) { |
| 82 DVLOG(1) << "VideoCaptureHost::OnEnded"; | 104 DVLOG(1) << "VideoCaptureHost::OnEnded"; |
| 83 BrowserThread::PostTask( | 105 BrowserThread::PostTask( |
| 84 BrowserThread::IO, FROM_HERE, | 106 BrowserThread::IO, FROM_HERE, |
| 85 base::Bind(&VideoCaptureHost::DoEndedOnIOThread, this, controller_id)); | 107 base::Bind(&VideoCaptureHost::DoEndedOnIOThread, this, controller_id)); |
| 86 } | 108 } |
| 87 | 109 |
| 88 void VideoCaptureHost::DoSendNewBufferOnIOThread( | 110 void VideoCaptureHost::DoSendNewBufferOnIOThread( |
| (...skipping 17 matching lines...) Expand all Loading... | |
| 106 | 128 |
| 107 if (entries_.find(controller_id) == entries_.end()) | 129 if (entries_.find(controller_id) == entries_.end()) |
| 108 return; | 130 return; |
| 109 | 131 |
| 110 Send(new VideoCaptureMsg_FreeBuffer(controller_id.device_id, buffer_id)); | 132 Send(new VideoCaptureMsg_FreeBuffer(controller_id.device_id, buffer_id)); |
| 111 } | 133 } |
| 112 | 134 |
| 113 void VideoCaptureHost::DoSendFilledBufferOnIOThread( | 135 void VideoCaptureHost::DoSendFilledBufferOnIOThread( |
| 114 const VideoCaptureControllerID& controller_id, | 136 const VideoCaptureControllerID& controller_id, |
| 115 int buffer_id, | 137 int buffer_id, |
| 116 base::TimeTicks timestamp, | 138 const media::VideoCaptureFormat& format, |
| 117 const media::VideoCaptureFormat& format) { | 139 base::TimeTicks timestamp) { |
| 118 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); | 140 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); |
| 119 | 141 |
| 120 if (entries_.find(controller_id) == entries_.end()) | 142 if (entries_.find(controller_id) == entries_.end()) |
| 121 return; | 143 return; |
| 122 | 144 |
| 123 Send(new VideoCaptureMsg_BufferReady(controller_id.device_id, buffer_id, | 145 Send(new VideoCaptureMsg_BufferReady( |
| 124 timestamp, format)); | 146 controller_id.device_id, buffer_id, format, timestamp)); |
| 147 } | |
| 148 | |
| 149 void VideoCaptureHost::DoSendFilledMailboxBufferOnIOThread( | |
| 150 const VideoCaptureControllerID& controller_id, | |
| 151 int buffer_id, | |
| 152 const gpu::MailboxHolder& mailbox_holder, | |
| 153 const media::VideoCaptureFormat& format, | |
| 154 base::TimeTicks timestamp) { | |
| 155 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); | |
| 156 | |
| 157 if (entries_.find(controller_id) == entries_.end()) | |
| 158 return; | |
| 159 | |
| 160 Send(new VideoCaptureMsg_MailboxBufferReady( | |
| 161 controller_id.device_id, buffer_id, mailbox_holder, format, timestamp)); | |
| 125 } | 162 } |
| 126 | 163 |
| 127 void VideoCaptureHost::DoHandleErrorOnIOThread( | 164 void VideoCaptureHost::DoHandleErrorOnIOThread( |
| 128 const VideoCaptureControllerID& controller_id) { | 165 const VideoCaptureControllerID& controller_id) { |
| 129 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); | 166 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); |
| 130 | 167 |
| 131 if (entries_.find(controller_id) == entries_.end()) | 168 if (entries_.find(controller_id) == entries_.end()) |
| 132 return; | 169 return; |
| 133 | 170 |
| 134 Send(new VideoCaptureMsg_StateChanged(controller_id.device_id, | 171 Send(new VideoCaptureMsg_StateChanged(controller_id.device_id, |
| (...skipping 101 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 236 DeleteVideoCaptureControllerOnIOThread(controller_id); | 273 DeleteVideoCaptureControllerOnIOThread(controller_id); |
| 237 } | 274 } |
| 238 | 275 |
| 239 void VideoCaptureHost::OnPauseCapture(int device_id) { | 276 void VideoCaptureHost::OnPauseCapture(int device_id) { |
| 240 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); | 277 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); |
| 241 DVLOG(1) << "VideoCaptureHost::OnPauseCapture, device_id " << device_id; | 278 DVLOG(1) << "VideoCaptureHost::OnPauseCapture, device_id " << device_id; |
| 242 // Not used. | 279 // Not used. |
| 243 Send(new VideoCaptureMsg_StateChanged(device_id, VIDEO_CAPTURE_STATE_ERROR)); | 280 Send(new VideoCaptureMsg_StateChanged(device_id, VIDEO_CAPTURE_STATE_ERROR)); |
| 244 } | 281 } |
| 245 | 282 |
| 246 void VideoCaptureHost::OnReceiveEmptyBuffer(int device_id, int buffer_id) { | 283 void VideoCaptureHost::OnReceiveEmptyBuffer(int device_id, |
| 284 int buffer_id, | |
| 285 uint32 sync_point) { | |
| 247 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); | 286 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); |
| 248 | 287 |
| 249 VideoCaptureControllerID controller_id(device_id); | 288 VideoCaptureControllerID controller_id(device_id); |
| 250 EntryMap::iterator it = entries_.find(controller_id); | 289 EntryMap::iterator it = entries_.find(controller_id); |
| 251 if (it != entries_.end()) { | 290 if (it != entries_.end()) { |
| 252 const base::WeakPtr<VideoCaptureController>& controller = it->second; | 291 const base::WeakPtr<VideoCaptureController>& controller = it->second; |
| 253 if (controller) | 292 if (controller) |
| 254 controller->ReturnBuffer(controller_id, this, buffer_id); | 293 controller->ReturnBuffer(controller_id, this, buffer_id, sync_point); |
| 255 } | 294 } |
| 256 } | 295 } |
| 257 | 296 |
| 258 void VideoCaptureHost::DeleteVideoCaptureControllerOnIOThread( | 297 void VideoCaptureHost::DeleteVideoCaptureControllerOnIOThread( |
| 259 const VideoCaptureControllerID& controller_id) { | 298 const VideoCaptureControllerID& controller_id) { |
| 260 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); | 299 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); |
| 261 | 300 |
| 262 EntryMap::iterator it = entries_.find(controller_id); | 301 EntryMap::iterator it = entries_.find(controller_id); |
| 263 if (it == entries_.end()) | 302 if (it == entries_.end()) |
| 264 return; | 303 return; |
| 265 | 304 |
| 266 if (it->second) { | 305 if (it->second) { |
| 267 media_stream_manager_->video_capture_manager()->StopCaptureForClient( | 306 media_stream_manager_->video_capture_manager()->StopCaptureForClient( |
| 268 it->second.get(), controller_id, this); | 307 it->second.get(), controller_id, this); |
| 269 } | 308 } |
| 270 entries_.erase(it); | 309 entries_.erase(it); |
| 271 } | 310 } |
| 272 | 311 |
| 273 } // namespace content | 312 } // namespace content |
| OLD | NEW |