/** * @param inputBuffers An array of nulls that will be used to store references to input buffers. * @param outputBuffers An array of nulls that will be used to store references to output buffers. */ protected SimpleDecoder(I[] inputBuffers, O[] outputBuffers) { lock = new Object(); queuedInputBuffers = new ArrayDeque<>(); queuedOutputBuffers = new ArrayDeque<>(); availableInputBuffers = inputBuffers; availableInputBufferCount = inputBuffers.length; for (int i = 0; i < availableInputBufferCount; i++) { availableInputBuffers[i] = createInputBuffer(); } availableOutputBuffers = outputBuffers; availableOutputBufferCount = outputBuffers.length; for (int i = 0; i < availableOutputBufferCount; i++) { availableOutputBuffers[i] = createOutputBuffer(); } decodeThread = new Thread() { @Override public void run() { SimpleDecoder.this.run(); } }; decodeThread.start(); }