4

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

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

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

应该在内部处理从空间RGB到空间的颜色转换,还是更好地引入编码器的源抽象源?YUVvideo encoderSurfaceMediaSourcegralloc

4

1 回答 1

3

关于我的问题,我调查了作为AOSP分发的一部分暴露的编解码器,发现排名前三的供应商,即高通、三星和 TI 已采用内部颜色转换来处理Surface录制场景。一些有用的链接如下:

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

在 Qualcomm 视频 ecnoders 中,为了Surface记录,存在颜色转换,因此实际YUV数据存在于缓冲区指针中。从这个注释中可以看出,这种场景(即Surface录制和Camera具有源的场景)之间的处理存在差异。Gralloc

TI 的视频编码器:

三星视频编码器:

gralloc在三星的案例中,源场景之间没有区别,从Exynos_OSAL_GetInfoFromMetaData.

于 2014-04-23T10:42:36.533 回答