classify video open source errors
This commit is contained in:
@@ -46,42 +46,59 @@ type Source struct {
|
|||||||
func Open(domain, flowID string) (*Source, error) {
|
func Open(domain, flowID string) (*Source, error) {
|
||||||
inst, err := mxl.NewInstance(domain, "")
|
inst, err := mxl.NewInstance(domain, "")
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, fmt.Errorf("NewInstance: %w", err)
|
return nil, wrapError("new MXL instance", ErrorKindUnavailable, err)
|
||||||
}
|
}
|
||||||
r, err := inst.NewReader(flowID)
|
r, err := inst.NewReader(flowID)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
inst.Close()
|
inst.Close()
|
||||||
return nil, fmt.Errorf("NewReader: %w", err)
|
return nil, wrapError("open video reader", ErrorKindUnavailable, err)
|
||||||
}
|
}
|
||||||
info, err := r.Info()
|
info, err := r.Info()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
r.Close()
|
r.Close()
|
||||||
inst.Close()
|
inst.Close()
|
||||||
return nil, fmt.Errorf("Info: %w", err)
|
return nil, wrapError("get video info", ErrorKindUnavailable, err)
|
||||||
}
|
}
|
||||||
def, err := inst.FlowDef(flowID)
|
def, err := inst.FlowDef(flowID)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
r.Close()
|
r.Close()
|
||||||
inst.Close()
|
inst.Close()
|
||||||
return nil, fmt.Errorf("FlowDef: %w", err)
|
return nil, wrapError("read video flow definition", ErrorKindUnavailable, err)
|
||||||
}
|
}
|
||||||
var fd flowDef
|
var fd flowDef
|
||||||
if err := json.Unmarshal([]byte(def), &fd); err != nil {
|
if err := json.Unmarshal([]byte(def), &fd); err != nil {
|
||||||
r.Close()
|
r.Close()
|
||||||
inst.Close()
|
inst.Close()
|
||||||
return nil, fmt.Errorf("parse flow def: %w", err)
|
return nil, wrapError("parse flow definition JSON", ErrorKindInvalidConfig, err)
|
||||||
}
|
}
|
||||||
if fd.FrameWidth == 0 || fd.FrameHeight == 0 {
|
if fd.FrameWidth == 0 || fd.FrameHeight == 0 {
|
||||||
r.Close()
|
r.Close()
|
||||||
inst.Close()
|
inst.Close()
|
||||||
return nil, fmt.Errorf("flow has no video dimensions (not a video flow?)")
|
return nil, wrapError(
|
||||||
|
"validate video flow",
|
||||||
|
ErrorKindInvalidConfig,
|
||||||
|
errors.New("flow has no video dimensions"),
|
||||||
|
)
|
||||||
}
|
}
|
||||||
rate := info.Config.Common.GrainRate
|
rate := info.Config.Common.GrainRate
|
||||||
idx := mxl.CurrentIndex(rate)
|
idx := mxl.CurrentIndex(rate)
|
||||||
if idx == mxl.UndefinedIndex {
|
if idx == mxl.UndefinedIndex {
|
||||||
r.Close()
|
r.Close()
|
||||||
inst.Close()
|
inst.Close()
|
||||||
return nil, fmt.Errorf("invalid grain rate: %d/%d", rate.Num, rate.Den)
|
return nil, wrapError(
|
||||||
|
"validate video flow",
|
||||||
|
ErrorKindInvalidConfig,
|
||||||
|
fmt.Errorf("invalid grain rate: %d/%d", rate.Num, rate.Den),
|
||||||
|
)
|
||||||
|
}
|
||||||
|
if len(info.Config.Discrete.SliceSizes) == 0 {
|
||||||
|
r.Close()
|
||||||
|
inst.Close()
|
||||||
|
return nil, wrapError(
|
||||||
|
"validate video flow",
|
||||||
|
ErrorKindInvalidConfig,
|
||||||
|
errors.New("video flow has no slice sizes"),
|
||||||
|
)
|
||||||
}
|
}
|
||||||
return &Source{
|
return &Source{
|
||||||
inst: inst,
|
inst: inst,
|
||||||
|
|||||||
BIN
Binary file not shown.
Reference in New Issue
Block a user