SurfaceView 获取Surface
mSurface = mSurfaceView.getHolder().getSurface();
try {
Field field = Surface.class.getDeclaredField("mNativeObject");
field.setAccessible(true);
long nativeSurfaceObject= (long)field.get(left);
}catch (NoSuchFieldException e){
return -1;
}catch (IllegalAccessException e){
return -1;
}
在通过jni 把 nativeSurfaceObject 传给 nateive 端调用surface:
static void nativeSetDisplaySurface(JNIEnv* env, jclass clazz,
jobject tokenObj, jlong nativeSurfaceObject) {
sp<IBinder> token(ibinderForJavaObject(env, tokenObj));
if (token == NULL) return;
sp<IGraphicBufferProducer> bufferProducer;
sp<Surface> sur(reinterpret_cast<Surface *>(nativeSurfaceObject));