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 ofMediaCodecwhich 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
MediaFormatwith 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
All Methods Static Methods Instance Methods Concrete Methods 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.
-
-
-
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 defaultMediaFormatif not set viagetOutputFormat().
-
-