質問

CD/DVDROMの多くのアニメーションフレームを含む大きなファイルを読み、アニメーションとして画面に表示する必要があります。ハードディスクから読み取るとき、フレームをメモリに読み、次のフレームを処理し、表示する戦略はうまく機能しますが、光学装置から読むと、アクセス時間がアニメーションを殺します。

CおよびWinapi OpenFile/ReadFileメソッドを使用します。

光学デバイスに保存されているファイルのコンテンツを読み取るには、リアルタイムのアニメーション速度を実現するにはどうすればよいですか(アニメーションの開始前にファイル全体をバッファリングしないことを確認してください)。

役に立ちましたか?

解決

2つのテクニック:

  1. 複数のMBのように、大きなバッファまたはキャッシュ。 CD/DVDには合理的なシーケンシャルI/Oがありますが、非常に遅いシーク/アクセス速度(ご存知のとおり)があるため、バッファを補充するのは速いです。必要に応じてディスクがスピンアップできるように、数秒をカバーするほど大きく大きくする必要があります。

  2. マルチスレッド:1つのスレッドを継続的に読み取り、アニメーションをデコードする別のスレッドを継続的に保ちます。読者のスレッドは、デコードよりも先に進んでいる場合にブロックするはずです。

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

編集:これらは、Mplayerが使用する手法です。さらに、可能であれば、エンコード形式を検討する必要があります。異なる形式では、ディスクから読み取るデータを減らすために、さまざまな形式をデコードするとトレードオフできます。どれだけのビデオを圧縮する必要があるかを推定するためのいくつかの情報。

  • 1x CD-ROMの速度を読む:150 Kib/s(最低速度)
  • 速度を読む4x CD-ROM:600 Kib/s(標準最小ドライブ)
  • 読み取り速度16x CD-ROM:1600 KIB/s(最大入手可能、通常は最大8倍のみです)
  • 速度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

EDIT2:追加情報

  • ドライブがサポートしている場合、DVDは一般に8倍ほど読み取ることができることに注意してください(ほとんどの場合は現在そうです)。
  • アニメーションは、24歳以上のフレーム/秒で滑らかに表示され始めます。その下では、彼らは視聴者にぎくしゃくしているように見えます。
  • ロスレス圧縮は通常、写真画像のサイズが約50%減少するために適しています。しかし、あなたの走行距離は異なる場合があります。
  • アニメーションのスムーズな再生は、ビデオハードウェアへの話す方法に部分的に依存します。一部の方法では、他の方法よりも優れた結果が得られます。この場合、mplayerのコードを見ることを強くお勧めします。

他のヒント

試してみることの1つは、圧縮です。たとえば、ドライブからzipファイルをロードするには時間がかかりますが、処理にはより多くのCPU時間が必要です。ロスレス圧縮が可能な場合、それは検査する価値があるかもしれません。 CDドライブを理解することも便利です。ドライブは固定回転速度でスピンします。これは、のデータを意味します 外側 ディスクのロードは、内側のデータよりも速く負荷をかけます。ただし、バーナーは内側から外側からデータを消費するため、最大の読み取り速度を取得するために「アニメーション」の前に多くのデータを消費する必要があります。

使用する createfile open_always、およびfile_flag_sequential_scanを使用します

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top