首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从CD-ROM快速读取数据

从CD-ROM快速读取数据
EN

Stack Overflow用户
提问于 2010-02-02 06:15:43
回答 3查看 2.1K关注 0票数 2

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

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

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

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2010-02-02 06:20:13

两种技术:

  1. 大缓冲区或缓存,如多MB。CD/DVD具有合理的顺序I/O,但查找/访问速度非常慢(如您所注意到的),因此可以快速地重新填充缓冲区。你只需要缓冲区足够大,以便在需要时允许磁盘旋转几秒钟,并在已经旋转的情况下寻找up.
  2. Multi-threading:保持一个线程连续读取和一个单独的线程解码动画。读取器线程应该阻塞,如果它在解码之前超前太多。

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

EDIT:这些是MPlayer使用的技术。此外,如果可以的话,您应该考虑您的编码格式--不同的格式可能会牺牲CPU的解码时间,以换取从磁盘读取的较少数据。下面是几条信息,用来估计应该压缩多少视频。

1x光驱的

  • 读取速度: 150 kiB/s (最低裸速)
  • 读取速度4倍光驱: 600 kiB/s (标准最小驱动器)
  • 读取速度16倍光驱: 1600 kiB/s (可获得的最大、通常最高运行速度为8倍)
  • 读取速度1倍DVD光驱:约1.3 MiB/s
  • 标准清晰度视频,采用MPEG2压缩,DVD质质:约600 MiB清晰度视频,采用MPEG4压缩,DVD质质:约100 MB/s
  • Standard标准清晰度视频:约30 MiB 1000x1000 (100万像素),24位彩色图像:3 MB
  • 标准版,100万像素图像,8位彩色(灰度):1 MB

Edit2:其他信息

  • 请注意,如果您的光驱支持DVD,通常可以以8倍左右的速度读取DVD(现在大多数都支持)。
  • 动画开始以24+帧/秒的速度平滑显示。在这一点下,它们会出现抖动,以viewer.
  • Lossless压缩通常是好的约50%的缩小大小的摄影图像。您的里程可能会有所不同,though.
  • Smooth动画的播放将部分取决于您如何与视频硬件交谈。有些方法会产生比其他方法更好的结果。在这种情况下,我强烈建议您查看MPlayer的代码。
票数 4
EN

Stack Overflow用户

发布于 2010-02-02 06:21:00

可以尝试的一件事是压缩。例如,从驱动器加载zip文件将花费较少的时间,但需要更多的CPU时间来处理。如果无损压缩是可能的,那么这可能是值得检查的。了解CD驱动器也很有用。驱动器以固定的旋转速度旋转。这意味着磁盘外部的数据加载速度比磁盘内部的数据加载速度快。然而,刻录机将从内向外刻录数据,因此您可能最终必须在“动画”之前刻录大量数据,以获得最大的读取速度。

票数 2
EN

Stack Overflow用户

发布于 2010-02-02 06:22:39

CreateFile与OPEN_ALWAYS和FILE_FLAG_SEQUENTIAL_SCAN一起使用

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2180467

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档