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

Unified Diff: media/capture/video/android/video_capture_device_android.cc

Issue 2005753006: ImageCapture: ScopedResultCallback (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: rockot@s nit Created 4 years, 7 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: media/capture/video/android/video_capture_device_android.cc
diff --git a/media/capture/video/android/video_capture_device_android.cc b/media/capture/video/android/video_capture_device_android.cc
index d920a21b7c7acd39800418bc2a8c8e48ab946b3e..ec2f84883d96f860868eee39fe884e2322ee473f 100644
--- a/media/capture/video/android/video_capture_device_android.cc
+++ b/media/capture/video/android/video_capture_device_android.cc
@@ -13,6 +13,7 @@
#include "base/strings/string_number_conversions.h"
#include "jni/VideoCapture_jni.h"
#include "media/capture/video/android/video_capture_device_factory_android.h"
+#include "mojo/public/cpp/bindings/string.h"
using base::android::AttachCurrentThread;
using base::android::CheckException;
@@ -41,16 +42,6 @@ VideoCaptureDeviceAndroid::VideoCaptureDeviceAndroid(const Name& device_name)
VideoCaptureDeviceAndroid::~VideoCaptureDeviceAndroid() {
StopAndDeAllocate();
- // If there are still |photo_callbacks_|, resolve them with empty datas.
- {
- base::AutoLock lock(photo_callbacks_lock_);
- std::for_each(photo_callbacks_.begin(), photo_callbacks_.end(),
- [](const std::unique_ptr<TakePhotoCallback>& callback) {
- std::unique_ptr<std::vector<uint8_t>> empty_data(
- new std::vector<uint8_t>());
- callback->Run("", std::move(empty_data));
- });
- }
}
bool VideoCaptureDeviceAndroid::Init() {
@@ -145,26 +136,27 @@ void VideoCaptureDeviceAndroid::StopAndDeAllocate() {
Java_VideoCapture_deallocate(env, j_capture_.obj());
}
-bool VideoCaptureDeviceAndroid::TakePhoto(const TakePhotoCallback& callback) {
+void VideoCaptureDeviceAndroid::TakePhoto(
+ ScopedResultCallback<TakePhotoCallback> callback) {
{
base::AutoLock lock(lock_);
if (state_ != kCapturing)
- return false;
+ return;
}
JNIEnv* env = AttachCurrentThread();
// Make copy on the heap so we can pass the pointer through JNI.
- std::unique_ptr<TakePhotoCallback> cb(new TakePhotoCallback(callback));
- const intptr_t callback_id = reinterpret_cast<intptr_t>(cb.get());
+ std::unique_ptr<ScopedResultCallback<TakePhotoCallback>> heap_callback(
+ new ScopedResultCallback<TakePhotoCallback>(std::move(callback)));
+ const intptr_t callback_id = reinterpret_cast<intptr_t>(heap_callback.get());
if (!Java_VideoCapture_takePhoto(env, j_capture_.obj(), callback_id))
- return false;
+ return;
{
base::AutoLock lock(photo_callbacks_lock_);
- photo_callbacks_.push_back(std::move(cb));
+ photo_callbacks_.push_back(std::move(heap_callback));
}
- return true;
}
void VideoCaptureDeviceAndroid::OnFrameAvailable(
@@ -224,23 +216,23 @@ void VideoCaptureDeviceAndroid::OnPhotoTaken(
base::AutoLock lock(photo_callbacks_lock_);
- TakePhotoCallback* const cb =
- reinterpret_cast<TakePhotoCallback*>(callback_id);
+ ScopedResultCallback<TakePhotoCallback>* const cb =
+ reinterpret_cast<ScopedResultCallback<TakePhotoCallback>*>(callback_id);
// Search for the pointer |cb| in the list of |photo_callbacks_|.
- const auto reference_it =
- std::find_if(photo_callbacks_.begin(), photo_callbacks_.end(),
- [cb](const std::unique_ptr<TakePhotoCallback>& callback) {
- return callback.get() == cb;
- });
+ const auto reference_it = std::find_if(
+ photo_callbacks_.begin(), photo_callbacks_.end(),
+ [cb](const std::unique_ptr<ScopedResultCallback<TakePhotoCallback>>&
+ callback) { return callback.get() == cb; });
if (reference_it == photo_callbacks_.end()) {
NOTREACHED() << "|callback_id| not found.";
return;
}
- std::unique_ptr<std::vector<uint8_t>> native_data(new std::vector<uint8_t>());
- base::android::JavaByteArrayToByteVector(env, data.obj(), native_data.get());
+ std::vector<uint8_t> native_data;
+ base::android::JavaByteArrayToByteVector(env, data.obj(), &native_data);
- cb->Run(native_data->size() ? "image/jpeg" : "", std::move(native_data));
+ cb->Run(mojo::String::From(native_data.empty() ? "" : "image/jpeg"),
+ mojo::Array<uint8_t>::From(native_data));
photo_callbacks_.erase(reference_it);
}
« no previous file with comments | « media/capture/video/android/video_capture_device_android.h ('k') | media/capture/video/fake_video_capture_device.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698