| 1 | package kaka.cakelight; |
| 2 | |
| 3 | import org.opencv.core.Core; |
| 4 | |
| 5 | import java.io.FileOutputStream; |
| 6 | import java.io.IOException; |
| 7 | import java.util.HashMap; |
| 8 | |
| 9 | public class Main { |
| 10 | public static void main(String[] args) { |
| 11 | System.loadLibrary(Core.NATIVE_LIBRARY_NAME); |
| 12 | |
| 13 | Configuration config = Configuration.from("config.properties"); |
| 14 | log("Running with config:\n" + config); |
| 15 | |
| 16 | CakeLight cakelight = new CakeLight(config, new LedController()); |
| 17 | cakelight.setMode(new VideoMode()); |
| 18 | cakelight.startLoop(); |
| 19 | // try { |
| 20 | // Thread.sleep(1000); |
| 21 | // } catch (InterruptedException e) { |
| 22 | // e.printStackTrace(); |
| 23 | // } |
| 24 | // cakelight.setMode(null); |
| 25 | Runtime.getRuntime().addShutdownHook(new Thread(Main::printTimeStats)); |
| 26 | } |
| 27 | |
| 28 | public static void saveFile(byte[] data, String filepath) { |
| 29 | try { |
| 30 | FileOutputStream fos = new FileOutputStream(filepath); |
| 31 | fos.write(data); |
| 32 | fos.close(); |
| 33 | } catch (IOException e) { |
| 34 | e.printStackTrace(); |
| 35 | } |
| 36 | } |
| 37 | |
| 38 | public static void log(String msg, Object... args) { |
| 39 | System.out.println(String.format(msg, args)); |
| 40 | } |
| 41 | |
| 42 | private static HashMap<String, Double> timeDurations = new HashMap<>(); |
| 43 | private static HashMap<String, Integer> timeCounts = new HashMap<>(); |
| 44 | public static double timeIt(String tag, Runnable lambda) { |
| 45 | long start = System.nanoTime(); |
| 46 | lambda.run(); |
| 47 | long end = System.nanoTime(); |
| 48 | double duration = (end - start) * 0.000001; |
| 49 | // log("duration (ms): " + tag + " = " + duration); |
| 50 | |
| 51 | if (!timeDurations.containsKey(tag)) { |
| 52 | timeDurations.put(tag, 0.0); |
| 53 | timeCounts.put(tag, 0); |
| 54 | } |
| 55 | timeDurations.put(tag, timeDurations.get(tag) + duration); |
| 56 | timeCounts.put(tag, timeCounts.get(tag) + 1); |
| 57 | return duration; |
| 58 | } |
| 59 | |
| 60 | private static void printTimeStats() { |
| 61 | log("Average times in ms:"); |
| 62 | timeDurations.forEach((tag, duration) -> { |
| 63 | log("%s: %s", tag, duration / timeCounts.get(tag)); |
| 64 | }); |
| 65 | } |
| 66 | } |
| 67 | |
| 68 | /* |
| 69 | FrameGrabber läser frames asynkront |
| 70 | skickar frame till FrameConverter |
| 71 | sparas i huvudklassen |
| 72 | läses av FrameProcessor/CakeLight |
| 73 | */ |