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 ofMediaCodec
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)
andaddDecoder(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
All Methods Static Methods Instance Methods Concrete Methods 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.
-
-
-
Method Detail
-
addEncoder
public static void addEncoder(String type, ShadowMediaCodec.CodecConfig config)
Add a fake encoding codec to the Shadow.
-
addDecoder
public static void addDecoder(String type, ShadowMediaCodec.CodecConfig config)
Add a fake decoding codec to the Shadow.
-
clearCodecs
public static void clearCodecs()
Clears any previously added encoders and decoders.
-
__constructor__
@Implementation protected void __constructor__(String name, boolean nameIsType, boolean encoder)
-
native_setCallback
@Implementation(minSdk=21) protected void native_setCallback(MediaCodec.Callback callback)
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
@Implementation(minSdk=26) protected void native_configure(Object keys, Object values, Object surface, Object crypto, Object descramblerBinder, Object flags)
-
native_start
@Implementation(minSdk=21) 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.
-
native_flush
@Implementation(minSdk=21) protected void native_flush()
Flushes the available output buffers.
-
getBuffers
@Implementation protected ByteBuffer[] getBuffers(boolean input)
Returns the shadow buffers used for input or output.
-
getBuffer
@Implementation(minSdk=21) protected ByteBuffer getBuffer(boolean input, int index)
Returns the input or output buffer corresponding to the given index, or null if invalid.
-
native_dequeueInputBuffer
@Implementation(minSdk=21) 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
@Implementation protected void releaseOutputBuffer(int index, boolean renderer)
-
releaseOutputBuffer
@Implementation protected void releaseOutputBuffer(int index, long renderTimestampNs)
-
invalidateByteBuffer
@Implementation(minSdk=21) protected void invalidateByteBuffer(ByteBuffer[] buffers, int index)
Prevents calling Android-only methods on basic ByteBuffer objects.
-
validateInputByteBuffer
@Implementation(minSdk=21) protected void validateInputByteBuffer(ByteBuffer[] buffers, int index)
Prevents calling Android-only methods on basic ByteBuffer objects.
-
revalidateByteBuffer
@Implementation(minSdk=21) protected void revalidateByteBuffer(ByteBuffer[] buffers, int index)
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
@Implementation(minSdk=21) protected void invalidateByteBuffers(ByteBuffer[] buffers)
Prevents calling Android-only methods on basic ByteBuffer objects.
-
freeByteBuffer
@Implementation(minSdk=21) protected void freeByteBuffer(ByteBuffer buffer)
Prevents attempting to free non-direct ByteBuffer objects.
-
getOutputFormat
@Implementation protected MediaFormat getOutputFormat()
Returns a defaultMediaFormat
if not set viagetOutputFormat()
.
-
-