表面录制:颜色格式问题



>我目前正在尝试通过命令行screenrecord实用程序记录Surface。根据实现,框架将video encoder组件的颜色格式设置为 OMX_COLOR_FormatAndroidOpaque 。因此,video encoder被迫从gralloc句柄检索颜色格式。

执行此用例时,video encoder遇到BGRA Surface。因此,我试图找到答案的问题是:

在 Miracast 的情况下,编码器的输入是通过 SurfaceMediaSource 接收的。在Surface记录的情况下,MediaCodec的输入表面通过GraphicBufferSource接口提供。

RGBYUV空间的颜色转换应该在video encoder内处理,还是最好在SurfaceMediaSource中引入编码器对gralloc源的源抽象?

进一步回答我的问题,我调查了作为AOSP发行版的一部分公开的编解码器,发现前 3 名供应商(即高通、三星和 TI(已采用内部颜色转换来处理Surface录制场景。一些有用的链接如下:

高通公司基于V4L2的编解码器实现:

  • 处理组件omx_video_base RGBA_8888缓冲区。

在高通视频节点中,对于Surface记录,存在颜色转换,因此,实际YUV数据存在于缓冲区指针中。这种情况在处理上存在差异,即 从本说明中可以观察到Surface记录和Camera具有Gralloc源的场景。

TI 的视频编码器:

  • H.264编码器打开颜色转换模块进行OMX_COLOR_FormatAndroidOpaque

  • H.264编码器:从平台不透明转换为NV12格式。

  • MPEG-4视频编码器:打开不透明颜色格式的颜色转换模块。

三星视频编码器:

  • ARGB8888转换为YUV420SemiPlanar

在三星的案例中,从Exynos_OSAL_GetInfoFromMetaData中可以观察到gralloc源场景之间没有区别。

相关内容

  • 没有找到相关文章