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

Unified Diff: media/capture/video/linux/video_capture_device_linux.cc

Issue 2815643002: Make V4L2CaptureDelegate non-ref-counted (Closed)
Patch Set: mcasas@ comment Created 3 years, 8 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
« no previous file with comments | « media/capture/video/linux/video_capture_device_linux.h ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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..ff0402bfa1278db5c3696143878331c7ff852aba 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,
+ capture_impl_->GetWeakPtr(),
params.requested_format.frame_size.width(),
params.requested_format.frame_size.height(),
params.requested_format.frame_rate, base::Passed(&client)));
@@ -79,8 +80,9 @@ 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,
+ capture_impl_->GetWeakPtr()));
+ v4l2_thread_.task_runner()->DeleteSoon(FROM_HERE, capture_impl_.release());
v4l2_thread_.Stop();
capture_impl_ = nullptr;
@@ -88,8 +90,9 @@ void VideoCaptureDeviceLinux::StopAndDeAllocate() {
void VideoCaptureDeviceLinux::TakePhoto(TakePhotoCallback callback) {
DCHECK(capture_impl_);
- auto functor = base::Bind(&V4L2CaptureDelegate::TakePhoto, capture_impl_,
- base::Passed(&callback));
+ auto functor =
+ base::Bind(&V4L2CaptureDelegate::TakePhoto, capture_impl_->GetWeakPtr(),
+ 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));
@@ -100,8 +103,9 @@ void VideoCaptureDeviceLinux::TakePhoto(TakePhotoCallback callback) {
void VideoCaptureDeviceLinux::GetPhotoCapabilities(
GetPhotoCapabilitiesCallback callback) {
- auto functor = base::Bind(&V4L2CaptureDelegate::GetPhotoCapabilities,
- capture_impl_, base::Passed(&callback));
+ auto functor =
+ base::Bind(&V4L2CaptureDelegate::GetPhotoCapabilities,
+ capture_impl_->GetWeakPtr(), 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 +117,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,
+ capture_impl_->GetWeakPtr(),
+ 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 +131,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,
+ capture_impl_->GetWeakPtr(), rotation));
}
}
« no previous file with comments | « media/capture/video/linux/video_capture_device_linux.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698