package com.dronecontrol.perceptual; import com.google.common.collect.Lists; import com.google.inject.Inject; import com.dronecontrol.perceptual.components.DetectionComponent; import com.dronecontrol.perceptual.components.GestureComponent; import com.dronecontrol.perceptual.components.PerceptualQueryComponent; import com.dronecontrol.perceptual.components.PictureComponent; import java.util.Collection; public class CamProcessor implements Runnable { private final PerceptualPipeline pipeline; private final Collection<PerceptualQueryComponent> components; private boolean stopped; @Inject public CamProcessor(PerceptualPipeline pipeline, PictureComponent pictureComponent, GestureComponent gestureComponent, DetectionComponent detectionComponent) { this.pipeline = pipeline; components = Lists.newArrayList(pictureComponent, gestureComponent, detectionComponent); stopped = false; } @Override public void run() { while (!stopped) { queryFrame(); } } public void stop() { stopped = true; } public void queryFrame() { pipeline.AcquireFrame(true); for (PerceptualQueryComponent component : components) { component.queryFeatures(pipeline); } pipeline.ReleaseFrame(); for (PerceptualQueryComponent component : components) { component.processFeatures(); } } private void sleep(int milliSeconds) { try { Thread.sleep(milliSeconds); } catch (InterruptedException e) { } } }