曲面记录:颜色格式问题

我目前正在尝试通过命令行screenrecord实用程序来记录Surface.根据实现,该框架将视频编码器组件的颜色格式设置为OMX_COLOR_FormatAndroidOpaque.因此,视频编码器*从gralloc句柄中检索颜色格式.

执行此用例时,视频编码器遇到了BGRA表面.因此,我要寻找的问题是:

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

应该从视频编码器内部处理从RGB到YUV空间的颜色转换,还是最好在SurfaceMediaSource中引入它是gralloc源的编码器源抽象?

解决方法:

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

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

> Handling of RGBA_8888 buffers in omx_video_base component.

在Qualcomm视频触摸屏中,对于Surface记录,存在颜色转换,因此实际的YUV数据存在于缓冲区指针中.从此note可以看出,在这种情况下,即在地面记录和带有Gralloc源的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.

三星视频编码器:

> ARGB8888 conversion to YUV420SemiPlanar.

就三星而言,从Exynos_OSAL_GetInfoFromMetaData可以看出,gralloc源场景之间没有区别.

上一篇:android-如何显示解码的MediaCodec帧混乱


下一篇:Android MediaCodec格式/分辨率更改中期