Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
14 changes: 11 additions & 3 deletions internal/orchestrator/orchestrator.go
Original file line number Diff line number Diff line change
Expand Up @@ -59,9 +59,11 @@ var (
const (
DefaultDockerStopTimeoutSeconds = 5

CameraDevice = "camera"
MicrophoneDevice = "microphone"
SpeakerDevice = "speaker"
CameraDevice = "camera"
RemoteCameraDevice = "remote_camera"
MicrophoneDevice = "microphone"
RemoteMicrophoneDevice = "remote_microphone"
SpeakerDevice = "speaker"
)

type AppStreamMessage struct {
Expand Down Expand Up @@ -1084,6 +1086,12 @@ func validateDevices(res *deviceResult, requiredDeviceClasses map[string]any) er
if len(requiredDeviceClasses) > 0 {
for class := range requiredDeviceClasses {
switch class {
case RemoteCameraDevice:
// Remote camera does not require a local camera device to be present
continue
case RemoteMicrophoneDevice:
// Remote microphone does not require a local microphone device to be present
continue
case CameraDevice:
if !res.hasVideoDevice {
return fmt.Errorf("no camera found")
Expand Down
2 changes: 2 additions & 0 deletions internal/orchestrator/provision.go
Original file line number Diff line number Diff line change
Expand Up @@ -275,6 +275,8 @@ func generateMainComposeFile(

// 6. Collect all the required device classes from the app descriptor
if len(app.Descriptor.RequiredDevices) > 0 {
// Required devices defined at app level take precedence over brick defined ones
requiredDeviceClasses = make(map[string]any)
for _, deviceClass := range app.Descriptor.RequiredDevices {
requiredDeviceClasses[deviceClass] = true
}
Expand Down