53 lines
1.5 KiB
Java
53 lines
1.5 KiB
Java
package com.jsca;
|
|
|
|
import com.github.sarxos.webcam.Webcam;
|
|
import java.awt.Dimension;
|
|
import java.awt.Image;
|
|
import javax.swing.SwingUtilities;
|
|
|
|
public class WebcamStreamReader implements StreamReader {
|
|
private final CameraPanel panel;
|
|
private volatile boolean running = true;
|
|
private Webcam webcam;
|
|
|
|
public WebcamStreamReader(CameraPanel panel) {
|
|
this.panel = panel;
|
|
}
|
|
|
|
@Override
|
|
public void run() {
|
|
try {
|
|
webcam = Webcam.getDefault();
|
|
if (webcam == null) {
|
|
throw new RuntimeException("No webcam detected");
|
|
}
|
|
|
|
webcam.setViewSize(new Dimension(640, 480));
|
|
webcam.open();
|
|
|
|
while (running && webcam.isOpen()) {
|
|
final Image image = webcam.getImage();
|
|
if (image != null) {
|
|
SwingUtilities.invokeLater(() -> panel.updateFrame(image));
|
|
}
|
|
Thread.sleep(33); // ~30 FPS
|
|
}
|
|
} catch (Exception e) {
|
|
SwingUtilities.invokeLater(() -> {
|
|
javax.swing.JOptionPane.showMessageDialog(panel,
|
|
"Error reading from webcam: " + e.getMessage(),
|
|
"Webcam Error",
|
|
javax.swing.JOptionPane.ERROR_MESSAGE);
|
|
});
|
|
} finally {
|
|
if (webcam != null && webcam.isOpen()) {
|
|
webcam.close();
|
|
}
|
|
}
|
|
}
|
|
|
|
@Override
|
|
public void stop() {
|
|
running = false;
|
|
}
|
|
} |