package org.mobicents.media.server.impl.dsp.audio.gsm;
import org.apache.log4j.Logger;
import org.mobicents.media.Buffer;
import org.mobicents.media.Format;
import org.mobicents.media.server.spi.dsp.Codec;
import org.mobicents.media.server.spi.dsp.SignalingProcessor;
import org.tritonus.lowlevel.gsm.InvalidGSMFrameException;
/**
*
* @author amit bhayani
*
*/
public class Decoder implements Codec {
private transient Logger logger = Logger.getLogger(Decoder.class);
private org.tritonus.lowlevel.gsm.GSMDecoder decoder = new org.tritonus.lowlevel.gsm.GSMDecoder();
private static final int BUFFER_SIZE = 320;
public Decoder() {
}
public void process(Buffer buffer) {
byte[] data = (byte[]) buffer.getData();
int offset = buffer.getOffset();
int length = buffer.getLength();
byte[] media = new byte[length - offset];
System.arraycopy(data, 0, media, 0, media.length);
byte[] res = process(data);
buffer.setData(res);
buffer.setFormat(Codec.LINEAR_AUDIO);
buffer.setOffset(0);
buffer.setLength(res.length);
}
private byte[] m_abBuffer;
/**
* Perform compression.
*
* @param input
* media
* @return compressed media.
*/
public byte[] process(byte[] media) {
m_abBuffer = new byte[BUFFER_SIZE];
try {
decoder.decode(media, 0, m_abBuffer, 0, false);
} catch (InvalidGSMFrameException e) {
e.printStackTrace();
}
return m_abBuffer;
}
public Format getSupportedInputFormat() {
return Codec.GSM;
}
public Format getSupportedOutputFormat() {
return Codec.LINEAR_AUDIO;
}
public void setProc(SignalingProcessor processor) {
// TODO Auto-generated method stub
}
}