Class 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.

    • Constructor Detail

      • ShadowMediaCodec

        public ShadowMediaCodec()
    • Method Detail

      • clearCodecs

        public static void clearCodecs()
        Clears any previously added encoders and decoders.
      • __constructor__

        @Implementation
        protected void __constructor__​(String name,
                                       boolean nameIsType,
                                       boolean encoder)
      • 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.
      • 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.