private void ProcessBuffer(boolean bFinalize) throws IOException { if (m_pBuffer == null) throw new JMACException("Error Undefined"); // process as much as possible int nThreshold = (bFinalize) ? 0 : m_spAPECompressCreate.GetFullFrameBytes(); while ((m_nBufferTail - m_nBufferHead) >= nThreshold) { int nFrameBytes = Math.min(m_spAPECompressCreate.GetFullFrameBytes(), m_nBufferTail - m_nBufferHead); if (nFrameBytes == 0) break; pByteReader.reset(m_pBuffer, m_nBufferHead); m_spAPECompressCreate.EncodeFrame(pByteReader, nFrameBytes); m_nBufferHead += nFrameBytes; } // shift the buffer if (m_nBufferHead != 0) { int nBytesLeft = m_nBufferTail - m_nBufferHead; if (nBytesLeft != 0) System.arraycopy(m_pBuffer, m_nBufferHead, m_pBuffer, 0, nBytesLeft); m_nBufferTail -= m_nBufferHead; m_nBufferHead = 0; } }