mirror of
https://github.com/go-gst/go-gst.git
synced 2025-10-04 15:42:52 +08:00
53 lines
1.3 KiB
Go
53 lines
1.3 KiB
Go
package gst
|
|
|
|
// #include "gst.go.h"
|
|
import "C"
|
|
import (
|
|
"fmt"
|
|
"unsafe"
|
|
)
|
|
|
|
// MapInfo is a go representation of a GstMapInfo.
|
|
type MapInfo struct {
|
|
ptr *C.GstMapInfo
|
|
unmapFunc func()
|
|
Memory unsafe.Pointer // A pointer to the GstMemory object
|
|
Flags MapFlags
|
|
Data unsafe.Pointer // A pointer to the actual data
|
|
Size int64
|
|
MaxSize int64
|
|
}
|
|
|
|
// MapBuffer will retrieve the map info for the given buffer. Unmap after usage.
|
|
func MapBuffer(buffer *Buffer) *MapInfo {
|
|
var mapInfo C.GstMapInfo
|
|
C.gst_buffer_map(
|
|
(*C.GstBuffer)(buffer.Instance()),
|
|
(*C.GstMapInfo)(unsafe.Pointer(&mapInfo)),
|
|
C.GST_MAP_READ,
|
|
)
|
|
return wrapMapInfo(&mapInfo, func() {
|
|
C.gst_buffer_unmap(buffer.Instance(), (*C.GstMapInfo)(unsafe.Pointer(&mapInfo)))
|
|
})
|
|
}
|
|
|
|
// Unmap will unmap the MapInfo.
|
|
func (m *MapInfo) Unmap() {
|
|
if m.unmapFunc == nil {
|
|
fmt.Println("GO-GST-WARNING: Called Unmap() on unwrapped MapInfo")
|
|
}
|
|
m.unmapFunc()
|
|
}
|
|
|
|
func wrapMapInfo(mapInfo *C.GstMapInfo, unmapFunc func()) *MapInfo {
|
|
return &MapInfo{
|
|
ptr: mapInfo,
|
|
unmapFunc: unmapFunc,
|
|
Memory: unsafe.Pointer(mapInfo.memory),
|
|
Flags: MapFlags(mapInfo.flags),
|
|
Data: unsafe.Pointer(mapInfo.data),
|
|
Size: int64(mapInfo.size),
|
|
MaxSize: int64(mapInfo.maxsize),
|
|
}
|
|
}
|