Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(619)

Side by Side Diff: content/browser/renderer_host/media/video_capture_host.cc

Issue 2430313007: VideoCapture: remove last remnants of IPC (Closed)
Patch Set: rockot@ comment on using ChildThread Created 4 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
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 <memory> 7 #include <memory>
8 8
9 #include "base/bind.h" 9 #include "base/bind.h"
10 #include "base/bind_helpers.h" 10 #include "base/bind_helpers.h"
11 #include "content/browser/browser_main_loop.h" 11 #include "content/browser/browser_main_loop.h"
12 #include "content/browser/renderer_host/media/media_stream_manager.h" 12 #include "content/browser/renderer_host/media/media_stream_manager.h"
13 #include "content/browser/renderer_host/media/video_capture_manager.h" 13 #include "content/browser/renderer_host/media/video_capture_manager.h"
14 #include "content/common/media/video_capture_messages.h" 14 #include "mojo/public/cpp/bindings/strong_binding.h"
15 #include "mojo/public/cpp/system/platform_handle.h"
16 15
17 namespace content { 16 namespace content {
18 17
19 VideoCaptureHost::VideoCaptureHost(MediaStreamManager* media_stream_manager) 18 VideoCaptureHost::VideoCaptureHost(MediaStreamManager* media_stream_manager)
20 : BrowserMessageFilter(VideoCaptureMsgStart), 19 : media_stream_manager_(media_stream_manager),
21 BrowserAssociatedInterface(this, this), 20 weak_factory_(this) {
22 media_stream_manager_(media_stream_manager) { 21 DVLOG(1) << __func__;
23 DCHECK_CURRENTLY_ON(BrowserThread::UI); 22 DCHECK_CURRENTLY_ON(BrowserThread::IO);
24 } 23 }
25 24
26 VideoCaptureHost::~VideoCaptureHost() {} 25 // static
26 void VideoCaptureHost::Create(MediaStreamManager* media_stream_manager,
27 mojom::VideoCaptureHostRequest request) {
28 DVLOG(1) << __func__;
29 DCHECK_CURRENTLY_ON(BrowserThread::IO);
30 mojo::MakeStrongBinding(
31 base::MakeUnique<VideoCaptureHost>(media_stream_manager),
32 std::move(request));
33 }
27 34
28 void VideoCaptureHost::OnChannelClosing() { 35 VideoCaptureHost::~VideoCaptureHost() {
29 // Since the IPC sender is gone, close all requested VideoCaptureDevices.
30 for (auto it = controllers_.begin(); it != controllers_.end(); ) { 36 for (auto it = controllers_.begin(); it != controllers_.end(); ) {
31 const base::WeakPtr<VideoCaptureController>& controller = it->second; 37 const base::WeakPtr<VideoCaptureController>& controller = it->second;
32 if (controller) { 38 if (controller) {
33 const VideoCaptureControllerID controller_id(it->first); 39 const VideoCaptureControllerID controller_id(it->first);
34 media_stream_manager_->video_capture_manager()->StopCaptureForClient( 40 media_stream_manager_->video_capture_manager()->StopCaptureForClient(
35 controller.get(), controller_id, this, false); 41 controller.get(), controller_id, this, false);
36 ++it; 42 ++it;
37 } else { 43 } else {
38 // Remove the entry for this controller_id so that when the controller 44 // Remove the entry for this controller_id so that when the controller
39 // is added, the controller will be notified to stop for this client 45 // is added, the controller will be notified to stop for this client
40 // in DoControllerAdded. 46 // in DoControllerAdded.
41 controllers_.erase(it++); 47 controllers_.erase(it++);
42 } 48 }
43 } 49 }
44 } 50 }
45 51
46 void VideoCaptureHost::OnDestruct() const {
47 BrowserThread::DeleteOnIOThread::Destruct(this);
48 }
49
50 bool VideoCaptureHost::OnMessageReceived(const IPC::Message& message) {
51 NOTREACHED() << __func__ << " should not be receiving messages";
52 return true;
53 }
54
55 void VideoCaptureHost::OnError(VideoCaptureControllerID controller_id) { 52 void VideoCaptureHost::OnError(VideoCaptureControllerID controller_id) {
56 DVLOG(1) << __func__; 53 DVLOG(1) << __func__;
57 DCHECK_CURRENTLY_ON(BrowserThread::IO); 54 DCHECK_CURRENTLY_ON(BrowserThread::IO);
58 BrowserThread::PostTask( 55 BrowserThread::PostTask(
59 BrowserThread::IO, FROM_HERE, 56 BrowserThread::IO, FROM_HERE,
60 base::Bind(&VideoCaptureHost::DoError, this, controller_id)); 57 base::Bind(&VideoCaptureHost::DoError, weak_factory_.GetWeakPtr(),
58 controller_id));
61 } 59 }
62 60
63 void VideoCaptureHost::OnBufferCreated(VideoCaptureControllerID controller_id, 61 void VideoCaptureHost::OnBufferCreated(VideoCaptureControllerID controller_id,
64 mojo::ScopedSharedBufferHandle handle, 62 mojo::ScopedSharedBufferHandle handle,
65 int length, 63 int length,
66 int buffer_id) { 64 int buffer_id) {
67 DCHECK_CURRENTLY_ON(BrowserThread::IO); 65 DCHECK_CURRENTLY_ON(BrowserThread::IO);
68 if (controllers_.find(controller_id) == controllers_.end()) 66 if (controllers_.find(controller_id) == controllers_.end())
69 return; 67 return;
70 68
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after
107 105
108 device_id_to_observer_map_[controller_id]->OnBufferReady(buffer_id, 106 device_id_to_observer_map_[controller_id]->OnBufferReady(buffer_id,
109 std::move(info)); 107 std::move(info));
110 } 108 }
111 109
112 void VideoCaptureHost::OnEnded(VideoCaptureControllerID controller_id) { 110 void VideoCaptureHost::OnEnded(VideoCaptureControllerID controller_id) {
113 DVLOG(1) << __func__; 111 DVLOG(1) << __func__;
114 DCHECK_CURRENTLY_ON(BrowserThread::IO); 112 DCHECK_CURRENTLY_ON(BrowserThread::IO);
115 BrowserThread::PostTask( 113 BrowserThread::PostTask(
116 BrowserThread::IO, FROM_HERE, 114 BrowserThread::IO, FROM_HERE,
117 base::Bind(&VideoCaptureHost::DoEnded, this, controller_id)); 115 base::Bind(&VideoCaptureHost::DoEnded, weak_factory_.GetWeakPtr(),
116 controller_id));
118 } 117 }
119 118
120 void VideoCaptureHost::Start(int32_t device_id, 119 void VideoCaptureHost::Start(int32_t device_id,
121 int32_t session_id, 120 int32_t session_id,
122 const media::VideoCaptureParams& params, 121 const media::VideoCaptureParams& params,
123 mojom::VideoCaptureObserverPtr observer) { 122 mojom::VideoCaptureObserverPtr observer) {
124 DVLOG(1) << __func__ << " session_id=" << session_id 123 DVLOG(1) << __func__ << " session_id=" << session_id
125 << ", device_id=" << device_id << ", format=" 124 << ", device_id=" << device_id << ", format="
126 << media::VideoCaptureFormat::ToString(params.requested_format); 125 << media::VideoCaptureFormat::ToString(params.requested_format);
127 DCHECK_CURRENTLY_ON(BrowserThread::IO); 126 DCHECK_CURRENTLY_ON(BrowserThread::IO);
128 127
129 DCHECK(!base::ContainsKey(device_id_to_observer_map_, device_id)); 128 DCHECK(!base::ContainsKey(device_id_to_observer_map_, device_id));
130 device_id_to_observer_map_[device_id] = std::move(observer); 129 device_id_to_observer_map_[device_id] = std::move(observer);
131 130
132 const VideoCaptureControllerID controller_id(device_id); 131 const VideoCaptureControllerID controller_id(device_id);
133 if (controllers_.find(controller_id) != controllers_.end()) { 132 if (controllers_.find(controller_id) != controllers_.end()) {
134 device_id_to_observer_map_[device_id]->OnStateChanged( 133 device_id_to_observer_map_[device_id]->OnStateChanged(
135 mojom::VideoCaptureState::STARTED); 134 mojom::VideoCaptureState::STARTED);
136 return; 135 return;
137 } 136 }
138 137
139 controllers_[controller_id] = base::WeakPtr<VideoCaptureController>(); 138 controllers_[controller_id] = base::WeakPtr<VideoCaptureController>();
140 media_stream_manager_->video_capture_manager()->StartCaptureForClient( 139 media_stream_manager_->video_capture_manager()->StartCaptureForClient(
141 session_id, 140 session_id, params, controller_id, this,
142 params, 141 base::Bind(&VideoCaptureHost::OnControllerAdded,
143 controller_id, 142 weak_factory_.GetWeakPtr(), device_id));
144 this,
145 base::Bind(&VideoCaptureHost::OnControllerAdded, this, device_id));
146 } 143 }
147 144
148 void VideoCaptureHost::Stop(int32_t device_id) { 145 void VideoCaptureHost::Stop(int32_t device_id) {
149 DVLOG(1) << __func__ << " " << device_id; 146 DVLOG(1) << __func__ << " " << device_id;
150 DCHECK_CURRENTLY_ON(BrowserThread::IO); 147 DCHECK_CURRENTLY_ON(BrowserThread::IO);
151 148
152 VideoCaptureControllerID controller_id(device_id); 149 VideoCaptureControllerID controller_id(device_id);
153 150
154 if (base::ContainsKey(device_id_to_observer_map_, device_id)) { 151 if (base::ContainsKey(device_id_to_observer_map_, device_id)) {
155 device_id_to_observer_map_[device_id]->OnStateChanged( 152 device_id_to_observer_map_[device_id]->OnStateChanged(
(...skipping 172 matching lines...) Expand 10 before | Expand all | Expand 10 after
328 const base::WeakPtr<VideoCaptureController> controller = it->second; 325 const base::WeakPtr<VideoCaptureController> controller = it->second;
329 controllers_.erase(it); 326 controllers_.erase(it);
330 if (!controller) 327 if (!controller)
331 return; 328 return;
332 329
333 media_stream_manager_->video_capture_manager()->StopCaptureForClient( 330 media_stream_manager_->video_capture_manager()->StopCaptureForClient(
334 controller.get(), controller_id, this, on_error); 331 controller.get(), controller_id, this, on_error);
335 } 332 }
336 333
337 } // namespace content 334 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698