mirror of
https://github.com/go-gst/go-gst.git
synced 2025-10-06 16:36:51 +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 {
|
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
|
//export goMetaFreeFunc
|
||||||
|
@@ -188,7 +188,7 @@ func (b *Buffer) Map() *MapInfo {
|
|||||||
//
|
//
|
||||||
// Example
|
// 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 {
|
// InitFunc: func(params interface{}, buffer *gst.Buffer) bool {
|
||||||
// paramStr := params.(string)
|
// paramStr := params.(string)
|
||||||
// fmt.Println("Buffer initialized with params:", paramStr)
|
// fmt.Println("Buffer initialized with params:", paramStr)
|
||||||
|
@@ -107,8 +107,9 @@ type MetaInfoCallbackFuncs struct {
|
|||||||
TransformFunc MetaTransformFunc
|
TransformFunc MetaTransformFunc
|
||||||
}
|
}
|
||||||
|
|
||||||
// Register metas internally as well so we can track callback functions
|
// Register meta callbacks internally as well so we can track them. Not all
|
||||||
var registeredMetas = make(map[glib.Type]*MetaInfoCallbackFuncs)
|
// GstMeta callbacks include userdata.
|
||||||
|
var registeredMetas = make(map[glib.Type]map[string]*MetaInfoCallbackFuncs)
|
||||||
|
|
||||||
// RegisterMeta registers and returns a new MetaInfo instance denoting the
|
// RegisterMeta registers and returns a new MetaInfo instance denoting the
|
||||||
// given type, name, and size.
|
// given type, name, and size.
|
||||||
@@ -127,7 +128,10 @@ func RegisterMeta(api glib.Type, name string, size int64, cbFuncs *MetaInfoCallb
|
|||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
wrapped := wrapMetaInfo(metaInfo)
|
wrapped := wrapMetaInfo(metaInfo)
|
||||||
registeredMetas[wrapped.Type()] = cbFuncs
|
if registeredMetas[api] == nil {
|
||||||
|
registeredMetas[api] = make(map[string]*MetaInfoCallbackFuncs)
|
||||||
|
}
|
||||||
|
registeredMetas[api][name] = cbFuncs
|
||||||
return wrapped
|
return wrapped
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user