Skip to content

Commit

Permalink
Performance update for Video
Browse files Browse the repository at this point in the history
  • Loading branch information
BuildTools committed Jun 17, 2022
1 parent 03ce28e commit 71dcd6c
Show file tree
Hide file tree
Showing 3 changed files with 102 additions and 7 deletions.
7 changes: 6 additions & 1 deletion Readme.md
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,11 @@ Nuvoled Application in Java
`java -jar nuvoled.jar start [ip] picture`
### Show Screen ###
`java -jar nuvoled.jar start [ip] screen [x] [y]`
[x] [y] = pixel
[x] [y] = pixel
_only sending if picture change_
### Show Video ###
`java -jar nuvoled.jar start [ip] video [x] [y]`
[x] [y] = pixel
_more fps_
***

21 changes: 15 additions & 6 deletions src/com/nuvoled/Main.java
Original file line number Diff line number Diff line change
@@ -1,9 +1,6 @@
package com.nuvoled;

import com.nuvoled.sender.PictureSender;
import com.nuvoled.sender.Reset;
import com.nuvoled.sender.SendColor;
import com.nuvoled.sender.SendSync;
import com.nuvoled.sender.*;

import javax.imageio.ImageIO;
import java.awt.*;
Expand Down Expand Up @@ -82,9 +79,21 @@ public static void main(String[] args) throws IOException, AWTException, Interru
while (true) {
BufferedImage image = robot.createScreenCapture(rectangle);
PictureSender.send(image);

}

}
if(Objects.equals(args[2], "video")){
System.out.println("Video Modus");
GraphicsDevice[] screens = GraphicsEnvironment.getLocalGraphicsEnvironment().getScreenDevices();
Robot robot = new Robot(screens[0]);
Rectangle rectangle = new Rectangle();
int x = Integer.parseInt(args[3]);
int y = Integer.parseInt(args[4]);
rectangle.setLocation(x, y);
rectangle.setSize(pannelGroessex + 1, pannelGroessey + 1);
while (true) {
BufferedImage image = robot.createScreenCapture(rectangle);
ViedeoSender.send(image);
}
}
}
}
Expand Down
81 changes: 81 additions & 0 deletions src/com/nuvoled/sender/ViedeoSender.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,81 @@
package com.nuvoled.sender;

import com.nuvoled.Main;

import java.awt.image.BufferedImage;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;

public class ViedeoSender {
public static byte[] rgb = new byte[Main.getPannelGroessex() * Main.getPannelGroessey() * 3];// 128*128*3

public static void send(BufferedImage image) {
if (image.getHeight() < Main.getPannelGroessey() || image.getWidth() < Main.getPannelGroessex()) {
System.out.println("Falsches Format");
System.out.println("Bitte Format von mindestens" + Main.getPannelGroessex() + " * " + Main.getPannelGroessey() + "Pixeln verwenden");
System.exit(0);
}
int rgbCounterNumber = 0;
for (int y = 0; y <= (Main.getPannelGroessey() - 1); y++) {
for (int x = 0; x <= (Main.getPannelGroessex() - 1); x++) {
int pixel = image.getRGB(x, y);
int red = (pixel >> 16) & 0xff;
int green = (pixel >> 8) & 0xff;
int blue = (pixel) & 0xff;
rgb[rgbCounterNumber] = (byte) blue;
rgbCounterNumber++;
rgb[rgbCounterNumber] = (byte) green;
rgbCounterNumber++;
rgb[rgbCounterNumber] = (byte) red;
rgbCounterNumber++;
//System.out.println("x: " + x + " " + "y: " + y + " | " + "red: " + red + ", green: " + green + ", blue: " + blue + " | " + rgbCounterNumber + " | " + rgbCounterNumber / 3);
}
}

try {
int pixel = 0;
for (int counter = 0; counter <= ((Main.getPannelGroessex() * Main.getPannelGroessey() * 3) / 1440) + 1; counter++) { //35 = (128 * 128 * 3)/1440
byte[] message = new byte[1450];
message[0] = 36;
message[1] = 36;
message[2] = 20;
message[3] = Main.getCourantFrame();
message[4] = 10; //RGB
message[5] = 0;
message[6] = (byte) counter; //counter
message[7] = 0;
message[8] = (byte) ((byte) ((Main.getPannelGroessex() * Main.getPannelGroessey() * 3) / 1440) + 1);
message[9] = 45;
for (int i = 1; i < 1440; i = i + 3) {
if (pixel >= rgb.length) {
message[9 + i] = 0;
pixel++;
message[9 + 1 + i] = 0;
pixel++;
message[9 + 2 + i] = 0;
pixel++;
} else {
message[9 + i] = rgb[pixel];
pixel++;
message[9 + 1 + i] = rgb[pixel];
pixel++;
message[9 + 2 + i] = rgb[pixel];
pixel++;
}
}

InetAddress address = InetAddress.getByName(Main.getAddr());
DatagramSocket datagramSocket = new DatagramSocket();
datagramSocket.setSendBufferSize(1048576);
DatagramPacket packet = new DatagramPacket(message, message.length, address, Main.getPort());
datagramSocket.send(packet);
}
Thread.sleep(20);
SendSync.send((byte) (Main.getCourantFrame() - 1));
System.out.println("Sending Frame: " + Main.getCourantFrame());
} catch (Exception e) {
System.err.println(e);
}
}
}

0 comments on commit 71dcd6c

Please sign in to comment.