diff --git a/gst/gst.go.c b/gst/gst.go.c index 28cc429..46684c2 100644 --- a/gst/gst.go.c +++ b/gst/gst.go.c @@ -149,13 +149,15 @@ GstTagList * makeTagListWritable (GstTagList * tagList) { return gst_tag /* Object Utilities */ -gboolean gstElementIsURIHandler (GstElement * elem) { return (GST_IS_URI_HANDLER(elem)); } -gboolean gstObjectFlagIsSet (GstObject * obj, GstElementFlags flags) { return (GST_OBJECT_FLAG_IS_SET(obj, flags)); } +gboolean gstObjectFlagIsSet (GstObject * obj, guint32 flags) { return (GST_OBJECT_FLAG_IS_SET(obj, flags)); } +void gstObjectFlagSet (GstObject * obj, guint32 flags) { (GST_OBJECT_FLAG_SET(obj, flags)); } +void gstObjectFlagUnset (GstObject * obj, guint32 flags) { (GST_OBJECT_FLAG_UNSET(obj, flags)); } /* Element utilities */ -GstTocSetter * toTocSetter (GstElement * elem) { return GST_TOC_SETTER(elem); } -GstTagSetter * toTagSetter (GstElement *elem) { return GST_TAG_SETTER(elem); } +gboolean gstElementIsURIHandler (GstElement * elem) { return (GST_IS_URI_HANDLER(elem)); } +GstTocSetter * toTocSetter (GstElement * elem) { return GST_TOC_SETTER(elem); } +GstTagSetter * toTagSetter (GstElement *elem) { return GST_TAG_SETTER(elem); } /* Sample Utilities */ diff --git a/gst/gst.go.h b/gst/gst.go.h index fb6aa3a..4602fe8 100644 --- a/gst/gst.go.h +++ b/gst/gst.go.h @@ -123,13 +123,15 @@ extern GstTagList * makeTagListWritable (GstTagList * tagList); /* Object Utilities */ -extern gboolean gstElementIsURIHandler (GstElement * elem); -extern gboolean gstObjectFlagIsSet (GstObject * obj, GstElementFlags flags); +extern gboolean gstObjectFlagIsSet (GstObject * obj, guint32 flags); +extern void gstObjectFlagSet (GstObject * obj, guint32 flags); +extern void gstObjectFlagUnset (GstObject * obj, guint32 flags); /* Element utilities */ -extern GstTocSetter * toTocSetter (GstElement * elem); -extern GstTagSetter * toTagSetter (GstElement *elem); +extern gboolean gstElementIsURIHandler (GstElement * elem); +extern GstTocSetter * toTocSetter (GstElement * elem); +extern GstTagSetter * toTagSetter (GstElement *elem); /* Misc */ diff --git a/gst/gst_element.go b/gst/gst_element.go index 6b1dd09..de8135e 100644 --- a/gst/gst_element.go +++ b/gst/gst_element.go @@ -405,8 +405,21 @@ func (e *Element) GetStaticPad(name string) *Pad { } // Has returns true if this element has the given flags. +// Non MT safe func (e *Element) Has(flags ElementFlags) bool { - return gobool(C.gstObjectFlagIsSet(C.toGstObject(e.Unsafe()), C.GstElementFlags(flags))) + return e.hasFlags(uint32(flags)) +} + +// Set element flags +// Non MT safe +func (e *Element) SetFlags(flags ElementFlags) { + e.setFlags(uint32(flags)) +} + +// Unset element flags +// Non MT safe +func (e *Element) UnsetFlags(flags ElementFlags) { + e.unsetFlags(uint32(flags)) } // IsURIHandler returns true if this element can handle URIs. diff --git a/gst/gst_object.go b/gst/gst_object.go index 15848aa..bbf7aae 100644 --- a/gst/gst_object.go +++ b/gst/gst_object.go @@ -97,3 +97,22 @@ func (o *Object) Unref() { func (o *Object) AddControlBinding(binding *ControlBinding) { C.gst_object_add_control_binding(o.Instance(), binding.Instance()) } + +// TODO: Consider wrapping GstObject GST_OBJECT_LOCK/GST_OBJECT_UNLOCK functionality +// due to following flags related functionality is based on a regular uint32 field +// and is not considered thread safe + +// Has returns true if this GstObject has the given flags. +func (o *Object) hasFlags(flags uint32) bool { + return gobool(C.gstObjectFlagIsSet(o.Instance(), C.guint32(flags))) +} + +// SetFlags sets the flags +func (o *Object) setFlags(flags uint32) { + C.gstObjectFlagSet(o.Instance(), C.guint32(flags)) +} + +// SetFlags unsets the flags +func (o *Object) unsetFlags(flags uint32) { + C.gstObjectFlagUnset(o.Instance(), C.guint32(flags)) +} diff --git a/gst/gst_pad.go b/gst/gst_pad.go index 6fabec5..9f38265 100644 --- a/gst/gst_pad.go +++ b/gst/gst_pad.go @@ -1075,6 +1075,24 @@ func (p *Pad) ToGValue() (*glib.Value, error) { return val, nil } +// Has returns true if this pad has the given flags. +// Non MT safe +func (p *Pad) Has(flags PadFlags) bool { + return p.hasFlags(uint32(flags)) +} + +// Sets pad flags +// Non MT safe +func (p *Pad) SetFlags(flags PadFlags) { + p.setFlags(uint32(flags)) +} + +// Unsets pad flags +// Non MT safe +func (p *Pad) UnsetFlags(flags PadFlags) { + p.unsetFlags(uint32(flags)) +} + // PadProbeInfo represents the info passed to a PadProbeCallback. type PadProbeInfo struct { ptr *C.GstPadProbeInfo