Firefly开源社区

打印 上一主题 下一主题

如何使用共享内存

4

积分

0

威望

0

贡献

吃瓜的群众

积分
4

如何使用共享内存

发表于 2015-10-15 18:22:36      浏览:12232 | 回复:6        打印      只看该作者   [复制链接] 楼主

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

回复

使用道具 举报

63

积分

0

威望

0

贡献

技术小白

积分
63
发表于 2015-10-16 16:29:19        只看该作者  沙发
在android上试过吗?
回复

使用道具 举报

63

积分

0

威望

0

贡献

技术小白

积分
63
发表于 2015-10-16 16:58:28        只看该作者  板凳
楼主用的第四个参数EGLClientBuffer是什么?
回复

使用道具 举报

4

积分

0

威望

0

贡献

吃瓜的群众

积分
4
发表于 2015-10-16 19:12:19        只看该作者  地板
没在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;
回复

使用道具 举报

63

积分

0

威望

0

贡献

技术小白

积分
63
发表于 2015-10-17 09:45:47        只看该作者  5#
  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应该是第三第四个参数有问题。第三参数应该在头文件里定义,第四个参数要看库的具体实现了。
回复

使用道具 举报

63

积分

0

威望

0

贡献

技术小白

积分
63
发表于 2015-10-17 09:52:14        只看该作者  6#
最好能找到对应的头文件。
回复

使用道具 举报

4

积分

0

威望

0

贡献

吃瓜的群众

积分
4
发表于 2015-10-17 10:44:24        只看该作者  7#
第三个参数是EGL_NATIVE_PIXMAP_KHR没问题
android的也是差不多
if (target != EGL_NATIVE_BUFFER_ANDROID) {
        return setError(EGL_BAD_PARAMETER, EGL_NO_IMAGE_KHR);
    }
现在就是第四个参数找不到对应的头文件
我拿得是mali400的头文件,应该是这个参数发生了变化,就是找不到对版本的头文件
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

友情链接 : 爱板网 电子发烧友论坛 云汉电子社区 粤ICP备14022046号-2
快速回复 返回顶部 返回列表