是否必须在屏幕输出之前对视频进行编码?

时间:2015-08-31 13:09:44

标签: linux video video-streaming video-capture video4linux

我有一项任务是在没有X11的控制台模式下显示视频,从USB摄像头捕获。我对视频捕获/编码/解码的东西完全陌生。我发现支持Video4linux的USB摄像头可以采用YUV 4:2:2格式捕获视频。据我所知,这是未压缩的格式。所以,我想知道我是否必须压缩此视频才能在屏幕上显示它?

PS如果它能以某种方式提供帮助,我还有Mali t628 GPU的Odroid XU4开发板......

1 个答案:

答案 0 :(得分:1)

您的理解不正确。无论开发人员可能想到的任何二进制流,USB摄像头都会提供其固件非常适合的任何格式的图像数据。相机驱动程序的工作是将二进制数据转换为V4L理解的东西,可以是YUV 4:2:2,但不一定如此。

现在,您可以在屏幕上显示""与此相反:图形卡采用各种图像格式,由驱动程序定义这些格式,并为X11和试图显示内容的应用程序提供API。

显示驱动程序直接支持哪种格式取决于设备和驱动程序。对于嵌入式GPU,有时甚至可以说"嘿,这是一个MPEG2流,在这个和那个矩形中显示",让硅做解码,渲染和显示。但是,通常情况下,您只需要一个您想要显示视频的帧,并写下应该由软件显示的像素。

现在,通常计算机图形是基于RGB的,但许多驱动程序/ GPU也支持几种YUV格式。由于历史原因,还有许多不同的接口,应用程序可以将这些接口绘制到缓冲区 - 无论是经典的X11缓冲区,DRI,opengl加速访问,opengl纹理访问,XVideo,特定于供应商的扩展(VDPAU等) ),或者,这是嵌入式设备的典型特征,只是一个映射到显示器的存储器范围,可以选择性地在屏幕上显示。