2

CD / DVDromから多くのアニメーションフレームを含む大きなファイルを読み取り、それをアニメーションとして画面に表示する必要があります。ハードディスクから読み取る場合、フレームをメモリに読み取り、処理し、表示してから次のフレームを読み取るという戦略はうまくいきますが、光学デバイスから読み取る場合、アクセス時間によってアニメーションが停止します。

私はCとwinapiのOpenFile/ReadFileメソッドを使用しています。

アニメーションのリアルタイム速度を達成するために、光学デバイスに保存されているファイルの内容をどのように読み取る必要がありますか(アニメーション開始前にファイル全体をバッファリングしないことを確認して、2倍の速度でもそれを実行するプログラムを見ました)?

4

3 に答える 3

4

2つのテクニック:

  1. 複数のMBの場合のように、大きなバッファまたはキャッシュ。CD/DVDのシーケンシャルI/Oは妥当ですが、シーク/アクセス速度が非常に遅いため(お気づきのとおり)、バッファーの補充は高速です。バッファは、必要に応じてディスクをスピンアップできるように数秒をカバーするのに十分な大きさである必要があり、すでにスピンアップされている場合はシークします。

  2. マルチスレッド:1つのスレッドを継続的に読み取り、別のスレッドをデコードするアニメーションを維持します。リーダースレッドは、デコードよりもはるかに進んでいる場合はブロックする必要があります。

これらの手法はあらゆるプログラミング言語に適用され、最高の効果を得るために組み合わせることができます。1つの読み取りバッファと1つのデコードされたフレームバッファは、デコード時間とアクセス時間からも2回保護します。

編集: これらはMPlayerが使用するテクニックです。さらに、可能であれば、エンコード形式を検討する必要があります。さまざまな形式を使用すると、デコード時のCPU時間をトレードオフして、ディスクから読み取るデータを減らすことができます。圧縮する必要のあるビデオの量を見積もるためのいくつかの情報。

  • 1x CD-ROMの読み取り速度:150 kiB / s(最低速度)
  • 読み取り速度4xCD-ROM:600 kiB / s(標準最小ドライブ)
  • 読み取り速度16xCD-ROM:1600 kiB / s(最大取得可能、通常は最大8xまでしか実行されません)
  • 読み取り速度1xDVDドライブ:〜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

Edit2:追加情報

  • ドライブがサポートしている場合、DVDは通常8倍程度で読み取ることができることに注意してください(ほとんどの場合、現在はそうしています)。
  • アニメーションは24フレーム/秒以上でスムーズに表示され始めます。その下では、視聴者にはぎくしゃくしたように見えます。
  • 可逆圧縮は通常、写真画像のサイズを約50%縮小するのに適しています。ただし、マイレージは異なる場合があります。
  • アニメーションのスムーズな再生は、ビデオハードウェアとの話し方に部分的に依存します。一部の方法では、他の方法よりも優れた結果が得られます。この場合、MPlayerのコードを確認することを強くお勧めします。
于 2010-02-01T22:20:13.157 に答える
2

試すべきことの1つは、圧縮です。たとえば、ドライブからzipファイルをロードすると、処理にかかる時間は短くなりますが、処理に必要なCPU時間は長くなります。可逆圧縮が可能な場合は、調査する価値があります。CDドライブを理解することも役立ちます。ドライブは一定の回転速度で回転します。これは、ディスクの外側のデータが内側のデータよりも速くロードされることを意味します。ただし、バーナーはデータを内側から外側に向かって書き込むため、最大読み取り速度を得るには、「アニメーション」の前に大量のデータを書き込む必要が生じる可能性があります。

于 2010-02-01T22:21:00.397 に答える
0

OPEN_ALWAYSおよびFILE_FLAG_SEQUENTIAL_SCANでCreateFileを使用します

于 2010-02-01T22:22:38.700 に答える