/* * @(#)JavaEncoder_ms.java 1.8 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.format.*; import com.sun.media.*; /** * MS GSM encoder plugin wrapper, which uses Java methods to do the encoding. * @author Shay Ben-David bendavid@haifa.vnet.ibm.com */ public class JavaEncoder_ms extends JavaEncoder { //////////////////////////////////////////////////////////////////////////// // Variables /** <FONT COLOR="#FF0000"> * Licensed Materials - Property of IBM <br><br> * "Restricted Materials of IBM" <br><br> * 5648-B81 <br><br> * (c) Copyright IBM Corporation 1997,1999 All Rights Reserved <br><br> * US Government Users Restricted Rights - Use, duplication or * disclosure restricted by GSA ADP Schedule Contract with * IBM Corporation.</FONT> * **/ public static final String a_copyright_notice="(c) Copyright IBM Corporation 1997,1999."; //////////////////////////////////////////////////////////////////////////// // Methods public JavaEncoder_ms() { supportedInputFormats = new AudioFormat[] { new AudioFormat(AudioFormat.LINEAR, Format.NOT_SPECIFIED, 16, 1, AudioFormat.LITTLE_ENDIAN, AudioFormat.SIGNED, Format.NOT_SPECIFIED, Format.NOT_SPECIFIED, Format.byteArray ) }; defaultOutputFormats = new AudioFormat[] {new WavAudioFormat(AudioFormat.GSM_MS)}; PLUGIN_NAME="MS GSM Encoder"; historySize = 640; } protected Format[] getMatchingOutputFormats(Format in) { AudioFormat af =(AudioFormat) in; supportedOutputFormats = new AudioFormat[] { new WavAudioFormat( AudioFormat.GSM_MS, af.getSampleRate(), 0, af.getChannels(), 65*8, (int) (af.getSampleRate() * af.getChannels() / 320 * 65), Format.NOT_SPECIFIED, Format.NOT_SPECIFIED, Format.NOT_SPECIFIED, Format.byteArray, new byte[] { (byte)0x40, (byte)0x01} ) }; return supportedOutputFormats; } public void open() throws ResourceUnavailableException{ encoder=new GsmEncoder_ms(); encoder.gsm_encoder_reset(); } protected int calculateOutputSize(int inputSize) { return calculateFramesNumber(inputSize) * 65 ; } protected int calculateFramesNumber(int inputSize) { return inputSize / 640; } protected boolean codecProcess(byte[] inpData,int readPtr, byte[] outData,int writePtr, int inpLength, int[] readBytes,int[] writeBytes, int[] frameNumber, int[] regions,int[] regionsTypes) { int inCount = 0; int outCount = 0; int channels=inputFormat.getChannels(); boolean isStereo = ( channels == 2); final int frames = inpLength/(640); regions[0]=writePtr; for (int frameCounter = 0; frameCounter<frames ; frameCounter++) { encoder.gsm_encode_frame(inpData, readPtr , outData,writePtr); readPtr += 640; inCount += 640; outCount += 65; writePtr += 65; regions [frameCounter+1]= outCount + writePtr; regionsTypes[frameCounter ]= 0; // System.out.println(inCount+" "+outCount+" "+inpLength); } readBytes [0]=inCount; writeBytes[0]=outCount; frameNumber[0]=frames; return true; } }