3

毎秒300枚のライン画像を生成するラインスキャンカメラがあります。画像ビューにFIFOの方法で線を表示して、ビューの最後の線が最新の線画像を表示し、前の線を上にシフトして線を更新できるようにします。

昔のようにCでビデオメモリにアクセスできれば、

memcpy(videoMem, videoMem+lineWidth*pixelSize, pixelSize*lineWidth*(nLines-1));
memcpy(videoMem+pixelSize*lineWidth*(nLines-1),newLine,lineWidth*pixelSize);

しかし、これがビデオメモリに直接アクセスしてもできる最善の方法かどうかはわかりません。

今では、ビデオメモリに直接アクセスすることは不可能であり、望ましくないことを理解しています。その場合、最善の方法は何ですか?専門家の意見をいただければ幸いです。

Windows7のデスクトップPCアプリケーションです。

アップデート

さすがに、一種の循環バッファを扱わなければならないようです。私の場合のトリッキーな部分は、バッファの書き込みが行ごとであり、読み取りが画面ごとであるということです。したがって、endポインタがバッファの物理的な終わりに到達すると、画面メモリをビデオに渡すために追加のメモリコピーが必要になります。Bipバッファがこれに対する解決策になると思います。他のアイデアはありますか?

4

1 に答える 1

2

memmoveの目的である、オーバーラップしているメモリをmemcpyすることはできません。それでも、コピーが正しい順序で行われる限り、memcpyを使用できます。プラットフォームで試して、機能するかどうかを確認してください。

主な実装の問題は、2つの別々の書き込みがあるとちらつきが発生するかどうかです。この場合、最初に新しいイメージをバッファに書き込んでから、バッファ全体を一度にビデオメモリに書き込む必要があります。

一般的に言って、あなたはビデオメモリを読みません。表示されるデータは、独自のメモリ領域にある必要があります。要約すると、3つのメモリ領域があります。

  1. 表示するデータ
  2. ディスプレイバッファ
  3. ビデオメモリ(または同等のもの)

標準的なプロセスは、1-> 2、次に2->3を1つのステップで書き込むことです。ただし、ちらつきがない場合は、バッファなしで直接1->3に進むことができます。これ以外に、あなたが書いたものを超える魔法のアルゴリズムはありません

于 2013-02-05T01:22:45.303 に答える