これが私の状況です:
av_free_packetffmpeg の関数を呼び出したい:
// avformat.h
static inline void av_free_packet(AVPacket *pkt)
{
if (pkt && pkt->destruct)
pkt->destruct(pkt);
}
残念ながら、この関数はstatic inlineであるため、リンクされたライブラリには実際には表示されません。
ただし、これは Haskell で再実装できる非常に単純な関数です。そして、それは私がどのように行うべきか理解できないものです. 部分的な試行 (.hsc) は次のとおりです。
av_free_packet :: Ptr AVPacket -> IO ()
av_free_packet pkt =
when (nullPtr /= pkt) $ do
destruct <- (#peek AVPacket, destruct) pkt :: IO (FunPtr (Ptr AVPacket -> IO ()))
when (nullFunPtr /= destruct) $ funPtrToFun destruct pkt
funPtrToFun :: FunPtr a -> a
funPtrToFun = ?
今のところ、この関数を C で実装することに頼ることができます (元の関数を呼び出すだけです)。