如何从python ctypes调用ffmeg libavcodec av_jni_set_java_vm

问题描述 投票:0回答:1

我需要从 ffmpeg libavcodec.so 调用

av_jni_set_java_vm
函数https://ffmpeg.org/doxygen/trunk/jni_8h.html.

如 ffmpeg 文档中所述,它采用

void *vm
作为参数。

我在 android (Python Kivy) 上使用 SDL2,并且我有

SDL_AndroidGetJNIEnv
函数 https://wiki.libsdl.org/SDL2/SDL_AndroidGetJNIEnv

当我调用

SDL_AndroidGetJNIEnv
时,我得到525818896256(例如)JNI的地址。

我的理解是我应该用这个地址打电话给

av_jni_set_java_vm
,但我不明白该怎么做。

我是这样做的:

av = ctypes.CDLL('libavcodec.so')
jni = SDL_AndroidGetJNIEnv()
av.av_jni_set_java_vm(ctypes.cast(jni, ctypes.c_void_p).value, None)
python java-native-interface ctypes sdl-2 libavcodec
1个回答
0
投票

设置参数类型和返回类型。返回值默认为

int
,在 64 位系统上对于
void*
来说太短了:

av = ctypes.CDLL('libavcodec.so')
av.SDL_AndroidGetJNIEnv.argtypes = ()
av.SDL_AndroidGetJNIEnv.restype = ctypes.c_void_p
jni = SDL_AndroidGetJNIEnv()

对其他函数执行相同的操作。那么你就不必投射任何东西了。

© www.soinside.com 2019 - 2024. All rights reserved.