diff --git a/.gitignore b/.gitignore index 00393c8..0727163 100644 --- a/.gitignore +++ b/.gitignore @@ -223,3 +223,4 @@ run.bat /JambiLight_JAVA/ScreenCapper.dll settings.xml JambiLight_JNI/ScreenCapper/ScreenCapper/ReadMe.txt +JambiLight_JAVA/lib/javacv-bin/ diff --git a/JambiLight_JAVA/pom.xml b/JambiLight_JAVA/pom.xml index 6f20c94..fd35738 100644 --- a/JambiLight_JAVA/pom.xml +++ b/JambiLight_JAVA/pom.xml @@ -55,6 +55,13 @@ 8.0.6 + + + org.bytedeco + javacv + 0.9 + + com.google.code @@ -68,7 +75,8 @@ 1.0 dll - + + junit junit @@ -140,7 +148,7 @@ - + org.apache.maven.plugins maven-jar-plugin @@ -156,20 +164,11 @@ dependency/jfxrt.jar - - - dependency/javafx-${javafx.version}.jar - dependency/jfxrt.jar - dependency/guava-16.0.1.jar - dependency/jssc-2.8.0.jar - dependency/RXTX-2.2.jar - dependency/hamcrest-core-1.3.jar - dependency/junit-4.11.jar - dependency/controlsfx-8.0.6.jar - true + + dependency/ diff --git a/JambiLight_JAVA/src/main/java/be/beeles_place/jambiLight/controllers/ApplicationController.java b/JambiLight_JAVA/src/main/java/be/beeles_place/jambiLight/controllers/ApplicationController.java index 3ad4a81..6ebc2f2 100644 --- a/JambiLight_JAVA/src/main/java/be/beeles_place/jambiLight/controllers/ApplicationController.java +++ b/JambiLight_JAVA/src/main/java/be/beeles_place/jambiLight/controllers/ApplicationController.java @@ -183,13 +183,13 @@ public void onColorsUpdated(ColorModelUpdatedEvent event) { logger.DEBUG("All mem: " + rt.totalMemory() / megabyteInBytes); logger.DEBUG("Max mem: " + rt.maxMemory() / megabyteInBytes); - if(model.getActionDuration() > 500) { + /*if(model.getActionDuration() > 500) { if(performanceCounter == 0) { performanceCounter++; } else { shutdown(); } - } + }*/ } } diff --git a/JambiLight_JAVA/src/main/java/be/beeles_place/jambiLight/utils/screenCapture/ScreenCapperStrategy.java b/JambiLight_JAVA/src/main/java/be/beeles_place/jambiLight/utils/screenCapture/ScreenCapperStrategy.java index 034a5b5..1a67f70 100644 --- a/JambiLight_JAVA/src/main/java/be/beeles_place/jambiLight/utils/screenCapture/ScreenCapperStrategy.java +++ b/JambiLight_JAVA/src/main/java/be/beeles_place/jambiLight/utils/screenCapture/ScreenCapperStrategy.java @@ -1,10 +1,7 @@ package be.beeles_place.jambiLight.utils.screenCapture; import be.beeles_place.jambiLight.utils.logger.LOGGER; -import be.beeles_place.jambiLight.utils.screenCapture.impl.ScreenCapper; -import be.beeles_place.jambiLight.utils.screenCapture.impl.ScreenCapperJNI; -import be.beeles_place.jambiLight.utils.screenCapture.impl.ScreenCapperMock; -import be.beeles_place.jambiLight.utils.screenCapture.impl.XbmcScreenCapper; +import be.beeles_place.jambiLight.utils.screenCapture.impl.*; import javax.xml.bind.annotation.XmlEnum; import javax.xml.bind.annotation.XmlEnumValue; @@ -25,7 +22,10 @@ public enum ScreenCapperStrategy { MOCK_RAINBOW(ScreenCapperMock.class), @XmlEnumValue("MOCK_JNI") - MOCK_JNI(ScreenCapperJNI.class); + MOCK_JNI(ScreenCapperJNI.class), + + @XmlEnumValue("DIRECT_SHOW") + DIRECT_SHOW(DirectShowCapper.class); private Class captureStrategy; diff --git a/JambiLight_JAVA/src/main/java/be/beeles_place/jambiLight/utils/screenCapture/impl/DirectShowCapper.java b/JambiLight_JAVA/src/main/java/be/beeles_place/jambiLight/utils/screenCapture/impl/DirectShowCapper.java new file mode 100644 index 0000000..bd8ab2f --- /dev/null +++ b/JambiLight_JAVA/src/main/java/be/beeles_place/jambiLight/utils/screenCapture/impl/DirectShowCapper.java @@ -0,0 +1,90 @@ +package be.beeles_place.jambiLight.utils.screenCapture.impl; + +import be.beeles_place.jambiLight.utils.logger.LOGGER; +import be.beeles_place.jambiLight.utils.screenCapture.IScreenCapper; +import org.bytedeco.javacpp.opencv_core; + +import java.awt.*; +import java.awt.image.BufferedImage; +import java.awt.image.DataBufferByte; + +import static org.bytedeco.javacpp.opencv_highgui.*; + +public class DirectShowCapper implements IScreenCapper { + + private final LOGGER logger; + private Dimension dimensions; + + private VideoCapture vc; + + private byte[] data; + private int[] pixels; + + private final int width; + private final int height; + + private boolean initDone; + + /** + * Constructor for DirectShowCapper. + * Sets and calculates initial values. + */ + public DirectShowCapper() { + logger = LOGGER.getInstance(); + logger.INFO("SCREENCAPPER => Starting screen capture with through DirectShow device."); + + width = 720; + height = 576; + + pixels = new int[width * height]; + dimensions = new Dimension(width,height); + } + + @Override + public Dimension getScreenDimensions() { + return dimensions; + } + + private void init() { + //TODO: Set up the correct device! + vc = new VideoCapture(0); + //vc.set(CV_CAP_PROP_FRAME_WIDTH,720); + //vc.set(CV_CAP_PROP_FRAME_HEIGHT,480); + + initDone = true; + } + + @Override + public int[] capture() { + if(initDone == false){ + init(); + } + + opencv_core.Mat m = new opencv_core.Mat(); + if(vc.read(m)) { + BufferedImage img = m.getBufferedImage(); + byte[] temp = ((DataBufferByte) img.getRaster().getDataBuffer()).getData(); + for (int i = 0 ; i < pixels.length; i++) { + //Convert from RGB bytes to pixel integer! + pixels[i] = (( temp[i*3+2] &0x0ff)<<16)|(( temp[i*3+1] &0x0ff)<<8)|( temp[i*3] &0x0ff); + } + + img.flush(); + img = null; + temp = null; + return pixels; + } else { + //TODO: Error! + return new int[width * height]; + } + } + + @Override + public void dispose() { + if(vc != null && vc.isOpened()) { + vc.release(); + } + + dimensions = null; + } +} diff --git a/build.bat b/build.bat index f357d23..91db632 100644 --- a/build.bat +++ b/build.bat @@ -8,7 +8,7 @@ set DIR=%cd% set DIR=^"%DIR%^" call mvn install:install-file -Dfile=%DIR%/JambiLight_JAVA/lib/RXTXcomm.jar -DgroupId=com.google.code -DartifactId=RXTX -Dversion=2.2 -Dpackaging=jar call mvn install:install-file -Dfile=%DIR%/JambiLight_JAVA/lib/ScreenCapper.dll -DgroupId=be.beeles_place.code -DartifactId=JNIscreenCapMock -Dversion=1.0 -Dpackaging=dll -call mvn clean install +call mvn clean install -Dplatform.dependencies=true ren %DIR%\JambiLight_JAVA\target\dependency\JNIscreenCapMock-1.0.dll ScreenCapper.dll move %DIR%\JambiLight_JAVA\target\dependency\ScreenCapper.dll %DIR%\JambiLight_JAVA\target\ echo java -Xmx256m -jar JambiLight.jar > %DIR%\JambiLight_JAVA\target\run.bat diff --git a/build.sh b/build.sh index a0e46c1..5c82c9e 100644 --- a/build.sh +++ b/build.sh @@ -5,7 +5,7 @@ echo "======================================" echo "======================================" mvn install:install-file -Dfile=./JambiLight_JAVA/lib/RXTXcomm.jar -DgroupId=com.google.code -DartifactId=RXTX -Dversion=2.2 -Dpackaging=jar mvn install:install-file -Dfile=./JambiLight_JAVA/lib/ScreenCapper.dll -DgroupId=be.beeles_place.code -DartifactId=JNIscreenCapMock -Dversion=1.0 -Dpackaging=dll -mvn clean install +mvn clean install -Dplatform.dependencies=true mv ./JambiLight_JAVA/target/dependency/JNIscreenCapMock-1.0.dll ./JambiLight_JAVA/target/ScreenCapper.dll echo "java -Xmx256m -jar JambiLight.jar" > ./JambiLight_JAVA/target/run.sh echo "java -Xmx128m -jar SocketDummy.jar" > ./JambiLight_XBMC/SocketDummy/target/run.sh