@UnstableApi
public abstract class SimpleDecoder<I extends DecoderInputBuffer, O extends DecoderOutputBuffer, E extends DecoderException> implements Decoder

Known direct subclasses
BitmapFactoryImageDecoder

An image decoder that uses BitmapFactory to decode images.

SimpleSubtitleDecoder

Base class for subtitle parsers that use their own decode thread.


Base class for Decoders that use their own decode thread and decode each input buffer immediately into a corresponding output buffer.

Summary

Protected constructors

SimpleDecoder(I[] inputBuffers, O[] outputBuffers)

Public methods

final @Nullable I

Dequeues the next input buffer to be filled and queued to the decoder.

final @Nullable O

Dequeues the next output buffer from the decoder.

final void

Flushes the decoder.

final void
queueInputBuffer(I inputBuffer)

Queues an input buffer to the decoder.

void

Releases the decoder.

final void
setOutputStartTimeUs(long outputStartTimeUs)

Sets the timestamp from which output buffers should be produced, in microseconds.

Protected methods

abstract I

Creates a new input buffer.

abstract O

Creates a new output buffer.

abstract E

Creates an exception to propagate for an unexpected decode error.

abstract @Nullable E
decode(I inputBuffer, O outputBuffer, boolean reset)

Decodes the inputBuffer and stores any decoded output in outputBuffer.

final boolean

Returns whether a sample time is greater or equal to the output start time, if set.

void

Releases an output buffer back to the decoder.

final void

Sets the initial size of each input buffer.

Inherited methods

From androidx.media3.decoder.Decoder
abstract String

Returns the name of the decoder.

Protected constructors

SimpleDecoder

protected SimpleDecoder(I[] inputBuffers, O[] outputBuffers)
Parameters
I[] inputBuffers

An array of nulls that will be used to store references to input buffers.

O[] outputBuffers

An array of nulls that will be used to store references to output buffers.

Public methods

dequeueInputBuffer

public final @NullabledequeueInputBuffer()

Dequeues the next input buffer to be filled and queued to the decoder.

Returns
@Nullable I

The input buffer, which will have been cleared, or null if a buffer isn't available.

Throws
E

If a decoder error has occurred.

androidx.media3.decoder.SimpleDecoder

dequeueOutputBuffer

public final @NullabledequeueOutputBuffer()

Dequeues the next output buffer from the decoder.

Returns
@Nullable O

The output buffer, or null if an output buffer isn't available.

Throws
E

If a decoder error has occurred.

androidx.media3.decoder.SimpleDecoder

flush

public final void flush()

Flushes the decoder. Ownership of dequeued input buffers is returned to the decoder. The caller is still responsible for releasing any dequeued output buffers.

queueInputBuffer

public final void queueInputBuffer(I inputBuffer)

Queues an input buffer to the decoder.

Parameters
I inputBuffer

The input buffer.

Throws
E

If a decoder error has occurred.

androidx.media3.decoder.SimpleDecoder

release

@CallSuper
public void release()

Releases the decoder. Must be called when the decoder is no longer needed.

setOutputStartTimeUs

public final void setOutputStartTimeUs(long outputStartTimeUs)

Sets the timestamp from which output buffers should be produced, in microseconds.

Any decoded buffer with a timestamp less than outputStartTimeUs should be skipped by the implementation and not made available via dequeueOutputBuffer.

This method must only be called before queuing the first input buffer initially or after flush.

Parameters
long outputStartTimeUs

The time from which output buffer should be produced, in microseconds.

Protected methods

createInputBuffer

protected abstract I createInputBuffer()

Creates a new input buffer.

createOutputBuffer

protected abstract O createOutputBuffer()

Creates a new output buffer.

createUnexpectedDecodeException

protected abstract E createUnexpectedDecodeException(Throwable error)

Creates an exception to propagate for an unexpected decode error.

Parameters
Throwable error

The unexpected decode error.

Returns
E

The exception to propagate.

decode

protected abstract @Nullabledecode(I inputBuffer, O outputBuffer, boolean reset)

Decodes the inputBuffer and stores any decoded output in outputBuffer.

Parameters
I inputBuffer

The buffer to decode.

O outputBuffer

The output buffer to store decoded data. The output buffer will not be made available to dequeue if its timeUs is not at least the output start time or when it's marked with shouldBeSkipped. The output buffer may not have been populated in these cases.

boolean reset

Whether the decoder must be reset before decoding.

Returns
@Nullable E

A decoder exception if an error occurred, or null if decoding was successful.

isAtLeastOutputStartTimeUs

protected final boolean isAtLeastOutputStartTimeUs(long timeUs)

Returns whether a sample time is greater or equal to the output start time, if set.

If this method returns false, the buffer will not be made available as an output buffer.

Parameters
long timeUs

The buffer time, in microseconds.

Returns
boolean

Whether the buffer time is greater or equal to the output start time, or true if the output start time is not set.

releaseOutputBuffer

@CallSuper
protected void releaseOutputBuffer(O outputBuffer)

Releases an output buffer back to the decoder.

Parameters
O outputBuffer

The output buffer being released.

setInitialInputBufferSize

protected final void setInitialInputBufferSize(int size)

Sets the initial size of each input buffer.

This method should only be called before the decoder is used (i.e. before the first call to dequeueInputBuffer.

Parameters
int size

The required input buffer size.