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

Packetizer.java

/*
 * @(#)Packetizer.java	1.4 02/08/21
 *
 * Copyright (c) 1996-2002 Sun Microsystems, Inc.  All rights reserved.
 */

package com.ibm.media.codec.audio.gsm;

import javax.media.*;
import javax.media.format.*;
import javax.media.format.*;
import com.sun.media.*;
import com.sun.media.controls.*;

/**
 * Implements an GSM Packetizer.
 */
public class Packetizer extends com.ibm.media.codec.audio.AudioPacketizer {


     ////////////////////////////////////////////////////////////////////////////
    // Methods
    public Packetizer() {
        packetSize=99;
       	supportedInputFormats = new AudioFormat[] {
	        new AudioFormat(
                    AudioFormat.GSM,
                    8000,
                    Format.NOT_SPECIFIED,
		    1,
                    Format.NOT_SPECIFIED,
                    Format.NOT_SPECIFIED,
                    33*8,
                    Format.NOT_SPECIFIED,
                    Format.byteArray
                )
        } ;
        defaultOutputFormats  = new AudioFormat[] {
	        new AudioFormat(
                    AudioFormat.GSM_RTP,
                    8000,
                    Format.NOT_SPECIFIED,
		    1,
                    Format.NOT_SPECIFIED,
                    Format.NOT_SPECIFIED,
                    33*8,
                    Format.NOT_SPECIFIED,
                    Format.byteArray
                )
        } ;

        PLUGIN_NAME="GSM Packetizer";

    }

    protected  Format[] getMatchingOutputFormats(Format in) {

        AudioFormat af =(AudioFormat) in;

        supportedOutputFormats = new AudioFormat[] {
                new AudioFormat(
                    AudioFormat.GSM_RTP,
                    8000,
                    Format.NOT_SPECIFIED,
		    1,
                    Format.NOT_SPECIFIED,
                    Format.NOT_SPECIFIED,
                    33*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 / 33) * 160;

        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/33;

        if (numOfPackets < 1) {
            numOfPackets=1;
        }

        if (numOfPackets > 100) {
            numOfPackets=100;
        }
        packetSize= numOfPackets*33;


        ((Packetizer)owner).setPacketSize(packetSize);

        return packetSize;
    }

}