You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
feat: unlock 1080p60 on capable devices via StreamCapability (#28)
Replace the hard-coded 720px / 30fps encode ceilings with a device-
derived StreamCapability (1080p60 on 6GB+ / 6-core hardware, 1080p30 on
4GB, 720p30 on 3GB). encodeSize now takes a maxShortEdge and a new
encodeFrameRate(maxFrameRate:) clamps fps, both fed by the capability so
a high-end pick never asks a device for more than it can sustain. The
thermal governor and adaptive controller continue to pull the live rate
down from this static ceiling at runtime. Settings pickers gain 60fps and
10/12 Mbps options, filtered to the device ceiling. Closes#17.
Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
ForEach(Self.frameRates.filter{ $0 <= capability.maxFrameRate }, id: \.self){ fps in
476
484
Text("\(fps) fps").tag(fps)
477
485
}
478
486
}
479
487
} header:{
480
488
Text("Video")
481
489
} footer:{
482
-
Text("Bitrate is a maximum and automatically drops when the uplink is congested. Frame rate is capped at 30 fps for stable capture and encoding.")
490
+
Text("Bitrate is a maximum and drops automatically when the uplink is congested. Resolution and frame rate are limited to what this device can sustain, and are reduced automatically when it runs warm or low on power.")
0 commit comments