用C ++将视频文件加载到缓冲区中

时间:2011-05-04 18:39:12

标签: c++ windows opencv directx directshow

我目前正在尝试创建一个程序,该程序采用视频文件,通常是AVI,并尝试将其转换为图像。到目前为止,我完成了整个过程,如果需要可以单独使用。但是,我想看看是否有可能针对速度进行优化。所以我的问题是,是否可以通过块将视频文件的一部分加载到内存块而不是流式传输。也许将一个2到3分钟的剪辑加载到缓冲区中,处理它,并在接下来的2-3分钟视频中重复使用它。我已经研究过Direct Show和OpenCV加载和播放视频文件,但到目前为止还没有找到任何关于将视频加载到缓冲区的内容。任何指向教程或概念的链接都非常感谢。

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

2 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:1)

这样的应用程序的瓶颈是从磁盘读取文件将每个帧转换为图像。你无法摆脱这些任务。除非你以错误的方式做到这一点,否则你无能为力显着加快应用程序的执行速度。

希望您不必将这些图像写回磁盘。