gpt4 book ai didi

c - 从 CD-ROM 快速读取数据

转载 作者:行者123 更新时间:2023-12-02 08:59:49 27 4
gpt4 key购买 nike

我必须从 CD/DVDrom 读取包含许多动画帧的大文件,并将其作为动画显示到屏幕上。从硬盘读取时,将帧读入内存、处理、显示然后读取下一帧的策略效果很好,但当我从光学设备读取时,访问时间会杀死动画。

我使用 C 和 winapi OpenFile/ReadFile 方法。

我应该如何读取存储在光学设备上的文件内容以实现动画的实时速度(我见过一个程序,即使以双倍速度也能做到这一点,确保它不会在动画开始之前缓冲整个文件)?

最佳答案

两种技巧:

  1. 大型缓冲区或高速缓存,如多个 MB。 CD/DVD 具有合理的顺序 I/O,但查找/访问速度非常慢(正如您所指出的),因此重新填充缓冲区的速度很快。您只需要缓冲区足够大,足以覆盖几秒钟,以便磁盘在需要时旋转,并在已经旋转时进行查找。

  2. 多线程:保持一个线程连续读取和一个单独的线程解码动画。如果读取器线程比解码提前太多,则应该阻塞。

这些技术适用于任何编程语言,并且可以组合起来以获得最佳效果。一个读取缓冲区和一个解码帧缓冲区可以为您提供两倍的解码时间和访问时间保护。

编辑:这些是 MPlayer 使用的技术。此外,如果可以的话,您应该考虑您的编码格式——不同的格式可能会牺牲解码时的 CPU 时间,从而减少从磁盘读取的数据。用于估计应压缩多少视频的一些信息。

  • 1x CD-ROM 的读取速度:150 kiB/s(最低速度)
  • 读取速度 4x CD-ROM:600 kiB/s(标准最小驱动器)
  • 读取速度 16x CD-ROM:1600 kiB/s(可获得的最大速度,通常最多只能运行 8x)
  • 读取速度 1x DVD 驱动器:~1.3 MiB/s
  • 以 DVD 质量使用 MPEG2 压缩的标清视频:约 600 kiB/s
  • 以 DVD 质量使用 MPEG4 压缩的标清视频:~100 kiB/s
  • 未压缩的标清视频:~30 MB/s
  • 24 位颜色的标准 1000x1000(1 兆像素)图像:3 MB
  • 8 位颜色(灰度)的标准 1 兆像素图像:1 MB

编辑2:附加信息

  • 请注意,如果您的驱动器支持,DVD 通常可以以 8 倍左右的速度读取(现在大多数都支持)。
  • 动画在每秒 24 帧以上时开始显得流畅。在其下方,它们对观看者来说会显得生涩。
  • 无损压缩通常可以将摄影图像的尺寸缩小约 50%。不过,您的里程可能会有所不同。
  • 动画的流畅播放部分取决于您与视频硬件的交互方式。有些方法会比其他方法产生更好的结果。我强烈建议您查看本例中 MPlayer 的代码。

关于c - 从 CD-ROM 快速读取数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2180467/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com