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/bind_helpers.h" | 8 #include "base/bind_helpers.h" |
| 9 #include "base/memory/scoped_ptr.h" | 9 #include "base/memory/scoped_ptr.h" |
| 10 #include "content/browser/browser_main_loop.h" | 10 #include "content/browser/browser_main_loop.h" |
| 11 #include "content/browser/renderer_host/media/media_stream_manager.h" | 11 #include "content/browser/renderer_host/media/media_stream_manager.h" |
| 12 #include "content/browser/renderer_host/media/video_capture_manager.h" | 12 #include "content/browser/renderer_host/media/video_capture_manager.h" |
| 13 #include "content/common/media/video_capture_messages.h" | 13 #include "content/common/media/video_capture_messages.h" |
| 14 #include "media/base/bind_to_current_loop.h" | |
| 14 | 15 |
| 15 namespace content { | 16 namespace content { |
| 16 | 17 |
| 17 VideoCaptureHost::VideoCaptureHost(MediaStreamManager* media_stream_manager) | 18 VideoCaptureHost::VideoCaptureHost(MediaStreamManager* media_stream_manager) |
| 18 : BrowserMessageFilter(VideoCaptureMsgStart), | 19 : BrowserMessageFilter(VideoCaptureMsgStart), |
| 19 media_stream_manager_(media_stream_manager) { | 20 media_stream_manager_(media_stream_manager) { |
| 21 DCHECK_CURRENTLY_ON(BrowserThread::UI); | |
| 20 } | 22 } |
| 21 | 23 |
| 22 VideoCaptureHost::~VideoCaptureHost() {} | 24 VideoCaptureHost::~VideoCaptureHost() {} |
| 23 | 25 |
| 24 void VideoCaptureHost::OnChannelClosing() { | 26 void VideoCaptureHost::OnChannelClosing() { |
| 25 // Since the IPC sender is gone, close all requested VideoCaptureDevices. | 27 // Since the IPC sender is gone, close all requested VideoCaptureDevices. |
| 26 for (EntryMap::iterator it = entries_.begin(); it != entries_.end(); ) { | 28 for (EntryMap::iterator it = entries_.begin(); it != entries_.end(); ) { |
| 27 const base::WeakPtr<VideoCaptureController>& controller = it->second; | 29 const base::WeakPtr<VideoCaptureController>& controller = it->second; |
| 28 if (controller) { | 30 if (controller) { |
| 29 VideoCaptureControllerID controller_id(it->first); | 31 const VideoCaptureControllerID controller_id(it->first); |
| 30 media_stream_manager_->video_capture_manager()->StopCaptureForClient( | 32 media_stream_manager_->video_capture_manager()->StopCaptureForClient( |
| 31 controller.get(), controller_id, this, false); | 33 controller.get(), controller_id, this, false); |
| 32 ++it; | 34 ++it; |
| 33 } else { | 35 } else { |
| 34 // Remove the entry for this controller_id so that when the controller | 36 // Remove the entry for this controller_id so that when the controller |
| 35 // is added, the controller will be notified to stop for this client | 37 // is added, the controller will be notified to stop for this client |
| 36 // in DoControllerAddedOnIOThread. | 38 // in DoControllerAdded. |
| 37 entries_.erase(it++); | 39 entries_.erase(it++); |
| 38 } | 40 } |
| 39 } | 41 } |
| 40 } | 42 } |
| 41 | 43 |
| 42 void VideoCaptureHost::OnDestruct() const { | 44 void VideoCaptureHost::OnDestruct() const { |
| 43 BrowserThread::DeleteOnIOThread::Destruct(this); | 45 BrowserThread::DeleteOnIOThread::Destruct(this); |
| 44 } | 46 } |
| 45 | 47 |
| 46 /////////////////////////////////////////////////////////////////////////////// | 48 /////////////////////////////////////////////////////////////////////////////// |
| 47 | 49 |
| 48 // Implements VideoCaptureControllerEventHandler. | 50 // Implements VideoCaptureControllerEventHandler. |
| 49 void VideoCaptureHost::OnError(const VideoCaptureControllerID& controller_id) { | 51 void VideoCaptureHost::OnError(VideoCaptureControllerID controller_id) { |
| 50 DVLOG(1) << "VideoCaptureHost::OnError"; | 52 DVLOG(1) << "VideoCaptureHost::OnError"; |
| 53 DCHECK_CURRENTLY_ON(BrowserThread::IO); | |
| 51 BrowserThread::PostTask( | 54 BrowserThread::PostTask( |
| 52 BrowserThread::IO, FROM_HERE, | 55 BrowserThread::IO, FROM_HERE, |
| 53 base::Bind(&VideoCaptureHost::DoHandleErrorOnIOThread, | 56 base::Bind(&VideoCaptureHost::DoError, this, controller_id)); |
| 54 this, controller_id)); | |
| 55 } | 57 } |
| 56 | 58 |
| 57 void VideoCaptureHost::OnBufferCreated( | 59 void VideoCaptureHost::OnBufferCreated(VideoCaptureControllerID controller_id, |
| 58 const VideoCaptureControllerID& controller_id, | 60 base::SharedMemoryHandle handle, |
| 59 base::SharedMemoryHandle handle, | 61 int length, |
| 60 int length, | 62 int buffer_id) { |
| 61 int buffer_id) { | 63 DCHECK_CURRENTLY_ON(BrowserThread::IO); |
| 62 BrowserThread::PostTask( | 64 if (entries_.find(controller_id) == entries_.end()) |
| 63 BrowserThread::IO, FROM_HERE, | 65 return; |
| 64 base::Bind(&VideoCaptureHost::DoSendNewBufferOnIOThread, | 66 |
| 65 this, controller_id, handle, length, buffer_id)); | 67 Send(new VideoCaptureMsg_NewBuffer(controller_id, handle, length, buffer_id)); |
| 66 } | 68 } |
| 67 | 69 |
| 68 void VideoCaptureHost::OnBufferDestroyed( | 70 void VideoCaptureHost::OnBufferDestroyed(VideoCaptureControllerID controller_id, |
| 69 const VideoCaptureControllerID& controller_id, | 71 int buffer_id) { |
| 70 int buffer_id) { | 72 DCHECK_CURRENTLY_ON(BrowserThread::IO); |
| 71 BrowserThread::PostTask( | 73 if (entries_.find(controller_id) == entries_.end()) |
| 72 BrowserThread::IO, FROM_HERE, | 74 return; |
| 73 base::Bind(&VideoCaptureHost::DoSendFreeBufferOnIOThread, | 75 |
| 74 this, controller_id, buffer_id)); | 76 Send(new VideoCaptureMsg_FreeBuffer(controller_id, buffer_id)); |
| 75 } | 77 } |
| 76 | 78 |
| 77 void VideoCaptureHost::OnBufferReady( | 79 void VideoCaptureHost::OnBufferReady( |
| 78 const VideoCaptureControllerID& controller_id, | 80 VideoCaptureControllerID controller_id, |
| 79 int buffer_id, | 81 int buffer_id, |
| 80 const gfx::Size& coded_size, | 82 const gfx::Size& coded_size, |
| 81 const gfx::Rect& visible_rect, | 83 const gfx::Rect& visible_rect, |
| 82 base::TimeTicks timestamp, | 84 const base::TimeTicks& timestamp, |
| 83 scoped_ptr<base::DictionaryValue> metadata) { | |
| 84 BrowserThread::PostTask( | |
| 85 BrowserThread::IO, | |
| 86 FROM_HERE, | |
| 87 base::Bind(&VideoCaptureHost::DoSendFilledBufferOnIOThread, | |
| 88 this, | |
| 89 controller_id, | |
| 90 buffer_id, | |
| 91 coded_size, | |
| 92 visible_rect, | |
| 93 timestamp, | |
| 94 base::Passed(&metadata))); | |
| 95 } | |
| 96 | |
| 97 void VideoCaptureHost::OnMailboxBufferReady( | |
| 98 const VideoCaptureControllerID& controller_id, | |
| 99 int buffer_id, | |
| 100 const gpu::MailboxHolder& mailbox_holder, | |
| 101 const gfx::Size& packed_frame_size, | |
| 102 base::TimeTicks timestamp, | |
| 103 scoped_ptr<base::DictionaryValue> metadata) { | |
| 104 BrowserThread::PostTask( | |
| 105 BrowserThread::IO, | |
| 106 FROM_HERE, | |
| 107 base::Bind(&VideoCaptureHost::DoSendFilledMailboxBufferOnIOThread, | |
| 108 this, | |
| 109 controller_id, | |
| 110 buffer_id, | |
| 111 mailbox_holder, | |
| 112 packed_frame_size, | |
| 113 timestamp, | |
| 114 base::Passed(&metadata))); | |
| 115 } | |
| 116 | |
| 117 void VideoCaptureHost::OnEnded(const VideoCaptureControllerID& controller_id) { | |
| 118 DVLOG(1) << "VideoCaptureHost::OnEnded"; | |
| 119 BrowserThread::PostTask( | |
| 120 BrowserThread::IO, FROM_HERE, | |
| 121 base::Bind(&VideoCaptureHost::DoEndedOnIOThread, this, controller_id)); | |
| 122 } | |
| 123 | |
| 124 void VideoCaptureHost::DoSendNewBufferOnIOThread( | |
| 125 const VideoCaptureControllerID& controller_id, | |
| 126 base::SharedMemoryHandle handle, | |
| 127 int length, | |
| 128 int buffer_id) { | |
| 129 DCHECK_CURRENTLY_ON(BrowserThread::IO); | |
| 130 | |
| 131 if (entries_.find(controller_id) == entries_.end()) | |
| 132 return; | |
| 133 | |
| 134 Send(new VideoCaptureMsg_NewBuffer(controller_id.device_id, handle, | |
| 135 length, buffer_id)); | |
| 136 } | |
| 137 | |
| 138 void VideoCaptureHost::DoSendFreeBufferOnIOThread( | |
| 139 const VideoCaptureControllerID& controller_id, | |
| 140 int buffer_id) { | |
| 141 DCHECK_CURRENTLY_ON(BrowserThread::IO); | |
| 142 | |
| 143 if (entries_.find(controller_id) == entries_.end()) | |
| 144 return; | |
| 145 | |
| 146 Send(new VideoCaptureMsg_FreeBuffer(controller_id.device_id, buffer_id)); | |
| 147 } | |
| 148 | |
| 149 void VideoCaptureHost::DoSendFilledBufferOnIOThread( | |
| 150 const VideoCaptureControllerID& controller_id, | |
| 151 int buffer_id, | |
| 152 const gfx::Size& coded_size, | |
| 153 const gfx::Rect& visible_rect, | |
| 154 base::TimeTicks timestamp, | |
| 155 scoped_ptr<base::DictionaryValue> metadata) { | 85 scoped_ptr<base::DictionaryValue> metadata) { |
| 156 DCHECK_CURRENTLY_ON(BrowserThread::IO); | 86 DCHECK_CURRENTLY_ON(BrowserThread::IO); |
| 157 | |
| 158 if (entries_.find(controller_id) == entries_.end()) | 87 if (entries_.find(controller_id) == entries_.end()) |
| 159 return; | 88 return; |
| 160 | 89 |
| 161 VideoCaptureMsg_BufferReady_Params params; | 90 VideoCaptureMsg_BufferReady_Params params; |
| 162 params.device_id = controller_id.device_id; | 91 params.device_id = controller_id; |
| 163 params.buffer_id = buffer_id; | 92 params.buffer_id = buffer_id; |
| 164 params.coded_size = coded_size; | 93 params.coded_size = coded_size; |
| 165 params.visible_rect = visible_rect; | 94 params.visible_rect = visible_rect; |
| 166 params.timestamp = timestamp; | 95 params.timestamp = timestamp; |
| 167 if (metadata) | 96 if (metadata) |
| 168 params.metadata.Swap(metadata.get()); | 97 params.metadata.Swap(metadata.get()); |
| 169 Send(new VideoCaptureMsg_BufferReady(params)); | 98 Send(new VideoCaptureMsg_BufferReady(params)); |
| 170 } | 99 } |
| 171 | 100 |
| 172 void VideoCaptureHost::DoSendFilledMailboxBufferOnIOThread( | 101 void VideoCaptureHost::OnMailboxBufferReady( |
| 173 const VideoCaptureControllerID& controller_id, | 102 VideoCaptureControllerID controller_id, |
| 174 int buffer_id, | 103 int buffer_id, |
| 175 const gpu::MailboxHolder& mailbox_holder, | 104 const gpu::MailboxHolder& mailbox_holder, |
| 176 const gfx::Size& packed_frame_size, | 105 const gfx::Size& packed_frame_size, |
| 177 base::TimeTicks timestamp, | 106 const base::TimeTicks& timestamp, |
| 178 scoped_ptr<base::DictionaryValue> metadata) { | 107 scoped_ptr<base::DictionaryValue> metadata) { |
| 179 DCHECK_CURRENTLY_ON(BrowserThread::IO); | 108 DCHECK_CURRENTLY_ON(BrowserThread::IO); |
| 180 | 109 |
| 181 if (entries_.find(controller_id) == entries_.end()) | 110 if (entries_.find(controller_id) == entries_.end()) |
| 182 return; | 111 return; |
| 183 | 112 |
| 184 VideoCaptureMsg_MailboxBufferReady_Params params; | 113 VideoCaptureMsg_MailboxBufferReady_Params params; |
| 185 params.device_id = controller_id.device_id; | 114 params.device_id = controller_id; |
| 186 params.buffer_id = buffer_id; | 115 params.buffer_id = buffer_id; |
| 187 params.mailbox_holder = mailbox_holder; | 116 params.mailbox_holder = mailbox_holder; |
| 188 params.packed_frame_size = packed_frame_size; | 117 params.packed_frame_size = packed_frame_size; |
| 189 params.timestamp = timestamp; | 118 params.timestamp = timestamp; |
| 190 if (metadata) | 119 if (metadata) |
| 191 params.metadata.Swap(metadata.get()); | 120 params.metadata.Swap(metadata.get()); |
| 192 Send(new VideoCaptureMsg_MailboxBufferReady(params)); | 121 Send(new VideoCaptureMsg_MailboxBufferReady(params)); |
| 193 } | 122 } |
| 194 | 123 |
| 195 void VideoCaptureHost::DoHandleErrorOnIOThread( | 124 void VideoCaptureHost::OnEnded(VideoCaptureControllerID controller_id) { |
| 196 const VideoCaptureControllerID& controller_id) { | 125 DVLOG(1) << "VideoCaptureHost::OnEnded"; |
| 197 DCHECK_CURRENTLY_ON(BrowserThread::IO); | 126 DCHECK_CURRENTLY_ON(BrowserThread::IO); |
| 127 BrowserThread::PostTask( | |
| 128 BrowserThread::IO, FROM_HERE, | |
| 129 base::Bind(&VideoCaptureHost::DoEnded, this, controller_id)); | |
| 130 } | |
| 198 | 131 |
| 132 void VideoCaptureHost::DoError(VideoCaptureControllerID controller_id) { | |
| 133 DVLOG(1) << "VideoCaptureHost::DoError"; | |
| 134 DCHECK_CURRENTLY_ON(BrowserThread::IO); | |
| 199 if (entries_.find(controller_id) == entries_.end()) | 135 if (entries_.find(controller_id) == entries_.end()) |
| 200 return; | 136 return; |
| 201 | 137 |
| 202 Send(new VideoCaptureMsg_StateChanged(controller_id.device_id, | 138 Send(new VideoCaptureMsg_StateChanged(controller_id, |
| 203 VIDEO_CAPTURE_STATE_ERROR)); | 139 VIDEO_CAPTURE_STATE_ERROR)); |
| 204 DeleteVideoCaptureControllerOnIOThread(controller_id, true); | 140 DeleteVideoCaptureController(controller_id, true); |
| 205 } | 141 } |
| 206 | 142 |
| 207 void VideoCaptureHost::DoEndedOnIOThread( | 143 void VideoCaptureHost::DoEnded(VideoCaptureControllerID controller_id) { |
| 208 const VideoCaptureControllerID& controller_id) { | 144 DVLOG(1) << "VideoCaptureHost::DoEnded"; |
| 209 DCHECK_CURRENTLY_ON(BrowserThread::IO); | 145 DCHECK_CURRENTLY_ON(BrowserThread::IO); |
| 210 DVLOG(1) << "VideoCaptureHost::DoEndedOnIOThread"; | |
| 211 if (entries_.find(controller_id) == entries_.end()) | 146 if (entries_.find(controller_id) == entries_.end()) |
| 212 return; | 147 return; |
| 213 | 148 |
| 214 Send(new VideoCaptureMsg_StateChanged(controller_id.device_id, | 149 Send(new VideoCaptureMsg_StateChanged(controller_id, |
| 215 VIDEO_CAPTURE_STATE_ENDED)); | 150 VIDEO_CAPTURE_STATE_ENDED)); |
| 216 DeleteVideoCaptureControllerOnIOThread(controller_id, false); | 151 DeleteVideoCaptureController(controller_id, false); |
| 217 } | 152 } |
| 218 | 153 |
| 219 /////////////////////////////////////////////////////////////////////////////// | 154 /////////////////////////////////////////////////////////////////////////////// |
| 220 // IPC Messages handler. | 155 // IPC Messages handler. |
| 221 bool VideoCaptureHost::OnMessageReceived(const IPC::Message& message) { | 156 bool VideoCaptureHost::OnMessageReceived(const IPC::Message& message) { |
| 222 bool handled = true; | 157 bool handled = true; |
| 223 IPC_BEGIN_MESSAGE_MAP(VideoCaptureHost, message) | 158 IPC_BEGIN_MESSAGE_MAP(VideoCaptureHost, message) |
| 224 IPC_MESSAGE_HANDLER(VideoCaptureHostMsg_Start, OnStartCapture) | 159 IPC_MESSAGE_HANDLER(VideoCaptureHostMsg_Start, OnStartCapture) |
| 225 IPC_MESSAGE_HANDLER(VideoCaptureHostMsg_Pause, OnPauseCapture) | 160 IPC_MESSAGE_HANDLER(VideoCaptureHostMsg_Pause, OnPauseCapture) |
| 226 IPC_MESSAGE_HANDLER(VideoCaptureHostMsg_Resume, OnResumeCapture) | 161 IPC_MESSAGE_HANDLER(VideoCaptureHostMsg_Resume, OnResumeCapture) |
| (...skipping 29 matching lines...) Expand all Loading... | |
| 256 return; | 191 return; |
| 257 } | 192 } |
| 258 | 193 |
| 259 entries_[controller_id] = base::WeakPtr<VideoCaptureController>(); | 194 entries_[controller_id] = base::WeakPtr<VideoCaptureController>(); |
| 260 media_stream_manager_->video_capture_manager()->StartCaptureForClient( | 195 media_stream_manager_->video_capture_manager()->StartCaptureForClient( |
| 261 session_id, | 196 session_id, |
| 262 params, | 197 params, |
| 263 PeerHandle(), | 198 PeerHandle(), |
| 264 controller_id, | 199 controller_id, |
| 265 this, | 200 this, |
| 266 base::Bind(&VideoCaptureHost::OnControllerAdded, this, device_id)); | 201 media::BindToCurrentLoop( |
|
perkj_chrome
2015/03/17 06:46:59
Why do you do this extra bindtocurrentloop? OnCont
mcasas
2015/03/17 15:57:44
Not needed indeed. I think I started by changing t
| |
| 202 base::Bind(&VideoCaptureHost::OnControllerAdded, this, device_id))); | |
| 267 } | 203 } |
| 268 | 204 |
| 269 void VideoCaptureHost::OnControllerAdded( | 205 void VideoCaptureHost::OnControllerAdded( |
| 270 int device_id, | 206 int device_id, |
| 271 const base::WeakPtr<VideoCaptureController>& controller) { | 207 const base::WeakPtr<VideoCaptureController>& controller) { |
| 272 DCHECK_CURRENTLY_ON(BrowserThread::IO); | 208 DCHECK_CURRENTLY_ON(BrowserThread::IO); |
| 273 BrowserThread::PostTask( | |
| 274 BrowserThread::IO, | |
| 275 FROM_HERE, | |
| 276 base::Bind(&VideoCaptureHost::DoControllerAddedOnIOThread, | |
| 277 this, | |
| 278 device_id, | |
| 279 controller)); | |
| 280 } | |
| 281 | |
| 282 void VideoCaptureHost::DoControllerAddedOnIOThread( | |
| 283 int device_id, | |
| 284 const base::WeakPtr<VideoCaptureController>& controller) { | |
| 285 DCHECK_CURRENTLY_ON(BrowserThread::IO); | |
| 286 VideoCaptureControllerID controller_id(device_id); | 209 VideoCaptureControllerID controller_id(device_id); |
| 287 EntryMap::iterator it = entries_.find(controller_id); | 210 EntryMap::iterator it = entries_.find(controller_id); |
| 288 if (it == entries_.end()) { | 211 if (it == entries_.end()) { |
| 289 if (controller) { | 212 if (controller) { |
| 290 media_stream_manager_->video_capture_manager()->StopCaptureForClient( | 213 media_stream_manager_->video_capture_manager()->StopCaptureForClient( |
| 291 controller.get(), controller_id, this, false); | 214 controller.get(), controller_id, this, false); |
| 292 } | 215 } |
| 293 return; | 216 return; |
| 294 } | 217 } |
| 295 | 218 |
| 296 if (!controller) { | 219 if (!controller) { |
| 297 Send(new VideoCaptureMsg_StateChanged(device_id, | 220 Send(new VideoCaptureMsg_StateChanged(device_id, |
| 298 VIDEO_CAPTURE_STATE_ERROR)); | 221 VIDEO_CAPTURE_STATE_ERROR)); |
| 299 entries_.erase(controller_id); | 222 entries_.erase(controller_id); |
| 300 return; | 223 return; |
| 301 } | 224 } |
| 302 | 225 |
| 303 DCHECK(!it->second); | 226 DCHECK(!it->second); |
| 304 it->second = controller; | 227 it->second = controller; |
| 305 } | 228 } |
| 306 | 229 |
| 307 void VideoCaptureHost::OnStopCapture(int device_id) { | 230 void VideoCaptureHost::OnStopCapture(int device_id) { |
| 308 DCHECK_CURRENTLY_ON(BrowserThread::IO); | 231 DCHECK_CURRENTLY_ON(BrowserThread::IO); |
| 309 DVLOG(1) << "VideoCaptureHost::OnStopCapture, device_id " << device_id; | 232 DVLOG(1) << "VideoCaptureHost::OnStopCapture, device_id " << device_id; |
| 310 | 233 |
| 311 VideoCaptureControllerID controller_id(device_id); | 234 VideoCaptureControllerID controller_id(device_id); |
| 312 | 235 |
| 313 Send(new VideoCaptureMsg_StateChanged(device_id, | 236 Send(new VideoCaptureMsg_StateChanged(device_id, |
| 314 VIDEO_CAPTURE_STATE_STOPPED)); | 237 VIDEO_CAPTURE_STATE_STOPPED)); |
| 315 DeleteVideoCaptureControllerOnIOThread(controller_id, false); | 238 DeleteVideoCaptureController(controller_id, false); |
| 316 } | 239 } |
| 317 | 240 |
| 318 void VideoCaptureHost::OnPauseCapture(int device_id) { | 241 void VideoCaptureHost::OnPauseCapture(int device_id) { |
| 319 DCHECK_CURRENTLY_ON(BrowserThread::IO); | 242 DCHECK_CURRENTLY_ON(BrowserThread::IO); |
| 320 DVLOG(1) << "VideoCaptureHost::OnPauseCapture, device_id " << device_id; | 243 DVLOG(1) << "VideoCaptureHost::OnPauseCapture, device_id " << device_id; |
| 321 | 244 |
| 322 VideoCaptureControllerID controller_id(device_id); | 245 VideoCaptureControllerID controller_id(device_id); |
| 323 EntryMap::iterator it = entries_.find(controller_id); | 246 EntryMap::iterator it = entries_.find(controller_id); |
| 324 if (it == entries_.end()) | 247 if (it == entries_.end()) |
| 325 return; | 248 return; |
| (...skipping 63 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 389 media::VideoCaptureFormats formats_in_use; | 312 media::VideoCaptureFormats formats_in_use; |
| 390 if (!media_stream_manager_->video_capture_manager()->GetDeviceFormatsInUse( | 313 if (!media_stream_manager_->video_capture_manager()->GetDeviceFormatsInUse( |
| 391 capture_session_id, &formats_in_use)) { | 314 capture_session_id, &formats_in_use)) { |
| 392 DVLOG(1) << "Could not retrieve device format(s) in use for device_id=" | 315 DVLOG(1) << "Could not retrieve device format(s) in use for device_id=" |
| 393 << device_id << " capture_session_id=" << capture_session_id; | 316 << device_id << " capture_session_id=" << capture_session_id; |
| 394 } | 317 } |
| 395 Send(new VideoCaptureMsg_DeviceFormatsInUseReceived(device_id, | 318 Send(new VideoCaptureMsg_DeviceFormatsInUseReceived(device_id, |
| 396 formats_in_use)); | 319 formats_in_use)); |
| 397 } | 320 } |
| 398 | 321 |
| 399 void VideoCaptureHost::DeleteVideoCaptureControllerOnIOThread( | 322 void VideoCaptureHost::DeleteVideoCaptureController( |
| 400 const VideoCaptureControllerID& controller_id, bool on_error) { | 323 VideoCaptureControllerID controller_id, bool on_error) { |
| 401 DCHECK_CURRENTLY_ON(BrowserThread::IO); | 324 DCHECK_CURRENTLY_ON(BrowserThread::IO); |
| 402 | 325 |
| 403 EntryMap::iterator it = entries_.find(controller_id); | 326 EntryMap::iterator it = entries_.find(controller_id); |
| 404 if (it == entries_.end()) | 327 if (it == entries_.end()) |
| 405 return; | 328 return; |
| 406 | 329 |
| 407 if (it->second) { | 330 if (it->second) { |
| 408 media_stream_manager_->video_capture_manager()->StopCaptureForClient( | 331 media_stream_manager_->video_capture_manager()->StopCaptureForClient( |
| 409 it->second.get(), controller_id, this, on_error); | 332 it->second.get(), controller_id, this, on_error); |
| 410 } | 333 } |
| 411 entries_.erase(it); | 334 entries_.erase(it); |
| 412 } | 335 } |
| 413 | 336 |
| 414 } // namespace content | 337 } // namespace content |
| OLD | NEW |