Das ist meine Situation:
Ich würde gerne ffmpeg's av_free_packet
función:
// avformat.h
static inline void av_free_packet(AVPacket *pkt)
{
if (pkt && pkt->destruct)
pkt->destruct(pkt);
}
Aber leider ist diese Funktion static inline
und erscheint daher nicht wirklich in der verlinkten Bibliothek.
Es handelt sich jedoch um eine sehr einfache Funktion, die ich in Haskell neu implementieren könnte. Und das ist es, was ich nicht herausfinden kann, wie man es macht. Hier ist ein teilweiser Versuch (.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 = ?
Für jetzt könnte ich auf die Implementierung dieser Funktion in C (durch einfaches Aufrufen des Originals) zurückgreifen, aber es scheint mir, dass der Aufruf von Funktionszeigern irgendwie möglich sein sollte