/** * Fills the data of <tt>buf</tt> to at most <tt>samples</tt> samples of * silence. Returns the actual number of samples used. * @param buf the <tt>Buffer</tt> to fill with silence * @param samples the number of samples of silence to fill. * @return the number of samples of silence added in <tt>buf</tt>. */ private int setSilence(Buffer buf, int samples) { int samplesToFill = Math.min(samples, MAX_SAMPLES_PER_PACKET); int len = samplesToFill * sampleSizeInBits / 8; byte[] data = validateByteArraySize(buf, len, false); Arrays.fill(data, (byte)0); buf.setOffset(0); buf.setLength(len); return samplesToFill; }
buffer.setLength(0);
/** * Updates the <tt>format</tt>, <tt>length</tt> and <tt>offset</tt> of a * specific output <tt>Buffer</tt> to specific values. * * @param outputBuffer the output <tt>Buffer</tt> to update the properties * of * @param format the <tt>Format</tt> to set on <tt>outputBuffer</tt> * @param length the length to set on <tt>outputBuffer</tt> * @param offset the offset to set on <tt>outputBuffer</tt> */ protected void updateOutput( Buffer outputBuffer, Format format, int length, int offset) { outputBuffer.setFormat(format); outputBuffer.setLength(length); outputBuffer.setOffset(offset); }
/** * Resets the states of this <tt>DePacketizer</tt> and a specific output * <tt>Buffer</tt> so that they are ready to have this <tt>DePacketizer</tt> * process input RTP payloads. * * @param outBuffer the output <tt>Buffer</tt> to be reset * @return the flags such as <tt>BUFFER_PROCESSED_OK</tt> and * <tt>OUTPUT_BUFFER_NOT_FILLED</tt> to be returned by * {@link #process(Buffer, Buffer)} */ private int reset(Buffer outBuffer) { if (OUTPUT_INCOMPLETE_BUFFER && outBuffer.getLength() > 0) { Object outData = outBuffer.getData(); if (outData instanceof byte[]) { return (BUFFER_PROCESSED_OK | INPUT_BUFFER_NOT_CONSUMED); } } outBuffer.setLength(0); return OUTPUT_BUFFER_NOT_FILLED; } }
protected short[] validateShortArraySize(Buffer buffer, int newSize) { Object data = buffer.getData(); short[] newShorts; if (data instanceof short[]) { short[] shorts = (short[]) data; if (shorts.length >= newSize) return shorts; newShorts = new short[newSize]; System.arraycopy(shorts, 0, newShorts, 0, shorts.length); } else { newShorts = new short[newSize]; buffer.setLength(0); buffer.setOffset(0); } buffer.setData(newShorts); return newShorts; } }
outBuffer.setLength(newOutLength);
@Override public void transferData(PushBufferStream stream) { buffer.setDiscard(false); buffer.setFlags(0); buffer.setLength(0); buffer.setOffset(0); AudioMixerPushBufferStream.this.transferData(buffer); } };
/** * Reads byte data from this stream into a specific <tt>Buffer</tt> * which is to use a specific array of bytes for its data. * * @param buffer the <tt>Buffer</tt> to read byte data into from this * instance * @param data the array of <tt>byte</tt>s to read data into from this * instance and to be set as the data of the specified <tt>buffer</tt> * @throws IOException if I/O related errors occurred during read operation */ protected void read(Buffer buffer, byte[] data, int offset, int length) throws IOException { int numberOfBytesRead = doRead(buffer, data, offset, length); buffer.setData(data); if (numberOfBytesRead >= 0) { buffer.setLength(numberOfBytesRead); } else { buffer.setLength(0); if (numberOfBytesRead == -1) buffer.setEOM(true); } buffer.setOffset(offset); Format format = getFormat(); if (format != null) buffer.setFormat(format); }
outBuffer.setLength(0); return OUTPUT_BUFFER_NOT_FILLED;
buf.setLength(dstLen); buf.setOffset(0);
/** * @see AbstractCodec2#doProcess(Buffer, Buffer) */ @Override protected int doProcess(Buffer inputBuffer, Buffer outputBuffer) { byte[] input = (byte[]) inputBuffer.getData(); int outputOffset = outputBuffer.getOffset(); int outputLength = inputBuffer.getLength() * 4; byte[] output = validateByteArraySize( outputBuffer, outputOffset + outputLength, true); JNIDecoder.g722_decoder_process( decoder, input, inputBuffer.getOffset(), output, outputOffset, outputLength); outputBuffer.setDuration( (outputLength * 1000000L) / (16L /* kHz */ * 2L /* sampleSizeInBits / 8 */)); outputBuffer.setFormat(getOutputFormat()); outputBuffer.setLength(outputLength); return BUFFER_PROCESSED_OK; } }
/** * @see AbstractCodec2#doProcess(Buffer, Buffer) */ @Override protected int doProcess(Buffer inputBuffer, Buffer outputBuffer) { int inputOffset = inputBuffer.getOffset(); int inputLength = inputBuffer.getLength(); byte[] input = (byte[]) inputBuffer.getData(); int outputOffset = outputBuffer.getOffset(); int outputLength = inputLength / 4; byte[] output = validateByteArraySize( outputBuffer, outputOffset + outputLength, true); JNIEncoder.g722_encoder_process( encoder, input, inputOffset, output, outputOffset, outputLength); outputBuffer.setDuration(computeDuration(outputLength)); outputBuffer.setFormat(getOutputFormat()); outputBuffer.setLength(outputLength); return BUFFER_PROCESSED_OK; }
/** * decode the buffer * @param inputBuffer Buffer * @param outputBuffer Buffer * @return int */ public int process(Buffer inputBuffer, Buffer outputBuffer) { if (!checkInputBuffer(inputBuffer)) { return BUFFER_PROCESSED_FAILED; } if (isEOM(inputBuffer)) { propagateEOM(outputBuffer); return BUFFER_PROCESSED_OK; } Object outData = outputBuffer.getData(); outputBuffer.setData(inputBuffer.getData()); inputBuffer.setData(outData); outputBuffer.setLength(inputBuffer.getLength()); outputBuffer.setFormat(outputFormat); outputBuffer.setOffset(inputBuffer.getOffset()); return BUFFER_PROCESSED_OK; } }
buffer.setLength(rtpPacket.getPayloadLength());