我正在调用一个名为avformat_alloc_context()的FFMPEG库,该库返回一个指向类型AVFormatContext的指针。AVFormatContext结构是在avformat库中定义的。
显然;这不是一个ctypes默认类型,当我试图将对它的引用传递到代码中的另一个ffmpeg库时,会导致错误。
有没有办法添加库中定义的类?我通读了我在网上能找到的文档,但没能找到这个问题的好答案。
首先需要将AVFormatContext
结构转换为ctypes声明。您可以通过从Structure
类派生来实现这一点。
然后,您需要指定avformat_alloc_context
函数返回一个指向该结构的指针。您指定restype
执行此操作:
avformat_alloc_context.restype = POINTER(AVFormatContext)
然后你可以调用这样的函数:
contextPtr = avformat_alloc_context()
要获取指针的内容,请读取contents
属性:
context = contextPtr.contents
当您完成指针操作时,不要忘记调用avformat_free_context()
。
ctypes文档中详细介绍了这些信息。