101 lines
1.9 KiB
Go
101 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
|
|
}
|