Files
ffmpeg-dev-go/ffmpeg_pointer.go
2023-10-17 14:10:45 +08:00

43 lines
574 B
Go

package ffmpeg
/*
#include <stdlib.h>
*/
import "C"
import (
"sync"
"unsafe"
)
var (
pointerSyncMap sync.Map
)
func PointerStore(v interface{}) unsafe.Pointer {
if v == nil {
return nil
}
ptr := C.malloc(C.size_t(1))
if ptr == nil {
panic("allocate memory failed")
}
pointerSyncMap.Store(ptr, v)
return ptr
}
func PointerLoad(ptr unsafe.Pointer) (v interface{}) {
if ptr == nil {
return nil
}
v, _ = pointerSyncMap.Load(ptr)
return v
}
func PointerDelete(ptr unsafe.Pointer) {
if ptr == nil {
return
}
pointerSyncMap.Delete(ptr)
C.free(ptr)
}