/* * To change this template, choose Tools | Templates * and open the template in the editor. */ package webcamstudio.mixers; import java.awt.Color; import java.awt.Graphics2D; import static java.awt.RenderingHints.KEY_ANTIALIASING; import static java.awt.RenderingHints.KEY_COLOR_RENDERING; import static java.awt.RenderingHints.KEY_DITHERING; import static java.awt.RenderingHints.KEY_FRACTIONALMETRICS; import static java.awt.RenderingHints.KEY_INTERPOLATION; import static java.awt.RenderingHints.KEY_RENDERING; import static java.awt.RenderingHints.KEY_TEXT_ANTIALIASING; import static java.awt.RenderingHints.VALUE_ANTIALIAS_OFF; import static java.awt.RenderingHints.VALUE_COLOR_RENDER_SPEED; import static java.awt.RenderingHints.VALUE_DITHER_DISABLE; import static java.awt.RenderingHints.VALUE_FRACTIONALMETRICS_OFF; import static java.awt.RenderingHints.VALUE_INTERPOLATION_BILINEAR; import static java.awt.RenderingHints.VALUE_RENDER_SPEED; import static java.awt.RenderingHints.VALUE_TEXT_ANTIALIAS_OFF; import java.awt.image.BufferedImage; import static java.awt.image.BufferedImage.TYPE_INT_ARGB; import static webcamstudio.WebcamStudio.audioFreq; /** * * @author patrick */ public class Frame { private BufferedImage image; private int x = 0; private int y = 0; private int w = 320; private int h = 240; private int opacity = 100; private float audioVolume=1; private byte[] audioData; private int zOrder = 0; private String uuid = null; private long frameNb = 0; private int aFreq = audioFreq; public Frame(String id,BufferedImage img, byte[] audio){ image=img; audioData=audio; uuid=id; } public Frame(int w, int h, int rate){ this.w=w; this.h=h; image = new BufferedImage(w,h, TYPE_INT_ARGB); audioData= new byte[(aFreq *2 *2) / rate]; } public void setFrameNumber(long n){ frameNb=n; } public long getFrameNumber(){ return frameNb; } public void copyFrame(Frame frame){ BufferedImage imageSrc = frame.getImage(); byte[] audioSrc = frame.getAudioData(); if (imageSrc!=null){ Graphics2D g = image.createGraphics(); g.setBackground(new Color(0,0,0,0)); g.clearRect(0, 0, w, h); g.drawImage(imageSrc, 0, 0, null); g.dispose(); } if (audioSrc!=null && audioSrc.length==audioData.length){ System.arraycopy(audioSrc, 0, audioData, 0, audioSrc.length); } } public String getID(){ return uuid; } public void setZOrder(int z){ zOrder=z; } public int getZOrder(){ return zOrder; } public void setID(String id){ uuid=id; } public void setImage(BufferedImage img){ if (img != null){ Graphics2D g = image.createGraphics(); g.setRenderingHint(KEY_INTERPOLATION, VALUE_INTERPOLATION_BILINEAR); g.setRenderingHint(KEY_RENDERING, VALUE_RENDER_SPEED); g.setRenderingHint(KEY_ANTIALIASING, VALUE_ANTIALIAS_OFF); g.setRenderingHint(KEY_TEXT_ANTIALIASING, VALUE_TEXT_ANTIALIAS_OFF); g.setRenderingHint(KEY_FRACTIONALMETRICS, VALUE_FRACTIONALMETRICS_OFF); g.setRenderingHint(KEY_COLOR_RENDERING, VALUE_COLOR_RENDER_SPEED); g.setRenderingHint(KEY_DITHERING, VALUE_DITHER_DISABLE); g.setBackground(new Color(0,0,0,0)); g.clearRect(0, 0, w, h); // System.out.println("W:"+w+" H:"+h); g.drawImage(img, 0, 0, null); g.dispose(); } } public void setAudio(byte[] data){ if (data!=null){ audioData = data.clone(); } } public void setOutputFormat(int x, int y, int w, int h, int opacity,float volume){ this.x=x; this.y=y; this.w=w; this.h=h; this.opacity=opacity; this.audioVolume=volume; } public BufferedImage getImage(){ return image; } public byte[] getAudioData() { return audioData; } public int getX(){ return x; } public int getY(){ return y; } public int getWidth(){ return w; } public int getHeight(){ return h; } public int getOpacity(){ return opacity; } public float getVolume(){ return audioVolume; } }