mirror of
https://github.com/go-gst/go-gst.git
synced 2025-10-06 08:27:03 +08:00
improve meta callback implementation
This commit is contained in:
@@ -58,7 +58,13 @@ func goBusFunc(bus *C.GstBus, cMsg *C.GstMessage, userData C.gpointer) C.gboolea
|
||||
}
|
||||
|
||||
func getMetaInfoCbFuncs(meta *C.GstMeta) *MetaInfoCallbackFuncs {
|
||||
return registeredMetas[glib.Type(meta.info._type)]
|
||||
gapi := glib.Type(meta.info.api)
|
||||
gtype := glib.Type(meta.info._type)
|
||||
typeCbs := registeredMetas[gapi]
|
||||
if typeCbs == nil {
|
||||
return nil
|
||||
}
|
||||
return typeCbs[gtype.Name()]
|
||||
}
|
||||
|
||||
//export goMetaFreeFunc
|
||||
|
@@ -188,7 +188,7 @@ func (b *Buffer) Map() *MapInfo {
|
||||
//
|
||||
// Example
|
||||
//
|
||||
// metaInfo := gst.RegisterMeta(glib.TypeFromName("GstObject"), "my-meta", 1024, &gst.MetaInfoCallbackFuncs{
|
||||
// metaInfo := gst.RegisterMeta(glib.TypeFromName("MyObjectType"), "my-meta", 1024, &gst.MetaInfoCallbackFuncs{
|
||||
// InitFunc: func(params interface{}, buffer *gst.Buffer) bool {
|
||||
// paramStr := params.(string)
|
||||
// fmt.Println("Buffer initialized with params:", paramStr)
|
||||
|
@@ -107,8 +107,9 @@ type MetaInfoCallbackFuncs struct {
|
||||
TransformFunc MetaTransformFunc
|
||||
}
|
||||
|
||||
// Register metas internally as well so we can track callback functions
|
||||
var registeredMetas = make(map[glib.Type]*MetaInfoCallbackFuncs)
|
||||
// Register meta callbacks internally as well so we can track them. Not all
|
||||
// GstMeta callbacks include userdata.
|
||||
var registeredMetas = make(map[glib.Type]map[string]*MetaInfoCallbackFuncs)
|
||||
|
||||
// RegisterMeta registers and returns a new MetaInfo instance denoting the
|
||||
// given type, name, and size.
|
||||
@@ -127,7 +128,10 @@ func RegisterMeta(api glib.Type, name string, size int64, cbFuncs *MetaInfoCallb
|
||||
return nil
|
||||
}
|
||||
wrapped := wrapMetaInfo(metaInfo)
|
||||
registeredMetas[wrapped.Type()] = cbFuncs
|
||||
if registeredMetas[api] == nil {
|
||||
registeredMetas[api] = make(map[string]*MetaInfoCallbackFuncs)
|
||||
}
|
||||
registeredMetas[api][name] = cbFuncs
|
||||
return wrapped
|
||||
}
|
||||
|
||||
|
Reference in New Issue
Block a user