/*
* @(#)Packetizer.java 1.10 02/08/21
*
* Copyright (c) 1996-2002 Sun Microsystems, Inc. All rights reserved.
*/
package com.sun.media.codec.audio.ulaw;
import javax.media.*;
import javax.media.format.*;
import javax.media.format.*;
import com.sun.media.*;
import com.sun.media.controls.*;
/**
* Implements an MuLaw Packetizer.
*/
public class Packetizer extends com.ibm.media.codec.audio.AudioPacketizer {
////////////////////////////////////////////////////////////////////////////
// Methods
public Packetizer() {
packetSize=480;
supportedInputFormats = new AudioFormat[] {
new AudioFormat(
AudioFormat.ULAW,
Format.NOT_SPECIFIED,
8,
1,
Format.NOT_SPECIFIED,
Format.NOT_SPECIFIED,
8,
Format.NOT_SPECIFIED,
Format.byteArray
)
} ;
defaultOutputFormats = new AudioFormat[] {
new AudioFormat(
AudioFormat.ULAW_RTP,
Format.NOT_SPECIFIED,
8,
1,
Format.NOT_SPECIFIED,
Format.NOT_SPECIFIED,
8,
Format.NOT_SPECIFIED,
Format.byteArray
)
} ;
PLUGIN_NAME="Mu-Law Packetizer";
}
protected Format[] getMatchingOutputFormats(Format in) {
AudioFormat af =(AudioFormat) in;
supportedOutputFormats = new AudioFormat[] {
new AudioFormat(
AudioFormat.ULAW_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;
}
}
|