gst

package module
v0.0.5-0...-64fe3e2 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Jun 11, 2021 License: Apache-2.0 Imports: 11 Imported by: 0

README

gst

It is a small and simple go gstreamer binding. It is a fork from https://github.com/notedit/gst Moreover it implements interface to gstreamer videofilter by intercepting xx_transform_ip() call.

Install

Ubuntu or Dedian

apt-get install pkg-config
apt-get install libgstreamer1.0-dev libgstreamer-plugins-base1.0-dev libgstreamer-plugins-good1.0-dev gstreamer1.0-libav

Examples

The are in the ./examples folder. Please be awere that exmples require gtk3 library and gtksink gstreamer plugins to be installed.

apt-get install libgtk-3-dev
apt-get install gstreamer1.0-gtk3
gtksink

It shows video output from /dev/video0 at the gtk window.

camui

It does the same thing but may pause/resume the video stream and take snapshots from the camera.

plugin/line

It is simple gstreamer "videofilter" example. It generates white box jpeg image with black line at the midle.

plugin/movingline

This one shows video moving from up to down black line.

Documentation

Index

Constants

View Source
const (
	PAD_UNKNOWN = PadDirection(C.GST_PAD_UNKNOWN)
	PAD_SRC     = PadDirection(C.GST_PAD_SRC)
	PAD_SINK    = PadDirection(C.GST_PAD_SINK)
)
View Source
const (
	PadLinkOk             PadLinkReturn = C.GST_PAD_LINK_OK
	PadLinkWrongHierarchy               = C.GST_PAD_LINK_WRONG_HIERARCHY
	PadLinkWasLinked                    = C.GST_PAD_LINK_WAS_LINKED
	PadLinkWrongDirection               = C.GST_PAD_LINK_WRONG_DIRECTION
	PadLinkNoFormat                     = C.GST_PAD_LINK_NOFORMAT
	PadLinkNoSched                      = C.GST_PAD_LINK_NOSCHED
	PadLinkRefused                      = C.GST_PAD_LINK_REFUSED
)

Variables

View Source
var (
	ErrEOS = errors.New("EOS")
)

Functions

func BufferGetData

func BufferGetData(gstBuffer *Buffer) (data []byte, err error)

func CheckPlugins

func CheckPlugins(plugins []string) error

func MemSet

func MemSet(b []byte, v byte)

func SetVideoIPTransformCallback

func SetVideoIPTransformCallback(vti VideoIPTransformer)

func SetVideoTransformCallback

func SetVideoTransformCallback(vti VideoTransformer)

func TestChainCallback

func TestChainCallback(plugin *Plugin, pad *Pad, buf []byte) int

Types

type Bin

type Bin struct {
	Element
}

func BinNew

func BinNew(name string) (bin *Bin)

func ParseBinFromDescription

func ParseBinFromDescription(binStr string, ghostPads bool) (bin *Bin, err error)

func (*Bin) Add

func (b *Bin) Add(child *Element)

func (*Bin) AddMany

func (b *Bin) AddMany(elements ...*Element)

func (*Bin) GetByName

func (b *Bin) GetByName(name string) (element *Element)

func (*Bin) Remove

func (b *Bin) Remove(child *Element)

type Buffer

type Buffer struct {
	C *C.GstBuffer
}

func BufferNewAndAlloc

func BufferNewAndAlloc(size uint) (gstBuffer *Buffer, err error)

func BufferNewWrapped

func BufferNewWrapped(data []byte) (gstBuffer *Buffer, err error)

type BufferPool

type BufferPool struct {
	// contains filtered or unexported fields
}

BufferPool implements a pool of bytes.Buffers in the form of a bounded channel.

func NewBufferPool

func NewBufferPool(size int) (bp *BufferPool)

NewBufferPool creates a new BufferPool bounded to the given size.

func (*BufferPool) Get

func (bp *BufferPool) Get() (b *bytes.Buffer)

Get gets a Buffer from the BufferPool, or creates a new one if none are available in the pool.

func (*BufferPool) NumPooled

func (bp *BufferPool) NumPooled() int

NumPooled returns the number of items currently pooled.

func (*BufferPool) Put

func (bp *BufferPool) Put(b *bytes.Buffer)

Put returns the given Buffer to the BufferPool.

type Bus

type Bus struct {
	C *C.GstBus
}

func (*Bus) HavePending

func (b *Bus) HavePending() bool

func (*Bus) Pop

func (b *Bus) Pop() (message *Message)

func (*Bus) Pull

func (b *Bus) Pull(messageType MessageType) (message *Message)

type BytePool

type BytePool struct {
	// contains filtered or unexported fields
}

