@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()
.