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.

[参考译文] AM62A7:帧缓冲器件的透明度

Guru**** 2468610 points


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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/1463269/am62a7-transparency-with-framebuffer-device

器件型号:AM62A7

工具与软件:

您好!

我想在视频上流式传输透明 GUI 帧和一些文本、但不想使用 CPU 来覆盖 GUI。

参考上一主题、可通过显示子系统(TIDSS)的 VIDL 流水线实现这一点。
VIDL 流水线被暴露为帧缓冲器器件、可以在其中绘制 GUI。

问题是、虽然帧缓冲器器件需要4字节(32位)的数据、但仅为显示器提供3个字节。
它采用的格式为 BGRx、其中忽略了第4个字节

root@am62axx-evm:~# fbset --info

mode "1920x1080"
    geometry 1920 1080 1920 1080 32
    timings 0 0 0 0 0 0 0
    accel true
    rgba 8/16,8/8,8/0,0/0
endmode

Frame buffer device information:
    Name        : tidssdrmfb
    Address     : (nil)
    Size        : 8294400
    Type        : PACKED PIXELS
    Visual      : TRUECOLOR
    XPanStep    : 1
    YPanStep    : 1
    YWrapStep   : 0
    LineLength  : 7680
    Accelerator : No

但是、tids 可以支持透明度、只需很少的格式行 RA24、BA24等
如何为 BA24格式配置帧缓冲设备? 我需要在驱动程序中还是在 Linux 中进行更改?

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

    您好!

    在输出端、格式将是24位、而在输入端、由您的用户应用来配置 α 通道或输入缓冲器。 在 TIDSS 中、您还可以通过 α 混合来设置 两个平面的透明度。 我没有 gstreamer 示例、但下面是一个用于测试的测试二进制文件: https://software-dl.ti.com/processor-sdk-linux/esd/AM62X/10_00_07_04/exports/docs/linux/Foundational_Components Kernel_Drivers Display/DSS7.html?highlight=tidss

    此致、
    Krunal

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

    尊敬的 Krunal:

    在 TIDSS 驱动程序中的哪个位置、我可以将帧缓冲区配置为 BA24格式? 它有24位输出、每个通道有6位。  

    假设 TIDSS 从32位中获取24位。 可以开始了。 这里的问题是 TIDSS 不会将这24位与6位 BGRA 对齐。 而是配置为8位 BGR。 我如何让 TIDSS 将这24位作为6位 BGRA 进行处理。

    在 kmssink 等其他情况下、tidss 也会自动获取 α 值。

    Kernel_Drivers

    在此示例中、显示的是全局 α 混合、而不是按像素混合部分。

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

    您好!

    如对其进行内部调查、请预计2天内得到回复。

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

    您好!

    配置 BA24格式更多的是用户空间 DRM 应用。

    我建议查看此头文件(https://github.com/torvalds/linux/blob/21266b8df5224c4f677acf9f353eecc9094731f0/include/uapi/drm/drm_fourcc.h#L201C1-L201C103):)中的以下行

    #define DRM_FORMAT_BGRA8888	fourcc_code('B', 'A', '2', '4') /* [31:0] B:G:R:A 8:8:8:8 little endian */

    另请查看下面 AM62A TRM 的突出显示部分:

    上图介绍了 TIDSS 将如何解释 BGRA32格式。

    此致

    Divyansh

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

    尊敬的 Divyansh:

    我可以用透明性强制配置帧缓冲区。

    [报价 userid="586572" url="~/support/processors-group/processors/f/processors-forum/1463269/am62a7-transparency-with-framebuffer-device/5615778 #5615778"]假设 TIDSS 占用32位中的24位。 可以开始了。 这里的问题是 TIDSS 不会将这24位与6位 BGRA 对齐。 而是配置为8位 BGR。 如何让 TIDSS 将这24位数据处理为6位 BGRA[/QUOT]

    我在这里错了。 TIDSS 将获取完整的32位、默认格式集为 BGRx [DRM_FORMAT_XRGB8888、四个字符:XR24]。 只要请求 BGRx、我就会强制 tidss 驱动程序在四个 cc:AR24]格式中设置 BGRA [DRM_FORMAT_ARGB8888。 因此、帧缓冲区中也会使用 α 像素值。

    该方法的缺点是我们无法在需要时使用 BGRx。 我的应用仍然不需要该软件。
    当我遇到此问题时、我注意到在 tidss 驱动程序代码中、帧缓冲区使用通用函数 drm_fbdev_generic_setup (ddev、32)进行初始化、其中不提供更改配置的功能。 如果 初始化帧缓冲区并在驱动器端进行更多控制、则效果更好。