This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] 如何在 tda4中使用 RGB888帧缓冲区

Guru**** 2540720 points


请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/1117175/how-to-use-rgb888-framebuffer-in-tda4

由于带宽问题,我们需要更改输出帧缓冲的格式以减少内存使用


我们使用 OpenGLES API、基于共享存储器实施离屏渲染器、
将帧缓冲区的格式设置为 RGBA8888时、我们可以获得正确的渲染结果。
但是,将帧缓冲区的格式设置为 RGB888时,渲染结果的图像是错误的。

   

           RGBA8888                            RGB888


那么、我们想知道输出帧缓冲区的格式是否为 RGB888?

以及如何使用 RGB888帧缓冲器获得正确的渲染结果。

我们指的是演示:vision_apps/utils/OpenGL/src/a72/app_gl_EGL_utils_linux.c - function: appEglCreateWindowIMG

我们修改了以下代码:

1.将 EGL_Linux_DRM_FourCC_EXT 设置为 DRM_FORMAT_BGR888

2.将 EGL_DMA_BUF_PLANE0_Pit_EXT 设置为 WIN_WIDTH*3.

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Li、

    对延迟答复表示歉意。

    您能否在渲染后立即使用 glReadPixels。 它应如下所示:  

    GlReadPixels (0、0、Window_width、Window_Height、GL_RGBA、 gL_unsigned_byte、像素);
    fwrite (pixels、window_width * window_height * 4、1、outfile);
    fclose (outfile);

    此致、

    Takuma

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    你好、 Takuma、

      渲染后、我们立即使用 glReadPixels 执行三项测试:

    1.  将 帧缓冲区的格式设置为 RGBA8888并使用 glReadPixels (0、0、Window_width、Window_Height、GL_RGBA、 gL_unsigned_byte、像素)、结果为:

    2.  将 帧缓冲区的格式设置为 RGB888并使用 glReadPixels (0、0、Window_width、Window_Height、GL_RGBA、 gL_unsigned_byte、像素)、结果为:

    2.  将 帧缓冲区的格式设置为 RGB888并使用 glReadPixels (0、0、Window_width、Window_Height、GL_RGB、 gL_unsigned_byte、像素)、结果为:

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Li、

    看起来应用程序仍然呈现为 RGB8888而不是 RGB888。 您能否确保纹理图像配置为使用正确的格式?

    它应如下所示:

    glTextImage2D (GL_t纹 理_2D0GL_RGB宽度高度0GL_RGBGL_unsigned_byteNULL);

    下面是我已经运行的一些实验。 您最初发布的 RGB888图像与实验2非常相似。 第二个帖子中的第三个图像与实验3非常相似。

    1、实际格式为 RGBA 1920x1080、图像显示为 RGBA 1920x1080

    2、实际格式为 RGBA 1920x1080、图像显示为 RGB 2560x1080

    3、实际格式为 RGBA 1920x1080、图像显示为 RGB 1920x1080

    此致、

    Takuma

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    你好、 Takuma、

    使用 glTextImage2D 和 glReadPixels 时、我们可以获得 RGB888格式的正确渲染结果。

    但是,我们需要使用 共享内存来存储渲染结果,纹理图像配置 如下:

    EGLint attr[]={EGL_width、win_width、EGL_height、win_height、EGL_Linux_DRM_FourCC_EXT、 DRM_FORMAT_BGR888、EGL_DMA_BUF_PLANE0_FD_EXT、(EGLint) output_mem.DMA_buf_FD、EGL_DMA_BUF_PLANE0_OFFSET_EXT、0、 EGL_DMA_BUF_PLANE0_Pit_EXT、WIN_WIDTH*3、EGL_NONE};

    void* pKHRImage = eglCreateImageKHR (eglDisplay、EGL_NO_Context、EGL_Linux_DMA_BUF_EXT、NULL、attr);

    glEGLImageTargetTexture2DOES (GL_T纹 理_EXTERNAL_OES、(GLeglImageOES) pKHRImage);

    代码 引用演示:vision_apps/utils/OpenGL/src/a72/app_gl_EGL_utils_linux.c -函数:appEglCreateWindowIMG 和 appEglBindFrameBuffer;

    那么、如果我们使用 glTextImage2D 来配置纹理图像、如何 将科学直接呈现到共享存储器中?  

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Li、

    我需要一周的时间来在内部进行调试。eglCreateImageKHR 将是使用共享存储器的正确方法。

    是否有您可以共享的示例应用?

    此致、

    Takuma

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    你好、 Takuma、

    下面  是一个示例应用、您可以在 TDA4上进行调试以 验证我们的问题。

    e2e.ti.com/.../TDA4_5F00_GLES_5F00_Demo.rar

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Li、

    我看到的一点是、屏外 EGL 配置属性适用于 RGBA (EGL_alpha_size 设置为8)。 您可以尝试将 EGL_alpha_size 设置为0吗?

    此致、

    Takuma

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    你好、 Takuma、

    该平台支持 EGL_MESA_platform_surfaceless、因此 屏外 EGL 配置属性 未使用、而 GBM_surface 为 NULL。

      您可以在读取 示例应用时忽略有关 GBM_Surface 的代码。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Takuma、

    您这边有什么好消息吗?

    谢谢。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 Fan 和 Li:

    我们仍在对此进行研究。 对于由 Li 共享的应用、我们一直在运行一些实验、并且我们能够看到所描述的行为(RGBA 呈现正常、但 RGB 存在问题)。 仔细查看代码、我们没有看到任何明显的问题、流程看起来是正确的。  

    我们目前正在与第三方 GPU IP 所有者联系、后者也是 GPU 驱动程序的提供商、以防驱动程序本身出现问题。 作为一个警告,我们可能需要相当长的时间才能找到解决这一问题的办法。  

    此致、

    Takuma