Skip to content

Commit

Permalink
Merge pull request #302 from phrack/ResolutionFix
Browse files Browse the repository at this point in the history
Fixes #300
  • Loading branch information
phrack committed Dec 5, 2015
2 parents c285772 + c29f6c0 commit 20d4f95
Show file tree
Hide file tree
Showing 7 changed files with 43 additions and 35 deletions.
15 changes: 10 additions & 5 deletions src/main/java/com/shootoff/camera/CameraManager.java
Original file line number Diff line number Diff line change
Expand Up @@ -114,6 +114,8 @@ public class CameraManager {
public boolean cameraAutoCalibrated = false;

private ShootOFFController controller;

private static final DeduplicationProcessor deduplicationProcessor = new DeduplicationProcessor();

protected CameraManager(Camera webcam, CanvasManager canvas, Configuration config) {
this.webcam = Optional.of(webcam);
Expand All @@ -124,8 +126,8 @@ protected CameraManager(Camera webcam, CanvasManager canvas, Configuration confi
this.shotDetectionManager = new ShotDetectionManager(this, config, canvas);

this.canvasManager.setCameraManager(this);

init(new Detector());
initDetector(new Detector());
}

protected CameraManager(File videoFile, Object processingLock, CanvasManager canvas,
Expand All @@ -144,7 +146,6 @@ protected CameraManager(File videoFile, Object processingLock, CanvasManager can

this.shotDetectionManager = new ShotDetectionManager(this, config, canvas);


Detector detector = new Detector();

IMediaReader reader = ToolFactory.makeReader(videoFile.getAbsolutePath());
Expand All @@ -159,7 +160,7 @@ protected CameraManager(File videoFile, Object processingLock, CanvasManager can
do {} while(false);
}

private void init(Detector detector) {
private void initDetector(Detector detector) {

sectorStatuses = new boolean[ShotDetectionManager.SECTOR_ROWS][ShotDetectionManager.SECTOR_COLUMNS];

Expand Down Expand Up @@ -535,7 +536,7 @@ private void setFPS(double newFPS)
}

webcamFPS = newFPS;
DeduplicationProcessor.setThresholdUsingFPS(webcamFPS);
deduplicationProcessor.setThresholdUsingFPS(webcamFPS);

}

Expand Down Expand Up @@ -737,4 +738,8 @@ public void disableAutoCalibration() {
public void setController(ShootOFFController controller) {
this.controller = controller;
}

public DeduplicationProcessor getDeduplicationProcessor() {
return deduplicationProcessor;
}
}
8 changes: 4 additions & 4 deletions src/main/java/com/shootoff/camera/DeduplicationProcessor.java
Original file line number Diff line number Diff line change
Expand Up @@ -32,13 +32,13 @@ public class DeduplicationProcessor implements ShotProcessor {
public static final double DEDUPE_THRESHOLD_DIVISION_FACTOR = 8.0;
public static final int DEDUPE_THRESHOLD_MINIMUM = 4;

private static int frameThreshold = DEDUPE_THRESHOLD_MINIMUM;
private int frameThreshold = DEDUPE_THRESHOLD_MINIMUM;

public static int getThreshold() {
public int getThreshold() {
return frameThreshold;
}

public static void setThreshold(int ft) {
public void setThreshold(int ft) {
frameThreshold = ft;
}

Expand Down Expand Up @@ -103,7 +103,7 @@ public void reset() {
lastShot = Optional.empty();
}

public static void setThresholdUsingFPS(double webcamFPS) {
public void setThresholdUsingFPS(double webcamFPS) {
int newThreshold = (int) (webcamFPS/DEDUPE_THRESHOLD_DIVISION_FACTOR);

logger.trace("setThresholdUsingFPS {} {}", webcamFPS, newThreshold);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -478,7 +478,7 @@ private void addShot(BufferedImage workingCopy, PixelCluster pc)
if (config.ignoreLaserColor() && config.getIgnoreLaserColor().isPresent() &&
color.get().equals(config.getIgnoreLaserColor().get()))
{
config.getDeduplicationProcessor().processShot(shot);
cameraManager.getDeduplicationProcessor().processShot(shot);
return;
}

Expand All @@ -488,7 +488,7 @@ private void addShot(BufferedImage workingCopy, PixelCluster pc)



if (config.isDebugShotsRecordToFiles() && config.getDeduplicationProcessor().processShotLookahead(shot)) {
if (config.isDebugShotsRecordToFiles() && cameraManager.getDeduplicationProcessor().processShotLookahead(shot)) {
File outputfile = new File(String.format("shot-%d-%d_orig.png",(int)pc.centerPixelX, (int)pc.centerPixelY));
try {
ImageIO.write(workingCopy, "png", outputfile);
Expand Down
23 changes: 5 additions & 18 deletions src/main/java/com/shootoff/config/Configuration.java
Original file line number Diff line number Diff line change
Expand Up @@ -56,7 +56,6 @@
import com.shootoff.Main;
import com.shootoff.camera.Camera;
import com.shootoff.camera.CameraManager;
import com.shootoff.camera.DeduplicationProcessor;
import com.shootoff.camera.MalfunctionsProcessor;
import com.shootoff.camera.ShotProcessor;
import com.shootoff.camera.VirtualMagazineProcessor;
Expand Down Expand Up @@ -139,22 +138,18 @@ public class Configuration {
private final Set<ShotProcessor> shotProcessors = new HashSet<ShotProcessor>();
private VirtualMagazineProcessor magazineProcessor = null;
private MalfunctionsProcessor malfunctionsProcessor = null;
private DeduplicationProcessor deduplicationProcessor = null;


protected Configuration(InputStream configInputStream, String name) throws IOException, ConfigurationException {
configInput = configInputStream;
configName = name;
readConfigurationFile();

deduplicationProcessor = new DeduplicationProcessor();
shotProcessors.add(deduplicationProcessor);

}

public Configuration(String name) throws IOException, ConfigurationException {
configName = name;
readConfigurationFile();
deduplicationProcessor = new DeduplicationProcessor();
shotProcessors.add(deduplicationProcessor);

}

protected Configuration(InputStream configInputStream, String name, String[] args) throws IOException, ConfigurationException {
Expand All @@ -163,8 +158,7 @@ protected Configuration(InputStream configInputStream, String name, String[] arg
parseCmdLine(args);
readConfigurationFile();
parseCmdLine(args); // Parse twice so that we guarantee debug is set and override config file
deduplicationProcessor = new DeduplicationProcessor();
shotProcessors.add(deduplicationProcessor);

}

/**
Expand All @@ -182,15 +176,12 @@ public Configuration(String name, String[] args) throws IOException, Configurati
parseCmdLine(args);
readConfigurationFile();
parseCmdLine(args);
deduplicationProcessor = new DeduplicationProcessor();
shotProcessors.add(deduplicationProcessor);

}

public Configuration(String[] args) throws ConfigurationException {
configName = DEFAULT_CONFIG_FILE;
parseCmdLine(args);
deduplicationProcessor = new DeduplicationProcessor();
shotProcessors.add(deduplicationProcessor);
}

private void readConfigurationFile() throws ConfigurationException, IOException {
Expand Down Expand Up @@ -805,10 +796,6 @@ public Set<CameraManager> getRecordingManagers() {
return recordingManagers;
}

public DeduplicationProcessor getDeduplicationProcessor() {
return deduplicationProcessor;
}

public Set<ShotProcessor> getShotProcessors() {
return shotProcessors;
}
Expand Down
8 changes: 8 additions & 0 deletions src/main/java/com/shootoff/gui/CanvasManager.java
Original file line number Diff line number Diff line change
Expand Up @@ -330,6 +330,14 @@ private Optional<String> createVideoString(Shot shot) {
private Optional<ShotProcessor> processShot(Shot shot) {

Optional<ShotProcessor> rejectingProcessor = Optional.empty();

if (!getCameraManager().getDeduplicationProcessor().processShot(shot))
{
logger.debug("Processing Shot: Shot Rejected By {}", getCameraManager().getDeduplicationProcessor().getClass().getName());
return Optional.of(getCameraManager().getDeduplicationProcessor());
}


for (ShotProcessor processor : config.getShotProcessors()) {
if (!processor.processShot(shot)) {
if (processor instanceof MalfunctionsProcessor) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -20,12 +20,8 @@ public void setUp() throws ConfigurationException {

@Test
public void testReset() {
DeduplicationProcessor deduplicationProcessor = null;

for (ShotProcessor s : config.getShotProcessors()) {
if (s instanceof DeduplicationProcessor) deduplicationProcessor = (DeduplicationProcessor)s;
}

DeduplicationProcessor deduplicationProcessor = new DeduplicationProcessor();

assertFalse(deduplicationProcessor.getLastShot().isPresent());

Shot shot = new Shot(Color.GREEN, 0, 0, 0, 0);
Expand Down
12 changes: 12 additions & 0 deletions src/test/java/com/shootoff/gui/MockCanvasManager.java
Original file line number Diff line number Diff line change
Expand Up @@ -2,11 +2,13 @@

import java.util.ArrayList;
import java.util.List;
import java.util.Optional;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import com.shootoff.camera.CamerasSupervisor;
import com.shootoff.camera.DeduplicationProcessor;
import com.shootoff.camera.Shot;
import com.shootoff.camera.ShotProcessor;
import com.shootoff.config.Configuration;
Expand All @@ -22,6 +24,9 @@ public class MockCanvasManager extends CanvasManager {
private final Configuration config;
private final String cameraName;
private final boolean useShotProcessors;
private DeduplicationProcessor deduplicationProcessor = new DeduplicationProcessor();


private long startTime = 0;

public MockCanvasManager(Configuration config) {
Expand Down Expand Up @@ -54,6 +59,13 @@ public void addShot(Color color, double x, double y) {


if (useShotProcessors) {
if (!deduplicationProcessor.processShot(shot))
{
logger.debug("Processing Shot: Shot Rejected By {}", deduplicationProcessor.getClass().getName());
return;
}


for (ShotProcessor p : config.getShotProcessors()) {
if (!p.processShot(shot)) {
logger.info("Processing Shot: Shot Rejected By {}", p.getClass().getName());
Expand Down

0 comments on commit 20d4f95

Please sign in to comment.