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

JavaDecoder

public class JavaDecoder extends com.ibm.media.codec.audio.AudioCodec
Mu-Law to PCM java decoder
Author
Shay Ben-David bendavid@haifa.vnet.ibm.com

Fields Summary
private static final byte[]
lutTableL
private static final byte[]
lutTableH
Constructors Summary
public JavaDecoder()



    ////////////////////////////////////////////////////////////////////////////
    // Methods


      
	supportedInputFormats = new AudioFormat[] { new AudioFormat(AudioFormat.ULAW) };
        defaultOutputFormats  = new AudioFormat[] { new AudioFormat(AudioFormat.LINEAR) };
        PLUGIN_NAME="Mu-Law Decoder";
    
Methods Summary
public java.lang.Object[]getControls()

        if (controls==null) {
             controls=new Control[1];
             controls[0]=new SilenceSuppressionAdapter(this,false,false);
	}
        return (Object[])controls;
    
protected Format[]getMatchingOutputFormats(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;
    
private voidinitTables()

        for (int i=0;i<256;i++) {
            int input     = ~i;
            int mantissa  = ( (input & 0xf ) << 3) + 0x84;
            int segment   = (input & 0x70) >> 4;
            int value     = mantissa << segment;

            value -= 0x84;

            if ( (input & 0x80)!=0 )
                value = -value;

            lutTableL[i]=(byte)value;
            lutTableH[i]=(byte)(value>>8);

        }
    
public voidopen()
Initializes the codec.

     initTables();
    
public intprocess(Buffer inputBuffer, Buffer outputBuffer)
decode the buffer


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

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

      int channels = ((AudioFormat)outputFormat).getChannels();
      byte[] inData =(byte[]) inputBuffer.getData();
      byte[] outData = validateByteArraySize(outputBuffer, inData.length * 2);

      int inpLength=inputBuffer.getLength();
      int outLength=2*inpLength;

      int inOffset=inputBuffer.getOffset();
      int outOffset=outputBuffer.getOffset();
      for (int i=0;i<inpLength;i++) {
        int temp=inData[inOffset++]&0xff;
        outData[outOffset++]=lutTableL[temp];
        outData[outOffset++]=lutTableH[temp];
      }

      updateOutput(outputBuffer,outputFormat, outLength, outputBuffer.getOffset());

	return BUFFER_PROCESSED_OK;