Closed. This question needs details or clarity。它当前不接受答案。
                            
                        
                    
                
                            
                                
                
                        
                            
                        
                    
                        
                            想改善这个问题吗?添加详细信息并通过editing this post阐明问题。
                        
                        去年关闭。
                                                                                            
                
        
接收原始视频帧时,该帧以I420格式包含。

如果您相信VideoLAN Wiki,则解码所有视频(不带libi420_rgb_plugin模块和/或libi420_rgb_plugin)时的标准格式为I420格式

VideoLAN YUV页面引用:


  I420
  
  它首先具有亮度“亮度”平面Y,然后具有U色度平面,
  最后是V色度平面。
  
  两个色度平面(蓝色和红色投影)在
  水平和垂直尺寸都乘以2。即
  也就是说,对于2x2平方像素,有4个Y样本,但只有1个U
  样品和1 V样品。
  
  这种格式需要4 * 8 + 8 + 8 = 48位(4个像素),因此深度为12
  每像素位数。
  
  到目前为止,I420是VLC中最常见的格式。大多数视频解码器
  以I420格式输出原始图片。
  
  图形说明:每个字母代表一位。

For a single I420 pixel: YYYYYYYY UU VV
For a 50-pixel I420 frame: YYYYYYYY*50 UU*50 VV*50 (or Y*8*50 U*2*50 V*2*50 for short)
For an n-pixel I420 frame: Y*8*n U*2*n V*2*n



从书面上可以理解,只有一种可以理解,这种格式包含的帧的权重较小,但是更难于读取和转换为这种格式。不清楚的是,需要为例如大小为1920x1080的帧分配多少内存,并且对于软件代码转换2个缓冲区,可能需要原始帧和重新编码的缓冲区。有关CPU时间,所需格式的编码成本以及图片输出的许多问题都是从这里得出的。

可以使用现成的解决方案,例如RV32,但是SFML会以BGRA格式创建纹理,但是渲染的帧格式为色度RV32 RGBA。此处需要重新安排颜色通道R <-> B的间接费用。在我较弱的PC上,如果视频的帧速率不高于每秒60帧,并且大小不超过1080p,则“转码” /重新安排频道的成本大约需要22-150ms。

我在论坛上的某个地方看到,通过opengl更改颜色通道,有一种“硬件/软件”,我无法确切地了解排列,但是,立即写到,成本很高。因此,问题是,获取RAW图像并在所需的图像中对其进行一次编码是否更容易?是否有任何解决方案可以在硬件级别上执行此类操作而无需接触软件部分?

最佳答案

获取RAW图像并在所需的图像中对其进行一次编码是否更容易


也许可以,但是大多数视频应用程序都在渲染尺寸上使用YUV,因此对此进行了优化。而且,YUV通常可以压缩为较小的文件,因为您可以在色度平面上进行更多的量化。


  是否有任何解决方案可以在硬件级别上执行此类操作而无需接触软件部分?


您是说硬件加速颜色转换?是的,但是如果仅转换为渲染,通常可以跳过将转换写入YUV纹理/曲面的操作。

10-08 08:29