Files
Anthias/bin/test_webview_cpp.sh
Viktor Petersson 1f438d2af0 perf(viewer): render video via QML VideoOutput in a QQuickWidget (#2975)
* perf(viewer): render video via QML VideoOutput in a QQuickWidget

- replace the QGraphicsVideoItem-on-raster-QGraphicsView substrate:
  QVideoFrame::toImage did an RHI offscreen render + GPU->CPU
  readback per frame, capping presentation at 8.3 fps (Pi 4) /
  10-12 fps (Pi 5) with a saturated GUI thread while HW decode ran
  fine (issue 2967). Validated on both testbeds: Pi 4 30.0 fps
  presented at 64% total CPU, Pi 5 26.6 fps at 13-35%
- VideoOutput keeps frames on the GPU: scene-graph textures with
  shader YUV->RGB, composited through the same QQuickRenderControl
  FBO machinery QWebEngineView already uses (eglfs-safe, inherits
  whole-screen rotation -- re-validated under QT_QPA_EGLFS_ROTATION)
- log frames-rendered (QQuickWindow::afterRendering) next to
  frames-delivered in playback-stats so presentation-side drops are
  visible -- the sink-only counter is how the 8 fps regression
  shipped unnoticed; connection is retried from play() so the
  counter can't silently stay dead
- fail hard (qFatal) when the QML scene is unavailable instead of
  decoding video to nowhere: crash-respawn is supervised and loud,
  a silent black-screen kiosk is not
- video-rotate maps to VideoOutput.orientation (still a defensive
  no-op; every platform rotates the whole screen)
- ship qt6-declarative-dev + qml6-module-qtquick/-qtmultimedia in
  the Qt6 viewer images; drop the now-unused multimediawidgets
- run the C++ tests with QT_QUICK_BACKEND=software so the QML scene
  loads under the offscreen platform

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>

* docs(image-builder): align gstreamer-drop version comment to Qt 6.5

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>

---------

Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-02 17:06:30 +02:00

1.4 KiB
Executable File