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

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: Fix a memory leak 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..f85925d2df56a23cf928314b38064bdb54e9f642 100644
--- a/content/browser/renderer_host/media/video_capture_host.cc
+++ b/content/browser/renderer_host/media/video_capture_host.cc
@@ -15,12 +15,7 @@
namespace content {
struct VideoCaptureHost::Entry {
Ami GONE FROM CHROMIUM 2013/09/13 21:17:59 What's the point of this struct now? (feels like
ncarter (slow) 2013/09/14 00:07:24 What was the point of it before? The point of thi
- Entry(VideoCaptureController* controller)
- : controller(controller) {}
-
- ~Entry() {}
-
- scoped_refptr<VideoCaptureController> controller;
+ base::WeakPtr<VideoCaptureController> controller;
};
VideoCaptureHost::VideoCaptureHost(MediaStreamManager* media_stream_manager)
@@ -222,7 +217,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] = new Entry();
media_stream_manager_->video_capture_manager()->StartCaptureForClient(
params, PeerHandle(), controller_id, this, base::Bind(
&VideoCaptureHost::OnControllerAdded, this, device_id, params));
@@ -230,28 +225,28 @@ void VideoCaptureHost::OnStartCapture(int device_id,
void VideoCaptureHost::OnControllerAdded(
int device_id, const media::VideoCaptureParams& params,
- VideoCaptureController* controller) {
+ 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) {
+ 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;
@@ -286,8 +281,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())
+ base::WeakPtr<VideoCaptureController> controller = it->second->controller;
+ if (controller)
controller->ReturnBuffer(controller_id, this, buffer_id);
}
}
@@ -300,10 +295,9 @@ void VideoCaptureHost::DeleteVideoCaptureControllerOnIOThread(
if (it == entries_.end())
return;
- VideoCaptureController* controller = it->second->controller.get();
- if (controller) {
+ if (it->second->controller) {
media_stream_manager_->video_capture_manager()->StopCaptureForClient(
- controller, controller_id, this);
+ it->second->controller.get(), controller_id, this);
}
delete it->second;
entries_.erase(controller_id);

Powered by Google App Engine
This is Rietveld 408576698