Interface MediaCodecAdapter
-
- All Known Implementing Classes:
SynchronousMediaCodecAdapter
public interface MediaCodecAdapter
AbstractsMediaCodec
operations.MediaCodecAdapter
offers a common interface to interact with aMediaCodec
regardless of the mode theMediaCodec
is operating in.
-
-
Nested Class Summary
Nested Classes Modifier and Type Interface Description static class
MediaCodecAdapter.Configuration
Configuration parameters for aMediaCodecAdapter
.static interface
MediaCodecAdapter.Factory
A factory forMediaCodecAdapter
instances.static interface
MediaCodecAdapter.OnFrameRenderedListener
Listener to be called when an output frame has rendered on the output surface.
-
Method Summary
All Methods Instance Methods Abstract Methods Modifier and Type Method Description int
dequeueInputBufferIndex()
Returns the next available input buffer index from the underlyingMediaCodec
orMediaCodec.INFO_TRY_AGAIN_LATER
if no such buffer exists.int
dequeueOutputBufferIndex(MediaCodec.BufferInfo bufferInfo)
Returns the next available output buffer index from the underlyingMediaCodec
.void
flush()
Flushes the adapter and the underlyingMediaCodec
.ByteBuffer
getInputBuffer(int index)
Returns a writable ByteBuffer object for a dequeued input buffer index.PersistableBundle
getMetrics()
Returns metrics data about the current codec instance.ByteBuffer
getOutputBuffer(int index)
Returns a read-only ByteBuffer for a dequeued output buffer index.MediaFormat
getOutputFormat()
Gets theMediaFormat
that was output from theMediaCodec
.boolean
needsReconfiguration()
Whether the adapter needs to be reconfigured before it is used.void
queueInputBuffer(int index, int offset, int size, long presentationTimeUs, int flags)
Submit an input buffer for decoding.void
queueSecureInputBuffer(int index, int offset, CryptoInfo info, long presentationTimeUs, int flags)
Submit an input buffer that is potentially encrypted for decoding.void
release()
Releases the adapter and the underlyingMediaCodec
.void
releaseOutputBuffer(int index, boolean render)
Returns the buffer to theMediaCodec
.void
releaseOutputBuffer(int index, long renderTimeStampNs)
Updates the output buffer's surface timestamp and sends it to theMediaCodec
to render it on the output surface.void
setOnFrameRenderedListener(MediaCodecAdapter.OnFrameRenderedListener listener, Handler handler)
Registers a callback to be invoked when an output frame is rendered on the output surface.void
setOutputSurface(Surface surface)
Dynamically sets the output surface of aMediaCodec
.void
setParameters(Bundle params)
Communicate additional parameter changes to theMediaCodec
instance.void
setVideoScalingMode(@com.google.android.exoplayer2.C.VideoScalingMode int scalingMode)
Specifies the scaling mode to use, if a surface was specified when the codec was created.
-
-
-
Method Detail
-
dequeueInputBufferIndex
int dequeueInputBufferIndex()
Returns the next available input buffer index from the underlyingMediaCodec
orMediaCodec.INFO_TRY_AGAIN_LATER
if no such buffer exists.- Throws:
IllegalStateException
- If the underlyingMediaCodec
raised an error.
-
dequeueOutputBufferIndex
int dequeueOutputBufferIndex(MediaCodec.BufferInfo bufferInfo)
Returns the next available output buffer index from the underlyingMediaCodec
. If the next available output is a MediaFormat change, it will returnMediaCodec.INFO_OUTPUT_FORMAT_CHANGED
and you should callgetOutputFormat()
to get the format. If there is no available output, this method will returnMediaCodec.INFO_TRY_AGAIN_LATER
.- Throws:
IllegalStateException
- If the underlyingMediaCodec
raised an error.
-
getOutputFormat
MediaFormat getOutputFormat()
Gets theMediaFormat
that was output from theMediaCodec
.Call this method if a previous call to
dequeueOutputBufferIndex(android.media.MediaCodec.BufferInfo)
returnedMediaCodec.INFO_OUTPUT_FORMAT_CHANGED
.
-
getInputBuffer
@Nullable ByteBuffer getInputBuffer(int index)
Returns a writable ByteBuffer object for a dequeued input buffer index.- See Also:
MediaCodec.getInputBuffer(int)
-
getOutputBuffer
@Nullable ByteBuffer getOutputBuffer(int index)
Returns a read-only ByteBuffer for a dequeued output buffer index.- See Also:
MediaCodec.getOutputBuffer(int)
-
queueInputBuffer
void queueInputBuffer(int index, int offset, int size, long presentationTimeUs, int flags)
Submit an input buffer for decoding.The
index
must be an input buffer index that has been obtained from a previous call todequeueInputBufferIndex()
.
-
queueSecureInputBuffer
void queueSecureInputBuffer(int index, int offset, CryptoInfo info, long presentationTimeUs, int flags)
Submit an input buffer that is potentially encrypted for decoding.The
index
must be an input buffer index that has been obtained from a previous call todequeueInputBufferIndex()
.This method behaves like
MediaCodec.queueSecureInputBuffer(int, int, android.media.MediaCodec.CryptoInfo, long, int)
, with the difference thatinfo
is of typeCryptoInfo
and notMediaCodec.CryptoInfo
.
-
releaseOutputBuffer
void releaseOutputBuffer(int index, boolean render)
Returns the buffer to theMediaCodec
. If theMediaCodec
was configured with an output surface, settingrender
totrue
will first send the buffer to the output surface. The surface will release the buffer back to the codec once it is no longer used/displayed.
-
releaseOutputBuffer
@RequiresApi(21) void releaseOutputBuffer(int index, long renderTimeStampNs)
Updates the output buffer's surface timestamp and sends it to theMediaCodec
to render it on the output surface. If theMediaCodec
is not configured with an output surface, this call will simply return the buffer to theMediaCodec
.
-
flush
void flush()
Flushes the adapter and the underlyingMediaCodec
.
-
release
void release()
Releases the adapter and the underlyingMediaCodec
.
-
setOnFrameRenderedListener
@RequiresApi(23) void setOnFrameRenderedListener(MediaCodecAdapter.OnFrameRenderedListener listener, Handler handler)
Registers a callback to be invoked when an output frame is rendered on the output surface.
-
setOutputSurface
@RequiresApi(23) void setOutputSurface(Surface surface)
Dynamically sets the output surface of aMediaCodec
.- See Also:
MediaCodec.setOutputSurface(Surface)
-
setParameters
@RequiresApi(19) void setParameters(Bundle params)
Communicate additional parameter changes to theMediaCodec
instance.- See Also:
MediaCodec.setParameters(Bundle)
-
setVideoScalingMode
void setVideoScalingMode(@VideoScalingMode @com.google.android.exoplayer2.C.VideoScalingMode int scalingMode)
Specifies the scaling mode to use, if a surface was specified when the codec was created.- See Also:
MediaCodec.setVideoScalingMode(int)
-
needsReconfiguration
boolean needsReconfiguration()
Whether the adapter needs to be reconfigured before it is used.
-
getMetrics
@RequiresApi(26) PersistableBundle getMetrics()
Returns metrics data about the current codec instance.- See Also:
MediaCodec.getMetrics()
-
-