BytePool implements a leaky pool of []byte in the form of a bounded channel. It has to be for the similar arrays to avoid memory wasting

func NewBytePool

func NewBytePool(maxSize int, width int) (bp *BytePool)

NewBytePool creates a new BytePool bounded to the given maxSize, with new byte arrays sized based on width.

func (*BytePool) Get

func (bp *BytePool) Get() (b []byte)

Get gets a []byte from the BytePool, or creates a new one if none are available in the pool.

func (*BytePool) NumPooled

func (bp *BytePool) NumPooled() int

NumPooled returns the number of items currently pooled.

func (*BytePool) Put

func (bp *BytePool) Put(b []byte)

Put returns the given Buffer to the BytePool.

func (*BytePool) Width

func (bp *BytePool) Width() (n int)

Width returns the width of the byte arrays in this pool.

type Caps

type Caps struct {
	// contains filtered or unexported fields
}

func CapsFromString

func CapsFromString(caps string) (gstCaps *Caps)

func (*Caps) String

func (c *Caps) String() (str string)

func (*Caps) ToString

func (c *Caps) ToString() (str string)

type ChainCallback

type ChainCallback func(plugin *Plugin, pad *Pad, buf []byte) int

type Clock

type Clock struct {
	C *C.GstClock
}

func (*Clock) GetClockTime

func (c *Clock) GetClockTime() uint64

type Element

type Element struct {
	GstElement *C.GstElement
	// contains filtered or unexported fields
}

func ElementFactoryMake

func ElementFactoryMake(factoryName string, name string) (e *Element, err error)

func (*Element) AddPad

func (e *Element) AddPad(pad *Pad) bool

func (*Element) AsObj

func (e *Element) AsObj() unsafe.Pointer

Added by BKSWORM

func (*Element) EmitSignal

func (e *Element) EmitSignal(signal string)

Emits signal without parametrs

func (*Element) GetClock

func (e *Element) GetClock() (gstClock *Clock)

func (*Element) GetClockBaseTime

func (e *Element) GetClockBaseTime() uint64

func (*Element) GetPadTemplate

func (e *Element) GetPadTemplate(name string) (padTemplate *PadTemplate)

func (*Element) GetRequestPad

func (e *Element) GetRequestPad(padTemplate *PadTemplate, name string, caps *Caps) (pad *Pad)

func (*Element) GetState

func (e *Element) GetState() StateOptions

func (*Element) GetStaticPad

func (e *Element) GetStaticPad(name string) (pad *Pad)

func (*Element) IsEOS

func (e *Element) IsEOS() bool

appsink

func (e *Element) Link(dst *Element) bool

func (*Element) Name

func (e *Element) Name() (name string)

func (*Element) PullSample

func (e *Element) PullSample() (sample *Sample, err error)

func (*Element) PullSampleBB

func (e *Element) PullSampleBB(bb *bytes.Buffer) (err error)

Pulls sample from the pipeline into *bytes.Buffer. To keep pipe running and don't exost memory, we need to pull samples. But if we doesn't nee them, we may pass nil to the function. In this case sample won't be copied, function just unref() it and returns nil error.

func (*Element) PullSampleOrSkip

func (e *Element) PullSampleOrSkip(buf []byte, skip bool) (result []byte, err error)

Pulls sanple to keep pipe run, but if skeep doesn't copy it just unref() and returns nil

func (*Element) PushBB

func (e *Element) PushBB(data *bytes.Buffer) (err error)

func (*Element) PushBuffer

func (e *Element) PushBuffer(data []byte) error

func (*Element) PushBufferAsync

func (e *Element) PushBufferAsync(buffer []byte, framerate int, frames int) error

Helper function for async pusher

func (*Element) QueryDuration

func (e *Element) QueryDuration() (time.Duration, error)

func (*Element) QueryPosition

func (e *Element) QueryPosition() (time.Duration, error)

func (*Element) SendEvent

func (e *Element) SendEvent(event *Event) bool

func (*Element) SetObject

func (e *Element) SetObject(name string, value interface{})

func (*Element) SetPadAddedCallback

func (e *Element) SetPadAddedCallback(callback PadAddedCallback)

func (*Element) VideoOverlayExpose

func (e *Element) VideoOverlayExpose()

VideoOverlayExpose tells an overlay that it has been exposed. This will redraw the current frame in the drawable even if the pipeline is PAUSED.

func (*Element) VideoOverlayHandleEvents

func (e *Element) VideoOverlayHandleEvents(handleEvents bool)

