/* * SIP Communicator, the OpenSource Java VoIP and Instant Messaging client. * * Distributable under LGPL license. * See terms of license at gnu.org. */ package net.java.sip.communicator.impl.media.codec.audio.alaw; import javax.media.*; import javax.media.format.*; import com.ibm.media.codec.audio.*; import net.java.sip.communicator.impl.media.codec.*; /** * Packetizer for ALAW codec * @author Damian Minkov */ public class Packetizer extends AudioPacketizer { public Packetizer() { packetSize = 160; supportedInputFormats = new AudioFormat[] { new AudioFormat( AudioFormat.ALAW, Format.NOT_SPECIFIED, 8, 1, Format.NOT_SPECIFIED, Format.NOT_SPECIFIED, 8, Format.NOT_SPECIFIED, Format.byteArray ) }; defaultOutputFormats = new AudioFormat[] { new AudioFormat( AudioFormat.ALAW, Format.NOT_SPECIFIED, 8, 1, Format.NOT_SPECIFIED, Format.NOT_SPECIFIED, 8, Format.NOT_SPECIFIED, Format.byteArray ) }; PLUGIN_NAME = "ALaw Packetizer"; } protected Format[] getMatchingOutputFormats(Format in) { AudioFormat af = (AudioFormat) in; supportedOutputFormats = new AudioFormat[] { new AudioFormat( Constants.ALAW_RTP, af.getSampleRate(), 8, 1, Format.NOT_SPECIFIED, Format.NOT_SPECIFIED, 8, Format.NOT_SPECIFIED, Format.byteArray ) }; return supportedOutputFormats; } public void open() throws ResourceUnavailableException { setPacketSize(packetSize); reset(); } public java.lang.Object[] getControls() { if (controls == null) { controls = new Control[1]; controls[0] = new PacketSizeAdapter(this, packetSize, true); } return (Object[]) controls; } public synchronized void setPacketSize(int newPacketSize) { packetSize = newPacketSize; sample_count = packetSize; if (history == null) { history = new byte[packetSize]; return; } if (packetSize > history.length) { byte[] newHistory = new byte[packetSize]; System.arraycopy(history, 0, newHistory, 0, historyLength); history = newHistory; } } } class PacketSizeAdapter extends com.sun.media.controls.PacketSizeAdapter { public PacketSizeAdapter(Codec newOwner, int newPacketSize, boolean newIsSetable) { super(newOwner, newPacketSize, newIsSetable); } public int setPacketSize(int numBytes) { int numOfPackets = numBytes; if (numOfPackets < 10) { numOfPackets = 10; } if (numOfPackets > 8000) { numOfPackets = 8000; } packetSize = numOfPackets; ( (Packetizer) owner).setPacketSize(packetSize); return packetSize; } }