Add webcam functionality to the agent's API and web interface. Implement endpoints for listing available webcams and capturing frames, along with corresponding UI elements for device selection and frame display. Update OpenAPI specification to include new webcam features, enhancing user interaction with webcam devices.

This commit is contained in:
2026-08-29 18:34:05 +03:00
parent 421c83afd2
commit dece8b3ebe
9 changed files with 549 additions and 1 deletions
+50
View File
@@ -0,0 +1,50 @@
package webcam
import "testing"
func TestDecodeBMP_roundtripRGB(t *testing.T) {
// 2x2 24-bit BI_RGB bottom-up BMP
row := []byte{
0, 0, 255, // BGR red
0, 255, 0, // green
0, 0, // pad to 4-byte boundary: 6 bytes -> pad 2
}
row2 := []byte{
255, 0, 0, // blue
255, 255, 255, // white
0, 0,
}
pixelData := append(append([]byte{}, row2...), row...) // bottom row first
header := make([]byte, 54)
header[0], header[1] = 'B', 'M'
binaryPutUint32 := func(b []byte, v uint32) {
b[0] = byte(v)
b[1] = byte(v >> 8)
b[2] = byte(v >> 16)
b[3] = byte(v >> 24)
}
binaryPutUint16 := func(b []byte, v uint16) {
b[0] = byte(v)
b[1] = byte(v >> 8)
}
fileSize := uint32(54 + len(pixelData))
binaryPutUint32(header[2:], fileSize)
binaryPutUint32(header[10:], 54)
binaryPutUint32(header[14:], 40) // DIB header size
binaryPutUint32(header[18:], 2) // width
binaryPutUint32(header[22:], 2) // height (bottom-up)
binaryPutUint16(header[26:], 1) // planes
binaryPutUint16(header[28:], 24) // bpp
img, err := decodeBMP(append(header, pixelData...))
if err != nil {
t.Fatal(err)
}
if img.Bounds().Dx() != 2 || img.Bounds().Dy() != 2 {
t.Fatalf("size = %v", img.Bounds())
}
r, g, b, _ := img.At(0, 0).RGBA()
if r>>8 != 255 || g>>8 != 0 || b>>8 != 0 {
t.Fatalf("pixel 0,0 = %d,%d,%d want red", r>>8, g>>8, b>>8)
}
}