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

Unified Diff: content/browser/renderer_host/media/video_capture_host.cc

Issue 24133002: Make VideoCaptureController single-threaded and not ref counted. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: git pull Created 7 years, 3 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 side-by-side diff with in-line comments
Download patch
Index: content/browser/renderer_host/media/video_capture_host.cc
diff --git a/content/browser/renderer_host/media/video_capture_host.cc b/content/browser/renderer_host/media/video_capture_host.cc
index 9d3c6344746433dce87b0abcb4e5da022cd4fd0f..7ed77ae53d358508e785f2ae1ccfd06fd53052f4 100644
--- a/content/browser/renderer_host/media/video_capture_host.cc
+++ b/content/browser/renderer_host/media/video_capture_host.cc
@@ -6,7 +6,6 @@
#include "base/bind.h"
#include "base/memory/scoped_ptr.h"
-#include "base/stl_util.h"
#include "content/browser/browser_main_loop.h"
#include "content/browser/renderer_host/media/media_stream_manager.h"
#include "content/browser/renderer_host/media/video_capture_manager.h"
@@ -14,15 +13,6 @@
namespace content {
-struct VideoCaptureHost::Entry {
- Entry(VideoCaptureController* controller)
- : controller(controller) {}
-
- ~Entry() {}
-
- scoped_refptr<VideoCaptureController> controller;
-};
-
VideoCaptureHost::VideoCaptureHost(MediaStreamManager* media_stream_manager)
: media_stream_manager_(media_stream_manager) {
}
@@ -34,14 +24,13 @@ void VideoCaptureHost::OnChannelClosing() {
// Since the IPC channel is gone, close all requested VideoCaptureDevices.
for (EntryMap::iterator it = entries_.begin(); it != entries_.end(); it++) {
- VideoCaptureController* controller = it->second->controller.get();
+ const base::WeakPtr<VideoCaptureController>& controller = it->second;
if (controller) {
VideoCaptureControllerID controller_id(it->first);
media_stream_manager_->video_capture_manager()->StopCaptureForClient(
- controller, controller_id, this);
+ controller.get(), controller_id, this);
}
}
- STLDeleteValues(&entries_);
}
void VideoCaptureHost::OnDestruct() const {
@@ -222,7 +211,7 @@ void VideoCaptureHost::OnStartCapture(int device_id,
VideoCaptureControllerID controller_id(device_id);
DCHECK(entries_.find(controller_id) == entries_.end());
- entries_[controller_id] = new Entry(NULL);
+ entries_[controller_id] = base::WeakPtr<VideoCaptureController>();
media_stream_manager_->video_capture_manager()->StartCaptureForClient(
params, PeerHandle(), controller_id, this, base::Bind(
&VideoCaptureHost::OnControllerAdded, this, device_id, params));
@@ -230,36 +219,36 @@ void VideoCaptureHost::OnStartCapture(int device_id,
void VideoCaptureHost::OnControllerAdded(
int device_id, const media::VideoCaptureParams& params,
- VideoCaptureController* controller) {
+ const base::WeakPtr<VideoCaptureController>& controller) {
BrowserThread::PostTask(
BrowserThread::IO, FROM_HERE,
base::Bind(&VideoCaptureHost::DoControllerAddedOnIOThread,
- this, device_id, params, make_scoped_refptr(controller)));
+ this, device_id, params, controller));
}
void VideoCaptureHost::DoControllerAddedOnIOThread(
int device_id, const media::VideoCaptureParams params,
- VideoCaptureController* controller) {
+ const base::WeakPtr<VideoCaptureController>& controller) {
DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO));
VideoCaptureControllerID controller_id(device_id);
EntryMap::iterator it = entries_.find(controller_id);
if (it == entries_.end()) {
if (controller) {
media_stream_manager_->video_capture_manager()->StopCaptureForClient(
- controller, controller_id, this);
+ controller.get(), controller_id, this);
}
return;
}
- if (controller == NULL) {
+ if (!controller) {
Send(new VideoCaptureMsg_StateChanged(device_id,
VIDEO_CAPTURE_STATE_ERROR));
- delete it->second;
entries_.erase(controller_id);
return;
}
- it->second->controller = controller;
+ DCHECK(!it->second);
+ it->second = controller;
}
void VideoCaptureHost::OnStopCapture(int device_id) {
@@ -286,8 +275,8 @@ void VideoCaptureHost::OnReceiveEmptyBuffer(int device_id, int buffer_id) {
VideoCaptureControllerID controller_id(device_id);
EntryMap::iterator it = entries_.find(controller_id);
if (it != entries_.end()) {
- scoped_refptr<VideoCaptureController> controller = it->second->controller;
- if (controller.get())
+ const base::WeakPtr<VideoCaptureController>& controller = it->second;
+ if (controller)
controller->ReturnBuffer(controller_id, this, buffer_id);
}
}
@@ -300,13 +289,11 @@ void VideoCaptureHost::DeleteVideoCaptureControllerOnIOThread(
if (it == entries_.end())
return;
- VideoCaptureController* controller = it->second->controller.get();
- if (controller) {
+ if (it->second) {
media_stream_manager_->video_capture_manager()->StopCaptureForClient(
- controller, controller_id, this);
+ it->second.get(), controller_id, this);
}
- delete it->second;
- entries_.erase(controller_id);
+ entries_.erase(it);
}
} // namespace content

Powered by Google App Engine
This is Rietveld 408576698