Firefly开源社区

标题: 如何使用共享内存 [打印本页]

作者: fengyin    时间: 2015-10-15 18:22
标题: 如何使用共享内存

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这个版本的
请问这个错误是什么造成的,要怎么改


作者: bunchen    时间: 2015-10-16 16:29
在android上试过吗?
作者: bunchen    时间: 2015-10-16 16:58
楼主用的第四个参数EGLClientBuffer是什么?
作者: fengyin    时间: 2015-10-16 19:12
没在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;
作者: bunchen    时间: 2015-10-17 09:45
  1. EGLImageKHR eglCreateImageKHR(EGLDisplay dpy, EGLContext ctx, EGLenum target,
  2.         EGLClientBuffer buffer, const EGLint *attrib_list)
  3. {
  4.     if (egl_display_t::is_valid(dpy) == EGL_FALSE) {
  5.         return setError(EGL_BAD_DISPLAY, EGL_NO_IMAGE_KHR);
  6.     }
  7.     if (ctx != EGL_NO_CONTEXT) {
  8.         return setError(EGL_BAD_CONTEXT, EGL_NO_IMAGE_KHR);
  9.     }
  10.     if (target != EGL_NATIVE_BUFFER_ANDROID) {
  11.         return setError(EGL_BAD_PARAMETER, EGL_NO_IMAGE_KHR);
  12.     }

  13.     ANativeWindowBuffer* native_buffer = (ANativeWindowBuffer*)buffer;

  14.     if (native_buffer->common.magic != ANDROID_NATIVE_BUFFER_MAGIC)
  15.         return setError(EGL_BAD_PARAMETER, EGL_NO_IMAGE_KHR);

  16.     if (native_buffer->common.version != sizeof(ANativeWindowBuffer))
  17.         return setError(EGL_BAD_PARAMETER, EGL_NO_IMAGE_KHR);

  18.     switch (native_buffer->format) {
  19.         case HAL_PIXEL_FORMAT_RGBA_8888:
  20.         case HAL_PIXEL_FORMAT_RGBX_8888:
  21.         case HAL_PIXEL_FORMAT_RGB_888:
  22.         case HAL_PIXEL_FORMAT_RGB_565:
  23.         case HAL_PIXEL_FORMAT_BGRA_8888:
  24.             break;
  25.         default:
  26.             return setError(EGL_BAD_PARAMETER, EGL_NO_IMAGE_KHR);
  27.     }

  28.     native_buffer->common.incRef(&native_buffer->common);
  29.     return (EGLImageKHR)native_buffer;
  30. }
复制代码


以上是android agl的实现,可以看到EGL_NO_IMAGE_KHR应该是第三第四个参数有问题。第三参数应该在头文件里定义,第四个参数要看库的具体实现了。
作者: bunchen    时间: 2015-10-17 09:52
最好能找到对应的头文件。
作者: fengyin    时间: 2015-10-17 10:44
第三个参数是EGL_NATIVE_PIXMAP_KHR没问题
android的也是差不多
if (target != EGL_NATIVE_BUFFER_ANDROID) {
        return setError(EGL_BAD_PARAMETER, EGL_NO_IMAGE_KHR);
    }
现在就是第四个参数找不到对应的头文件
我拿得是mali400的头文件,应该是这个参数发生了变化,就是找不到对版本的头文件




欢迎光临 Firefly开源社区 (https://dev.t-firefly.com/) Powered by Discuz! X3.1