Commit Graph

22 Commits

Author SHA1 Message Date
Matteo Benedetto a201594a90 perf: reduce NV12 per-frame copies from 5 to 2 via single from_buffer_copy + byref offset 2026-03-24 00:47:32 +01:00
Matteo Benedetto ecdbf5eb04 test: add NV12/mppvideodec decode benchmark with A/V sync and jitter metrics 2026-03-24 00:40:13 +01:00
Matteo Benedetto 5332ce9880 fix: use named c_ubyte arrays to prevent dangling pointer segfault in SDL_UpdateNVTexture 2026-03-24 00:31:44 +01:00
Matteo Benedetto bb0ac90c96 feat: add detailed logging for NV12 frames, GStreamer warnings, and render errors 2026-03-24 00:26:17 +01:00
Matteo Benedetto 0c8e2c2a11 player: fix SDL_UpdateNVTexture ctypes cast — cast c_char_Array to LP_c_ubyte 2026-03-24 00:03:34 +01:00
Matteo Benedetto fe2f25d4cf player: auto-enable HW decode when VPU accessible — remove R36S_HW_DECODE opt-in gate 2026-03-24 00:00:19 +01:00
Matteo Benedetto 9b8ddb3a05 ui: fix PAGE_UP/PAGE_DOWN crash — use self._layout.page_size not theme.PAGE_SIZE 2026-03-23 23:55:47 +01:00
Matteo Benedetto 6715f4b227 player: log last DLNA URL to /tmp/dlna_last_url.txt on play(); tests: auto-load it in diagnostic script 2026-03-23 23:50:11 +01:00
Matteo Benedetto 79a1c9a78c tests: fix identity handoff signal signature (*args for GStreamer 1.28 compat) 2026-03-23 23:38:44 +01:00
Matteo Benedetto 1a3549312e tests: fix benchmark (yuv420p fixture, identity probe frame counter) 2026-03-23 23:37:23 +01:00
Matteo Benedetto 9ab0ec4f44 tests: fix benchmark pipelines (decodebin + rank steering, LD_PRELOAD note) 2026-03-23 23:26:42 +01:00
Matteo Benedetto 4a0275d145 tests: add FHD H.264 benchmark fixture and decode benchmark script 2026-03-23 23:20:57 +01:00
Matteo Benedetto 6e15fcab5a player: NV12 zero-copy SDL upload path for Rockchip MPP hardware decode
- _Frame: add pixel_format ('BGRA'|'NV12'), uv_pixels, uv_pitch fields
- _create_appsink: accept NV12 caps when R36S_HW_DECODE=1 (NV12;BGRA fallback)
- render(): choose SDL_PIXELFORMAT_NV12 texture + SDL_UpdateNVTexture for NV12
  frames, avoiding any software colourspace conversion on the CPU
- _on_new_sample: detect format via VideoInfo.finfo.name, extract Y+UV planes
  separately from NV12 GStreamer buffers
- _destroy_texture: reset _texture_format to 'BGRA'
- deploy/arkos/MatHacks.sh: set R36S_HW_DECODE=1 to activate the path
- tests/test_player.py: add finfo mock, pixel_format to SimpleNamespace frame
2026-03-23 22:58:08 +01:00
Matteo Benedetto e23c57318f player: disable mppvideodec auto-rank-boost, add R36S_HW_DECODE=1 opt-in
mppvideodec outputs NV12 (hardware format) which GStreamer videoconvert
converts to BGRA in scalar software code — slower than avdec_h264 which
uses libav's NEON-optimised YUV→BGRA path.

Default behaviour: software decode (avdec_h264) at PRIMARY rank.
The MPP plugin is still detected and logged so the user knows it is
installed and operational.

Set R36S_HW_DECODE=1 to re-enable the rank boost once a zero-copy
NV12→SDL_UpdateNVTexture (or similar) upload path is implemented.
2026-03-23 22:49:16 +01:00
Matteo Benedetto d79bc3e16f deploy: bundle pre-built MPP libs for RK3326, update setup script and status
- deploy/arkos/mpp-libs/: add librockchip_mpp.so*, librockchip_vpu.so*,
  libgstrockchipmpp.so — built from source via Docker QEMU (arm64v8/ubuntu:focal)
  using rockchip-linux/mpp + JeffyCN/mirrors@gstreamer-rockchip (-Drga=disabled)
- deploy/arkos/setup_hw_decode.sh: detect mpp-libs/ subdir and install from it
  automatically, no network required; apt fallback retained
- deploy/arkos/mpp-libs/README.md: document origin, target SoC, install steps
- tests/test_video_playback_device.py: on-device GStreamer diagnostic script
- docs/development-status.md: mark MPP HW decode deployed, mppvideodec verified

Verified on physical R36S: mppvideodec found by GStreamer registry with
GST_PLUGIN_PATH=/usr/lib/aarch64-linux-gnu/gstreamer-1.0
2026-03-23 22:37:41 +01:00
Matteo Benedetto ddbe31dc02 player: probe Rockchip MPP/V4L2 HW decoders at pipeline init, add setup_hw_decode.sh 2026-03-23 21:42:25 +01:00
Matteo Benedetto 544ed8bc6d ui: runtime-scaled layout for 640x480 and 720x720 displays 2026-03-22 16:57:24 +01:00
Matteo Benedetto 527e63a769 deploy: add arkos/MatHacks.sh launcher with system GST_PLUGIN_PATH+LD_PRELOAD 2026-03-22 16:38:39 +01:00
Matteo Benedetto 4b4c90fb0c deploy: add run.sh launch wrapper with GST_PLUGIN_PATH+LD_PRELOAD for R36S
On linux-aarch64 the conda gst-libav package has an unfixable ABI mismatch
(libdav1d.so.6 missing, libicuuc.so.78 via libxml2-16). Fix: use system
gstreamer1.0-libav installed via apt with GST_PLUGIN_PATH, and preload
system libgomp.so.1 to avoid static TLS block errors when dlopen loads
libgstlibav.so. avdec_h264 and avdec_aac now register correctly on device.

These vars are stored in conda activate.d/gst-env.sh and in deploy/run.sh.
2026-03-22 16:30:57 +01:00
Matteo Benedetto 193e914ffd Refresh env, add aiohttp dep, improve resource selection and GStreamer flags 2026-03-22 12:32:40 +01:00
Matteo Benedetto 6fc467127c Add publication metadata 2026-03-21 15:55:55 +01:00
Matteo Benedetto 1d89c7fdc7 Initial import 2026-03-21 15:55:32 +01:00