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:
@@ -228,6 +228,7 @@ async def list_engines(_auth: AuthRequired):
|
||||
name=engine_type.upper(),
|
||||
default_config=engine_class.get_default_config(),
|
||||
available=(engine_type in available_set),
|
||||
has_own_displays=getattr(engine_class, 'HAS_OWN_DISPLAYS', False),
|
||||
)
|
||||
)
|
||||
|
||||
|
||||
@@ -50,6 +50,7 @@ class EngineInfo(BaseModel):
|
||||
name: str = Field(description="Human-readable engine name")
|
||||
default_config: Dict = Field(description="Default configuration for this engine")
|
||||
available: bool = Field(description="Whether engine is available on this system")
|
||||
has_own_displays: bool = Field(default=False, description="Engine has its own device list (not desktop monitors)")
|
||||
|
||||
|
||||
class EngineListResponse(BaseModel):
|
||||
|
||||
Reference in New Issue
Block a user