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

Does a video have to be encoded before output on screen?

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

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

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

现在,"you can show on screen" 与此相反:图形卡采用各种图像格式,由驱动程序定义这些格式,并为 X11 和尝试尝试的应用程序提供 API展示东西。

显示驱动程序直接支持什么样的格式取决于设备和驱动程序。对于嵌入式 GPU,有时甚至可以说 "hey, here's an MPEG2 stream, display that in this and that rectangle",让芯片进行解码、渲染和显示。但是,通常情况下,您只会得到一个要在其中显示视频的帧,然后写入应由软件显示的像素。

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