Я использую процедуры видения для захвата кадров («захват») с камеры GigE 300 кадров в секунду. Камера может выдавать кадры немного быстрее, чем HD может их записать, поэтому я записываю их в один цикл и помещаю их в очередь, которая считывается во втором (смежном / параллельном) цикле. Все идет хорошо, пока не закончится первый цикл (насколько я могу судить), что означает, что все данные были получены, большая часть была записана, а остальная часть просто должна быть записана. К сожалению, все изображения, оставленные в очереди волшебным образом задним числом , все заканчиваются одними и теми же данными, поэтому последняя часть набора данных содержит сотни статических кадров.
Как мне избежать этого поведения? Я предполагаю, что есть некоторый ресурс, который мне нужно удержать, чтобы буферная память изображений не использовалась, но это, очевидно, , а не сами изображения. (Я не делаю там никаких явных действий по очистке камеры.)
Вот описание того, что я делаю, в стиле 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, что является худшим из всех, что я видел. (И снова, записывает все изображения, в конце они все одинаковые.)