@Implements(value=android.media.MediaCodec.class, minSdk=16, looseSignatures=true) public class ShadowMediaCodec extends Object
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.
| Modifier and Type | Class | Description |
|---|---|---|
static class |
ShadowMediaCodec.CodecConfig |
Configuration that can be supplied to
ShadowMediaCodec to simulate actual
encoding/decoding. |
protected static class |
ShadowMediaCodec.ShadowCodecBuffer |
Shadows CodecBuffer to prevent attempting to free non-direct ByteBuffer objects.
|
| Constructor | Description |
|---|---|
ShadowMediaCodec() |
| 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 default
MediaFormat if not set via getOutputFormat(). |
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 |
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.
|
public static void addEncoder(String type, ShadowMediaCodec.CodecConfig config)
public static void addDecoder(String type, ShadowMediaCodec.CodecConfig config)
public static void clearCodecs()
@Implementation protected void __constructor__(String name, boolean nameIsType, boolean encoder)
@Implementation(minSdk=21) protected void native_setCallback(MediaCodec.Callback callback)
@Implementation(minSdk=21, maxSdk=25) protected void native_configure(String[] keys, Object[] values, Surface surface, MediaCrypto crypto, int flags)
@Implementation(minSdk=26) protected void native_configure(Object keys, Object values, Object surface, Object crypto, Object descramblerBinder, Object flags)
@Implementation(minSdk=21) protected void native_start()
@Implementation(minSdk=21) protected void native_flush()
@Implementation protected ByteBuffer[] getBuffers(boolean input)
@Implementation(minSdk=21) protected ByteBuffer getBuffer(boolean input, int index)
protected int native_dequeueInputBuffer(long timeoutUs)
@Implementation(minSdk=21) protected void native_queueInputBuffer(int index, int offset, int size, long presentationTimeUs, int flags)
@Implementation(minSdk=21) protected int native_dequeueOutputBuffer(MediaCodec.BufferInfo info, long timeoutUs)
@Implementation(minSdk=21) protected void invalidateByteBuffer(ByteBuffer[] buffers, int index)
@Implementation(minSdk=21) protected void validateInputByteBuffer(ByteBuffer[] buffers, int index)
@Implementation(minSdk=21) protected void revalidateByteBuffer(ByteBuffer[] buffers, int index)
@Implementation(minSdk=21) protected void validateOutputByteBuffer(ByteBuffer[] buffers, int index, MediaCodec.BufferInfo info)
@Implementation(minSdk=21) protected void invalidateByteBuffers(ByteBuffer[] buffers)
@Implementation(minSdk=21) protected void freeByteBuffer(ByteBuffer buffer)
@Implementation protected MediaFormat getOutputFormat()
MediaFormat if not set via getOutputFormat().