都知道在NDK下取surfaces的句柄一般是
static Surface* getNativeSurface(JNIEnv* env, jobject jsurface)
{
jclass clazz = env->FindClass("android/view/Surface");
if(clazz == NULL)
{
return NULL;
}       
jfieldID field_surface = env->GetFieldID(clazz, ANDROID_VIEW_SURFACE_JNI_ID, "I");
if(field_surface == NULL) 
{
return NULL; 
} return (Surface *) env->GetIntField(jsurface, field_surface);
}但是我怎么找不到surface下mNativeSurface在什么时候什么地方赋值的,有哪位看过这部分代码的,指导一下,谢谢了。

解决方案 »

  1.   

    郁闷,我算看明白了,原来是surface的ndk创建并赋值,然后其他的C++代码再读取操作。
      

  2.   

        我也在看jni层怎么操作surface,搜了半天就看到楼主这么一个讲底层获取的Surface指针式怎么来的。。想了半天,得到的结论跟楼主的一样,mNativeSurface顾名思义就是c代码里的Surface,应该就是Java层在创建一个java的Surface对象时,会将底层对应的 c++的Surface对象的指针保存在mNativeSurface里。 
        我们要再c里面操作Surface,就需要获取mNativeSurface,并转化为c++的Surface对象进行操作,而不是获取java的Surface类对象进行操作。
        这仅仅是我的理解,供其他研究这个问题的兄弟们参考下。