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

Side by Side Diff: content/renderer/pepper/pepper_platform_video_capture.cc

Issue 120893002: Eliminate video capture thread in renderer (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: upload again Created 6 years, 11 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 | Annotate | Revision Log
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/renderer/pepper/pepper_platform_video_capture.h" 5 #include "content/renderer/pepper/pepper_platform_video_capture.h"
6 6
7 #include "base/bind.h" 7 #include "base/bind.h"
8 #include "base/logging.h" 8 #include "base/logging.h"
9 #include "base/message_loop/message_loop_proxy.h" 9 #include "base/message_loop/message_loop_proxy.h"
10 #include "content/renderer/media/video_capture_impl_manager.h" 10 #include "content/renderer/media/video_capture_impl_manager.h"
(...skipping 10 matching lines...) Expand all
21 const base::WeakPtr<RenderViewImpl>& render_view, 21 const base::WeakPtr<RenderViewImpl>& render_view,
22 const std::string& device_id, 22 const std::string& device_id,
23 const GURL& document_url, 23 const GURL& document_url,
24 PepperVideoCaptureHost* handler) 24 PepperVideoCaptureHost* handler)
25 : render_view_(render_view), 25 : render_view_(render_view),
26 device_id_(device_id), 26 device_id_(device_id),
27 session_id_(0), 27 session_id_(0),
28 handler_proxy_(new media::VideoCaptureHandlerProxy( 28 handler_proxy_(new media::VideoCaptureHandlerProxy(
29 this, base::MessageLoopProxy::current())), 29 this, base::MessageLoopProxy::current())),
30 handler_(handler), 30 handler_(handler),
31 video_capture_(NULL),
32 unbalanced_start_(false), 31 unbalanced_start_(false),
33 pending_open_device_(false), 32 pending_open_device_(false),
34 pending_open_device_id_(-1) { 33 pending_open_device_id_(-1) {
35 // We need to open the device and obtain the label and session ID before 34 // We need to open the device and obtain the label and session ID before
36 // initializing. 35 // initializing.
37 if (render_view_.get()) { 36 if (render_view_.get()) {
38 pending_open_device_id_ = GetMediaDeviceManager()->OpenDevice( 37 pending_open_device_id_ = GetMediaDeviceManager()->OpenDevice(
39 PP_DEVICETYPE_DEV_VIDEOCAPTURE, 38 PP_DEVICETYPE_DEV_VIDEOCAPTURE,
40 device_id, 39 device_id,
41 document_url, 40 document_url,
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after
76 } 75 }
77 76
78 int PepperPlatformVideoCapture::CaptureFrameRate() { 77 int PepperPlatformVideoCapture::CaptureFrameRate() {
79 return handler_proxy_->state().frame_rate; 78 return handler_proxy_->state().frame_rate;
80 } 79 }
81 80
82 void PepperPlatformVideoCapture::DetachEventHandler() { 81 void PepperPlatformVideoCapture::DetachEventHandler() {
83 handler_ = NULL; 82 handler_ = NULL;
84 StopCapture(NULL); 83 StopCapture(NULL);
85 84
86 if (video_capture_) { 85 video_capture_.reset();
87 VideoCaptureImplManager* manager =
88 RenderThreadImpl::current()->video_capture_impl_manager();
89 manager->RemoveDevice(session_id_, handler_proxy_.get());
90 video_capture_ = NULL;
91 }
92 86
93 if (render_view_.get()) { 87 if (render_view_.get()) {
94 if (!label_.empty()) { 88 if (!label_.empty()) {
95 GetMediaDeviceManager()->CloseDevice(label_); 89 GetMediaDeviceManager()->CloseDevice(label_);
96 label_.clear(); 90 label_.clear();
97 } 91 }
98 if (pending_open_device_) { 92 if (pending_open_device_) {
99 GetMediaDeviceManager()->CancelOpenDevice(pending_open_device_id_); 93 GetMediaDeviceManager()->CancelOpenDevice(pending_open_device_id_);
100 pending_open_device_ = false; 94 pending_open_device_ = false;
101 pending_open_device_id_ = -1; 95 pending_open_device_id_ = -1;
(...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after
140 134
141 PepperPlatformVideoCapture::~PepperPlatformVideoCapture() { 135 PepperPlatformVideoCapture::~PepperPlatformVideoCapture() {
142 DCHECK(!video_capture_); 136 DCHECK(!video_capture_);
143 DCHECK(label_.empty()); 137 DCHECK(label_.empty());
144 DCHECK(!pending_open_device_); 138 DCHECK(!pending_open_device_);
145 } 139 }
146 140
147 void PepperPlatformVideoCapture::Initialize() { 141 void PepperPlatformVideoCapture::Initialize() {
148 VideoCaptureImplManager* manager = 142 VideoCaptureImplManager* manager =
149 RenderThreadImpl::current()->video_capture_impl_manager(); 143 RenderThreadImpl::current()->video_capture_impl_manager();
150 video_capture_ = manager->AddDevice(session_id_, handler_proxy_.get()); 144 video_capture_ = manager->UseDevice(session_id_);
151 } 145 }
152 146
153 void PepperPlatformVideoCapture::OnDeviceOpened(int request_id, 147 void PepperPlatformVideoCapture::OnDeviceOpened(int request_id,
154 bool succeeded, 148 bool succeeded,
155 const std::string& label) { 149 const std::string& label) {
156 pending_open_device_ = false; 150 pending_open_device_ = false;
157 pending_open_device_id_ = -1; 151 pending_open_device_id_ = -1;
158 152
159 succeeded = succeeded && render_view_.get(); 153 succeeded = succeeded && render_view_.get();
160 if (succeeded) { 154 if (succeeded) {
161 label_ = label; 155 label_ = label;
162 session_id_ = GetMediaDeviceManager()->GetSessionID( 156 session_id_ = GetMediaDeviceManager()->GetSessionID(
163 PP_DEVICETYPE_DEV_VIDEOCAPTURE, label); 157 PP_DEVICETYPE_DEV_VIDEOCAPTURE, label);
164 Initialize(); 158 Initialize();
165 } 159 }
166 160
167 if (handler_) 161 if (handler_)
168 handler_->OnInitialized(this, succeeded); 162 handler_->OnInitialized(this, succeeded);
169 } 163 }
170 164
171 PepperMediaDeviceManager* 165 PepperMediaDeviceManager*
172 PepperPlatformVideoCapture::GetMediaDeviceManager() { 166 PepperPlatformVideoCapture::GetMediaDeviceManager() {
173 return PepperMediaDeviceManager::GetForRenderView(render_view_.get()); 167 return PepperMediaDeviceManager::GetForRenderView(render_view_.get());
174 } 168 }
175 169
176 } // namespace content 170 } // namespace content
OLDNEW
« no previous file with comments | « content/renderer/pepper/pepper_platform_video_capture.h ('k') | content/renderer/render_thread_impl.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698