ribs2spare
ribs2spare

Reputation: 241

How does Android MediaCodec create a decoder?

I've noticed that java/android/media has a method called createDecoderByType() that is supposed to return a MediaCodec object. However, when I look at the MediaCodec.java source code on GoogleGit, I can't really see how the actual decoder is generated. Here is the code for that method:

    public static MediaCodec createDecoderByType(String type) {
    return new MediaCodec(type, true /* nameIsType */, false /* encoder */);
}

Then when I look at the constructor to see what is returned, this is what I see:

    private MediaCodec(
        String name, boolean nameIsType, boolean encoder) {
    native_setup(name, nameIsType, encoder);
}

Okay, great. Let's look at native_setup(). Here's the definition:

    private native final void native_setup(
        String name, boolean nameIsType, boolean encoder);

That function appears to have no body!

At first I assumed that this meant the method would be defined in a child class. But I am seeing this method called directly on MediaCodec itself in other functioning source code.

So my question is: Is there any way I can trace down and see how Android creates a decoder of a given type depending on the environment and parameters? I seem to have hit a dead end, and no amount of Googling is giving me any helpful results.

Upvotes: 0

Views: 730

Answers (1)

ribs2spare
ribs2spare

Reputation: 241

Just found the answer to this the minute after I posted it...of course. The issue is with the native keyword. From GeeksforGeeks:

The native keyword is applied to a method to indicates that the method is implemented in native code using JNI (Java Native Interface).

This means that it can be written in another language such as C or C++, or invoke hardware stuff. The MediaCodec JNI code that I was looking for is here.

Upvotes: 1

Related Questions