mirror of
https://github.com/go-gst/go-gst.git
synced 2025-10-05 07:56:51 +08:00
222 lines
6.3 KiB
Go
222 lines
6.3 KiB
Go
package gst
|
|
|
|
// #include "gst.go.h"
|
|
import "C"
|
|
import (
|
|
"unsafe"
|
|
|
|
"github.com/gotk3/gotk3/glib"
|
|
)
|
|
|
|
func init() {
|
|
tm := []glib.TypeMarshaler{
|
|
// Enums
|
|
{
|
|
T: glib.Type(C.gst_buffering_mode_get_type()),
|
|
F: marshalBufferingMode,
|
|
},
|
|
{
|
|
T: glib.Type(C.gst_format_get_type()),
|
|
F: marshalFormat,
|
|
},
|
|
{
|
|
T: glib.Type(C.gst_message_type_get_type()),
|
|
F: marshalMessageType,
|
|
},
|
|
{
|
|
T: glib.Type(C.gst_pad_link_return_get_type()),
|
|
F: marshalPadLinkReturn,
|
|
},
|
|
{
|
|
T: glib.Type(C.gst_state_get_type()),
|
|
F: marshalState,
|
|
},
|
|
{
|
|
T: glib.Type(C.gst_seek_flags_get_type()),
|
|
F: marshalSeekFlags,
|
|
},
|
|
{
|
|
T: glib.Type(C.gst_seek_type_get_type()),
|
|
F: marshalSeekType,
|
|
},
|
|
{
|
|
T: glib.Type(C.gst_state_change_return_get_type()),
|
|
F: marshalStateChangeReturn,
|
|
},
|
|
|
|
// Objects/Interfaces
|
|
{
|
|
T: glib.Type(C.gst_pipeline_get_type()),
|
|
F: marshalPipeline,
|
|
},
|
|
{
|
|
T: glib.Type(C.gst_bin_get_type()),
|
|
F: marshalBin,
|
|
},
|
|
{
|
|
T: glib.Type(C.gst_bus_get_type()),
|
|
F: marshalBus,
|
|
},
|
|
{
|
|
T: glib.Type(C.gst_element_get_type()),
|
|
F: marshalElement,
|
|
},
|
|
{
|
|
T: glib.Type(C.gst_element_factory_get_type()),
|
|
F: marshalElementFactory,
|
|
},
|
|
{
|
|
T: glib.Type(C.gst_ghost_pad_get_type()),
|
|
F: marshalGhostPad,
|
|
},
|
|
{
|
|
T: glib.Type(C.gst_object_get_type()),
|
|
F: marshalObject,
|
|
},
|
|
{
|
|
T: glib.Type(C.gst_pad_get_type()),
|
|
F: marshalPad,
|
|
},
|
|
{
|
|
T: glib.Type(C.gst_plugin_feature_get_type()),
|
|
F: marshalPluginFeature,
|
|
},
|
|
|
|
// Boxed
|
|
{T: glib.Type(C.gst_message_get_type()), F: marshalMessage},
|
|
}
|
|
glib.RegisterGValueMarshalers(tm)
|
|
}
|
|
|
|
func wrapObject(obj *glib.Object) *Object {
|
|
return &Object{InitiallyUnowned: &glib.InitiallyUnowned{Object: obj}}
|
|
}
|
|
|
|
func wrapElementFactory(obj *glib.Object) *ElementFactory {
|
|
return &ElementFactory{wrapPluginFeature(obj)}
|
|
}
|
|
|
|
func wrapPluginFeature(obj *glib.Object) *PluginFeature { return &PluginFeature{wrapObject(obj)} }
|
|
|
|
func wrapPipeline(obj *glib.Object) *Pipeline { return &Pipeline{Bin: wrapBin(obj)} }
|
|
func wrapElement(obj *glib.Object) *Element { return &Element{wrapObject(obj)} }
|
|
func wrapBin(obj *glib.Object) *Bin { return &Bin{wrapElement(obj)} }
|
|
func wrapClock(obj *glib.Object) *Clock { return &Clock{wrapObject(obj)} }
|
|
func wrapBus(obj *glib.Object) *Bus { return &Bus{Object: wrapObject(obj)} }
|
|
|
|
func wrapMessage(msg *C.GstMessage) *Message { return &Message{msg: msg} }
|
|
|
|
func wrapPad(obj *glib.Object) *Pad { return &Pad{wrapObject(obj)} }
|
|
func wrapPadTemplate(obj *glib.Object) *PadTemplate { return &PadTemplate{wrapObject(obj)} }
|
|
func wrapGhostPad(obj *glib.Object) *GhostPad { return &GhostPad{wrapPad(obj)} }
|
|
|
|
func wrapPlugin(obj *glib.Object) *Plugin { return &Plugin{wrapObject(obj)} }
|
|
func wrapRegistry(obj *glib.Object) *Registry { return &Registry{wrapObject(obj)} }
|
|
|
|
func wrapAppSink(elem *Element) *AppSink { return &AppSink{elem} }
|
|
func wrapAppSrc(elem *Element) *AppSrc { return &AppSrc{elem} }
|
|
|
|
func wrapSample(sample *C.GstSample) *Sample { return &Sample{sample: sample} }
|
|
func wrapBuffer(buf *C.GstBuffer) *Buffer { return &Buffer{ptr: buf} }
|
|
|
|
// Enums/Constants
|
|
|
|
func marshalBufferingMode(p uintptr) (interface{}, error) {
|
|
c := C.g_value_get_enum((*C.GValue)(unsafe.Pointer(p)))
|
|
return BufferingMode(c), nil
|
|
}
|
|
|
|
func marshalFormat(p uintptr) (interface{}, error) {
|
|
c := C.g_value_get_enum((*C.GValue)(unsafe.Pointer(p)))
|
|
return Format(c), nil
|
|
}
|
|
|
|
func marshalMessageType(p uintptr) (interface{}, error) {
|
|
c := C.g_value_get_enum((*C.GValue)(unsafe.Pointer(p)))
|
|
return MessageType(c), nil
|
|
}
|
|
|
|
func marshalPadLinkReturn(p uintptr) (interface{}, error) {
|
|
c := C.g_value_get_enum((*C.GValue)(unsafe.Pointer(p)))
|
|
return PadLinkReturn(c), nil
|
|
}
|
|
|
|
func marshalState(p uintptr) (interface{}, error) {
|
|
c := C.g_value_get_enum((*C.GValue)(unsafe.Pointer(p)))
|
|
return State(c), nil
|
|
}
|
|
|
|
func marshalSeekFlags(p uintptr) (interface{}, error) {
|
|
c := C.g_value_get_enum((*C.GValue)(unsafe.Pointer(p)))
|
|
return SeekFlags(c), nil
|
|
}
|
|
|
|
func marshalSeekType(p uintptr) (interface{}, error) {
|
|
c := C.g_value_get_enum((*C.GValue)(unsafe.Pointer(p)))
|
|
return SeekType(c), nil
|
|
}
|
|
|
|
func marshalStateChangeReturn(p uintptr) (interface{}, error) {
|
|
c := C.g_value_get_enum((*C.GValue)(unsafe.Pointer(p)))
|
|
return StateChangeReturn(c), nil
|
|
}
|
|
|
|
func marshalGhostPad(p uintptr) (interface{}, error) {
|
|
c := C.g_value_get_object((*C.GValue)(unsafe.Pointer(p)))
|
|
obj := &glib.Object{GObject: glib.ToGObject(unsafe.Pointer(c))}
|
|
return wrapGhostPad(obj), nil
|
|
}
|
|
|
|
func marshalPad(p uintptr) (interface{}, error) {
|
|
c := C.g_value_get_object((*C.GValue)(unsafe.Pointer(p)))
|
|
obj := &glib.Object{GObject: glib.ToGObject(unsafe.Pointer(c))}
|
|
return wrapPad(obj), nil
|
|
}
|
|
|
|
func marshalMessage(p uintptr) (interface{}, error) {
|
|
c := C.g_value_get_boxed((*C.GValue)(unsafe.Pointer(p)))
|
|
return &Message{(*C.GstMessage)(unsafe.Pointer(c))}, nil
|
|
}
|
|
|
|
func marshalObject(p uintptr) (interface{}, error) {
|
|
c := C.g_value_get_object((*C.GValue)(unsafe.Pointer(p)))
|
|
obj := &glib.Object{GObject: glib.ToGObject(unsafe.Pointer(c))}
|
|
return wrapObject(obj), nil
|
|
}
|
|
|
|
func marshalBus(p uintptr) (interface{}, error) {
|
|
c := C.g_value_get_object((*C.GValue)(unsafe.Pointer(p)))
|
|
obj := &glib.Object{GObject: glib.ToGObject(unsafe.Pointer(c))}
|
|
return wrapBus(obj), nil
|
|
}
|
|
|
|
func marshalElementFactory(p uintptr) (interface{}, error) {
|
|
c := C.g_value_get_object((*C.GValue)(unsafe.Pointer(p)))
|
|
obj := &glib.Object{GObject: glib.ToGObject(unsafe.Pointer(c))}
|
|
return wrapElementFactory(obj), nil
|
|
}
|
|
|
|
func marshalPipeline(p uintptr) (interface{}, error) {
|
|
c := C.g_value_get_object((*C.GValue)(unsafe.Pointer(p)))
|
|
obj := &glib.Object{GObject: glib.ToGObject(unsafe.Pointer(c))}
|
|
return wrapPipeline(obj), nil
|
|
}
|
|
|
|
func marshalPluginFeature(p uintptr) (interface{}, error) {
|
|
c := C.g_value_get_object((*C.GValue)(unsafe.Pointer(p)))
|
|
obj := &glib.Object{GObject: glib.ToGObject(unsafe.Pointer(c))}
|
|
return wrapPluginFeature(obj), nil
|
|
}
|
|
|
|
func marshalElement(p uintptr) (interface{}, error) {
|
|
c := C.g_value_get_object((*C.GValue)(unsafe.Pointer(p)))
|
|
obj := &glib.Object{GObject: glib.ToGObject(unsafe.Pointer(c))}
|
|
return wrapElement(obj), nil
|
|
}
|
|
|
|
func marshalBin(p uintptr) (interface{}, error) {
|
|
c := C.g_value_get_object((*C.GValue)(unsafe.Pointer(p)))
|
|
obj := &glib.Object{GObject: glib.ToGObject(unsafe.Pointer(c))}
|
|
return wrapBin(obj), nil
|
|
}
|