/*
* Copyright Inria and Bordeaux University.
* Author Jeremy Laviole. jeremy.laviole@inria.fr
* PapAR project is the open-source version of the
* PapARt project. License is LGPLv3, distributed with the sources.
* This project can also distributed with standard commercial
* licence for closed-sources projects.
*/
package fr.inria.papart.procam.camera;
import org.bytedeco.javacpp.opencv_core;
import org.bytedeco.javacpp.opencv_core.IplImage;
import org.bytedeco.javacv.FrameGrabber;
import org.bytedeco.javacv.OpenCVFrameConverter;
import org.bytedeco.javacv.OpenCVFrameGrabber;
import processing.core.PImage;
/**
*
* @author jiii
*/
public class CameraOpenCV extends Camera {
private OpenCVFrameGrabber grabber;
private final OpenCVFrameConverter.ToIplImage converter;
protected CameraOpenCV(int cameraNo) {
this.systemNumber = cameraNo;
this.setPixelFormat(PixelFormat.BGR);
converter = new OpenCVFrameConverter.ToIplImage();
}
@Override
public void start() {
OpenCVFrameGrabber grabberCV = new OpenCVFrameGrabber(this.systemNumber);
grabberCV.setImageWidth(width());
grabberCV.setImageHeight(height());
grabberCV.setImageMode(FrameGrabber.ImageMode.COLOR);
try {
grabberCV.start();
this.grabber = grabberCV;
this.isConnected = true;
} catch (Exception e) {
System.err.println("Could not start frameGrabber... " + e);
System.err.println("Could not camera start frameGrabber... " + e);
System.err.println("Camera ID " + this.systemNumber + " could not start.");
System.err.println("Check cable connection, ID and resolution asked.");
this.grabber = null;
}
}
@Override
public void grab() {
if (this.isClosing()) {
return;
}
try {
IplImage img = converter.convertToIplImage(grabber.grab());
if (img != null) {
this.updateCurrentImage(img);
}
} catch (Exception e) {
System.err.println("Camera: OpenCV Grab() Error ! " + e);
}
}
@Override
public PImage getPImage() {
if (currentImage != null) {
this.checkCamImage();
camImage.update(currentImage);
return camImage;
}
// TODO: exceptions !!!
return null;
}
@Override
public void close() {
this.setClosing();
if (grabber != null) {
try {
grabber.stop();
System.out.println("Stopping grabber");
} catch (Exception e) {
System.out.println("Impossible to close " + e);
}
}
}
}