在c++中加载视频文件到缓冲区
loading video files into a buffer in C++
我目前正在尝试创建一个程序,需要一个视频文件,通常是AVI,并试图将其转换为图像。到目前为止,我的过程工作得很完美,如果需要的话可以单独离开。然而,我想看看是否有可能优化它的速度。所以我的问题是,是否有可能将视频文件的一部分一块一块地加载到内存中,而不是流式传输。也许可以将2 - 3分钟的片段加载到缓冲区中,处理它,并在接下来的2 - 3分钟的视频中重复使用它。我已经研究了直接显示和OpenCV加载和播放视频文件,但到目前为止还没有找到任何关于将视频加载到缓冲区的东西。任何教程或概念的链接都是非常感谢的。
如果有帮助,将在Windows XP/7机器上开发。
你能做的就是加载一些帧,我们称之为N帧的块,从磁盘加载到队列中。一旦为缓冲区设置了限制,就可以将帧拉出并处理它们。您可以通过使用两个队列(Q1和Q2)和两个线程(T1和T2)并行地执行此操作。当使用T2处理来自Q1的帧时,您可以使用T1加载Q2。您将在一个队列满时进行上下文切换,并将帧拉出并处理它们,而另一个队列正在从磁盘加载帧。当然,您需要处理与这种方法相关的线程/并行化的复杂性,在这种情况下,BOOST线程可能会有所帮助。
这样的应用程序的瓶颈是从磁盘读取文件,并将每个帧转换为图像。你无法逃避这些任务。除非你用了错误的方法,否则你无法显著加快应用程序的执行速度。
希望您不需要将这些图像写回磁盘
相关文章:
- 将整个二进制文件读入缓冲区,然后以特定格式解析
- 从缓冲区读取/写入文件
- 如何将文件的一部分读取到std::list缓冲区?
- CSV文件未从缓冲区获取数据
- 我该如何循环遍历我的数组(缓冲区——包含一个文本文件),并将其打印成30字节的块
- 使用大磁盘文件的 C++ 循环缓冲区
- 文件大小和缓冲区过冲
- 从文件中读取原始压缩缓冲区.jpg使用 jpeglib
- 多线程和共享资源:使用C++定期将数据从缓冲区(数据结构)复制到文件
- 如何在没有任何缓冲区的情况下将 stderr 重定向到文件?
- 使用平面缓冲区读取以前写入的二进制文件的数据
- 读取文件时字符缓冲区溢出
- 将随机数放入缓冲区以写入文件的有效方法是什么?
- 使用谷歌协议缓冲区 - 如何在.proto文件中定义字段
- 无法使用两种不同的频率填充 *.wav 文件的缓冲区
- 使用文件缓冲区循环加密文件
- 从导致AccessViolationException的线程访问文件缓冲区
- 读取文件缓冲区传递
- 将内存写入文件缓冲区如何使其发生变化?
- 将二进制文件缓冲区的块读取为不同类型的