FileDocCategorySizeDatePackage
JavaDecoder.javaAPI DocJMF 2.1.1e3922Mon May 12 12:21:02 BST 2003com.ibm.media.codec.audio.gsm

JavaDecoder

public class JavaDecoder extends AudioCodec
RTP GSM decoder plugin wrapper, which uses Java methods to do the decoding.
author
Shay Ben-David bendavid@haifa.vnet.ibm.com

Fields Summary
public static final String
a_copyright_notice
Licensed Materials - Property of IBM

"Restricted Materials of IBM"

5648-B81

(c) Copyright IBM Corporation 1997,1999 All Rights Reserved

US Government Users Restricted Rights - Use, duplication or disclosure restricted by GSA ADP Schedule Contract with IBM Corporation.
protected GsmDecoder
decoder
Constructors Summary
public JavaDecoder()


     ////////////////////////////////////////////////////////////////////////////
    // Methods
      
       	supportedInputFormats = new AudioFormat[] { new AudioFormat(AudioFormat.GSM),
						    new AudioFormat(AudioFormat.GSM_RTP)};
        defaultOutputFormats  = new AudioFormat[] { new AudioFormat(AudioFormat.LINEAR) };
        PLUGIN_NAME="GSM Decoder";
    
Methods Summary
protected intcalculateOutputSize(int inputSize)

        return inputSize/33*320;
    
public voidclose()

        freeDecoder();
    
protected voiddecode(byte[] inpData, int readPtr, byte[] outData, int writePtr, int inpLength)

        int numberOfFrames = (inpLength/33);

        for ( int n=1 ; n<=numberOfFrames ; n++,writePtr += 320,readPtr += 33) {
                decoder.decodeFrame(inpData, readPtr , outData,writePtr);
        }
    
protected voidfreeDecoder()

        decoder = null;
    
public java.lang.Object[]getControls()

        if (controls==null) {
             controls=new Control[1];
             controls[0]=new SilenceSuppressionAdapter(this,true,false);
	}
        return (Object[])controls;
    
protected javax.media.Format[]getMatchingOutputFormats(javax.media.Format in)


        AudioFormat af =(AudioFormat) in;

        supportedOutputFormats = new AudioFormat[] {
                new AudioFormat(
                AudioFormat.LINEAR,
                af.getSampleRate(),
                16,
                af.getChannels(),
                AudioFormat.LITTLE_ENDIAN, //isBigEndian(),
                AudioFormat.SIGNED //isSigned());
                )                };
        return  supportedOutputFormats;
    
public voidopen()

        decoder=new GsmDecoder();
        decoder.decoderInit();
    
public intprocess(javax.media.Buffer inputBuffer, javax.media.Buffer outputBuffer)


        if (!checkInputBuffer(inputBuffer) ) {
            return BUFFER_PROCESSED_FAILED;
        }

        if (isEOM(inputBuffer) ) {
            propagateEOM(outputBuffer);
            return BUFFER_PROCESSED_OK;
        }

        int inpLength=inputBuffer.getLength();
        int outLength = calculateOutputSize(inputBuffer.getLength() );

        byte[] inpData = (byte[]) inputBuffer.getData();
        byte[] outData = validateByteArraySize(outputBuffer, outLength);


        decode(inpData, inputBuffer.getOffset(), outData, 0, inpLength);

        updateOutput(outputBuffer, outputFormat, outLength, 0);
        return BUFFER_PROCESSED_OK;
    
public voidreset()

        resetDecoder();
    
protected voidresetDecoder()

        decoder.decoderInit();