WGPU is coming
This commit is contained in:
@@ -0,0 +1,111 @@
|
||||
// MXL Flow Definition helper
|
||||
package flowdef
|
||||
|
||||
import (
|
||||
"encoding/json"
|
||||
"errors"
|
||||
)
|
||||
|
||||
const (
|
||||
TYPE_VIDEO = iota
|
||||
TYPE_VIDEO_ALPHA
|
||||
TYPE_AUDIO
|
||||
)
|
||||
|
||||
var (
|
||||
ErrUnknownFlowType = errors.New("Unknown flow type provided")
|
||||
ErrIncorrectFlowUUID = errors.New("Incorrect flow uuid")
|
||||
)
|
||||
|
||||
type flowDef struct {
|
||||
Description string `json:"description"`
|
||||
Id string `json:"id"`
|
||||
Tags map[string][]string `json:"tags"`
|
||||
Format string `json:"format"`
|
||||
Label string `json:"label"`
|
||||
Parents []string `json:"parents"`
|
||||
MediaType string `json:"media_type"`
|
||||
GrainRate grainRate `json:"grain_rate"`
|
||||
FrameWidth uint `json:"frame_width"`
|
||||
FrameHeight uint `json:"frame_height"`
|
||||
InterlaceMode string `json:"interlace_mode"`
|
||||
ColorSpace string `json:"colorspace"`
|
||||
Components [3]videoComponent `json:"components"`
|
||||
}
|
||||
|
||||
type grainRate struct {
|
||||
Numerator uint `json:"numerator"`
|
||||
Denominator uint `json:"denominator"`
|
||||
}
|
||||
|
||||
type videoComponent struct {
|
||||
Name string `json:"name"`
|
||||
Width uint `json:"width"`
|
||||
Height uint `json:"height"`
|
||||
BitDepth uint `json:"bit_depth"`
|
||||
}
|
||||
|
||||
func NewFlowDefJSON(
|
||||
feedType int,
|
||||
uuid string,
|
||||
width uint,
|
||||
height uint,
|
||||
fpsNum uint,
|
||||
fpsDen uint,
|
||||
) (string, error) {
|
||||
if feedType != TYPE_VIDEO &&
|
||||
feedType != TYPE_VIDEO_ALPHA &&
|
||||
feedType != TYPE_AUDIO {
|
||||
return "", ErrUnknownFlowType
|
||||
}
|
||||
if uuid == "" {
|
||||
return "", ErrIncorrectFlowUUID
|
||||
}
|
||||
tags := map[string][]string{
|
||||
"urn:x-nmos:tag:grouphint/v1.0": {
|
||||
"___one day I will follow NMOS specs___:Video",
|
||||
},
|
||||
}
|
||||
flowDef := flowDef{
|
||||
Description: "go-mxl-pattern-gen generated feed",
|
||||
Id: uuid,
|
||||
Tags: tags,
|
||||
Format: "urn:x-nmos:format:video",
|
||||
Label: "go-mxl-pattern-gen generated feed",
|
||||
Parents: nil,
|
||||
MediaType: "video/v210",
|
||||
GrainRate: grainRate{
|
||||
Numerator: fpsNum,
|
||||
Denominator: fpsDen,
|
||||
},
|
||||
FrameWidth: width,
|
||||
FrameHeight: height,
|
||||
InterlaceMode: "progressive",
|
||||
ColorSpace: "BT709",
|
||||
Components: [3]videoComponent{
|
||||
videoComponent{
|
||||
Name: "Y",
|
||||
Width: width,
|
||||
Height: height,
|
||||
BitDepth: 10,
|
||||
},
|
||||
videoComponent{
|
||||
Name: "Cb",
|
||||
Width: width / 2,
|
||||
Height: height,
|
||||
BitDepth: 10,
|
||||
},
|
||||
videoComponent{
|
||||
Name: "Cr",
|
||||
Width: width / 2,
|
||||
Height: height,
|
||||
BitDepth: 10,
|
||||
},
|
||||
},
|
||||
}
|
||||
jsonBytes, err := json.Marshal(flowDef)
|
||||
if err != nil {
|
||||
return "", err
|
||||
}
|
||||
return string(jsonBytes), nil
|
||||
}
|
||||
Reference in New Issue
Block a user