Index: media/capture/video/linux/video_capture_device_linux.cc |
diff --git a/media/capture/video/linux/video_capture_device_linux.cc b/media/capture/video/linux/video_capture_device_linux.cc |
index d9b25b409e1b9cab072d87be4515700b6c57b1dd..7bb4ad09cfb02e31f5806c227eab04fa8e84df5a 100644 |
--- a/media/capture/video/linux/video_capture_device_linux.cc |
+++ b/media/capture/video/linux/video_capture_device_linux.cc |
@@ -57,7 +57,7 @@ void VideoCaptureDeviceLinux::AllocateAndStart( |
const int line_frequency = |
TranslatePowerLineFrequencyToV4L2(GetPowerLineFrequency(params)); |
- capture_impl_ = new V4L2CaptureDelegate( |
+ capture_impl_ = base::MakeUnique<V4L2CaptureDelegate>( |
device_descriptor_, v4l2_thread_.task_runner(), line_frequency); |
if (!capture_impl_) { |
client->OnError(FROM_HERE, "Failed to create VideoCaptureDelegate"); |
@@ -65,7 +65,8 @@ void VideoCaptureDeviceLinux::AllocateAndStart( |
} |
v4l2_thread_.task_runner()->PostTask( |
FROM_HERE, |
- base::Bind(&V4L2CaptureDelegate::AllocateAndStart, capture_impl_, |
+ base::Bind(&V4L2CaptureDelegate::AllocateAndStart, |
+ base::Unretained(capture_impl_.get()), |
mcasas
2017/04/12 17:32:55
Get a WeakPtr to |capture_impl_| to be used on |v4
Chandan
2017/04/13 09:06:07
Done.
|
params.requested_format.frame_size.width(), |
params.requested_format.frame_size.height(), |
params.requested_format.frame_rate, base::Passed(&client))); |
chfremer
2017/04/12 17:13:46
Please add a comment explaining why the use of bas
Chandan
2017/04/13 09:06:07
We now use WeakPtr to |capture_impl_| instead of b
|
@@ -79,16 +80,16 @@ void VideoCaptureDeviceLinux::StopAndDeAllocate() { |
if (!v4l2_thread_.IsRunning()) |
return; // Wrong state. |
v4l2_thread_.task_runner()->PostTask( |
- FROM_HERE, |
- base::Bind(&V4L2CaptureDelegate::StopAndDeAllocate, capture_impl_)); |
+ FROM_HERE, base::Bind(&V4L2CaptureDelegate::StopAndDeAllocate, |
+ base::Unretained(capture_impl_.get()))); |
+ v4l2_thread_.task_runner()->DeleteSoon(FROM_HERE, capture_impl_.release()); |
v4l2_thread_.Stop(); |
- |
- capture_impl_ = nullptr; |
} |
void VideoCaptureDeviceLinux::TakePhoto(TakePhotoCallback callback) { |
DCHECK(capture_impl_); |
- auto functor = base::Bind(&V4L2CaptureDelegate::TakePhoto, capture_impl_, |
+ auto functor = base::Bind(&V4L2CaptureDelegate::TakePhoto, |
+ base::Unretained(capture_impl_.get()), |
base::Passed(&callback)); |
if (!v4l2_thread_.IsRunning()) { |
// We have to wait until we get the device AllocateAndStart()ed. |
@@ -101,7 +102,8 @@ void VideoCaptureDeviceLinux::TakePhoto(TakePhotoCallback callback) { |
void VideoCaptureDeviceLinux::GetPhotoCapabilities( |
GetPhotoCapabilitiesCallback callback) { |
auto functor = base::Bind(&V4L2CaptureDelegate::GetPhotoCapabilities, |
- capture_impl_, base::Passed(&callback)); |
+ base::Unretained(capture_impl_.get()), |
+ base::Passed(&callback)); |
if (!v4l2_thread_.IsRunning()) { |
// We have to wait until we get the device AllocateAndStart()ed. |
photo_requests_queue_.push_back(std::move(functor)); |
@@ -113,9 +115,9 @@ void VideoCaptureDeviceLinux::GetPhotoCapabilities( |
void VideoCaptureDeviceLinux::SetPhotoOptions( |
mojom::PhotoSettingsPtr settings, |
SetPhotoOptionsCallback callback) { |
- auto functor = |
- base::Bind(&V4L2CaptureDelegate::SetPhotoOptions, capture_impl_, |
- base::Passed(&settings), base::Passed(&callback)); |
+ auto functor = base::Bind(&V4L2CaptureDelegate::SetPhotoOptions, |
+ base::Unretained(capture_impl_.get()), |
+ base::Passed(&settings), base::Passed(&callback)); |
if (!v4l2_thread_.IsRunning()) { |
// We have to wait until we get the device AllocateAndStart()ed. |
photo_requests_queue_.push_back(std::move(functor)); |
@@ -127,8 +129,8 @@ void VideoCaptureDeviceLinux::SetPhotoOptions( |
void VideoCaptureDeviceLinux::SetRotation(int rotation) { |
if (v4l2_thread_.IsRunning()) { |
v4l2_thread_.task_runner()->PostTask( |
- FROM_HERE, |
- base::Bind(&V4L2CaptureDelegate::SetRotation, capture_impl_, rotation)); |
+ FROM_HERE, base::Bind(&V4L2CaptureDelegate::SetRotation, |
+ base::Unretained(capture_impl_.get()), rotation)); |
} |
} |