summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMathias Agopian <mathias@google.com>2010-06-10 17:12:42 -0700
committerAndroid (Google) Code Review <android-gerrit@google.com>2010-06-10 17:12:42 -0700
commit9d8e8dcc84fd9895d5b1cc49595b1715470ac05b (patch)
treeb128399ce04e2c1ecb123cd4cb6f5e5a69d59d54
parent4001120e456e51dd498c6647460dd97d946dc816 (diff)
parent8b73ae4a1e5321753e54354e5202a38c5560fea9 (diff)
downloadframeworks_base-9d8e8dcc84fd9895d5b1cc49595b1715470ac05b.zip
frameworks_base-9d8e8dcc84fd9895d5b1cc49595b1715470ac05b.tar.gz
frameworks_base-9d8e8dcc84fd9895d5b1cc49595b1715470ac05b.tar.bz2
Merge "fix [2757903] Crash in EGL when creating an EGLSurface" into kraken
-rw-r--r--core/jni/android_view_Surface.cpp7
-rw-r--r--core/jni/com_google_android_gles_jni_EGLImpl.cpp11
2 files changed, 13 insertions, 5 deletions
diff --git a/core/jni/android_view_Surface.cpp b/core/jni/android_view_Surface.cpp
index 06fa84b..cef5c10 100644
--- a/core/jni/android_view_Surface.cpp
+++ b/core/jni/android_view_Surface.cpp
@@ -25,6 +25,8 @@
#include <ui/Region.h>
#include <ui/Rect.h>
+#include <EGL/egl.h>
+
#include <SkCanvas.h>
#include <SkBitmap.h>
#include <SkRegion.h>
@@ -177,6 +179,11 @@ static sp<Surface> getSurface(JNIEnv* env, jobject clazz)
return result;
}
+EGLNativeWindowType android_Surface_getEGLNativeWindow(
+ JNIEnv* env, jobject clazz) {
+ return getSurface(env, clazz).get();
+}
+
static void setSurface(JNIEnv* env, jobject clazz, const sp<Surface>& surface)
{
Surface* const p = (Surface*)env->GetIntField(clazz, so.surface);
diff --git a/core/jni/com_google_android_gles_jni_EGLImpl.cpp b/core/jni/com_google_android_gles_jni_EGLImpl.cpp
index 01a1504..d5cde48 100644
--- a/core/jni/com_google_android_gles_jni_EGLImpl.cpp
+++ b/core/jni/com_google_android_gles_jni_EGLImpl.cpp
@@ -27,6 +27,9 @@
namespace android {
+extern EGLNativeWindowType android_Surface_getEGLNativeWindow(
+ JNIEnv* env, jobject clazz);
+
static jclass gDisplay_class;
static jclass gContext_class;
static jclass gSurface_class;
@@ -95,9 +98,6 @@ static void nativeClassInit(JNIEnv *_env, jclass eglImplClass)
gSurface_NativePixelRefFieldID = _env->GetFieldID(gSurface_class, "mNativePixelRef", "I");
gConfig_EGLConfigFieldID = _env->GetFieldID(gConfig_class, "mEGLConfig", "I");
- jclass surface_class = _env->FindClass("android/view/Surface");
- gSurface_SurfaceFieldID = _env->GetFieldID(surface_class, ANDROID_VIEW_SURFACE_JNI_ID, "I");
-
jclass bitmap_class = _env->FindClass("android/graphics/Bitmap");
gBitmap_NativeBitmapFieldID = _env->GetFieldID(bitmap_class, "mNativeBitmap", "I");
}
@@ -325,14 +325,15 @@ static jint jni_eglCreateWindowSurface(JNIEnv *_env, jobject _this, jobject disp
}
EGLDisplay dpy = getDisplay(_env, display);
EGLContext cnf = getConfig(_env, config);
- Surface* window = 0;
+ EGLNativeWindowType window = 0;
if (native_window == NULL) {
not_valid_surface:
doThrow(_env, "java/lang/IllegalArgumentException",
"Make sure the SurfaceView or associated SurfaceHolder has a valid Surface");
return 0;
}
- window = (Surface*)_env->GetIntField(native_window, gSurface_SurfaceFieldID);
+
+ window = android_Surface_getEGLNativeWindow(_env, native_window);
if (window == NULL)
goto not_valid_surface;