mirror of
https://github.com/jetkvm/kvm.git
synced 2026-05-21 05:20:35 +00:00
cb7746fb78
* feat(video): add H.265 codec support with auto-negotiation Add H.265 (HEVC) encoding support to the RV1106 hardware encoder alongside existing H.264. The codec is negotiated per-WebRTC session based on browser capabilities. - Add codec preference setting (Auto/H.265/H.264) to config, RPC, and UI - Auto mode inspects the browser's SDP offer and prefers H.265 when supported, with graceful fallback to H.264 for browsers without H.265 (e.g. Firefox) - Move WebRTC video track creation from newSession() to ExchangeOffer() so the codec can be resolved after seeing the browser's offer - Set encoder codec type in onFirstSessionConnected() before VideoStart() - Show active codec in the status bar when troubleshooting mode is enabled - Remove quality factor >1.0 ceiling from ctrl.c to allow bitrate testing - Fix Go wrapper to check return value from C quality factor setter - Add e2e tests: video quality bitrate measurement, codec negotiation, codec preference persistence, and a quality factor sweep benchmark - Add visual noise helpers (remote host terminal) to e2e test infrastructure * chore(e2e): remove video quality benchmark tests and helpers Remove video-quality-sweep and video-quality spec files — these are benchmarking tools, not regression tests. Also removes the visual noise helpers and hardcoded developer SSH address from helpers.ts. * feat(video): bump bitrate cap to 4000 kbps and tighten VBR ceiling - Increase base_bitrate_high from 2000 to 4000 kbps, giving users better image quality at every quality factor setting. - Tighten VBR max_bitrate from 2x to 1.5x target, reducing encoder overshoot while still allowing headroom for dynamic content. - Add frames dropped, decode time, freeze count to WebRTC test hooks for pipeline health monitoring. - Move bitrate sweep benchmark to ui/benchmarks/ with its own playwright config, separate from the e2e test suite. Sweep results (visual noise, H.264, 1080p): factor=0.1: 3082 kbps, 60fps, 0 dropped, 2.9ms decode factor=0.5: 6357 kbps, 60fps, 0 dropped, 3.6ms decode factor=1.0: 9445 kbps, 59fps, 0 dropped, 4.3ms decode
144 lines
2.7 KiB
Go
144 lines
2.7 KiB
Go
//go:build !linux
|
|
|
|
package native
|
|
|
|
func panicPlatformNotSupported() {
|
|
panic("platform not supported")
|
|
}
|
|
|
|
func setUpNativeHandlers() {
|
|
panicPlatformNotSupported()
|
|
}
|
|
|
|
func uiSetVar(name string, value string) {
|
|
panicPlatformNotSupported()
|
|
}
|
|
|
|
func uiGetVar(name string) string {
|
|
panicPlatformNotSupported()
|
|
return ""
|
|
}
|
|
|
|
func uiSwitchToScreen(screen string) {
|
|
panicPlatformNotSupported()
|
|
}
|
|
|
|
func uiGetCurrentScreen() string {
|
|
panicPlatformNotSupported()
|
|
return ""
|
|
}
|
|
|
|
func uiObjAddState(objName string, state string) (bool, error) {
|
|
panicPlatformNotSupported()
|
|
return false, nil
|
|
}
|
|
|
|
func uiObjClearState(objName string, state string) (bool, error) {
|
|
panicPlatformNotSupported()
|
|
return false, nil
|
|
}
|
|
|
|
func uiObjAddFlag(objName string, flag string) (bool, error) {
|
|
panicPlatformNotSupported()
|
|
return false, nil
|
|
}
|
|
|
|
func uiObjClearFlag(objName string, flag string) (bool, error) {
|
|
panicPlatformNotSupported()
|
|
return false, nil
|
|
}
|
|
|
|
func uiObjHide(objName string) (bool, error) {
|
|
panicPlatformNotSupported()
|
|
return false, nil
|
|
}
|
|
|
|
func uiObjShow(objName string) (bool, error) {
|
|
panicPlatformNotSupported()
|
|
return false, nil
|
|
}
|
|
|
|
func uiObjSetOpacity(objName string, opacity int) (bool, error) {
|
|
panicPlatformNotSupported()
|
|
return false, nil
|
|
}
|
|
|
|
func uiObjFadeIn(objName string, duration uint32) (bool, error) {
|
|
panicPlatformNotSupported()
|
|
return false, nil
|
|
}
|
|
|
|
func uiObjFadeOut(objName string, duration uint32) (bool, error) {
|
|
panicPlatformNotSupported()
|
|
return false, nil
|
|
}
|
|
|
|
func uiLabelSetText(objName string, text string) (bool, error) {
|
|
panicPlatformNotSupported()
|
|
return false, nil
|
|
}
|
|
|
|
func uiImgSetSrc(objName string, src string) (bool, error) {
|
|
panicPlatformNotSupported()
|
|
return false, nil
|
|
}
|
|
|
|
func uiDispSetRotation(rotation uint16) (bool, error) {
|
|
panicPlatformNotSupported()
|
|
return false, nil
|
|
}
|
|
|
|
func uiEventCodeToName(code int) string {
|
|
panicPlatformNotSupported()
|
|
return ""
|
|
}
|
|
|
|
func uiGetLVGLVersion() string {
|
|
panicPlatformNotSupported()
|
|
return ""
|
|
}
|
|
|
|
func videoGetStreamQualityFactor() (float64, error) {
|
|
panicPlatformNotSupported()
|
|
return 0, nil
|
|
}
|
|
|
|
func videoSetStreamQualityFactor(factor float64) error {
|
|
panicPlatformNotSupported()
|
|
return nil
|
|
}
|
|
|
|
func videoSetCodecType(codecType int) error {
|
|
panicPlatformNotSupported()
|
|
return nil
|
|
}
|
|
|
|
func videoGetCodecType() (int, error) {
|
|
panicPlatformNotSupported()
|
|
return 0, nil
|
|
}
|
|
|
|
func videoLogStatus() string {
|
|
panicPlatformNotSupported()
|
|
return ""
|
|
}
|
|
|
|
func videoGetEDID() (string, error) {
|
|
panicPlatformNotSupported()
|
|
return "", nil
|
|
}
|
|
|
|
func videoSetEDID(edid string) error {
|
|
panicPlatformNotSupported()
|
|
return nil
|
|
}
|
|
|
|
func videoGetStreamingStatus() VideoStreamingStatus {
|
|
panicPlatformNotSupported()
|
|
return VideoStreamingStatusInactive
|
|
}
|
|
|
|
func crash() {
|
|
panicPlatformNotSupported()
|
|
}
|