首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >eglCreateImageKHR返回EGL_BAD_ATTRIBUTE错误

eglCreateImageKHR返回EGL_BAD_ATTRIBUTE错误
EN

Stack Overflow用户
提问于 2016-04-27 02:28:19
回答 1查看 2.1K关注 0票数 1

我通过FFmpeg使用VAAPI在Linux上实现了硬件解码。因为我有一个OpenGL应用程序,所以我使用vaCopySurfaceGLX将解码后的VAAPI曲面转换为OpenGL纹理。这是很好的工作,除了有一个副本(在GPU上),是作出的。我被告知我可以直接使用VAAPI表面作为OpenGL纹理使用EGL。我看过一些示例(主要是Kodi源代码),但我无法创建EGLImageKHR。函数eglCreateImageKHR返回0,当我检查错误时,我得到一个EGL_BAD_ATTRIBUTE错误,但我不明白为什么。

下面是我如何转换VAAPI表面。

在初始化过程中,我以如下方式设置了EGL:

代码语言:javascript
运行
复制
// currentDisplay comes from call to glXGetCurrentDisplay() and is also used when getting the VADisplay like this: vaGetDisplay(currentDisplay)     

EGLint major, minor;
_eglDisplay = eglGetDisplay(currentDisplay);
eglInitialize(_eglDisplay, &major, &minor);
eglBindAPI(EGL_OPENGL_API);

然后,为了创建我的EGL映像,这就是我所做的:

代码语言:javascript
运行
复制
// _vaapiContext.vaDisplay comes from vaGetDisplay(currentDisplay)
// surface is the VASurfaceID of the surface I want to use in OpenGL
vaDeriveImage(_vaapiContext.vaDisplay, surface, &_vaapiContext.vaImage);

VABufferInfo buf_info;
memset(&buf_info, 0, sizeof(buf_info));
buf_info.mem_type = VA_SURFACE_ATTRIB_MEM_TYPE_DRM_PRIME;
vaAcquireBufferHandle(_vaapiContext.vaDisplay, _vaapiContext.vaImage.buf, &buf_info);
EGLint attribs[] = {
    EGL_WIDTH, _vaapiContext.vaImage.width,
    EGL_HEIGHT, _vaapiContext.vaImage.height,
    EGL_LINUX_DRM_FOURCC_EXT, fourcc_code('R', '8', ' ', ' '),
    EGL_DMA_BUF_PLANE0_FD_EXT, buf_info.handle,
    EGL_DMA_BUF_PLANE0_OFFSET_EXT, _vaapiContext.vaImage.offsets[0],
    EGL_DMA_BUF_PLANE0_PITCH_EXT, _vaapiContext.vaImage.pitches[0],
    EGL_NONE
};

EGLImageKHR eglImage = eglCreateImageKHR(_eglDisplay, EGL_NO_CONTEXT, EGL_LINUX_DMA_BUF_EXT, (EGLClientBuffer)NULL, attribs);

在下面的文档import.txt中查看导致此错误的原因,我还尝试添加以下选项,这些选项不重要,因为我的格式不是平面的

代码语言:javascript
运行
复制
EGL_YUV_COLOR_SPACE_HINT_EXT, EGL_ITU_REC601_EXT,
EGL_SAMPLE_RANGE_HINT_EXT, EGL_YUV_FULL_RANGE_EXT,
EGL_YUV_CHROMA_HORIZONTAL_SITING_HINT_EXT, EGL_YUV_CHROMA_SITING_0_EXT,
EGL_YUV_CHROMA_VERTICAL_SITING_HINT_EXT, EGL_YUV_CHROMA_SITING_0_EXT

我使用的代码类似于我看到的所有示例,因此我不确定错误是什么。

请注意,我已经删除了这篇文章的所有错误检查。除了eglCreateImageKHR之外,上述所有调用都是成功的。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-04-28 22:36:15

在将egl日志级别转换为调试之后,我能够获得有关错误的更多信息,并精确指出egl源代码中发生此错误的位置。原来格式fourcc_code('R','8',‘',’')不受支持,因为我的mesa版本太老了。您需要安装mesa 11.0.0或以上。在重新编译mesa (我正在运行Ubuntu15.04)并安装11.0.0版本之后,我终于得到了一个EGL映像。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36879214

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档