Package org.robolectric.shadows
Class ShadowMediaCodec
java.lang.Object
org.robolectric.shadows.ShadowMediaCodec
@Implements(value=android.media.MediaCodec.class, minSdk=16, looseSignatures=true) public class ShadowMediaCodec extends Object
Implementation of
MediaCodec which supports both asynchronous and
synchronous modes.
By default for any encoded required, a 1 to 1 mapping will be used between the input and
output buffers. Data from a queued input buffer will be copied to the output buffer. In the case
that is it necessary so simulate some form of data compression, a custom encoder or decoder can
be added via addEncoder(String, CodecConfig) and addDecoder(String,
CodecConfig) respectively.
Asynchronous mode: Once the codec is started, a format change will be reported, switching to
an empty MediaFormat with fake codec-specific info. Following this, the
implementation will present an input buffer, which will be copied to an output buffer once
queued, which will be subsequently presented to the callback handler.
-
Nested Class Summary
Nested Classes Modifier and Type Class Description static classShadowMediaCodec.CodecConfigConfiguration that can be supplied toShadowMediaCodecto simulate actual encoding/decoding.protected static classShadowMediaCodec.ShadowCodecBufferShadows CodecBuffer to prevent attempting to free non-direct ByteBuffer objects. -
Constructor Summary
Constructors Constructor Description ShadowMediaCodec() -
Method Summary
Modifier and Type Method Description protected void__constructor__(String name, boolean nameIsType, boolean encoder)static voidaddDecoder(String type, ShadowMediaCodec.CodecConfig config)Add a fake decoding codec to the Shadow.static voidaddEncoder(String type, ShadowMediaCodec.CodecConfig config)Add a fake encoding codec to the Shadow.static voidclearCodecs()Clears any previously added encoders and decoders.protected voidfreeByteBuffer(ByteBuffer buffer)Prevents attempting to free non-direct ByteBuffer objects.protected ByteBuffergetBuffer(boolean input, int index)Returns the input or output buffer corresponding to the given index, or null if invalid.protected ByteBuffer[]getBuffers(boolean input)Returns the shadow buffers used for input or output.protected MediaFormatgetOutputFormat()Returns a defaultMediaFormatif not set viagetOutputFormat().protected voidinvalidateByteBuffer(ByteBuffer[] buffers, int index)Prevents calling Android-only methods on basic ByteBuffer objects.protected voidinvalidateByteBuffers(ByteBuffer[] buffers)Prevents calling Android-only methods on basic ByteBuffer objects.protected voidnative_configure(Object keys, Object values, Object surface, Object crypto, Object descramblerBinder, Object flags)protected voidnative_configure(String[] keys, Object[] values, Surface surface, MediaCrypto crypto, int flags)protected intnative_dequeueInputBuffer(long timeoutUs)protected intnative_dequeueOutputBuffer(MediaCodec.BufferInfo info, long timeoutUs)protected voidnative_flush()Flushes the available output buffers.protected voidnative_queueInputBuffer(int index, int offset, int size, long presentationTimeUs, int flags)Triggers presentation of the corresponding output buffer for the given input buffer, and passes the given metadata as buffer info.protected voidnative_setCallback(MediaCodec.Callback callback)Saves the callback to allow use inside the shadow.protected voidnative_start()Starts the async encoding process, by first reporting a format change event, and then presenting an input buffer to the callback.protected voidreleaseOutputBuffer(int index, boolean renderer)protected voidreleaseOutputBuffer(int index, long renderTimestampNs)protected voidrevalidateByteBuffer(ByteBuffer[] buffers, int index)Prevents calling Android-only methods on basic ByteBuffer objects.protected voidvalidateInputByteBuffer(ByteBuffer[] buffers, int index)Prevents calling Android-only methods on basic ByteBuffer objects.protected voidvalidateOutputByteBuffer(ByteBuffer[] buffers, int index, MediaCodec.BufferInfo info)Prevents calling Android-only methods on basic ByteBuffer objects.
-
Constructor Details
-
ShadowMediaCodec
public ShadowMediaCodec()
-
-
Method Details
-
addEncoder
Add a fake encoding codec to the Shadow. -
addDecoder
Add a fake decoding codec to the Shadow. -
clearCodecs
public static void clearCodecs()Clears any previously added encoders and decoders. -
__constructor__
-
native_setCallback
Saves the callback to allow use inside the shadow. -
native_configure
@Implementation(minSdk=21, maxSdk=25) protected void native_configure(String[] keys, Object[] values, Surface surface, MediaCrypto crypto, int flags) -
native_configure
-
native_start
Starts the async encoding process, by first reporting a format change event, and then presenting an input buffer to the callback. -
native_flush
Flushes the available output buffers. -
getBuffers
Returns the shadow buffers used for input or output. -
getBuffer
Returns the input or output buffer corresponding to the given index, or null if invalid. -
native_dequeueInputBuffer
protected int native_dequeueInputBuffer(long timeoutUs) -
native_queueInputBuffer
@Implementation(minSdk=21) protected void native_queueInputBuffer(int index, int offset, int size, long presentationTimeUs, int flags)Triggers presentation of the corresponding output buffer for the given input buffer, and passes the given metadata as buffer info. -
native_dequeueOutputBuffer
@Implementation(minSdk=21) protected int native_dequeueOutputBuffer(MediaCodec.BufferInfo info, long timeoutUs) -
releaseOutputBuffer
-
releaseOutputBuffer
-
invalidateByteBuffer
Prevents calling Android-only methods on basic ByteBuffer objects. -
validateInputByteBuffer
Prevents calling Android-only methods on basic ByteBuffer objects. -
revalidateByteBuffer
Prevents calling Android-only methods on basic ByteBuffer objects. -
validateOutputByteBuffer
@Implementation(minSdk=21) protected void validateOutputByteBuffer(ByteBuffer[] buffers, int index, MediaCodec.BufferInfo info)Prevents calling Android-only methods on basic ByteBuffer objects. Replicates existing behavior adjusting buffer positions and limits. -
invalidateByteBuffers
Prevents calling Android-only methods on basic ByteBuffer objects. -
freeByteBuffer
Prevents attempting to free non-direct ByteBuffer objects. -
getOutputFormat
Returns a defaultMediaFormatif not set viagetOutputFormat().
-