VideoOverlayHandleEvents tells an overlay that it should handle events from the window system. These events are forwarded upstream as navigation events. In some window system, events are not propagated in the window hierarchy if a client is listening for them. This method allows you to disable events handling completely from the GstVideoOverlay.

func (*Element) VideoOverlaySetWindowHandle

func (e *Element) VideoOverlaySetWindowHandle(windowID uintptr)

VideoOverlaySetWindowHandle will call the video overlay's set_window_handle method. You should use this method to tell to an overlay to display video output to a specific window (e.g. an XWindow on X11). Passing 0 as the handle will tell the overlay to stop using that window and create an internal one. registers the windowID for video output of the element.

type Elementer

type Elementer interface {
	CallbackID() uintptr
	GetElement() Element
}

type Event

type Event struct {
	GstEvent *C.GstEvent
}

func NewEosEvent

func NewEosEvent() (event *Event)

type GMainLoop

type GMainLoop struct {
	C *C.GMainLoop
}

func MainLoopNew

func MainLoopNew() (loop *GMainLoop)

func (*GMainLoop) IsRuning

func (l *GMainLoop) IsRuning() bool

func (*GMainLoop) Quit

func (l *GMainLoop) Quit()

func (*GMainLoop) Run

func (l *GMainLoop) Run()

type Message

type Message struct {
	C *C.GstMessage
}

func (*Message) GetName

func (message *Message) GetName() (name string)

func (*Message) GetStructure

func (message *Message) GetStructure() (structure *Structure)

func (*Message) GetType

func (message *Message) GetType() (messageType MessageType)

type MessageType

type MessageType C.GstMessageType
const (
	MessageUnknown         MessageType = C.GST_MESSAGE_UNKNOWN
	MessageEos             MessageType = C.GST_MESSAGE_EOS
	MessageError           MessageType = C.GST_MESSAGE_ERROR
	MessageWarning         MessageType = C.GST_MESSAGE_WARNING
	MessageInfo            MessageType = C.GST_MESSAGE_INFO
	MessageTag             MessageType = C.GST_MESSAGE_TAG
	MessageBuffering       MessageType = C.GST_MESSAGE_BUFFERING
	MessageStateChanged    MessageType = C.GST_MESSAGE_STATE_CHANGED
	MessageStateDirty      MessageType = C.GST_MESSAGE_STATE_DIRTY
	MessageStepDone        MessageType = C.GST_MESSAGE_STEP_DONE
	MessageClockProvide    MessageType = C.GST_MESSAGE_CLOCK_PROVIDE
	MessageClockLost       MessageType = C.GST_MESSAGE_CLOCK_LOST
	MessageStructureChange MessageType = C.GST_MESSAGE_STREAM_STATUS
	MessageApplication     MessageType = C.GST_MESSAGE_APPLICATION
	MessageElement         MessageType = C.GST_MESSAGE_ELEMENT
	MessageSegmentStart    MessageType = C.GST_MESSAGE_SEGMENT_START
	MessageSegmentDone     MessageType = C.GST_MESSAGE_SEGMENT_DONE
	MessageDurationChanged MessageType = C.GST_MESSAGE_DURATION_CHANGED
	MessageLatency         MessageType = C.GST_MESSAGE_LATENCY
	MessageAsyncStart      MessageType = C.GST_MESSAGE_ASYNC_START
	MessageAsyncDone       MessageType = C.GST_MESSAGE_ASYNC_DONE
	MessageRequestState    MessageType = C.GST_MESSAGE_REQUEST_STATE
	MessageStepStart       MessageType = C.GST_MESSAGE_STEP_START
	MessageQos             MessageType = C.GST_MESSAGE_QOS
	MessageProgress        MessageType = C.GST_MESSAGE_PROGRESS
	MessageToc             MessageType = C.GST_MESSAGE_TOC
	MessageResetTime       MessageType = C.GST_MESSAGE_RESET_TIME
	MessageStreamStart     MessageType = C.GST_MESSAGE_STREAM_START
	MessageNeedContext     MessageType = C.GST_MESSAGE_NEED_CONTEXT
	MessageHaveContext     MessageType = C.GST_MESSAGE_HAVE_CONTEXT
	MessageExtended        MessageType = C.GST_MESSAGE_EXTENDED
	MessageDeviceAdded     MessageType = C.GST_MESSAGE_DEVICE_ADDED
	MessageDeviceRemoved   MessageType = C.GST_MESSAGE_DEVICE_REMOVED
	//MessagePropertyNotify   MessageType = C.GST_MESSAGE_PROPERTY_NOTIFY
	//MessageStreamCollection MessageType = C.GST_MESSAGE_STREAM_COLLECTION
	//MessageStreamsSelected  MessageType = C.GST_MESSAGE_STREAMS_SELECTED
	//MessageRedirect         MessageType = C.GST_MESSAGE_REDIRECT
	MessageAny MessageType = C.GST_MESSAGE_ANY
)

