我注意到java/android/media
有一个名为createDecoderByType()
的方法,该方法应该返回一个MediaCodec
对象。但是,当我查看MediaCodec.java
source code on GoogleGit时,我真的看不到实际的解码器是如何生成的。这是该方法的代码:
public static MediaCodec createDecoderByType(String type) {
return new MediaCodec(type, true /* nameIsType */, false /* encoder */);
}
然后,当我查看构造函数以查看返回的内容时,这就是我所看到的:
private MediaCodec(
String name, boolean nameIsType, boolean encoder) {
native_setup(name, nameIsType, encoder);
}
好的,太好了。让我们看一下native_setup()
。这是定义:
private native final void native_setup(
String name, boolean nameIsType, boolean encoder);
该功能似乎没有主体!
首先,我认为这意味着该方法将在子类中定义。但是我看到这种方法在其他功能正常的源代码中直接在MediaCodec
上本身被调用。
所以我的问题是:有什么办法可以追踪并查看Android如何根据环境和参数创建给定类型的解码器?我似乎已经走到了尽头,谷歌搜索没有给我任何有益的结果。
答案 0 :(得分:1)
在我发布它的那一刻,就找到了答案……当然。问题出在native
关键字上。来自GeeksforGeeks:
将native关键字应用于方法,以指示该方法是使用JNI(Java本机接口)以本机代码实现的。
这意味着它可以用其他语言(例如C或C ++)编写,也可以调用硬件。我正在寻找的MediaCodec
JNI代码是here。