@Override public final O dequeueOutputBuffer() throws E { synchronized (lock) { maybeThrowException(); if (queuedOutputBuffers.isEmpty()) { return null; } return queuedOutputBuffers.removeFirst(); } }
@Override public final I dequeueInputBuffer() throws E { synchronized (lock) { maybeThrowException(); Assertions.checkState(dequeuedInputBuffer == null); dequeuedInputBuffer = availableInputBufferCount == 0 ? null : availableInputBuffers[--availableInputBufferCount]; return dequeuedInputBuffer; } }
@Override public final void queueInputBuffer(I inputBuffer) throws E { synchronized (lock) { maybeThrowException(); Assertions.checkArgument(inputBuffer == dequeuedInputBuffer); queuedInputBuffers.addLast(inputBuffer); maybeNotifyDecodeLoop(); dequeuedInputBuffer = null; } }