type Pad

type Pad struct {
	// contains filtered or unexported fields
}

func (*Pad) GetCurrentCaps

func (p *Pad) GetCurrentCaps() (gstCaps *Caps)

func (*Pad) IsEOS

func (p *Pad) IsEOS() bool

func (*Pad) IsLinked

func (p *Pad) IsLinked() bool
func (p *Pad) Link(sink *Pad) (padLinkReturn PadLinkReturn)

func (*Pad) Name

func (p *Pad) Name() string

func (*Pad) SetObject

func (e *Pad) SetObject(name string, value interface{})
func (p *Pad) Unlink(sink *Pad) (padLinkReturn PadLinkReturn)

type PadAddedCallback

type PadAddedCallback func(element *Element, pad *Pad)

type PadDirection

type PadDirection C.GstPadDirection

func (PadDirection) String

func (p PadDirection) String() string

type PadLinkReturn

type PadLinkReturn int

type PadTemplate

type PadTemplate struct {
	C *C.GstPadTemplate
}

type Pipeline

type Pipeline struct {
	Bin
}

func ParseLaunch

func ParseLaunch(pipelineStr string) (p *Pipeline, err error)

func PipelineNew

func PipelineNew(name string) (e *Pipeline, err error)

func (*Pipeline) GetBus

func (p *Pipeline) GetBus() (bus *Bus)

func (*Pipeline) GetClock

func (p *Pipeline) GetClock() (clock *Clock)

func (*Pipeline) GetDelay

func (p *Pipeline) GetDelay() uint64

func (*Pipeline) GetLatency

func (p *Pipeline) GetLatency() uint64

func (*Pipeline) SetLatency

func (p *Pipeline) SetLatency(latency uint64)

func (*Pipeline) SetState

func (p *Pipeline) SetState(state StateOptions)

type Plugin

type Plugin struct {
	Element
	// contains filtered or unexported fields
}

func (*Plugin) SetOnChainCallback

func (e *Plugin) SetOnChainCallback(callback ChainCallback)

type Sample

type Sample struct {
	Data     []byte
	Duration uint64
	Pts      uint64
	Dts      uint64
	Offset   uint64
}

type StateOptions

type StateOptions int

type Structure

type Structure struct {
	C *C.GstStructure
}

func NewStructure

func NewStructure(name string) (structure *Structure)

func (*Structure) GetBool

func (s *Structure) GetBool(name string) (bool, error)

func (*Structure) GetInt

func (s *Structure) GetInt(name string) (int, error)

func (*Structure) GetInt64

func (s *Structure) GetInt64(name string) (int64, error)

func (*Structure) GetName

func (s *Structure) GetName() string

func (*Structure) GetString

func (s *Structure) GetString(name string) (string, error)

func (*Structure) GetUint

func (s *Structure) GetUint(name string) (uint, error)

func (*Structure) SetValue

func (s *Structure) SetValue(name string, value interface{})

func (*Structure) ToString

func (s *Structure) ToString() (str string)

type VideoFrame

type VideoFrame struct {
	GstVideoFrame *C.GstVideoFrame
	Format        int
	NPlanes       int
	Size          int
}

func NewVideoFrame

func NewVideoFrame(frame *C.GstVideoFrame) (vfr *VideoFrame)

func (*VideoFrame) Plane

func (vfr *VideoFrame) Plane(n int) (plane VideoFramePlane)

type VideoFramePlane

type VideoFramePlane struct {
	Pixels      []byte
	Size        int
	Stride      int
	PixelStride int
	Height      int
	Width       int
}

func (*VideoFramePlane) Close

func (vfr *VideoFramePlane) Close()

type VideoIPTransformPlugin

type VideoIPTransformPlugin struct {
	Element
}

func (*VideoIPTransformPlugin) CallbackID

func (vfp *VideoIPTransformPlugin) CallbackID() uintptr

func (*VideoIPTransformPlugin) GetElement

func (vfp *VideoIPTransformPlugin) GetElement() Element

func (*VideoIPTransformPlugin) TransformIP

func (vfp *VideoIPTransformPlugin) TransformIP(vf *VideoFrame) error

"Pure virtual method :)

type VideoIPTransformer

type VideoIPTransformer interface {
	Elementer
	TransformIP(frame *VideoFrame) error
}

type VideoTransformer

type VideoTransformer interface {
	Elementer
	Transform(inframe, outframe *VideoFrame) error
}

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL