2012-04-02 4 views
1

Я использую программы видения для захвата кадров («захват») с камеры GifE емкостью 300 кадров в секунду. Камера может поставлять фреймы немного быстрее, чем HD может их записать, поэтому я захватываю в одном цикле и вставляю их в очередь, которая считывается во втором (смежном/параллельном) цикле. Все идет хорошо, пока первый цикл не завершится (насколько я могу судить), что означает, что все данные были получены, большинство было написано, а остальное просто нужно записать. К сожалению, все изображения, оставшиеся в очереди магически ретроактивно все заканчиваются теми же данными, поэтому последняя часть набора данных содержит сотни статических кадров.LabView перезаписывает сделанные снимки в очереди

Как избежать такого поведения? Я предполагаю, что есть некоторый ресурс, который мне нужно удержать, чтобы память изображения не была исправлена, но, очевидно, не самих изображений. (Я не делаю какой-либо явной камеры очистки вещи там.)

Вот ASCII-арт изображение того, что я делаю (по крайней мере, я надеюсь, что это соответствующая часть):

  +===============+ +==========+ 
[email protected]@[email protected][email protected] queue 
     | # GrabImg-^  # # |  # 
     | #    # # Y->Stop # 
     | # i-(>n?)->Stop # +==========+ 
     | +===============+ 
     | 
     | +==============+ 
     \[email protected]?--Y # 
      # |  | # 
      # N->Get | # 
      #  | v # 
      # Write Stop# 
      +==============+ 

Я m, используя удаление очереди, чтобы сигнализировать о конце цикла. Это немного неряшливо, предоставлено, так что я мог понять, что ошибка одна ошибка, но не ошибка вне 2200, что хуже всего, что я видел. (И опять же, делает пишут все изображения, они все равно в конце.)

+0

где и когда изображения в вашем потребительском буфере, а когда последний очищается? – CharlesB

+0

@CharlesB - Это редактирование предоставляет достаточно информации? –

+0

err, я не привык к тому, как вы это делаете. ли grabimg копировать изображение на новый? вы удаляете изображение после записи? Также в меню редактирования вы можете создать png выбранных объектов вашей диаграммы и разместить изображение здесь. Результат PNG также содержит код LV, так что это хороший способ поделиться кодом LV здесь – CharlesB

ответ

1

В цикле производителя-потребителя производителю необходимо скопировать изображение, чтобы оно не было перезаписано на следующем итерация, если потребитель не обработал ее. GrabImg не делает этого шага, поэтому вам нужно создать новую перед каждым захватом, а потребитель позаботится о выпуске каждого обработанного буфера.

Остерегайтесь проблем с памятью, хотя!