我必须从CD/DVDrom中读取包含许多动画帧的大文件,并将其作为动画显示在屏幕上。从硬盘读取时,将一帧读取到内存、处理、显示然后读取下一帧的策略效果很好,但当我从光学设备读取时,访问时间会扼杀动画。
我使用C和winapi OpenFile/ReadFile方法。
我应该如何读取存储在光学设备上的文件的内容,以达到实时的动画速度(我见过一个程序,即使是双倍速度,它也不会在动画开始之前缓冲整个文件)?
发布于 2010-02-02 06:20:13
两种技术:
这些技术适用于任何编程语言,并且可以组合在一起以获得最佳效果。一个读取缓冲区和一个解码帧缓冲区可以为您提供两倍于解码时间和访问时间的保护。
EDIT:这些是MPlayer使用的技术。此外,如果可以的话,您应该考虑您的编码格式--不同的格式可能会牺牲CPU的解码时间,以换取从磁盘读取的较少数据。下面是几条信息,用来估计应该压缩多少视频。
1x光驱的
Edit2:其他信息
发布于 2010-02-02 06:21:00
可以尝试的一件事是压缩。例如,从驱动器加载zip文件将花费较少的时间,但需要更多的CPU时间来处理。如果无损压缩是可能的,那么这可能是值得检查的。了解CD驱动器也很有用。驱动器以固定的旋转速度旋转。这意味着磁盘外部的数据加载速度比磁盘内部的数据加载速度快。然而,刻录机将从内向外刻录数据,因此您可能最终必须在“动画”之前刻录大量数据,以获得最大的读取速度。
发布于 2010-02-02 06:22:39
将CreateFile与OPEN_ALWAYS和FILE_FLAG_SEQUENTIAL_SCAN一起使用
https://stackoverflow.com/questions/2180467
复制相似问题