相关疑难解决方法(0)

可以在连接到相机的 SurfaceTexture 上绘制吗?

我想在SurfaceTexture连接到Cameravia的 a 之上绘制setPreviewTexture。我可以SurfaceTexture通过SurfaceTextureListener. 但是如果我只是尝试使用eglCreateWindowSurface&eglMakeCurrent它会由于表面已经连接而失败。

1)是否可以在这个表面上绘制?或者是否将其绑定到相机使其无法做到这一点。

2)如果不可能。可以将表面快速使用(或复制)到 OpenGL 纹理并在单独的表面中使用吗?如果是这样怎么办?

3)如果没有,从 SurfaceTexture 获取相机预览并进入 OpenGL 的最快方法是什么?

另请注意,使我无法连接的代码的灵感来自 Romain Guy 的帖子:http : //groups.google.com/group/android-developers/browse_thread/thread/539457146a401cf1

android android-camera

4
推荐指数
1
解决办法
5390
查看次数

用EGL_KHR_image_base替换glReadPixels以获得更快的像素复制

我试图在Android本机进程中使用EGL_KHR_image_base来替换glReadPixels,因为它要慢(1280x800 RGBA为220ms).

这是我到目前为止,但我生成一个空缓冲区(只有零)

uint8_t *ptr;
GLuint mTexture;
status_t error;

GraphicBufferAlloc* mGraphicBufferAlloc  = new GraphicBufferAlloc();    
sp<GraphicBuffer> window = mGraphicBufferAlloc->createGraphicBuffer(width, height, PIXEL_FORMAT_RGBA_8888, GraphicBuffer::USAGE_SW_READ_OFTEN | GraphicBuffer::USAGE_HW_TEXTURE,&error);
EGLClientBuffer buffer = (EGLClientBuffer)window->getNativeBuffer();
EGLint eglImageAttributes[] = {EGL_WIDTH, width, EGL_HEIGHT, height, EGL_MATCH_FORMAT_KHR,  EGL_FORMAT_RGBA_8888_KHR, EGL_IMAGE_PRESERVED_KHR, EGL_TRUE, EGL_NONE};
EGLImageKHR image = eglCreateImageKHR(eglGetCurrentDisplay(), EGL_NO_CONTEXT, EGL_NATIVE_BUFFER_ANDROID,buffer, eglImageAttributes);

glGenTextures(1, &mTexture);    
glBindTexture(GL_TEXTURE_2D, mTexture);
glEGLImageTargetTexture2DOES(GL_TEXTURE_2D, image);
window->lock(GraphicBuffer::USAGE_SW_READ_OFTEN, (void**)&ptr); 
memcpy(texture, ptr, width * height * 4);
window->unlock();
Run Code Online (Sandbox Code Playgroud)

我究竟做错了什么 ?

android android-ndk egl

4
推荐指数
1
解决办法
6562
查看次数

标签 统计

android ×2

android-camera ×1

android-ndk ×1

egl ×1