我需要解码视频,但是我的视频播放器仅支持RGB8像素格式。因此,我正在研究如何在GPU中进行像素格式转换,最好是在解码过程中,但如果可能的话,在此之后。
我发现Angular's upgrade guide解释了如何将ffmpeg上的视频解码为特定的像素格式,只要它受编解码器支持即可。
基本上,get_format()
是从编解码器支持的像素格式列表中选择解码视频的像素格式的功能。我的问题是:
sws_scale()
函数是否在GPU或CPU中进行转换?答案 0 :(得分:0)
av_hwframe_transfer_data
从GPU下载解码帧。
从这一点出发,如果您使用硬件或软件解码,并没有多大区别。sws_scale
没有使用硬件加速。由于它不接受“ hwframe”。如果您想在硬件级别上进行颜色转换,则可能想看一下OpenCV,您可以在那里使用GPUMat
,然后上传您的框架,调用cvtColor
,然后再次下载。 一些一般性评论:
在您的GPU上,几乎任何图像操作缩放等操作都更快,但是上载和下载数据可能会花费一些时间。对于单个操作,通常不值得使用GPU。
在您的情况下,我将尝试首先使用CPU解码和CPU颜色转换。只需确保使用良好的线程化和矢量化算法,例如OpenCV或Intel IPP。如果仍然缺乏性能,则可以考虑硬件加速。