我正在将视频帧提取到 Surface 数组以重新排列成新视频,并随时间交换 x 维度。以下是出现的不同类型效果的一些示例:http://www.youtube.com/view_play_list?p=B2540182DE868E85
当我尝试将 1280 帧 1280x720 视频(1,179,648,000 像素)存储到 Surface[]
时,应用程序总是因 std::bad_alloc
而崩溃。它不会在 1280 帧 1080x720 视频(995,328,000 像素)中崩溃。
我做了一个简单的测试,让它可以在我的电脑(4GB RAM)上运行,但不能在 friend 的更小的笔记本电脑上运行:
maxWidth = 1920;
while ((inW * inH * maxWidth) >= 1000000000)
maxWidth -= 20;
两个问题:
- 有没有比 Surface 阵列更好的方法来快速访问 10^9 像素?
- 这个内存限制是什么?在为输出设置
maxWidth
时如何测试和避免它?
非常感谢 C++ 菜鸟。我把来源放在Github: Redimensionator .它使用 Cinder。
最佳答案
嗯,这取决于你的硬件/操作系统/软件/编译器。
- 您运行的是 32 位还是 64 位操作系统?
- 您将应用编译为 32 位还是 64 位?
- 您是一次分配所有资源还是分块分配(分别说每一帧)?
- 您是否真的需要同时将所有图像存储在内存中,或者您可以对工作进行分区吗?
在每个问题的后半部分回答"is"可以让您更轻松地使用大型数组。
关于c++ - 将大量图像数据(10^9 像素)加载到内存中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5232026/