OSDN Git Service

[RenderScript] Use ANativeWindow_fromSurface to get ANativeWindow
authorMiao Wang <miaowang@google.com>
Mon, 6 Mar 2017 17:31:32 +0000 (09:31 -0800)
committerMiao Wang <miaowang@google.com>
Mon, 6 Mar 2017 17:59:06 +0000 (09:59 -0800)
from Java Surface.

 - ANativeWindow_fromSurface and ANativeWindow_release has to be used in
 pairs to avoid leaks.

Bug: 34396220
Test: mm, CTS tests pass.
Change-Id: Id67fd005a056df4d496a48f705d445a2d8c45232

rs/jni/Android.mk
rs/jni/android_renderscript_RenderScript.cpp

index 447a47d..4040db3 100644 (file)
@@ -5,6 +5,7 @@ LOCAL_SRC_FILES:= \
     android_renderscript_RenderScript.cpp
 
 LOCAL_SHARED_LIBRARIES := \
+    libandroid \
     libandroid_runtime \
     libandroidfw \
     libnativehelper \
index 2300da3..c663255 100644 (file)
@@ -34,6 +34,8 @@
 #include "android_runtime/android_view_Surface.h"
 #include "android_runtime/android_util_AssetManager.h"
 #include "android/graphics/GraphicsJNI.h"
+#include "android/native_window.h"
+#include "android/native_window_jni.h"
 
 #include <rsEnv.h>
 #include <rsApiStubs.h>
@@ -1281,13 +1283,12 @@ nAllocationSetSurface(JNIEnv *_env, jobject _this, jlong con, jlong alloc, jobje
               (RsAllocation)alloc, (Surface *)sur);
     }
 
-    sp<Surface> s;
+    ANativeWindow *anw = nullptr;
     if (sur != 0) {
-        s = android_view_Surface_getSurface(_env, sur);
+        anw = ANativeWindow_fromSurface(_env, sur);
     }
 
-    rsAllocationSetSurface((RsContext)con, (RsAllocation)alloc,
-                           static_cast<ANativeWindow *>(s.get()));
+    rsAllocationSetSurface((RsContext)con, (RsAllocation)alloc, anw);
 }
 
 static void