package org.myrobotlab.opencv; import java.util.concurrent.BlockingQueue; import java.util.concurrent.LinkedBlockingQueue; import org.bytedeco.javacv.Frame; import org.bytedeco.javacv.FrameGrabber; import org.myrobotlab.logging.LoggerFactory; import org.myrobotlab.logging.Logging; import org.slf4j.Logger; public class BlockingQueueGrabber extends FrameGrabber { public final static Logger log = LoggerFactory.getLogger(BlockingQueueGrabber.class.getCanonicalName()); transient BlockingQueue<Frame> blockingData; public BlockingQueueGrabber(BlockingQueue<Frame> queue) { blockingData = queue; } public BlockingQueueGrabber(int cameraIndex) { } public BlockingQueueGrabber(String filename) { } public void add(Frame image) { blockingData.add(image); } @Override public Frame grab() { try { return blockingData.take(); } catch (InterruptedException e) { Logging.logError(e); return null; } } @Override public void release() throws Exception { } public void setQueue(BlockingQueue<Frame> queue) { blockingData = queue; } @Override public void start() { if (blockingData == null) { blockingData = new LinkedBlockingQueue<Frame>(); } } @Override public void stop() { } @Override public void trigger() throws Exception { } }