mirror of
https://github.com/mudler/LocalAI.git
synced 2026-10-28 09:08:54 -04:00
Remove a stray blank line in backend.proto and group the imports in pkg/motion/validation.go. Decide the motion usecase guess from the backend capability registry instead of a hardcoded backend name, so variant builds of the backend resolve too. Declare the weights licence in the gallery entry, as stated on the model card. Assisted-by: Claude Code:claude-sonnet-5-5
38 lines
1.1 KiB
Go
38 lines
1.1 KiB
Go
// SPDX-License-Identifier: MIT
|
|
package motion
|
|
|
|
import (
|
|
"fmt"
|
|
"math"
|
|
|
|
motionpb "github.com/mudler/LocalAI/pkg/motion/proto"
|
|
)
|
|
|
|
// ValidateFrame bounds allocation and rejects invalid subject boxes before a
|
|
// host forwards data to a native inference process.
|
|
func ValidateFrame(f *motionpb.Frame) error {
|
|
if f == nil {
|
|
return fmt.Errorf("frame or reset required")
|
|
}
|
|
n := uint64(f.Width) * uint64(f.Height)
|
|
if f.Width < 8 || f.Height < 8 || f.Width > 32766 || f.Height > 32766 || n > 16000000 || uint64(len(f.Rgb)) != n*3 || f.SourceTimeUs < 0 {
|
|
return fmt.Errorf("invalid RGB dimensions, byte length or timestamp")
|
|
}
|
|
b := f.SubjectBox
|
|
if len(b) == 0 {
|
|
return nil
|
|
}
|
|
if len(b) != 4 {
|
|
return fmt.Errorf("subject_box requires four coordinates")
|
|
}
|
|
for _, v := range b {
|
|
if math.IsNaN(float64(v)) || math.IsInf(float64(v), 0) {
|
|
return fmt.Errorf("subject_box must be finite")
|
|
}
|
|
}
|
|
if b[0] < 0 || b[1] < 0 || b[2] > float32(f.Width-1) || b[3] > float32(f.Height-1) || b[2] <= b[0] || b[3] <= b[1] {
|
|
return fmt.Errorf("subject_box must be ordered XYXY within image pixel coordinates")
|
|
}
|
|
return nil
|
|
}
|