102 lines
1.9 KiB
Go
102 lines
1.9 KiB
Go
|
package gstreamer
|
||
|
|
||
|
import (
|
||
|
"context"
|
||
|
"github.com/rs/zerolog"
|
||
|
"github.com/tinyzimmer/go-gst/gst"
|
||
|
"sync"
|
||
|
"time"
|
||
|
)
|
||
|
|
||
|
type Gstreamer struct {
|
||
|
Pipelines map[string]*Pipeline
|
||
|
*Decklink
|
||
|
ctx context.Context
|
||
|
}
|
||
|
|
||
|
type Pipeline struct {
|
||
|
Name string
|
||
|
ID string
|
||
|
InputElement InputElement
|
||
|
OutputElement OutputElement
|
||
|
Overlays map[string]Overlay
|
||
|
PipelineUpdates chan PipelineUpdates
|
||
|
pipeline *gst.Pipeline
|
||
|
logger zerolog.Logger
|
||
|
elements map[string]element
|
||
|
ctx context.Context
|
||
|
ctxCancel context.CancelFunc
|
||
|
sync.RWMutex
|
||
|
}
|
||
|
|
||
|
type Decklink struct {
|
||
|
Slots map[string]string
|
||
|
sync.RWMutex
|
||
|
}
|
||
|
|
||
|
type PipelineUpdates struct {
|
||
|
Overlays map[string]Overlay
|
||
|
}
|
||
|
|
||
|
type element struct {
|
||
|
prev, next string
|
||
|
element *gst.Element
|
||
|
name string
|
||
|
inputCaps []string
|
||
|
outputCaps []string
|
||
|
}
|
||
|
|
||
|
type Overlay interface {
|
||
|
getName() string
|
||
|
create(log zerolog.Logger) (*gst.Element, error)
|
||
|
getBlendInTime() time.Duration
|
||
|
getBlendOutTime() time.Duration
|
||
|
show() gst.ClockCallback
|
||
|
hide() gst.ClockCallback
|
||
|
update(log zerolog.Logger)
|
||
|
getElement() *gst.Element
|
||
|
setElement(element *gst.Element)
|
||
|
getType() string
|
||
|
}
|
||
|
|
||
|
type ImageOverlay struct {
|
||
|
element *gst.Element
|
||
|
Name string
|
||
|
Path string
|
||
|
X, Y int
|
||
|
Display bool
|
||
|
BlendIn time.Duration
|
||
|
BlendOut time.Duration
|
||
|
}
|
||
|
|
||
|
type TextOverlay struct {
|
||
|
element *gst.Element
|
||
|
Name string
|
||
|
X, Y int
|
||
|
Font string
|
||
|
FontSize int
|
||
|
FontWeight string
|
||
|
Color uint32
|
||
|
Value string
|
||
|
Display bool
|
||
|
MaxWidth uint
|
||
|
BlendIn time.Duration
|
||
|
BlendOut time.Duration
|
||
|
}
|
||
|
|
||
|
type InputElement struct {
|
||
|
Name string
|
||
|
Type string
|
||
|
Properties map[string]string
|
||
|
Caps []string
|
||
|
elements map[string]element
|
||
|
}
|
||
|
|
||
|
type OutputElement struct {
|
||
|
Name string
|
||
|
Type string
|
||
|
Properties map[string]string
|
||
|
Caps []string
|
||
|
elements map[string]element
|
||
|
}
|