尝试以下4个步骤用native surface来显示画面,但屏幕总是黑的,哪位能帮忙看看问题出在哪吗?谢谢!1. 先用以下代码得到native surface,且log都是显示成功的。static jint getNativeSurface(JNIEnv* env, jobject jsurface, int sdkVersion) {
jclass clazz = (*env)->GetObjectClass(env,jsurface);
if(clazz == NULL) {
LOGE("Can't find surface class!");
return NULL;
} jfieldID field_surface = (*env)->GetFieldID(env,clazz,
sdkVersion > SDK_VERSION_FROYO ? "mNativeSurface" : "mSurface",
"I");
if(field_surface == NULL) {
LOGE("Can't find native surface field!");
return NULL;
}
LOGE("OK... find native surface field!");
return (*env)->GetIntField(env,jsurface,field_surface);
}
2.调用libsurfaceflinger_client.so中的lock函数,如下: sys->s_lock(surf, info, 1); //其中surf是上面getNativeSurface的返回值3.直接刷红屏:
memset(info->bits,0xf800,iofo->w*info->h);//如果成功后再换成真正的视频帧4.调用libsurfaceflinger_client.so中的unlock函数: sys->s_unlockAndPost(surf);//move to flip_page其中unlockAndPost和s_lock是用dlsym从libsurfaceflinger_client.so中得到的函数指针。
jclass clazz = (*env)->GetObjectClass(env,jsurface);
if(clazz == NULL) {
LOGE("Can't find surface class!");
return NULL;
} jfieldID field_surface = (*env)->GetFieldID(env,clazz,
sdkVersion > SDK_VERSION_FROYO ? "mNativeSurface" : "mSurface",
"I");
if(field_surface == NULL) {
LOGE("Can't find native surface field!");
return NULL;
}
LOGE("OK... find native surface field!");
return (*env)->GetIntField(env,jsurface,field_surface);
}
2.调用libsurfaceflinger_client.so中的lock函数,如下: sys->s_lock(surf, info, 1); //其中surf是上面getNativeSurface的返回值3.直接刷红屏:
memset(info->bits,0xf800,iofo->w*info->h);//如果成功后再换成真正的视频帧4.调用libsurfaceflinger_client.so中的unlock函数: sys->s_unlockAndPost(surf);//move to flip_page其中unlockAndPost和s_lock是用dlsym从libsurfaceflinger_client.so中得到的函数指针。
这个代码我也和楼主一样,黑屏
楼主解决了没有?