blob: 59ff955d7fbef834ae7ceacf638e361ac555f280 [file] [log] [blame]
// Copyright 2025 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "ui/android/resources/capture_result.h"
#include <android/hardware_buffer_jni.h>
#include "base/android/callback_android.h"
#include "base/android/jni_android.h"
#include "base/android/scoped_hardware_buffer_handle.h"
#include "base/android/scoped_java_ref.h"
#include "base/functional/callback.h"
#include "base/functional/callback_helpers.h"
#include "ui/gfx/android/java_bitmap.h"
// Must come after all headers that specialize FromJniType() / ToJniType().
#include "ui/android/ui_android_jni_headers/CaptureResult_jni.h"
namespace ui {
using base::android::ScopedHardwareBufferHandle;
using base::android::ScopedJavaGlobalRef;
CaptureResult::CaptureResult(const jni_zero::JavaRef<jobject>& obj)
: java_capture_result_(obj) {}
CaptureResult::~CaptureResult() = default;
CaptureResult::operator bool() const {
return !java_capture_result_.is_null();
}
SkBitmap CaptureResult::GetBitmap() const {
JNIEnv* env = base::android::AttachCurrentThread();
gfx::JavaBitmap j_bitmap(
Java_CaptureResult_getBitmap(env, java_capture_result_));
return gfx::CreateSkBitmapFromJavaBitmap(j_bitmap);
}
ScopedHardwareBufferHandle CaptureResult::GetHardwareBuffer() const {
JNIEnv* env = base::android::AttachCurrentThread();
auto j_hardware_buffer =
Java_CaptureResult_getHardwareBuffer(env, java_capture_result_);
return ScopedHardwareBufferHandle::Create(
AHardwareBuffer_fromHardwareBuffer(env, j_hardware_buffer.obj()));
}
base::ScopedClosureRunner CaptureResult::GetReleaseCallback() const {
JNIEnv* env = base::android::AttachCurrentThread();
auto j_release_callback = ScopedJavaGlobalRef(
Java_CaptureResult_getReleaseCallback(env, java_capture_result_));
return base::ScopedClosureRunner(base::BindOnce(
[](ScopedJavaGlobalRef<jobject> j_release_callback) {
base::android::RunRunnableAndroid(j_release_callback);
},
std::move(j_release_callback)));
}
} // namespace ui