classify video open source errors

This commit is contained in:
Dmitry Sergeev
2026-08-26 23:37:43 +03:00
parent df15876afb
commit 9220bb1e7b
2 changed files with 24 additions and 7 deletions
+24 -7
View File
@@ -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
View File
Binary file not shown.