Add camera/webcam capture engine with engine-aware display picker

- New CameraEngine using OpenCV VideoCapture for webcam capture
- HAS_OWN_DISPLAYS class attribute on CaptureEngine base to distinguish
  engines with their own device lists from desktop monitor engines
- Display picker renders device list for cameras/scrcpy, spatial layout
  for desktop monitors
- Engine-aware display label formatting (camera name vs monitor index)
- Stream modal properly loads engine-specific displays on template change,
  edit, and clone
- Camera backend config rendered as dropdown (auto/dshow/msmf/v4l2)
- Remove offline label from device cards (healthcheck indicator suffices)

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
2026-03-01 12:46:28 +03:00
parent b9ec509f56
commit 8fe9c6489b
14 changed files with 405 additions and 42 deletions

View File

@@ -723,6 +723,36 @@
background: rgba(76, 175, 80, 0.12) !important;
}
/* ── Device picker list (cameras, scrcpy) ─────────────────────── */
.device-picker-list {
display: flex;
flex-direction: column;
gap: 0.5rem;
}
.device-picker-item {
position: relative;
display: flex;
align-items: center;
gap: 0.75rem;
padding: 0.75rem 1rem;
border: 2px solid var(--border-color);
border-radius: 8px;
background: linear-gradient(135deg, rgba(128, 128, 128, 0.08), rgba(128, 128, 128, 0.03));
cursor: pointer;
}
.device-picker-item .layout-index-label {
position: static;
flex-shrink: 0;
}
.device-picker-item .layout-display-label {
text-align: left;
padding: 0;
}
/* ── Gradient editor ────────────────────────────────────────────── */
.effect-palette-preview {