16
16
#include " base/location.h"
17
17
#include " base/logging.h"
18
18
#include " base/memory/raw_ptr.h"
19
+ #include " base/memory/scoped_refptr.h"
19
20
#include " base/metrics/histogram_functions.h"
20
21
#include " base/observer_list.h"
21
22
#include " base/ranges/algorithm.h"
@@ -57,24 +58,26 @@ namespace content {
57
58
// Class used for queuing request for starting a device.
58
59
class VideoCaptureManager ::CaptureDeviceStartRequest {
59
60
public:
60
- CaptureDeviceStartRequest (VideoCaptureController* controller,
61
+ CaptureDeviceStartRequest (scoped_refptr< VideoCaptureController> controller,
61
62
const media::VideoCaptureSessionId& session_id,
62
63
const media::VideoCaptureParams& params);
63
- VideoCaptureController* controller () const { return controller_; }
64
+ scoped_refptr<VideoCaptureController> controller () const {
65
+ return controller_;
66
+ }
64
67
const base::UnguessableToken& session_id () const { return session_id_; }
65
68
media::VideoCaptureParams params () const { return params_; }
66
69
67
70
private:
68
- const raw_ptr <VideoCaptureController> controller_;
71
+ const scoped_refptr <VideoCaptureController> controller_;
69
72
const base::UnguessableToken session_id_;
70
73
const media::VideoCaptureParams params_;
71
74
};
72
75
73
76
VideoCaptureManager::CaptureDeviceStartRequest::CaptureDeviceStartRequest (
74
- VideoCaptureController* controller,
77
+ scoped_refptr< VideoCaptureController> controller,
75
78
const media::VideoCaptureSessionId& session_id,
76
79
const media::VideoCaptureParams& params)
77
- : controller_(controller), session_id_(session_id), params_(params) {}
80
+ : controller_(std::move( controller) ), session_id_(session_id), params_(params) {}
78
81
79
82
VideoCaptureManager::VideoCaptureManager (
80
83
std::unique_ptr<VideoCaptureProvider> video_capture_provider,
@@ -236,12 +239,12 @@ void VideoCaptureManager::Crop(
236
239
237
240
void VideoCaptureManager::QueueStartDevice (
238
241
const media::VideoCaptureSessionId& session_id,
239
- VideoCaptureController* controller,
242
+ scoped_refptr< VideoCaptureController> controller,
240
243
const media::VideoCaptureParams& params) {
241
244
DCHECK_CURRENTLY_ON (BrowserThread::IO);
242
245
DCHECK (lock_time_.is_null ());
243
246
device_start_request_queue_.push_back (
244
- CaptureDeviceStartRequest (controller, session_id, params));
247
+ CaptureDeviceStartRequest (std::move ( controller) , session_id, params));
245
248
if (device_start_request_queue_.size () == 1 )
246
249
ProcessDeviceStartRequestQueue ();
247
250
}
@@ -287,7 +290,8 @@ void VideoCaptureManager::ProcessDeviceStartRequestQueue() {
287
290
if (request == device_start_request_queue_.end ())
288
291
return ;
289
292
290
- VideoCaptureController* const controller = request->controller ();
293
+ scoped_refptr<VideoCaptureController> const controller =
294
+ request->controller ();
291
295
292
296
EmitLogMessage (" VideoCaptureManager::ProcessDeviceStartRequestQueue" , 3 );
293
297
// The unit test VideoCaptureManagerTest.OpenNotExisting requires us to fail
@@ -305,7 +309,7 @@ void VideoCaptureManager::ProcessDeviceStartRequestQueue() {
305
309
GetDeviceInfoById (controller->device_id ());
306
310
if (!device_info) {
307
311
OnDeviceLaunchFailed (
308
- controller,
312
+ controller. get () ,
309
313
media::VideoCaptureError::
310
314
kVideoCaptureManagerProcessDeviceStartQueueDeviceInfoNotFound );
311
315
return ;
@@ -326,7 +330,7 @@ void VideoCaptureManager::ProcessDeviceStartRequestQueue() {
326
330
base::BindOnce ([](scoped_refptr<VideoCaptureManager>,
327
331
scoped_refptr<VideoCaptureController>) {},
328
332
scoped_refptr<VideoCaptureManager>(this ),
329
- GetControllerSharedRef (controller)));
333
+ std::move (controller)));
330
334
}
331
335
332
336
void VideoCaptureManager::OnDeviceLaunched (VideoCaptureController* controller) {
@@ -408,7 +412,7 @@ void VideoCaptureManager::ConnectClient(
408
412
EmitLogMessage (string_stream.str (), 1 );
409
413
}
410
414
411
- VideoCaptureController* controller =
415
+ scoped_refptr< VideoCaptureController> controller =
412
416
GetOrCreateController (session_id, params);
413
417
if (!controller) {
414
418
std::move (done_cb).Run (nullptr );
@@ -871,7 +875,8 @@ media::VideoCaptureDeviceInfo* VideoCaptureManager::GetDeviceInfoById(
871
875
return nullptr ;
872
876
}
873
877
874
- VideoCaptureController* VideoCaptureManager::GetOrCreateController (
878
+ scoped_refptr<VideoCaptureController>
879
+ VideoCaptureManager::GetOrCreateController (
875
880
const media::VideoCaptureSessionId& capture_session_id,
876
881
const media::VideoCaptureParams& params) {
877
882
DCHECK_CURRENTLY_ON (BrowserThread::IO);
@@ -893,10 +898,12 @@ VideoCaptureController* VideoCaptureManager::GetOrCreateController(
893
898
return existing_device;
894
899
}
895
900
896
- VideoCaptureController* new_controller = new VideoCaptureController (
897
- device_info.id , device_info.type , params,
898
- video_capture_provider_->CreateDeviceLauncher (), emit_log_message_cb_);
899
- controllers_.emplace_back (new_controller);
901
+ scoped_refptr<VideoCaptureController> new_controller =
902
+ base::MakeRefCounted<VideoCaptureController>(
903
+ device_info.id , device_info.type , params,
904
+ video_capture_provider_->CreateDeviceLauncher (),
905
+ emit_log_message_cb_);
906
+ controllers_.push_back (new_controller);
900
907
return new_controller;
901
908
}
902
909
0 commit comments