[go: nahoru, domu]

blob: 72c3db81fda57213b33cb877d137b9489eb397e2 [file] [log] [blame]
Avi Drissman3e1a26c2022-09-15 20:26:031// Copyright 2013 The Chromium Authors
sievers@chromium.org1d018072013-03-06 04:23:282// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
sievers@chromium.orgac0c76222013-04-24 08:00:115#include "ui/gl/android/scoped_java_surface.h"
sievers@chromium.org1d018072013-03-06 04:23:286
Bo Liu9eb4b6e2022-07-18 19:21:137#include <utility>
8
Hans Wennborg8586102b2020-05-05 13:43:299#include "base/check.h"
yfriedman@chromium.org0fc0a2d42013-08-29 04:05:3610#include "ui/gl/android/surface_texture.h"
Andrew Grieve4a42c22e2019-06-24 16:14:2911#include "ui/gl/surface_jni_headers/Surface_jni.h"
sievers@chromium.org1d018072013-03-06 04:23:2812
torne86560112016-08-04 15:59:0413using base::android::ScopedJavaLocalRef;
14
kylechar7a463842016-05-26 14:46:1215namespace gl {
sievers@chromium.org1d018072013-03-06 04:23:2816
Bo Liu6411add2022-12-14 21:10:3717ScopedJavaSurface::ScopedJavaSurface() = default;
18ScopedJavaSurface::ScopedJavaSurface(std::nullptr_t) {}
sievers@chromium.org1d018072013-03-06 04:23:2819
20ScopedJavaSurface::ScopedJavaSurface(
Bo Liu6411add2022-12-14 21:10:3721 const base::android::JavaRef<jobject>& surface,
22 bool auto_release)
23 : auto_release_(auto_release), j_surface_(surface) {
Sam Maier7fe12c12024-01-26 19:22:4324 JNIEnv* env = jni_zero::AttachCurrentThread();
Andrew Grieve71703a92017-07-28 19:47:2825 DCHECK(env->IsInstanceOf(surface.obj(), android_view_Surface_clazz(env)));
sievers@chromium.org1d018072013-03-06 04:23:2826}
27
Bo Liu54796402018-08-21 03:13:5428ScopedJavaSurface::ScopedJavaSurface(const SurfaceTexture* surface_texture) {
Sam Maier7fe12c12024-01-26 19:22:4329 JNIEnv* env = jni_zero::AttachCurrentThread();
Andrew Grieve9050c422023-07-24 16:55:1530 ScopedJavaLocalRef<jobject> tmp(
31 JNI_Surface::Java_Surface_Constructor__android_graphics_SurfaceTexture(
32 env, surface_texture->j_surface_texture()));
sievers@chromium.org1d018072013-03-06 04:23:2833 DCHECK(!tmp.is_null());
34 j_surface_.Reset(tmp);
35}
36
dchenge1b02772015-12-01 12:09:5237ScopedJavaSurface::ScopedJavaSurface(ScopedJavaSurface&& rvalue) {
38 MoveFrom(rvalue);
qinmin@chromium.orge8863332013-05-31 18:32:5439}
40
dchenge1b02772015-12-01 12:09:5241ScopedJavaSurface& ScopedJavaSurface::operator=(ScopedJavaSurface&& rhs) {
42 MoveFrom(rhs);
qinmin@chromium.orge8863332013-05-31 18:32:5443 return *this;
44}
45
sievers@chromium.org1d018072013-03-06 04:23:2846ScopedJavaSurface::~ScopedJavaSurface() {
Bo Liu54796402018-08-21 03:13:5447 ReleaseSurfaceIfNeeded();
48}
49
Bo Liu6411add2022-12-14 21:10:3750ScopedJavaSurface ScopedJavaSurface::CopyRetainOwnership() const {
51 return ScopedJavaSurface(j_surface_, /*auto_release=*/false);
52}
53
Bo Liu54796402018-08-21 03:13:5454void ScopedJavaSurface::ReleaseSurfaceIfNeeded() {
qinmin@chromium.orge8863332013-05-31 18:32:5455 if (auto_release_ && !j_surface_.is_null()) {
Sam Maier7fe12c12024-01-26 19:22:4356 JNIEnv* env = jni_zero::AttachCurrentThread();
Sam Maier0a23ff62023-04-28 13:37:5257 JNI_Surface::Java_Surface_release(env, j_surface_);
sievers@chromium.org1d018072013-03-06 04:23:2858 }
59}
60
qinmin@chromium.orge8863332013-05-31 18:32:5461void ScopedJavaSurface::MoveFrom(ScopedJavaSurface& other) {
Bo Liuce7d4bb2022-12-20 01:12:4762 if (this == &other) {
63 return;
64 }
Bo Liu54796402018-08-21 03:13:5465 ReleaseSurfaceIfNeeded();
Bo Liu9eb4b6e2022-07-18 19:21:1366 j_surface_ = std::move(other.j_surface_);
qinmin@chromium.orge8863332013-05-31 18:32:5467 auto_release_ = other.auto_release_;
68}
69
qinmin@chromium.orgf9380382013-07-04 02:47:4770bool ScopedJavaSurface::IsEmpty() const {
qinmin@chromium.orge8863332013-05-31 18:32:5471 return j_surface_.is_null();
72}
73
jcivellic9a964032016-10-17 18:22:2074bool ScopedJavaSurface::IsValid() const {
Sam Maier7fe12c12024-01-26 19:22:4375 JNIEnv* env = jni_zero::AttachCurrentThread();
Sam Maier0a23ff62023-04-28 13:37:5276 return !IsEmpty() && JNI_Surface::Java_Surface_isValid(env, j_surface_);
jcivellic9a964032016-10-17 18:22:2077}
78
kylechar7a463842016-05-26 14:46:1279} // namespace gl