ビジョン ルーチンを使用して、300fps GigE カメラからフレームをキャプチャ (「グラブ」) しています。カメラは、HD が書き込むよりも少し速くフレームを配信できるため、1 つのループでキャプチャし、2 番目の (隣接/並列) ループで読み取られるキューに貼り付けます。最初のループが終了するまで (私が知る限り)、すべてがうまくいきます。つまり、データはすべて取得され、ほとんどが書き込まれ、残りは書き出す必要があるだけです。残念ながら、キューに残ったすべての画像は魔法のようにさかのぼってすべて同じデータになってしまうため、データセットの最後の部分には数百の静的フレームが含まれています。
この動作を回避するにはどうすればよいですか? イメージ バッファ メモリが再利用されないように保持する必要があるリソースがあると思いますが、それは明らかにイメージそのものではありません。(ここでは明示的なカメラのクリーンアップは行いません。)
これが私がやっていることのASCIIアートの描写です(少なくともこれが関連する部分であることを願っています):
+===============+ +==========+
-queue----@-------Insert--@---@-Empty?---@---Release queue
| # GrabImg-^ # # | #
| # # # Y->Stop #
| # i-(>n?)->Stop # +==========+
| +===============+
|
| +==============+
\--@-Deleted?--Y #
# | | #
# N->Get | #
# | v #
# Write Stop#
+==============+
キューの削除を使用して、ループの終わりを知らせています。確かにちょっとずさんなので、off by oneエラーは理解できましたが、off by 2200 エラーは理解できませんでした。これは私が見た中で最悪です。(繰り返しになりますが、すべての画像が書き込まれますが、最後はすべて同じです。)