/** * 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; } }
/** * 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); }
@Override public void transferData(PushBufferStream stream) { buffer.setDiscard(false); buffer.setFlags(0); buffer.setLength(0); buffer.setOffset(0); AudioMixerPushBufferStream.this.transferData(buffer); } };
Object data = outputBuffer.getData(); int inputBufferLength = inputBuffer.getLength(); byte[] bufferData; outputBuffer.setData(bufferData); outputBuffer.setLength(inputBufferLength); outputBuffer.setOffset(0); inputBuffer.getData(), inputBuffer.getOffset(), bufferData, 0, inputBufferLength); outputBuffer.setFormat(inputBuffer.getFormat()); outputBuffer.setHeader(inputBuffer.getHeader()); outputBuffer.setSequenceNumber(inputBuffer.getSequenceNumber()); outputBuffer.setTimeStamp(inputBuffer.getTimeStamp()); outputBuffer.setRtpTimeStamp(inputBuffer.getRtpTimeStamp()); outputBuffer.setFlags(inputBuffer.getFlags()); outputBuffer.setDiscard(inputBuffer.isDiscard()); outputBuffer.setEOM(inputBuffer.isEOM()); outputBuffer.setDuration(inputBuffer.getDuration());
public int process(Buffer inBuffer, Buffer outBuffer) int inLength = inBuffer.getLength(); byte inData[] = (byte[])inBuffer.getData(); int inOffset = inBuffer.getOffset(); boolean pktAdded = false; outBuffer.setData(pktData); outBuffer.setLength(pktData.length); outBuffer.setOffset(0); outBuffer.setTimeStamp(timeStamp); outBuffer.setSequenceNumber(sequenceNumber++); outBuffer.setFlags( outBuffer.getFlags() | Buffer.FLAG_RTP_MARKER); if (inBuffer.isDiscard()) outBuffer.setDiscard(true); reset(); return BUFFER_PROCESSED_OK; Format inFormat = inBuffer.getFormat(); timeStamp = inBuffer.getTimeStamp();
buffer.setData(data); buffer.setFlags(Buffer.FLAG_SYSTEM_TIME); if (format != null) buffer.setFormat(format); buffer.setHeader(null); buffer.setLength(length); buffer.setOffset(0); buffer.setSequenceNumber(sequenceNumber++); buffer.setTimeStamp(bufferTimeStamp);
return BUFFER_PROCESSED_OK; if (inBuffer.isDiscard()) outBuffer.setDiscard(true); reset(); return BUFFER_PROCESSED_OK; Format inFormat = inBuffer.getFormat(); if (inBuffer.getLength() < 3) outBuffer.setDiscard(true); reset(); return BUFFER_PROCESSED_OK; (byte[]) inBuffer.getData(), inBuffer.getOffset(), encFrameLen); Object outData = outBuffer.getData(); byte[] out; = FFmpeg.avcodec_encode_video(avcontext, out, out.length, avFrame); outBuffer.setData(out); outBuffer.setLength(outputLength); outBuffer.setOffset(0); outBuffer.setTimeStamp(inBuffer.getTimeStamp());
/** * 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; } }
if (in.isDiscard() || frameProcessingControl.isMinimalProcessing()) out.setDiscard(true); return BUFFER_PROCESSED_OK; VideoFormat inFormat = (VideoFormat) in.getFormat(); Format thisInFormat = getInputFormat(); outFormat = (VideoFormat) out.getFormat(); if (outFormat == null) return BUFFER_PROCESSED_FAILED; Object dst = out.getData(); Object src = in.getData(); int srcFmt; long srcPicture; out.setData(dst); out.setDuration(in.getDuration()); out.setFlags(in.getFlags()); out.setFormat(outFormat); out.setLength(dstLength); out.setOffset(0); out.setSequenceNumber(in.getSequenceNumber()); out.setTimeStamp(in.getTimeStamp()); int inFlags = in.getFlags(); int outFlags = out.getFlags();
Format inFormat = inBuf.getFormat(); long seqNo = inBuf.getSequenceNumber(); if ((Buffer.FLAG_SILENCE & inBuf.getFlags()) != 0) if (decodeFEC && ((inBuf.getFlags() & Buffer.FLAG_SKIP_FEC) != 0)) byte[] in = (byte[]) inBuf.getData(); int inOffset = inBuf.getOffset(); int inLength = inBuf.getLength(); int outOffset = 0; int outLength = 0; outBuf.setFlags( outBuf.getFlags() | (((in == null) || (inLength == 0)) ? BUFFER_FLAG_PLC : BUFFER_FLAG_FEC)); long ts = inBuf.getRtpTimeStamp(); ts -= lostSeqNoCount * lastFrameSizeInSamplesPerChannel; if (ts < 0) ts += 1L<<32; outBuf.setRtpTimeStamp(ts); outBuf.setFlags( outBuf.getFlags() & ~(BUFFER_FLAG_FEC | BUFFER_FLAG_PLC));
protected int doProcess(Buffer inBuffer, Buffer outBuffer) long sequenceNumber = inBuffer.getSequenceNumber(); byte[] in = (byte[]) inBuffer.getData(); int inLength = inBuffer.getLength(); int inOffset = inBuffer.getOffset(); int outOffset = outBuffer.getOffset(); outBuffer.setLength(outOffset + dataLength); outBuffer.setSequenceNumber(sequenceNumber); if ((inBuffer.getFlags() & Buffer.FLAG_RTP_MARKER) != 0) outBuffer.setFlags(outBuffer.getFlags() | Buffer.FLAG_RTP_MARKER); outBuffer.setOffset(0); return BUFFER_PROCESSED_OK; outBuffer.setOffset(outOffset + dataLength); return OUTPUT_BUFFER_NOT_FILLED;
if(inputBuffer.isDiscard() || ((inLen = inputBuffer.getLength()) == 0)) outputBuffer.setDiscard(true); return BUFFER_PROCESSED_OK; int inOff = inputBuffer.getOffset(); int len = (inLen <= MAX_SIZE) ? inLen : MAX_SIZE; output = validateByteArraySize(outputBuffer, offset + len, true); System.arraycopy( inputBuffer.getData(), inOff, output, offset, len); outputBuffer.setFormat(new VideoFormat(Constants.VP8_RTP)); outputBuffer.setOffset(offset); outputBuffer.setLength(len + pd.length); outputBuffer.setFlags(outputBuffer.getFlags() | Buffer.FLAG_RTP_MARKER); return BUFFER_PROCESSED_OK; inputBuffer.setLength(inLen - MAX_SIZE); inputBuffer.setOffset(inOff + MAX_SIZE); return INPUT_BUFFER_NOT_CONSUMED;
VPX.img_get_d_w(img), VPX.img_get_d_h(img), ((VideoFormat) inputBuffer.getFormat()).getFrameRate()); outputBuffer.setFormat(outputFormat); outputBuffer.setData(avframe); outputBuffer.setLength(width * height * 3 / 2); outputBuffer.setTimeStamp(inputBuffer.getTimeStamp()); byte[] buf = (byte[])inputBuffer.getData(); int buf_offset = inputBuffer.getOffset(); int buf_size = inputBuffer.getLength(); logger.debug("Discarding a frame, codec_decode() error: " + VPX.codec_err_to_string(ret)); outputBuffer.setDiscard(true); return BUFFER_PROCESSED_OK; outputBuffer.setDiscard(true); return BUFFER_PROCESSED_OK; VPX.img_get_d_w(img), VPX.img_get_d_h(img), ((VideoFormat) inputBuffer.getFormat()).getFrameRate()); outputBuffer.setFormat(outputFormat); outputBuffer.setData(avframe);
buffer.setDiscard(false); buffer.setFlags(0); buffer.setLength(0); buffer.setOffset(0); short[] samples; if (buffer.isDiscard()) sampleCount = buffer.getLength(); if (sampleCount <= 0) samples = (short[]) buffer.getData(); buffer.setData(null); = ((buffer.getFlags() & Buffer.FLAG_SILENCE) == 0) ? samples : null; inSampleDesc.setTimeStamp(buffer.getTimeStamp());
byte[] inData = (byte[])inBuffer.getData(); int inOffset = inBuffer.getOffset(); int inLength = inBuffer.getLength(); outBuffer.setDiscard(true); return BUFFER_PROCESSED_FAILED; //XXX: FAILED or OK? int inSeq = (int) inBuffer.getSequenceNumber(); long inRtpTimestamp = inBuffer.getRtpTimeStamp(); int inPictureId = VP8PayloadDescriptor.getPictureId(inData, inOffset); boolean inMarker = (inBuffer.getFlags() & Buffer.FLAG_RTP_MARKER) != 0; boolean inIsStartOfFrame = VP8PayloadDescriptor.isStartOfFrame(inData, inOffset); outBuffer.setDiscard(true); return BUFFER_PROCESSED_OK; outBuffer.setDiscard(true); return BUFFER_PROCESSED_OK; 0, inPayloadLength); outBuffer.setOffset(0); outBuffer.setLength(inPayloadLength); outBuffer.setRtpTimeStamp(inBuffer.getRtpTimeStamp()); logger.info("(Probable) duplicate packet detected, discarding " + inSeq); outBuffer.setDiscard(true);
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 outLength = calculateOutputSize(inputBuffer.getLength()); byte[] inpData = (byte[]) inputBuffer.getData(); byte[] outData = validateByteArraySize(outputBuffer, outLength); convert(inpData, inputBuffer.getOffset(), inpLength, outData, 0); updateOutput(outputBuffer, outputFormat, outLength, 0); return BUFFER_PROCESSED_OK; } }
int outLength = resamplerOutBuffer.getLength(); resamplerOutBuffer.setLength(0); resamplerOutBuffer.setOffset(outLength); try resamplerOutBuffer.setDiscard(false); resamplerInBuffer.setLength(inLength); resamplerInBuffer.setOffset(0); resampled = resamplerOutBuffer.getLength(); outLength = resamplerOutBuffer.getOffset() + resampled; resamplerOutBuffer.setLength(outLength); resamplerOutBuffer.setOffset(0);