private void releaseDecoder() { if (decoder == null) { return; } inputBuffer = null; outputBuffer = null; decoder.release(); decoder = null; decoderCounters.decoderReleaseCount++; decoderReinitializationState = REINITIALIZATION_STATE_NONE; decoderReceivedBuffers = false; }
@Override public void release() { owner.releaseOutputBuffer(this); }
/** * Notifies the decode loop if there exists a queued input buffer and an available output buffer * to decode into. * <p> * Should only be called whilst synchronized on the lock object. */ private void maybeNotifyDecodeLoop() { if (canDecodeBuffer()) { lock.notify(); } }
while (!released && !canDecodeBuffer()) { lock.wait(); exception = decode(inputBuffer, outputBuffer, resetDecoder); } catch (RuntimeException e) { exception = createUnexpectedDecodeException(e); } catch (OutOfMemoryError e) { exception = createUnexpectedDecodeException(e); releaseInputBufferInternal(inputBuffer);
/** * @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(); }
@Override public void release() { super.release(); ffmpegRelease(nativeContext); nativeContext = 0; }
@Override protected final void releaseOutputBuffer(SubtitleOutputBuffer buffer) { super.releaseOutputBuffer(buffer); }
@Override public void release() { super.release(); vpxClose(vpxDecContext); }
@Override protected void releaseOutputBuffer(VpxOutputBuffer buffer) { // Decode only frames do not acquire a reference on the internal decoder buffer and thus do not // require a call to vpxReleaseFrame. if (outputMode == OUTPUT_MODE_SURFACE_YUV && !buffer.isDecodeOnly()) { vpxReleaseFrame(vpxDecContext, buffer); } super.releaseOutputBuffer(buffer); }
@Override public void release() { super.release(); opusClose(nativeDecoderContext); }
@Override public void release() { super.release(); decoderJni.release(); }