2013-08-01 47 views
0

我正在調用名爲avformat_alloc_context()的FFMPEG庫,該庫返回指向類型AVFormatContext的指針。結構AVFormatContext在avformat庫中定義。如何在使用ctypes調用FFmpeg庫時指定非默認類型

明顯;這不是一個ctypes的默認類型,當我嘗試將其引用傳遞給另一個ffmpeg庫時,會導致錯誤。

是否有添加庫中定義的類的方法?我閱讀了我可以在網上找到的文檔,但無法找到這個問題的好答案。

回答

1

您需要首先將AVFormatContext結構轉換爲ctypes聲明。你通過deriving from the Structure class來做到這一點。

然後,您需要指定avformat_alloc_context函數返回指向該結構的指針。您分配restype這樣做:

avformat_alloc_context.restype = POINTER(AVFormatContext) 

然後,你可以這樣調用該函數:

contextPtr = avformat_alloc_context() 

要獲取指針的內容,閱讀contents屬性:

context = contextPtr.contents 

當您完成指針時,請不要忘記撥打avformat_free_context()

這些信息全部在ctypes documentation中有更詳細的介紹。

+0

好的;我明白我做錯了什麼。我發現了contextPtr = avformat_alloc_context()和context = contextPtr.contents,它給了我一個錯誤信息。我將閱讀駕駛結構類感謝提供頂線。謝謝 –

+0

如果你不說錯誤信息是什麼,我不能幫助。無論如何,這指出你在正確的方式。 –

+0

我剛剛誤解了一些我讀過的東西,給我的印象是我必須指定的是,av_format_context()調用的返回值是一個指針,並且不需要像您提到的那樣定義FFMPEG AvFormatContext結構。 –

相關問題