在c++中加载视频文件到缓冲区

loading video files into a buffer in C++

本文关键字:文件 缓冲区 视频 加载 c++      更新时间:2023-10-16

我目前正在尝试创建一个程序,需要一个视频文件,通常是AVI,并试图将其转换为图像。到目前为止,我的过程工作得很完美,如果需要的话可以单独离开。然而,我想看看是否有可能优化它的速度。所以我的问题是,是否有可能将视频文件的一部分一块一块地加载到内存中,而不是流式传输。也许可以将2 - 3分钟的片段加载到缓冲区中,处理它,并在接下来的2 - 3分钟的视频中重复使用它。我已经研究了直接显示和OpenCV加载和播放视频文件,但到目前为止还没有找到任何关于将视频加载到缓冲区的东西。任何教程或概念的链接都是非常感谢的。

如果有帮助,将在Windows XP/7机器上开发。

你能做的就是加载一些帧,我们称之为N帧的块,从磁盘加载到队列中。一旦为缓冲区设置了限制,就可以将帧拉出并处理它们。您可以通过使用两个队列(Q1和Q2)和两个线程(T1和T2)并行地执行此操作。当使用T2处理来自Q1的帧时,您可以使用T1加载Q2。您将在一个队列满时进行上下文切换,并将帧拉出并处理它们,而另一个队列正在从磁盘加载帧。当然,您需要处理与这种方法相关的线程/并行化的复杂性,在这种情况下,BOOST线程可能会有所帮助。

这样的应用程序的瓶颈是从磁盘读取文件,并将每个帧转换为图像。你无法逃避这些任务。除非你用了错误的方法,否则你无法显著加快应用程序的执行速度。

希望您不需要将这些图像写回磁盘