如何使用共享内存
const EGLint img_attribs[] = {
EGL_IMAGE_PRESERVED_KHR, EGL_TRUE,
EGL_NONE
};
EGLImageKHR image = eglCreateImageKHR (display, EGL_NO_CONTEXT, EGL_NATIVE_PIXMAP_KHR,
&pixmap, img_attribs);
使用eglCreateImageKHR时,返回EGL_NO_IMAGE_KHR,错误是EGL_BAD_PARAMETER(0x300C)
使用的mali,egl的库是mali-t76x_r5p0-06rel0_linux_1+fbdev这个版本的
请问这个错误是什么造成的,要怎么改
在android上试过吗? 楼主用的第四个参数EGLClientBuffer是什么? 没在android上试。
现在的问题可能就是因为EGLClientBuffer这个参数引起的,我手上没有mali-t76x_r5p0-06rel0_linux_1+fbdev 这个库对因的头文件
用的是之前mali400的头文件,也尝试了http://community.arm.com/thread/8116 这个帖子里面给出的结构体,都不成功
mali400中fbdev_window.h中的定义是:
typedef struct fbdev_pixmap
{
unsigned int height;
unsigned int width;
unsigned int bytes_per_pixel;
unsigned char buffer_size;
unsigned char red_size;
unsigned char green_size;
unsigned char blue_size;
unsigned char alpha_size;
unsigned char luminance_size;
fbdev_pixmap_flags flags;
unsigned short *data;
unsigned int format; /* extra format information in case rgbal is not enough, especially for YUV formats */
} fbdev_pixmap; EGLImageKHR eglCreateImageKHR(EGLDisplay dpy, EGLContext ctx, EGLenum target,
EGLClientBuffer buffer, const EGLint *attrib_list)
{
if (egl_display_t::is_valid(dpy) == EGL_FALSE) {
return setError(EGL_BAD_DISPLAY, EGL_NO_IMAGE_KHR);
}
if (ctx != EGL_NO_CONTEXT) {
return setError(EGL_BAD_CONTEXT, EGL_NO_IMAGE_KHR);
}
if (target != EGL_NATIVE_BUFFER_ANDROID) {
return setError(EGL_BAD_PARAMETER, EGL_NO_IMAGE_KHR);
}
ANativeWindowBuffer* native_buffer = (ANativeWindowBuffer*)buffer;
if (native_buffer->common.magic != ANDROID_NATIVE_BUFFER_MAGIC)
return setError(EGL_BAD_PARAMETER, EGL_NO_IMAGE_KHR);
if (native_buffer->common.version != sizeof(ANativeWindowBuffer))
return setError(EGL_BAD_PARAMETER, EGL_NO_IMAGE_KHR);
switch (native_buffer->format) {
case HAL_PIXEL_FORMAT_RGBA_8888:
case HAL_PIXEL_FORMAT_RGBX_8888:
case HAL_PIXEL_FORMAT_RGB_888:
case HAL_PIXEL_FORMAT_RGB_565:
case HAL_PIXEL_FORMAT_BGRA_8888:
break;
default:
return setError(EGL_BAD_PARAMETER, EGL_NO_IMAGE_KHR);
}
native_buffer->common.incRef(&native_buffer->common);
return (EGLImageKHR)native_buffer;
}
以上是android agl的实现,可以看到EGL_NO_IMAGE_KHR应该是第三第四个参数有问题。第三参数应该在头文件里定义,第四个参数要看库的具体实现了。 最好能找到对应的头文件。 第三个参数是EGL_NATIVE_PIXMAP_KHR没问题
android的也是差不多
if (target != EGL_NATIVE_BUFFER_ANDROID) {
return setError(EGL_BAD_PARAMETER, EGL_NO_IMAGE_KHR);
}
现在就是第四个参数找不到对应的头文件
我拿得是mali400的头文件,应该是这个参数发生了变化,就是找不到对版本的头文件
页:
[1]