表面记录:颜色格式问题

时间:2014-04-23 01:19:16

标签: android android-mediarecorder mediacodec stagefright surfaceflinger

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

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

对于Miracast,编码器的输入通过SurfaceMediaSource接收。如果Surface录制,MediaCodec的输入表面将通过GraphicBufferSource界面提供。

是否应在RGB内处理从YUVvideo encoder空间的颜色转换,或者最好在SurfaceMediaSource中引入,这是编码器的来源gralloc来源的抽象?

1 个答案:

答案 0 :(得分:3)

根据我的问题,我调查了作为AOSP发行版的一部分公开的编解码器,并发现前三大厂商即高通,三星和TI已采用内部颜色转换来处理{{ 1}}录制场景。一些有用的链接如下:

Qualcomm基于Surface的编解码器实现:

在Qualcomm视频ecnoders中,对于V4L2录制,存在颜色转换,因此,实际的Surface数据存在于缓冲区指针中。从这个note可以看出,此方案即YUV录制和Surface方案与Camera来源之间的处理存在差异。

TI的视频编码器:

三星视频编码器:

在三星的情况下,从Exynos_OSAL_GetInfoFromMetaData可以观察到Gralloc源方案之间没有区别。