use of org.red5.app.sip.codecs.asao.ByteStream in project bigbluebutton by bigbluebutton.
the class NellyToPcmTranscoder method fillRtpPacketBuffer.
private int fillRtpPacketBuffer(byte[] asaoBuffer, byte[] transcodedData, int dataOffset) {
int copyingSize = 0;
int finalCopySize = 0;
byte[] codedBuffer = new byte[sipCodec.getOutgoingEncodedFrameSize()];
try {
if ((tempBufferRemaining + encodingOffset) >= sipCodec.getOutgoingDecodedFrameSize()) {
copyingSize = encodingBuffer.length - encodingOffset;
System.arraycopy(tempBuffer, tempBuffer.length - tempBufferRemaining, encodingBuffer, encodingOffset, copyingSize);
encodingOffset = sipCodec.getOutgoingDecodedFrameSize();
tempBufferRemaining -= copyingSize;
finalCopySize = sipCodec.getOutgoingDecodedFrameSize();
} else {
if (tempBufferRemaining > 0) {
System.arraycopy(tempBuffer, tempBuffer.length - tempBufferRemaining, encodingBuffer, encodingOffset, tempBufferRemaining);
encodingOffset += tempBufferRemaining;
finalCopySize += tempBufferRemaining;
tempBufferRemaining = 0;
}
// Decode new asao packet.
asao_buffer_processed = true;
ByteStream audioStream = new ByteStream(asaoBuffer, 1, NELLYMOSER_ENCODED_PACKET_SIZE);
decoderMap = decoder.decode(decoderMap, audioStream.bytes, 1, tempBuffer, 0);
//tempBuffer = ResampleUtils.normalize(tempBuffer, 256); // normalise volume
tempBufferRemaining = tempBuffer.length;
if (tempBuffer.length <= 0) {
log.error("Asao decoder Error.");
}
// Try to complete the encodingBuffer with necessary data.
if ((encodingOffset + tempBufferRemaining) > sipCodec.getOutgoingDecodedFrameSize()) {
copyingSize = encodingBuffer.length - encodingOffset;
} else {
copyingSize = tempBufferRemaining;
}
System.arraycopy(tempBuffer, 0, encodingBuffer, encodingOffset, copyingSize);
encodingOffset += copyingSize;
tempBufferRemaining -= copyingSize;
finalCopySize += copyingSize;
}
if (encodingOffset == encodingBuffer.length) {
int encodedBytes = sipCodec.pcmToCodec(encodingBuffer, codedBuffer);
if (encodedBytes == sipCodec.getOutgoingEncodedFrameSize()) {
System.arraycopy(codedBuffer, 0, transcodedData, dataOffset, codedBuffer.length);
} else {
//println( "fillRtpPacketBuffer", "Failure encoding buffer." );
}
}
} catch (Exception e) {
log.error("Exception - " + e.toString());
e.printStackTrace();
}
return finalCopySize;
}
use of org.red5.app.sip.codecs.asao.ByteStream in project bigbluebutton by bigbluebutton.
the class PcmToNellyTranscoder method forwardAudioToFlashPlayer.
/**
* Fills the tempBuffer with necessary PCM's floats and encodes
* the audio to be sent to FlashPlayer.
*/
private void forwardAudioToFlashPlayer(float[] pcmBuffer) {
int pcmBufferOffset = 0;
int copySize = 0;
boolean pcmBufferProcessed = false;
do {
if ((tempBuffer.length - tempBufferOffset) <= (pcmBuffer.length - pcmBufferOffset)) {
copySize = tempBuffer.length - tempBufferOffset;
} else {
copySize = pcmBuffer.length - pcmBufferOffset;
}
System.arraycopy(pcmBuffer, pcmBufferOffset, tempBuffer, tempBufferOffset, copySize);
tempBufferOffset += copySize;
pcmBufferOffset += copySize;
if (tempBufferOffset == NELLYMOSER_DECODED_PACKET_SIZE) {
ByteStream encodedStream = new ByteStream(NELLYMOSER_ENCODED_PACKET_SIZE);
encoderMap = CodecImpl.encode(encoderMap, tempBuffer, encodedStream.bytes);
pushAudio(encodedStream.bytes);
tempBufferOffset = 0;
}
if (pcmBufferOffset == pcmBuffer.length) {
pcmBufferProcessed = true;
}
} while (!pcmBufferProcessed);
}
Aggregations