是否可以通过C级使用android API?或者我可以通过C代码使用Codec吗?

时间:2014-03-02 09:39:49

标签: android c video android-ndk mediacodec

我正在构建一个视频系统,其中包含来自摄像头,视频编码和视频多路复用器的视频捕获。

我想在C级使用编码,因为在将数据发送到编码器之前我想要实现一些算法。

在NDK示例中有一个'本地媒体'项目,它在C级别调用OMX函数来进行视频解码和播放,但似乎NDK现在不支持OMX编码,是真?

我在Java级别成功使用了MediaCodec API,如果NDK不支持OMX编码,我可以通过C代码使用MediaCodec API吗?

1 个答案:

答案 0 :(得分:4)

是的,从C代码中可以调用Java方法。 例如,如果我们想调用方法x.doSomething(5),假设x是“com.example.ndk”包中的类MyClass的实例,并且该方法返回void,我们可以使用:

jclass cls = (*env)->FindClass(env, "com/example/ndk/MyClass");

jmethodID mid = (*env)->GetMethodID(env, cls, "doSomething", "(I)V");

(*env)->CallObjectMethod(env, x, mid, 5);

其中:

  • “env”是您在C JNI方法中收到的JNIEnv指针(有关JNIEnv指针和本机方法的信息,请阅读here)。
  • “(I)V”是方法签名,在这种情况下,它表示该方法具有int参数(I),并返回void(V)。
  • “x”是在之前的某个* env函数中获得的jobject(here,您可以找到env指向的所有JNI函数。)