mirror of
https://github.com/go-gst/go-gst.git
synced 2025-09-26 20:11:18 +08:00
96 lines
3.5 KiB
Go
96 lines
3.5 KiB
Go
package gst
|
|
|
|
// #include "gst.go.h"
|
|
import "C"
|
|
|
|
import (
|
|
"time"
|
|
"unsafe"
|
|
|
|
"github.com/go-gst/go-glib/glib"
|
|
)
|
|
|
|
// Object is a go representation of a GstObject.
|
|
type Object struct{ *glib.InitiallyUnowned }
|
|
|
|
// FromGstObjectUnsafeNone returns an Object wrapping the given pointer. It meant for internal
|
|
// usage and exported for visibility to other packages.
|
|
func FromGstObjectUnsafeNone(ptr unsafe.Pointer) *Object { return wrapObject(glib.TransferNone(ptr)) }
|
|
|
|
// FromGstObjectUnsafeFull returns an Object wrapping the given pointer. It meant for internal
|
|
// usage and exported for visibility to other packages.
|
|
func FromGstObjectUnsafeFull(ptr unsafe.Pointer) *Object { return wrapObject(glib.TransferFull(ptr)) }
|
|
|
|
// Instance returns the native C GstObject.
|
|
func (o *Object) Instance() *C.GstObject { return C.toGstObject(o.Unsafe()) }
|
|
|
|
// BaseObject is a convenience method for retrieving this object from embedded structs.
|
|
func (o *Object) BaseObject() *Object { return o }
|
|
|
|
// GstObject is an alias to Instance on the underlying GstObject of any extending struct.
|
|
func (o *Object) GstObject() *C.GstObject { return C.toGstObject(o.Unsafe()) }
|
|
|
|
// GObject returns the underlying GObject instance.
|
|
func (o *Object) GObject() *glib.Object { return o.InitiallyUnowned.Object }
|
|
|
|
// GetName returns the name of this object.
|
|
func (o *Object) GetName() string {
|
|
cName := C.gst_object_get_name((*C.GstObject)(o.Instance()))
|
|
defer C.free(unsafe.Pointer(cName))
|
|
return C.GoString(cName)
|
|
}
|
|
|
|
// GetValue retrieves the value for the given controlled property at the given timestamp.
|
|
func (o *Object) GetValue(property string, timestamp time.Duration) *glib.Value {
|
|
cprop := C.CString(property)
|
|
defer C.free(unsafe.Pointer(cprop))
|
|
gval := C.gst_object_get_value(o.Instance(), (*C.gchar)(cprop), C.GstClockTime(timestamp.Nanoseconds()))
|
|
if gval == nil {
|
|
return nil
|
|
}
|
|
return glib.ValueFromNative(unsafe.Pointer(gval))
|
|
}
|
|
|
|
// SetArg sets the argument name to value on this object. Note that function silently returns
|
|
// if object has no property named name or when value cannot be converted to the type for this
|
|
// property.
|
|
func (o *Object) SetArg(name, value string) {
|
|
cName := C.CString(name)
|
|
cValue := C.CString(value)
|
|
defer C.free(unsafe.Pointer(cName))
|
|
defer C.free(unsafe.Pointer(cValue))
|
|
C.gst_util_set_object_arg(
|
|
(*C.GObject)(o.Unsafe()),
|
|
(*C.gchar)(unsafe.Pointer(cName)),
|
|
(*C.gchar)(unsafe.Pointer(cValue)),
|
|
)
|
|
}
|
|
|
|
// Log logs a message to the given category from this object using the currently registered
|
|
// debugging handlers.
|
|
func (o *Object) Log(cat *DebugCategory, level DebugLevel, message string) {
|
|
cat.logDepth(level, message, 2, (*C.GObject)(o.Unsafe()))
|
|
}
|
|
|
|
// Clear will will clear all references to this object. If the reference is already null
|
|
// the the function does nothing. Otherwise the reference count is decreased and the pointer
|
|
// set to null.
|
|
func (o *Object) Clear() {
|
|
if ptr := o.Unsafe(); ptr != nil {
|
|
C.gst_clear_object((**C.GstObject)(unsafe.Pointer(&ptr)))
|
|
}
|
|
}
|
|
|
|
// Ref increments the reference count on object. This function does not take the lock on object
|
|
// because it relies on atomic refcounting. For convenience the same object is returned.
|
|
func (o *Object) Ref() *Object {
|
|
C.gst_object_ref((C.gpointer)(o.Unsafe()))
|
|
return o
|
|
}
|
|
|
|
// Unref decrements the reference count on object. If reference count hits zero, destroy object.
|
|
// This function does not take the lock on object as it relies on atomic refcounting.
|
|
func (o *Object) Unref() {
|
|
C.gst_object_unref((C.gpointer)(o.Unsafe()))
|
|
}
|