From 8239b910fe8688350a0562e375827b8d1f835a73 Mon Sep 17 00:00:00 2001 From: rattatwinko Date: Thu, 29 Jan 2026 17:02:04 +0100 Subject: [PATCH] recording was fucked up. FIX! mainly in RecordingFrame --- .../io/swtc/proccessing/ui/iframe/RecordingFrame.java | 4 ++-- .../java/io/swtc/recording/cv/FrameProccessor.java | 11 ++++++----- src/main/java/io/swtc/recording/cv/MediaSink.java | 4 ++++ 3 files changed, 12 insertions(+), 7 deletions(-) diff --git a/src/main/java/io/swtc/proccessing/ui/iframe/RecordingFrame.java b/src/main/java/io/swtc/proccessing/ui/iframe/RecordingFrame.java index 53cc3ce..1d6848d 100644 --- a/src/main/java/io/swtc/proccessing/ui/iframe/RecordingFrame.java +++ b/src/main/java/io/swtc/proccessing/ui/iframe/RecordingFrame.java @@ -147,8 +147,8 @@ public class RecordingFrame extends JInternalFrame { sample.getWidth(), sample.getHeight(), 20, // Frame Rate - 25, // CRF (Quality) - "ultrafast" + 18, // CRF (Quality) + "superfast" ); // 2. Initialize the HA Recorder diff --git a/src/main/java/io/swtc/recording/cv/FrameProccessor.java b/src/main/java/io/swtc/recording/cv/FrameProccessor.java index b4e0a87..6bf0f5e 100644 --- a/src/main/java/io/swtc/recording/cv/FrameProccessor.java +++ b/src/main/java/io/swtc/recording/cv/FrameProccessor.java @@ -15,13 +15,14 @@ public class FrameProccessor { reuseImg = new BufferedImage( rawImg.getWidth(), rawImg.getHeight(), - BufferedImage.TYPE_3BYTE_BGR // default java BufferedImage Type + BufferedImage.TYPE_3BYTE_BGR ); - - var g = reuseImg.createGraphics(); - g.drawImage(rawImg, 0, 0, null); - g.dispose(); } + + var g = reuseImg.createGraphics(); + g.drawImage(rawImg, 0, 0, null); + g.dispose(); + return converter.getFrame(reuseImg); } diff --git a/src/main/java/io/swtc/recording/cv/MediaSink.java b/src/main/java/io/swtc/recording/cv/MediaSink.java index bf440d2..c9ea6f7 100644 --- a/src/main/java/io/swtc/recording/cv/MediaSink.java +++ b/src/main/java/io/swtc/recording/cv/MediaSink.java @@ -20,9 +20,13 @@ public class MediaSink { recorder.setFormat("mp4"); recorder.setPixelFormat(avutil.AV_PIX_FMT_BGR24); recorder.setFrameRate(config.fps()); + /* this is essentially just building FFmpeg? Would've used ProccessBuilder for this lol */ recorder.setVideoOption("pixel_format", "yuv420p"); recorder.setVideoOption("preset", config.preset()); recorder.setVideoOption("crf", String.valueOf(config.crf())); + recorder.setVideoOption("tune", "zerolatency"); + recorder.setVideoOption("x264opts", "keyint=40:min-keyint=20"); + recorder.setVideoBitrate(0); // 0 tells the recorder to respect CRF strictly recorder.setGopSize(config.fps() * 2); recorder.start();