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 class
ShadowMediaCodec.CodecConfig
Configuration that can be supplied toShadowMediaCodec
to simulate actual encoding/decoding.protected static class
ShadowMediaCodec.ShadowCodecBuffer
Shadows 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 void
addDecoder(String type, ShadowMediaCodec.CodecConfig config)
Add a fake decoding codec to the Shadow.static void
addEncoder(String type, ShadowMediaCodec.CodecConfig config)
Add a fake encoding codec to the Shadow.static void
clearCodecs()
Clears any previously added encoders and decoders.protected void
freeByteBuffer(ByteBuffer buffer)
Prevents attempting to free non-direct ByteBuffer objects.protected ByteBuffer
getBuffer(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 MediaFormat
getOutputFormat()
Returns a defaultMediaFormat
if not set viagetOutputFormat()
.protected void
invalidateByteBuffer(ByteBuffer[] buffers, int index)
Prevents calling Android-only methods on basic ByteBuffer objects.protected void
invalidateByteBuffers(ByteBuffer[] buffers)
Prevents calling Android-only methods on basic ByteBuffer objects.protected void
native_configure(Object keys, Object values, Object surface, Object crypto, Object descramblerBinder, Object flags)
protected void
native_configure(String[] keys, Object[] values, Surface surface, MediaCrypto crypto, int flags)
protected int
native_dequeueInputBuffer(long timeoutUs)
protected int
native_dequeueOutputBuffer(MediaCodec.BufferInfo info, long timeoutUs)
protected void
native_flush()
Flushes the available output buffers.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.protected void
native_setCallback(MediaCodec.Callback callback)
Saves the callback to allow use inside the shadow.protected void
native_start()
Starts the async encoding process, by first reporting a format change event, and then presenting an input buffer to the callback.protected void
releaseOutputBuffer(int index, boolean renderer)
protected void
releaseOutputBuffer(int index, long renderTimestampNs)
protected void
revalidateByteBuffer(ByteBuffer[] buffers, int index)
Prevents calling Android-only methods on basic ByteBuffer objects.protected void
validateInputByteBuffer(ByteBuffer[] buffers, int index)
Prevents calling Android-only methods on basic ByteBuffer objects.protected void
validateOutputByteBuffer(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 defaultMediaFormat
if not set viagetOutputFormat()
.
-