Files
go-gst/gst/gst_caps_features.go
2023-08-11 13:50:02 +02:00

163 lines
4.7 KiB
Go

package gst
// #include "gst.go.h"
import "C"
import (
"unsafe"
"github.com/go-gst/go-glib/glib"
)
// Go casting of pre-baked caps features
var (
CapsFeatureMemorySystemMemory string = C.GST_CAPS_FEATURE_MEMORY_SYSTEM_MEMORY
)
// CapsFeatures is a go representation of GstCapsFeatures.
type CapsFeatures struct {
native *C.GstCapsFeatures
}
// NewCapsFeaturesEmpty returns a new empty CapsFeatures.
//
// feats := gst.NewCapsFeaturesEmpty()
// fmt.Println(feats.GetSize())
// // 0
func NewCapsFeaturesEmpty() *CapsFeatures { return wrapCapsFeatures(C.gst_caps_features_new_empty()) }
// NewCapsFeaturesAny returns a new ANY CapsFeatures.
//
// feats := gst.NewCapsFeaturesAny()
// fmt.Println(feats.IsAny())
// // true
func NewCapsFeaturesAny() *CapsFeatures { return wrapCapsFeatures(C.gst_caps_features_new_any()) }
// NewCapsFeaturesFromString creates new CapsFeatures from the given string.
func NewCapsFeaturesFromString(features string) *CapsFeatures {
cStr := C.CString(features)
defer C.free(unsafe.Pointer(cStr))
capsFeatures := C.gst_caps_features_from_string(cStr)
if capsFeatures == nil {
return nil
}
return wrapCapsFeatures(capsFeatures)
}
// TypeCapsFeatures is the glib.Type for a CapsFeatures.
var TypeCapsFeatures = glib.Type(C.gst_caps_features_get_type())
var _ glib.ValueTransformer = &CapsFeatures{}
// ToGValue implements a glib.ValueTransformer
func (c *CapsFeatures) ToGValue() (*glib.Value, error) {
val, err := glib.ValueInit(TypeCapsFeatures)
if err != nil {
return nil, err
}
C.gst_value_set_caps_features(
(*C.GValue)(unsafe.Pointer(val.GValue)),
c.Instance(),
)
return val, nil
}
// Instance returns the native underlying GstCapsFeatures instance.
func (c *CapsFeatures) Instance() *C.GstCapsFeatures {
return C.toGstCapsFeatures(unsafe.Pointer(c.native))
}
// String implements a stringer on caps features.
//
// feats := gst.NewCapsFeaturesAny()
// fmt.Println(feats.String())
// // ANY
func (c *CapsFeatures) String() string {
return C.GoString(C.gst_caps_features_to_string(c.Instance()))
}
// Add adds the given feature to these.
//
// feats := gst.NewCapsFeaturesEmpty()
//
// fmt.Println(feats.GetSize())
//
// feats.Add(gst.CapsFeatureMemorySystemMemory)
//
// fmt.Println(feats.GetSize())
// fmt.Println(feats.Contains(gst.CapsFeatureMemorySystemMemory))
// fmt.Println(feats.GetNth(0))
//
// // 0
// // 1
// // true
// // memory:SystemMemory
func (c *CapsFeatures) Add(feature string) {
cStr := C.CString(feature)
defer C.free(unsafe.Pointer(cStr))
C.gst_caps_features_add(
c.Instance(),
(*C.gchar)(unsafe.Pointer(cStr)),
)
}
// Contains returns true if the given feature is included in these.
func (c *CapsFeatures) Contains(feature string) bool {
cStr := C.CString(feature)
defer C.free(unsafe.Pointer(cStr))
return gobool(C.gst_caps_features_contains(
c.Instance(),
(*C.gchar)(unsafe.Pointer(cStr)),
))
}
// Copy duplicates these features and all of it's values.
func (c *CapsFeatures) Copy() *CapsFeatures {
return wrapCapsFeatures(C.gst_caps_features_copy(c.Instance()))
}
// Free frees the memory containing these features. Only call this if you
// do not intend to pass these features to other methods.
func (c *CapsFeatures) Free() { C.gst_caps_features_free(c.Instance()) }
// GetNth returns the feature at index.
func (c *CapsFeatures) GetNth(idx uint) string {
feat := C.gst_caps_features_get_nth(c.Instance(), C.guint(idx))
return C.GoString(feat)
}
// GetSize returns the number of features.
func (c *CapsFeatures) GetSize() uint {
return uint(C.gst_caps_features_get_size(c.Instance()))
}
// IsAny returns true if these features match any.
func (c *CapsFeatures) IsAny() bool { return gobool(C.gst_caps_features_is_any(c.Instance())) }
// IsEqual returns true if the given CapsFeatures are equal to the provided ones.
// If the provided structure is nil, this function immediately returns false.
func (c *CapsFeatures) IsEqual(feats *CapsFeatures) bool {
if feats == nil {
return false
}
return gobool(C.gst_caps_features_is_equal(c.Instance(), feats.Instance()))
}
// Remove removes the given feature.
func (c *CapsFeatures) Remove(feature string) {
cStr := C.CString(feature)
defer C.free(unsafe.Pointer(cStr))
C.gst_caps_features_remove(
c.Instance(),
(*C.gchar)(unsafe.Pointer(cStr)),
)
}
// SetParentRefCount sets the parent_refcount field of CapsFeatures. This field is used to determine
// whether a caps features is mutable or not. This function should only be called by code implementing
// parent objects of CapsFeatures, as described in the MT Refcounting section of the design documents.
func (c *CapsFeatures) SetParentRefCount(refCount int) bool {
gcount := C.gint(refCount)
return gobool(C.gst_caps_features_set_parent_refcount(c.Instance(), &gcount))
}