Frage

Ich muss eine große Datei mit vielen Animationsrahmen von CD/DVDROM lesen und als Animation auf dem Bildschirm anzeigen. Wenn Sie von der Festplatte lesen, funktioniert die Strategie zum Lesen eines Frame in Speicher, Verarbeitung, Anzeigen und Lesen des nächsten Frame.

Ich verwende C- und WinAPI OpenFile/ReadFile -Methoden.

Wie sollte ich Inhalte einer Datei lesen, die auf einem optischen Gerät gespeichert ist, um eine Echtzeitgeschwindigkeit der Animation zu erzielen (ich habe ein Programm gesehen, das sogar doppelt geschwenkt hat, sicher nicht die gesamte Datei vor dem Start der Animation)?

War es hilfreich?

Lösung

Zwei Techniken:

  1. Großer Puffer oder Cache, wie bei mehreren MB. CD/DVD hat eine angemessene sequentielle E/O -Geschwindigkeit, aber sehr langsame Such-/Zugriffsgeschwindigkeiten (wie Sie bemerkt haben), daher ist es schnell, den Puffer nachzufüllen. Sie benötigen nur, dass der Puffer so groß ist, dass er einige Sekunden deckt, damit die Festplatte bei Bedarf sich drehen kann, und wenn Sie bereits aufgetaucht sind.

  2. Multi-Threading: Lesen Sie einen Thread kontinuierlich und einen separaten Thread-Dekodierungsanimation. Der Leser -Thread sollte blockieren, wenn er dem Dekodieren zu weit voraus ist.

Diese Techniken gelten für jede Programmiersprache und können für den besten Effekt kombiniert werden. Ein Lesepuffer und ein dekodierter Frame -Puffer schützen Sie zweimal so gut vor der Dekodierungszeit und der Zugriffszeit.

BEARBEITEN:Dies sind die Techniken, die Mplayer verwendet. Darüber hinaus sollten Sie Ihr Codierungsformat in Betracht ziehen, wenn Sie können. Verschiedene Formate können die CPU -Zeit gegen Decoding einteilen, damit weniger Daten von der Festplatte gelesen werden können. Ein paar Informationen zum Schätzung, wie viel Video komprimiert werden sollten.

  • Lesen Sie die Geschwindigkeit für 1x CD-ROM: 150 KIB/s (Bare Mindestgeschwindigkeit)
  • Lesen Sie die Geschwindigkeit 4x CD-ROM: 600 KIB/s (Standard-Mindestantrieb)
  • Lesen Sie die Geschwindigkeit 16x CD-ROM: 1600 KIB/s (maximal erhältlich, normalerweise nur bis zu 8x)
  • Lesen Sie Geschwindigkeit 1x DVD -Laufwerk: ~ 1,3 mib/s
  • Standard-Definition Video komprimiert mit MPEG2 bei DVD-Qualität: ~ 600 kib/s
  • Standard -Definition Video komprimiert mit MPEG4 bei DVD -Qualität: ~ 100 kib/s
  • Unkomprimierte Standarddefinition Video: ~ 30 MB/s
  • Standard 1000x1000 (1 Megapixel) Bild bei 24 Bit Farbe: 3 MB
  • Standard 1 Megapixelbild bei 8-Bit-Farbe (Graustufen): 1 MB

Edit2: Zusätzliche Informationen

  • Beachten Sie, dass DVDs üblicherweise mit 8x gelesen werden können, wenn Ihr Laufwerk es unterstützt (die meisten tun es jetzt).
  • Animationen werden mit 24+ Frames/Sekunden reibungslos erscheinen. Darunter werden sie einem Betrachter ruckartig erscheinen.
  • Verlustlose Komprimierung ist normalerweise gut für eine Größe von etwa 50% der Größe für fotografische Bilder. Ihre Kilometerleistung kann jedoch variieren.
  • Eine reibungslose Wiedergabe von Animationen hängt teilweise davon ab, wie Sie mit der Video -Hardware sprechen. Einige Methoden führen zu besseren Ergebnissen als andere. Ich empfehle Ihnen dringend, den Code für MPlayer in diesem Fall zu betrachten.

Andere Tipps

Eine Sache, die Sie ausprobieren sollten, ist die Komprimierung. Das Laden einer ZIP -Datei vom Laufwerk beispielsweise benötigt beispielsweise weniger Zeit, erfordert jedoch mehr CPU -Zeit, um zu verarbeiten. Wenn eine verlustfreie Komprimierung möglich ist, kann dies eine Untersuchung wert sein. Das Verständnis eines CD -Laufwerks ist ebenfalls nützlich. Das Antrieb dreht sich in einer festen Rotationsgeschwindigkeit. Dies bedeutet, dass Daten über die außen der Disc lädt schneller als Daten im Inneren. Ein Brenner verbrennt jedoch Daten von innen nach außen, sodass Sie möglicherweise vor der "Animation" viele Daten verbrennen müssen, um die maximale Lesegeschwindigkeit zu erhalten.

verwenden Erstelle Datei mit open_always und file_flag_sexential_scan

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top