improve pad & element and add wrappers for GstObject flags handling

This commit is contained in:
Artem Martus
2024-09-13 18:12:49 +03:00
parent c3b29368ba
commit a6a636b9e7
5 changed files with 63 additions and 9 deletions

View File

@@ -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 */

View File

@@ -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 */

View File

@@ -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.

View File

@@ -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))
}

View File

@@ -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