我目前正在尝试通过命令行Surface
实用程序记录screenrecord
。根据实现,框架将video encoder
组件的颜色格式设置为OMX_COLOR_FormatAndroidOpaque
。因此,video encoder
被迫从gralloc
句柄中检索颜色格式。
执行此用例时,video encoder
遇到BGRA
Surface
。因此,我试图找到答案的问题是:
对于Miracast,编码器的输入通过SurfaceMediaSource
接收。如果Surface
录制,MediaCodec
的输入表面将通过GraphicBufferSource
界面提供。
是否应在RGB
内处理从YUV
到video encoder
空间的颜色转换,或者最好在SurfaceMediaSource
中引入,这是编码器的来源gralloc
来源的抽象?
答案 0 :(得分:3)
根据我的问题,我调查了作为AOSP
发行版的一部分公开的编解码器,并发现前三大厂商即高通,三星和TI已采用内部颜色转换来处理{{ 1}}录制场景。一些有用的链接如下:
Qualcomm基于Surface
的编解码器实现:
在Qualcomm视频ecnoders中,对于V4L2
录制,存在颜色转换,因此,实际的Surface
数据存在于缓冲区指针中。从这个note可以看出,此方案即YUV
录制和Surface
方案与Camera
来源之间的处理存在差异。
TI的视频编码器:
H.264
Encoder opening a color conversion module for OMX_COLOR_FormatAndroidOpaque
H.264
Encoder: Conversion from Platform Opaque to NV12
format
MPEG-4
Video Encoder: Opening of color conversion module for Opaque color format
三星视频编码器:
在三星的情况下,从Exynos_OSAL_GetInfoFromMetaData
可以观察到Gralloc
源方案之间没有区别。