📄 javaencoder.java
字号:
/* * SIP Communicator, the OpenSource Java VoIP and Instant Messaging client. * * Distributable under LGPL license. * See terms of license at gnu.org. */package net.java.sip.communicator.impl.media.codec.audio.ilbc;import javax.media.*;import javax.media.format.*;import net.java.sip.communicator.impl.media.codec.*;import net.java.sip.communicator.impl.media.codec.audio.*;/** * The ilbc Encoder * * @author Damian Minkov */public class JavaEncoder extends com.ibm.media.codec.audio.AudioCodec{ private Format lastFormat = null; private ilbc_encoder enc = null; private int ILBC_NO_OF_BYTES = 0; public JavaEncoder() { supportedInputFormats = new AudioFormat[] { new AudioFormat( AudioFormat.LINEAR, 8000, 16, 1, AudioFormat.LITTLE_ENDIAN, //isBigEndian(), AudioFormat.SIGNED //isSigned()); )}; defaultOutputFormats = new AudioFormat[] {new AudioFormat( Constants.ILBC_RTP, 8000.0, 16, 1, AudioFormat.LITTLE_ENDIAN, AudioFormat.SIGNED)}; PLUGIN_NAME = "pcm to iLbc converter"; } protected Format[] getMatchingOutputFormats(Format in) { AudioFormat af = (AudioFormat) in; supportedOutputFormats = new AudioFormat[] {new AudioFormat( Constants.ILBC_RTP, 8000.0, 16, 1, AudioFormat.LITTLE_ENDIAN, AudioFormat.SIGNED)}; return supportedOutputFormats; } public void open() throws ResourceUnavailableException { int mode = Constants.ILBC_MODE; enc = new ilbc_encoder(mode); if(mode == 20) ILBC_NO_OF_BYTES = ilbc_constants.NO_OF_BYTES_20MS; else if(mode == 30) ILBC_NO_OF_BYTES = ilbc_constants.NO_OF_BYTES_30MS; } public void close() { } private void initConverter(AudioFormat inFormat) { lastFormat = inFormat; } public int process(Buffer inputBuffer, Buffer outputBuffer) { if (!checkInputBuffer(inputBuffer)) { return BUFFER_PROCESSED_FAILED; } if (isEOM(inputBuffer)) { propagateEOM(outputBuffer); return BUFFER_PROCESSED_OK; } Format newFormat = inputBuffer.getFormat(); if (lastFormat != newFormat) { initConverter( (AudioFormat) newFormat); } int inpLength = inputBuffer.getLength(); int inOffset = inputBuffer.getOffset(); byte[] inpData = (byte[]) inputBuffer.getData(); if (inpLength == 0) { return OUTPUT_BUFFER_NOT_FILLED; } else if(inpLength < enc.ULP_inst.blockl*2) { return OUTPUT_BUFFER_NOT_FILLED; } short[] encoded_data = new short[ILBC_NO_OF_BYTES / 2]; int outLength = ILBC_NO_OF_BYTES; byte[] outdata = validateByteArraySize(outputBuffer, outLength); short[] data = Utils.byteToShortArray(inpData, inOffset, inpLength, true); enc.encode(encoded_data, data); Utils.shortArrToByteArr(encoded_data, outdata, false); updateOutput(outputBuffer, outputFormat, outLength, 0); inputBuffer.setLength(inpLength - enc.ULP_inst.blockl*2); inputBuffer.setOffset(inOffset + enc.ULP_inst.blockl*2); return BUFFER_PROCESSED_OK | INPUT_BUFFER_NOT_CONSUMED; } public java.lang.Object[] getControls() { if (controls == null) { controls = new Control[1]; controls[0] = new com.sun.media.controls.SilenceSuppressionAdapter(this, false, false); } return (Object[]) controls; }}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -