/* * To change this template, choose Tools | Templates * and open the template in the editor. */ package webcamstudio.streams; import java.awt.image.BufferedImage; import java.io.File; import webcamstudio.exporter.vloopback.V4L2Loopback; import webcamstudio.exporter.vloopback.VideoOutput; import static webcamstudio.exporter.vloopback.VideoOutput.UYVY; import webcamstudio.mixers.Frame; import webcamstudio.mixers.MasterMixer; /** * * @author patrick */ public class SinkLinuxDevice extends Stream implements MasterMixer.SinkListener { VideoOutput device; boolean stop = false; int pixelFormat; public SinkLinuxDevice(File f, String name, int pixelFormat) { file = f; device = new V4L2Loopback(null); this.name = name; if (pixelFormat > 0) { this.pixelFormat = pixelFormat; } else { this.pixelFormat = UYVY; } } @Override public void read() { stop = false; rate = MasterMixer.getInstance().getRate(); device.open(file.getAbsolutePath(), width, height, pixelFormat); MasterMixer.getInstance().register(this); } @Override public void pause() { // throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates. } @Override public void stop() { stop = true; if (device != null) { device.close(); device = null; } MasterMixer.getInstance().unregister(this); } @Override public boolean needSeek() { return needSeekCTRL=false; } @Override public boolean isPlaying() { return !stop; } @Override public BufferedImage getPreview() { return null; } @Override public Frame getFrame() { return null; } @Override public boolean hasAudio() { return false; } @Override public boolean hasVideo() { return true; } @Override public void newFrame(Frame frame) { if (frame != null) { BufferedImage image = frame.getImage(); if (image != null) { int[] imgData = ((java.awt.image.DataBufferInt) image.getRaster().getDataBuffer()).getData(); if (device != null) { device.write(imgData); } } } } @Override public void readNext() { } @Override public void play() { // throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates. } }