From c32b5d7278edd3078ac27505e88684d6a8e2c5ca Mon Sep 17 00:00:00 2001 From: rattatwinko Date: Wed, 21 Jan 2026 18:09:30 +0100 Subject: [PATCH] refactors ; some new additions to recording which are critical for cctv softwares --- src/main/java/io/swtc/Main.java | 1 + src/main/java/io/swtc/SwingCCTVManager.java | 25 ++- src/main/java/io/swtc/SwingIFrame.java | 3 + .../io/swtc/proccessing/ui/IconSetter.java | 40 ++++ .../io/swtc/proccessing/ui/ShowError.java | 4 +- .../ui/iframe/CameraInternalFrame.java | 98 +++------- .../ui/iframe/EffectsPanelFrame.java | 7 + .../proccessing/ui/iframe/RecordingFrame.java | 178 ++++++++++++++++++ .../proccessing/ui/iframe/RecordingPane.java | 126 ------------- .../io/swtc/recording/RecordingManager.java | 70 +++++++ .../java/io/swtc/recording/VideoRecorder.java | 131 +++++-------- src/main/resources/icons/artwork.ico | Bin 0 -> 49587 bytes src/main/resources/icons/artwork.png | Bin 0 -> 3482 bytes src/main/resources/icons/effectsframe.png | Bin 0 -> 62341 bytes 14 files changed, 405 insertions(+), 278 deletions(-) create mode 100644 src/main/java/io/swtc/proccessing/ui/IconSetter.java create mode 100644 src/main/java/io/swtc/proccessing/ui/iframe/RecordingFrame.java delete mode 100644 src/main/java/io/swtc/proccessing/ui/iframe/RecordingPane.java create mode 100644 src/main/java/io/swtc/recording/RecordingManager.java create mode 100644 src/main/resources/icons/artwork.ico create mode 100644 src/main/resources/icons/artwork.png create mode 100644 src/main/resources/icons/effectsframe.png diff --git a/src/main/java/io/swtc/Main.java b/src/main/java/io/swtc/Main.java index 1f9211f..253b598 100644 --- a/src/main/java/io/swtc/Main.java +++ b/src/main/java/io/swtc/Main.java @@ -2,6 +2,7 @@ package io.swtc; import javax.swing.*; +import io.swtc.proccessing.ui.IconSetter; import io.swtc.proccessing.ui.ShowError; public class Main { diff --git a/src/main/java/io/swtc/SwingCCTVManager.java b/src/main/java/io/swtc/SwingCCTVManager.java index 89cd90a..64091d8 100644 --- a/src/main/java/io/swtc/SwingCCTVManager.java +++ b/src/main/java/io/swtc/SwingCCTVManager.java @@ -8,6 +8,7 @@ import com.github.sarxos.webcam.ds.ipcam.IpCamDriver; import com.github.sarxos.webcam.ds.ipcam.IpCamMode; import io.swtc.networking.CameraConfig; import io.swtc.networking.CameraSettings; +import io.swtc.proccessing.ui.IconSetter; import javax.swing.*; import javax.swing.table.DefaultTableCellRenderer; @@ -37,6 +38,7 @@ public class SwingCCTVManager { frame = new JFrame("dashboard"); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.setSize(1000, 600); + frame.setIconImage(IconSetter.getIcon()); this.IFrame = new SwingIFrame(); this.IFrame.show(); @@ -71,14 +73,33 @@ public class SwingCCTVManager { } }); + JToolBar toolBar = new JToolBar(); + + Image ogIcon = IconSetter.getIcon(); + Image scaledIcon = ogIcon.getScaledInstance(32, 32, Image.SCALE_SMOOTH); + JLabel iconLabel = new JLabel(new ImageIcon(scaledIcon)); + toolBar.add(iconLabel); + + JLabel textLabel = new JLabel("SWT-CCTV"); + toolBar.add(textLabel); + + toolBar.add(Box.createRigidArea(new Dimension(10, 0))); // 20px horizontal padding + + toolBar.addSeparator(new Dimension(10, 32)); // 10px width, 32px height + JButton btnAdd = new JButton("Add IP Cam"); JButton btnLaunch = new JButton("Launch Stream"); + + btnAdd.setPreferredSize(new Dimension(100, 32)); + btnLaunch.setPreferredSize(new Dimension(120, 32)); + + toolBar.add(Box.createRigidArea(new Dimension(5,0))); toolBar.add(btnAdd); toolBar.addSeparator(); toolBar.add(btnLaunch); - frame.add(toolBar, BorderLayout.NORTH); + frame.add(toolBar, BorderLayout.SOUTH); frame.add(new JScrollPane(deviceTable), BorderLayout.CENTER); btnAdd.addActionListener(e -> showAddCameraDialog()); @@ -145,12 +166,14 @@ public class SwingCCTVManager { } JPopupMenu menu = new JPopupMenu(); + JMenuItem ico = new JMenuItem("test"); JMenuItem launch = new JMenuItem("Launch Live Stream"); JMenuItem delete = new JMenuItem("Remove Device"); launch.addActionListener(al -> launchSelected()); delete.addActionListener(al -> deleteSelected()); + menu.add(ico); menu.add(launch); menu.addSeparator(); menu.add(delete); diff --git a/src/main/java/io/swtc/SwingIFrame.java b/src/main/java/io/swtc/SwingIFrame.java index ff1cc03..f830cd1 100644 --- a/src/main/java/io/swtc/SwingIFrame.java +++ b/src/main/java/io/swtc/SwingIFrame.java @@ -1,6 +1,7 @@ package io.swtc; import com.github.sarxos.webcam.Webcam; +import io.swtc.proccessing.ui.IconSetter; import io.swtc.proccessing.ui.iframe.*; // Your custom frames import javax.swing.*; import java.awt.*; @@ -28,6 +29,8 @@ public class SwingIFrame { mainFrame.setSize(1280, 720); mainFrame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE); + mainFrame.setIconImage(IconSetter.getIcon()); + desktopPane = new DesktopPane(cameraToEffects); desktopPane.setBackground(defDesktopBg); mainFrame.add(desktopPane, BorderLayout.CENTER); diff --git a/src/main/java/io/swtc/proccessing/ui/IconSetter.java b/src/main/java/io/swtc/proccessing/ui/IconSetter.java new file mode 100644 index 0000000..afbc5ba --- /dev/null +++ b/src/main/java/io/swtc/proccessing/ui/IconSetter.java @@ -0,0 +1,40 @@ +package io.swtc.proccessing.ui; + +import javax.swing.*; +import java.awt.*; +import java.net.URL; +import java.util.Objects; + +public class IconSetter { + + private static Image ICON_IMAGE; + private static ImageIcon ICON_ICON; + private static Image effects_icon; + + public static Image getIcon() { + if (ICON_IMAGE == null) { + URL url = IconSetter.class.getResource("/icons/artwork.png"); + if (url == null) throw new RuntimeException("Icon not found: /icons/artwork.png"); + ICON_IMAGE = Toolkit.getDefaultToolkit().getImage(url); + } + return ICON_IMAGE; + } + + public static Image getEffectIcon() { + if (Objects.isNull(effects_icon)) { + URL url = IconSetter.class.getResource("/icons/effectsframe.png"); + if (Objects.isNull(url)) ShowError.error(null,"Error","Icon not found"); + effects_icon = Toolkit.getDefaultToolkit().getImage(url); + } + return effects_icon; + } + + public static ImageIcon getIconAsImageIcon() { + if (ICON_ICON == null) { + URL url = IconSetter.class.getResource("/icons/artwork.png"); + if (url == null) throw new RuntimeException("Icon not found: /icons/artwork.png"); + ICON_ICON = new ImageIcon(url); // separate variable for ImageIcon + } + return ICON_ICON; + } +} diff --git a/src/main/java/io/swtc/proccessing/ui/ShowError.java b/src/main/java/io/swtc/proccessing/ui/ShowError.java index 5efca5a..b93c7a7 100644 --- a/src/main/java/io/swtc/proccessing/ui/ShowError.java +++ b/src/main/java/io/swtc/proccessing/ui/ShowError.java @@ -12,8 +12,8 @@ public final class ShowError { public static void error(Component parent, String title, String message) { JOptionPane.showMessageDialog( parent, - message, title, + message, JOptionPane.ERROR_MESSAGE ); } @@ -21,8 +21,8 @@ public final class ShowError { public static void warning(Component parent, String title, String message) { JOptionPane.showMessageDialog( parent, - message, title, + message, JOptionPane.WARNING_MESSAGE ); } diff --git a/src/main/java/io/swtc/proccessing/ui/iframe/CameraInternalFrame.java b/src/main/java/io/swtc/proccessing/ui/iframe/CameraInternalFrame.java index 127789a..4eb03ea 100644 --- a/src/main/java/io/swtc/proccessing/ui/iframe/CameraInternalFrame.java +++ b/src/main/java/io/swtc/proccessing/ui/iframe/CameraInternalFrame.java @@ -3,12 +3,16 @@ package io.swtc.proccessing.ui.iframe; import com.github.sarxos.webcam.Webcam; import io.swtc.proccessing.WebcamCaptureLoop; import io.swtc.proccessing.CameraPanel; +import io.swtc.proccessing.ui.IconSetter; +import io.swtc.proccessing.ui.ShowError; +import io.swtc.recording.RecordingManager; import io.swtc.recording.VideoRecorder; import javax.imageio.ImageIO; import javax.swing.*; import javax.swing.border.EmptyBorder; import java.awt.*; import java.awt.image.BufferedImage; +import java.awt.image.RescaleOp; import java.io.File; import java.io.IOException; import java.util.function.Consumer; @@ -16,15 +20,19 @@ import java.util.function.Consumer; public class CameraInternalFrame extends JInternalFrame { private final WebcamCaptureLoop captureLoop; private final CameraPanel cameraPanel; - private final VideoRecorder videoRecorder; // Instance of the recorder - private JButton recordBtn; + private final VideoRecorder videoRecorder; + private final RecordingManager recordingManager; public CameraInternalFrame(Webcam webcam, Consumer onOpenEffects) { super(webcam.getName(), true, true, true, true); - this.cameraPanel = new CameraPanel(); - this.videoRecorder = new VideoRecorder(); // Initialize recorder - // Initialize capture loop + Image ico = IconSetter.getIcon(); + setFrameIcon(new ImageIcon(ico)); + + this.cameraPanel = new CameraPanel(); + this.videoRecorder = new VideoRecorder(); + this.recordingManager = new RecordingManager(cameraPanel); // Initialize recorder + this.captureLoop = new WebcamCaptureLoop(webcam, img -> SwingUtilities.invokeLater(() -> cameraPanel.setImage(img)) ); @@ -36,11 +44,15 @@ public class CameraInternalFrame extends JInternalFrame { private void setupUI(Consumer onOpenEffects) { JTabbedPane tabbedPane = new JTabbedPane(); tabbedPane.addTab("View", cameraPanel); - tabbedPane.addTab("Capture", new RecordingPane(cameraPanel, videoRecorder)); + tabbedPane.addTab("Capture", new JPanel()); tabbedPane.addTab("Effects", new JPanel()); tabbedPane.addChangeListener(e -> { - if (tabbedPane.getSelectedIndex() == 2) { + int index = tabbedPane.getSelectedIndex(); + if (index == 1) { // the tab index for capture is 1 + tabbedPane.setSelectedIndex(0); + openRecordingFrame(); + } else if (index == 2) { tabbedPane.setSelectedIndex(0); onOpenEffects.accept(this); } @@ -50,79 +62,25 @@ public class CameraInternalFrame extends JInternalFrame { setSize(600, 500); } - private JPanel createCapturePanel() { - JPanel panel = new JPanel(new GridLayout(2, 1, 10, 10)); // Changed to Grid for better button layout - panel.setBorder(new EmptyBorder(15, 15, 15, 15)); - - JButton screenshotBtn = new JButton("Take Screenshot"); - screenshotBtn.addActionListener(e -> saveSnapshot()); - - recordBtn = new JButton("Start Recording"); - recordBtn.addActionListener(e -> toggleRecording()); - - panel.add(screenshotBtn); - panel.add(recordBtn); - - // Wrap in a wrapper to prevent buttons from stretching too much - JPanel wrapper = new JPanel(new BorderLayout()); - wrapper.add(panel, BorderLayout.NORTH); - return wrapper; - } - - private void toggleRecording() { - if (!videoRecorder.isRecording()) { - startVideo(); - } else { - stopVideo(); + private void openRecordingFrame() { + RecordingFrame rf = new RecordingFrame(this.getTitle(),cameraPanel, videoRecorder); + JDesktopPane desktopPane = getDesktopPane(); + if (desktopPane != null) { + desktopPane.add(rf); + rf.setVisible(true); } - } - private void startVideo() { try { - File file = new File(System.getProperty("user.home"), "vid_" + System.currentTimeMillis() + ".mp4"); - videoRecorder.startRecording(cameraPanel, file); - - recordBtn.setText("Stop Recording"); - recordBtn.setForeground(Color.RED); - } catch (IOException ex) { - showError("Failed to start recording", ex); + rf.setSelected(true); + } catch (java.beans.PropertyVetoException veto) { + ShowError.error(null,"VetoException"+veto.getMessage(),"veto"); } } - private void stopVideo() { - try { - File savedFile = videoRecorder.stopRecording(); - - recordBtn.setText("Start Recording"); - recordBtn.setForeground(Color.BLACK); - - JOptionPane.showMessageDialog(this, "Video saved to: " + savedFile.getAbsolutePath()); - } catch (IOException ex) { - showError("Failed to stop recording safely", ex); - } - } - - private void saveSnapshot() { - BufferedImage img = cameraPanel.getCurrentProcessedImage(); - if (img != null) { - try { - File file = new File(System.getProperty("user.home"), "snap_" + System.currentTimeMillis() + ".png"); - ImageIO.write(img, "PNG", file); - } catch (Exception ex) { - showError("Snapshot failed", ex); - } - } - } - - private void showError(String title, Exception ex) { - JOptionPane.showMessageDialog(this, title + "\n" + ex.getMessage(), "Error", JOptionPane.ERROR_MESSAGE); - } - public CameraPanel getCameraPanel() { return cameraPanel; } @Override public void dispose() { - // Safety check: stop recording if the window is closed if (videoRecorder.isRecording()) { try { videoRecorder.stopRecording(); } catch (IOException ignored) {} } diff --git a/src/main/java/io/swtc/proccessing/ui/iframe/EffectsPanelFrame.java b/src/main/java/io/swtc/proccessing/ui/iframe/EffectsPanelFrame.java index a6533c1..62ab516 100644 --- a/src/main/java/io/swtc/proccessing/ui/iframe/EffectsPanelFrame.java +++ b/src/main/java/io/swtc/proccessing/ui/iframe/EffectsPanelFrame.java @@ -2,11 +2,18 @@ package io.swtc.proccessing.ui.iframe; import io.swtc.proccessing.CameraPanel; import io.swtc.proccessing.FilterPanel; +import io.swtc.proccessing.ui.IconSetter; + import javax.swing.*; +import java.awt.*; public class EffectsPanelFrame extends JInternalFrame { public EffectsPanelFrame(String title, CameraPanel cameraPanel) { super(title, true, true, true, true); + + Image ico = IconSetter.getIcon(); + setFrameIcon(new ImageIcon(IconSetter.getEffectIcon())); + setDefaultCloseOperation(HIDE_ON_CLOSE); add(new FilterPanel(cameraPanel)); setSize(350, 600); diff --git a/src/main/java/io/swtc/proccessing/ui/iframe/RecordingFrame.java b/src/main/java/io/swtc/proccessing/ui/iframe/RecordingFrame.java new file mode 100644 index 0000000..5fd4947 --- /dev/null +++ b/src/main/java/io/swtc/proccessing/ui/iframe/RecordingFrame.java @@ -0,0 +1,178 @@ +package io.swtc.proccessing.ui.iframe; + +import io.swtc.proccessing.CameraPanel; +import io.swtc.proccessing.ui.IconSetter; +import io.swtc.proccessing.ui.ShowError; +import io.swtc.recording.VideoRecorder; + +import javax.swing.*; +import java.awt.*; +import java.awt.image.BufferedImage; +import java.io.File; +import java.io.IOException; +import javax.imageio.ImageIO; + +public class RecordingFrame extends JInternalFrame { + private final VideoRecorder videoRecorder; + private final CameraPanel cameraPanel; + + private JButton recordBtn; + private JLabel statusLabel; + private JLabel statsLabel; + + private File outputDirectory = new File(System.getProperty("user.home")); + private File currentFile; + private final Timer statsTimer; + private long startTime; + + + // Cache for string building to avoid object allocation every second + private final StringBuilder sb = new StringBuilder(32); + + public RecordingFrame(String cameraName, CameraPanel cameraPanel, VideoRecorder videoRecorder) { + super(cameraName + " Capture", true, true, false, true); + + Image ico = IconSetter.getIcon(); + setFrameIcon(new ImageIcon(ico)); + + this.cameraPanel = cameraPanel; + this.videoRecorder = videoRecorder; + + initializeUI(); + + this.statsTimer = new Timer(1000, e -> updateStats()); + this.statsTimer.setCoalesce(true); + + pack(); + } + + private void initializeUI() { + JPanel mainContent = new JPanel(); + mainContent.setLayout(new BoxLayout(mainContent, BoxLayout.Y_AXIS)); + mainContent.setBorder(BorderFactory.createEmptyBorder(10, 10, 10, 10)); + + mainContent.add(createStoragePanel()); + mainContent.add(Box.createVerticalStrut(10)); + mainContent.add(createActionPanel()); + mainContent.add(Box.createVerticalStrut(10)); + mainContent.add(createStatsPanel()); + + getContentPane().add(mainContent); + } + + private JPanel createStatsPanel() { + JPanel panel = new JPanel(new GridLayout(2, 1)); + panel.setBorder(BorderFactory.createTitledBorder("Session Info")); + + statusLabel = new JLabel("Status: Idle"); + + statsLabel = new JLabel("Length: 00:00 | Size: 0.00 MB"); + statsLabel.setFont(new Font("Monospaced", Font.PLAIN, 12)); + + statsLabel.setPreferredSize(new Dimension(220, 20)); + + panel.add(statusLabel); + panel.add(statsLabel); + return panel; + } + + private void updateStats() { + if (!videoRecorder.isRecording() || currentFile == null) return; + + long elapsedSecs = (System.currentTimeMillis() - startTime) / 1000; + long minutes = elapsedSecs / 60; + long seconds = elapsedSecs % 60; + + double sizeInMb = currentFile.length() / 1048576.0; + + sb.setLength(0); + sb.append("Length: ") + .append(minutes < 10 ? "0" : "").append(minutes).append(":") + .append(seconds < 10 ? "0" : "").append(seconds) + .append(" | Size: ") + .append(Math.round(sizeInMb * 100.0) / 100.0) + .append(" MB"); + + statsLabel.setText(sb.toString()); + } + + private void toggleRecording() { + if (!videoRecorder.isRecording()) { + startRec(); + } else { + stopRec(); + } + } + + private void startRec() { + try { + currentFile = new File(outputDirectory, "vid_" + System.currentTimeMillis() + ".mp4"); + videoRecorder.startRecording(cameraPanel, currentFile); + + startTime = System.currentTimeMillis(); + statsTimer.start(); // Only run timer when needed + + recordBtn.setText("Stop Recording"); + statusLabel.setText("Currently Recording"); + } catch (IOException ex) { + ShowError.error(null,"Error starting Recording" + ex.getMessage(), "Error"); + } + } + + private void stopRec() { + try { + videoRecorder.stopRecording(); + statsTimer.stop(); + + recordBtn.setText("Started Recording"); + recordBtn.setForeground(null); + statusLabel.setText("Finished recording"); + } catch (IOException ex) { + ShowError.error(null,"RecordStop Error"+ex.getMessage(), "Error"); + } + } + + private JPanel createStoragePanel() { + JPanel panel = new JPanel(new BorderLayout(5, 5)); + panel.setBorder(BorderFactory.createTitledBorder("Storage")); + JTextField pathField = new JTextField(outputDirectory.getAbsolutePath()); + pathField.setEditable(false); + JButton browseBtn = new JButton("..."); + browseBtn.addActionListener(e -> { + JFileChooser chooser = new JFileChooser(outputDirectory); + chooser.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY); + if (chooser.showOpenDialog(this) == JFileChooser.APPROVE_OPTION) { + outputDirectory = chooser.getSelectedFile(); + pathField.setText(outputDirectory.getAbsolutePath()); + } + }); + panel.add(pathField, BorderLayout.CENTER); + panel.add(browseBtn, BorderLayout.EAST); + return panel; + } + + private JPanel createActionPanel() { + JPanel panel = new JPanel(new GridLayout(1, 2, 5, 5)); + recordBtn = new JButton("Start Recording"); + recordBtn.addActionListener(e -> toggleRecording()); + JButton snapBtn = new JButton("Snapshot"); + snapBtn.addActionListener(e -> takeSnapshot()); + panel.add(recordBtn); + panel.add(snapBtn); + return panel; + } + + private void takeSnapshot() { + BufferedImage img = cameraPanel.getCurrentProcessedImage(); + if (img != null) { + try { + File file = new File(outputDirectory, "snap_" + System.currentTimeMillis() + ".png"); + ImageIO.write(img, "PNG", file); + statusLabel.setText("Saved a Snapshot"); + } catch (IOException ex) { + ShowError.error(null,"Snapshot failed"+ex.getMessage(),"Snapshot Error"); + } + } + } + +} \ No newline at end of file diff --git a/src/main/java/io/swtc/proccessing/ui/iframe/RecordingPane.java b/src/main/java/io/swtc/proccessing/ui/iframe/RecordingPane.java deleted file mode 100644 index 22b7d93..0000000 --- a/src/main/java/io/swtc/proccessing/ui/iframe/RecordingPane.java +++ /dev/null @@ -1,126 +0,0 @@ -package io.swtc.proccessing.ui.iframe; - -import io.swtc.proccessing.CameraPanel; -import io.swtc.recording.VideoRecorder; - -import javax.imageio.ImageIO; -import javax.swing.*; -import javax.swing.border.TitledBorder; -import java.awt.*; -import java.awt.image.BufferedImage; -import java.io.File; -import java.io.IOException; - -public class RecordingPane extends JPanel { - private final VideoRecorder videoRecorder; - private final CameraPanel cameraPanel; - - private JTextField pathField; - private JButton recordBtn; - private JLabel statusLabel; - private File outputDirectory; - - public RecordingPane(CameraPanel cameraPanel, VideoRecorder videoRecorder) { - this.cameraPanel = cameraPanel; - this.videoRecorder = videoRecorder; - this.outputDirectory = new File(System.getProperty("user.home")); - - setLayout(new GridBagLayout()); - - JPanel contentPanel = new JPanel(); - contentPanel.setLayout(new BoxLayout(contentPanel, BoxLayout.Y_AXIS)); - contentPanel.setPreferredSize(new Dimension(400, 250)); - - // Add the functional sections - contentPanel.add(createStoragePanel()); - contentPanel.add(Box.createVerticalStrut(15)); - contentPanel.add(createActionPanel()); - contentPanel.add(Box.createVerticalStrut(15)); - contentPanel.add(createStatusPanel()); - - add(contentPanel); - } - - private JPanel createStoragePanel() { - JPanel panel = new JPanel(new BorderLayout(5, 5)); - panel.setBorder(BorderFactory.createTitledBorder( - BorderFactory.createEtchedBorder(), "Storage Settings", TitledBorder.LEFT, TitledBorder.TOP)); - - pathField = new JTextField(outputDirectory.getAbsolutePath()); - pathField.setEditable(false); - - JButton browseBtn = new JButton("Browse..."); - browseBtn.addActionListener(e -> { - JFileChooser chooser = new JFileChooser(outputDirectory); - chooser.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY); - if (chooser.showOpenDialog(this) == JFileChooser.APPROVE_OPTION) { - outputDirectory = chooser.getSelectedFile(); - pathField.setText(outputDirectory.getAbsolutePath()); - } - }); - - panel.add(pathField, BorderLayout.CENTER); - panel.add(browseBtn, BorderLayout.EAST); - return panel; - } - - private JPanel createActionPanel() { - JPanel panel = new JPanel(new GridLayout(1, 2, 10, 10)); - - recordBtn = new JButton("start recording"); - recordBtn.addActionListener(e -> toggleRecording()); - - JButton snapBtn = new JButton("take snapshot"); - snapBtn.addActionListener(e -> takeSnapshot()); - - panel.add(recordBtn); - panel.add(snapBtn); - return panel; - } - - private JPanel createStatusPanel() { - JPanel panel = new JPanel(new FlowLayout(FlowLayout.CENTER)); - statusLabel = new JLabel(""); - statusLabel.setForeground(Color.DARK_GRAY); - panel.add(statusLabel); - return panel; - } - - private void toggleRecording() { - if (!videoRecorder.isRecording()) { - try { - File file = new File(outputDirectory, "vid_" + System.currentTimeMillis() + ".mp4"); - videoRecorder.startRecording(cameraPanel, file); - recordBtn.setText("stop recording"); - statusLabel.setText("recording"); - } catch (IOException ex) { - showError("Start Error", ex); - } - } else { - try { - File saved = videoRecorder.stopRecording(); - recordBtn.setText("Start Recording"); - statusLabel.setText("Status: Saved " + saved.getName()); - } catch (IOException ex) { - showError("Stop Error", ex); - } - } - } - - private void takeSnapshot() { - BufferedImage img = cameraPanel.getCurrentProcessedImage(); - if (img != null) { - try { - File file = new File(outputDirectory, "snap_" + System.currentTimeMillis() + ".png"); - ImageIO.write(img, "PNG", file); - statusLabel.setText("captured"); - } catch (IOException ex) { - showError("Snapshot Error", ex); - } - } - } - - private void showError(String title, Exception ex) { - JOptionPane.showMessageDialog(this, ex.getMessage(), title, JOptionPane.ERROR_MESSAGE); - } -} \ No newline at end of file diff --git a/src/main/java/io/swtc/recording/RecordingManager.java b/src/main/java/io/swtc/recording/RecordingManager.java new file mode 100644 index 0000000..906e78a --- /dev/null +++ b/src/main/java/io/swtc/recording/RecordingManager.java @@ -0,0 +1,70 @@ +package io.swtc.recording; + +import io.swtc.proccessing.CameraPanel; +import javax.swing.*; +import java.awt.*; +import java.awt.image.BufferedImage; +import java.io.File; +import java.util.function.Consumer; + +public class RecordingManager { + private final VideoRecorder recorder; + private final CameraPanel cameraPanel; + + // Reuse a single buffer to avoid constant memory allocation (GC pressure) + private BufferedImage reuseBuffer; + + public RecordingManager(CameraPanel cameraPanel) { + this.cameraPanel = cameraPanel; + this.recorder = new VideoRecorder(); + } + + public BufferedImage fastConvertToRGB(BufferedImage source) { + if (source.getType() == BufferedImage.TYPE_INT_RGB) { + return source; + } + + // Initialize or resize reuseBuffer only when necessary + if (reuseBuffer == null || + reuseBuffer.getWidth() != source.getWidth() || + reuseBuffer.getHeight() != source.getHeight()) { + reuseBuffer = new BufferedImage(source.getWidth(), source.getHeight(), BufferedImage.TYPE_INT_RGB); + } + + // Graphics2D.drawImage is much faster than manual setRGB loops + Graphics2D g = reuseBuffer.createGraphics(); + g.drawImage(source, 0, 0, null); + g.dispose(); + + return reuseBuffer; + } + + public void toggleRecording(File outputFile, Runnable onStart, Consumer onStop, Consumer onError) { + if (!recorder.isRecording()) { + new SwingWorker() { + @Override + protected Void doInBackground() throws Exception { + recorder.startRecording(cameraPanel, outputFile); + return null; + } + @Override + protected void done() { + try { get(); if (onStart != null) onStart.run(); } + catch (Exception e) { if (onError != null) onError.accept(e); } + } + }.execute(); + } else { + new SwingWorker() { + @Override + protected File doInBackground() throws Exception { + return recorder.stopRecording(); + } + @Override + protected void done() { + try { File f = get(); if (onStop != null) onStop.accept(f); } + catch (Exception e) { if (onError != null) onError.accept(e); } + } + }.execute(); + } + } +} \ No newline at end of file diff --git a/src/main/java/io/swtc/recording/VideoRecorder.java b/src/main/java/io/swtc/recording/VideoRecorder.java index de09f07..352bfec 100644 --- a/src/main/java/io/swtc/recording/VideoRecorder.java +++ b/src/main/java/io/swtc/recording/VideoRecorder.java @@ -6,109 +6,82 @@ import org.jcodec.common.io.NIOUtils; import org.jcodec.common.io.SeekableByteChannel; import org.jcodec.common.model.Rational; -import javax.swing.*; +import java.awt.*; import java.awt.image.BufferedImage; import java.io.File; import java.io.IOException; - -/* -* -* This is not that interesting but surely improtant for any security based people, -* here we record using jcodec, which is more efficient than me writing my own recorder, -* which i am certainly not doing. -* -* Anyways we dont do shit properly anyway. -* -* */ +import java.util.concurrent.*; public class VideoRecorder { - private boolean recording = false; - private Timer captureTimer; + private volatile boolean recording = false; private File outputFile; private AWTSequenceEncoder encoder; private SeekableByteChannel channel; private static final int FPS = 30; + private LinkedBlockingQueue frameQueue; + private ExecutorService workerThread; + public void startRecording(CameraPanel panel, File output) throws IOException { this.outputFile = output; + this.channel = NIOUtils.writableFileChannel(output.getAbsolutePath()); + this.encoder = new AWTSequenceEncoder(channel, Rational.R(FPS, 1)); + + this.frameQueue = new LinkedBlockingQueue<>(60); this.recording = true; - channel = NIOUtils.writableFileChannel(String.valueOf(outputFile)); - encoder = new AWTSequenceEncoder(channel, Rational.R(FPS, 1)); + workerThread = Executors.newSingleThreadExecutor(); + workerThread.submit(this::processQueue); - captureTimer = new Timer(1000 / FPS, e -> { - try { - BufferedImage img = panel.getCurrentProcessedImage(); - if (img != null) { - BufferedImage rgbImage = convertToRGB(img); - encoder.encodeImage(rgbImage); - } - } catch (IOException ex) { - JOptionPane.showMessageDialog( - null, - "IOException\n" + ex, - "IOException in Recorder", - JOptionPane.ERROR_MESSAGE - ); + new Thread(() -> { + while (recording) { try { - stopRecording(); - } catch (IOException stopEx) { - JOptionPane.showMessageDialog( - null, - "IOException@stopEx\n" + stopEx, - "IOException in Recorder@stopEx", - JOptionPane.ERROR_MESSAGE - ); - + BufferedImage img = panel.getCurrentProcessedImage(); + if (img != null) { + BufferedImage copy = snapshotToRGB(img); + frameQueue.offer(copy); + } + Thread.sleep(1000 / FPS); + } catch (InterruptedException e) { + Thread.currentThread().interrupt(); } } - }); - captureTimer.start(); + }).start(); + } + + private void processQueue() { + while (recording || !frameQueue.isEmpty()) { + try { + BufferedImage img = frameQueue.poll(500, TimeUnit.MILLISECONDS); + if (img != null) { + encoder.encodeImage(img); + } + } catch (Exception e) { + e.printStackTrace(); + } + } + } + + private BufferedImage snapshotToRGB(BufferedImage source) { + BufferedImage rgb = new BufferedImage(source.getWidth(), source.getHeight(), BufferedImage.TYPE_INT_RGB); + Graphics2D g = rgb.createGraphics(); + g.drawImage(source, 0, 0, null); + g.dispose(); + return rgb; } public File stopRecording() throws IOException { recording = false; - - /* some helper methods, i swear its always the same? */ - if (captureTimer != null) { - captureTimer.stop(); + workerThread.shutdown(); + try { + workerThread.awaitTermination(5, TimeUnit.SECONDS); + if (encoder != null) encoder.finish(); + if (channel != null) channel.close(); + } catch (InterruptedException e) { + Thread.currentThread().interrupt(); } - - if (encoder != null) { - encoder.finish(); - } - - if (channel != null) { - channel.close(); - } - return outputFile; } - public boolean isRecording() { - return recording; - } - - // maybe i should move this to a component, some useless conversion right here, - // (performance wise) - // yes, capitain? - private BufferedImage convertToRGB(BufferedImage source) { - if (source.getType() == BufferedImage.TYPE_INT_RGB) { - return source; - } - - BufferedImage rgb = new BufferedImage( - source.getWidth(), - source.getHeight(), - BufferedImage.TYPE_INT_RGB - ); - - for (int y = 0; y < source.getHeight(); y++) { - for (int x = 0; x < source.getWidth(); x++) { - rgb.setRGB(x, y, source.getRGB(x, y) & 0xFFFFFF); - } - } - - return rgb; - } + public boolean isRecording() { return recording; } } \ No newline at end of file diff --git a/src/main/resources/icons/artwork.ico b/src/main/resources/icons/artwork.ico new file mode 100644 index 0000000000000000000000000000000000000000..2bb9a784af8dd689a7f4cce8296e89b2a9f07eba GIT binary patch literal 49587 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 J!>~R9_&3|`gr5Ka literal 0 HcmV?d00001 diff --git a/src/main/resources/icons/artwork.png b/src/main/resources/icons/artwork.png new file mode 100644 index 0000000000000000000000000000000000000000..0bbf48e6656eb0001272179ce1ba2c6781b1cc60 GIT binary patch literal 3482 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 IM6N<$f*Wjk8UO$Q literal 0 HcmV?d00001 diff --git a/src/main/resources/icons/effectsframe.png b/src/main/resources/icons/effectsframe.png new file mode 100644 index 0000000000000000000000000000000000000000..20daf030d1abb09e189c6945c3a3e6dc91200c71 GIT binary patch literal 62341 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

3ZCv`LO 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 mfBEMkk~N}O=v~l(EkJCn7MEO literal 0 HcmV?d00001