Package net.sf.fmj.media.codec.audio.gsm

Source Code of net.sf.fmj.media.codec.audio.gsm.Packetizer

package net.sf.fmj.media.codec.audio.gsm;

import java.util.logging.Logger;

import javax.media.Format;
import javax.media.format.AudioFormat;

import net.sf.fmj.media.AbstractPacketizer;
import net.sf.fmj.utility.LoggerSingleton;

/**
* GSM/RTP packetizer Codec.
*
* @author Martin Harvan
*/
public class Packetizer extends AbstractPacketizer {
    private static final Logger logger = LoggerSingleton.logger;
   
    private static final int PACKET_SIZE = 495;

    @Override
    public String getName() {
        return "GSM Packetizer";
    }

    public Packetizer() {
        super();
        this.inputFormats = new Format[]{new AudioFormat(AudioFormat.GSM, 8000, 8, 1, -1, AudioFormat.SIGNED, 264, -1.0, Format.byteArray)};

    }

    // TODO: move to base class?
    protected Format[] outputFormats = new Format[]{new AudioFormat(AudioFormat.GSM_RTP, 8000, 8, 1, -1, AudioFormat.SIGNED, 264, -1.0, Format.byteArray)};

    @Override
    public Format[] getSupportedOutputFormats(Format input) {
        if (input == null)
            return outputFormats;
        else {
            if (!(input instanceof AudioFormat)) {
                logger.warning(this.getClass().getSimpleName() + ".getSupportedOutputFormats: input format does not match, returning format array of {null} for " + input); // this can cause an NPE in JMF if it ever happens.
                return new Format[]{null};
            }
            final AudioFormat inputCast = (AudioFormat) input;
            if (!inputCast.getEncoding().equals(AudioFormat.GSM) ||
                    (inputCast.getSampleSizeInBits() != 8 && inputCast.getSampleSizeInBits() != Format.NOT_SPECIFIED) ||
                    (inputCast.getChannels() != 1 && inputCast.getChannels() != Format.NOT_SPECIFIED) ||
                    (inputCast.getFrameSizeInBits() != 264 && inputCast.getFrameSizeInBits() != Format.NOT_SPECIFIED)
                    ) {
                logger.warning(this.getClass().getSimpleName() + ".getSupportedOutputFormats: input format does not match, returning format array of {null} for " + input); // this can cause an NPE in JMF if it ever happens.
                return new Format[]{null};
            }
            final AudioFormat result = new AudioFormat(AudioFormat.GSM_RTP, inputCast.getSampleRate(), 8,
                    1, inputCast.getEndian(), inputCast.getSigned(), 264,
                    inputCast.getFrameRate(), inputCast.getDataType());

            return new Format[]{result};
        }
    }

    @Override
    public void open() {
        setPacketSize(PACKET_SIZE);
    }


    @Override
    public void close() {
    }

    @Override
    public Format setInputFormat(Format arg0) {
        return super.setInputFormat(arg0);
    }

    @Override
    public Format setOutputFormat(Format arg0) {
        return super.setOutputFormat(arg0);
    }


}
TOP

Related Classes of net.sf.fmj.media.codec.audio.gsm.Packetizer

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.