Paper · cs.AR · arXiv:2610.35935
RV565: cross-layer co-design for frame-independent video on ESP32-S3.
RV565: Cross-Layer Co-Design for Frame-Independent Video Playback on MicroPython-Class ESP32-S3 Systems
- Ayushman BhattacharyaPollinations AI
- Anwesha ChakrabortyDepartment of CSE, JIS University
24 FPS
on both workloads, zero deadline misses (dual-core)
10.3 ms
worst-frame slack, against a 41.7 ms period
98.1%
of the 40 MHz SPI wire-time bound
r² 0.9987
decode-cost model, pooled across windows
Abstract
Video on SPI-attached microcontroller displays is limited less by decoding than by where each byte lives and which stages run serially. RV565 is a decode framework for frame-independent video whose decoded representation is the panel's native RGB565 format, evaluated on an ESP32-S3 with two ten-second windows of an openly licensed film.
A serial path meets the 41.7 ms deadline on the lighter window but misses all 7,200 frames of the heavier one. RV565's dual-core pipeline inflates the next frame on the second core during the display transfer and sustains 24 FPS with zero misses and 10.3 ms of slack on both windows; frame time then equals a transfer that runs at 98.1% of the wire-time bound.
Because frames are independent, inflation time is linear in the compressed length stored in the container: a model fitted on one window predicts the other within 0.04 ms and identifies, from metadata alone, which window the serial path cannot schedule. Inside OreoOS, firmware inflation alone reaches 12.2 FPS, and stage timing attributes the remaining cost to serialized input, external-RAM placement, and blocking presentation rather than the interpreter.
What the paper establishes.
RV565 does not propose a new entropy coder. The contribution is the co-design of representation, memory placement, scheduling, and display I/O — and the measurements that explain it.
- 01
Container
A frame-independent, display-native RGB565 container with a host- and device-side validation contract.
- 02
Dual-core pipeline
Core 1 inflates frame k+1 while core 0 scales and DMA-transfers frame k, removing decode from the critical path.
- 03
Schedulability from metadata
Inflation time is linear in the stored payload length, so an admission threshold decides from the container which clips a path can play.
- 04
The price of independence
Within Deflate, independent frames cost nothing; against explicit temporal prediction they cost 1.9–5.1× in size.
- 05
Integration anatomy
Inside OreoOS the gap is serialized input, external-RAM placement, and blocking presentation — interpreter overhead is 0.8 ms.
Measured results
Ten independently reset runs per standalone configuration.
| Window | Path | FPS | Misses | Mean (ms) | Max (ms) |
|---|---|---|---|---|---|
| W90 | Standalone, serial | 24.002 | 0 | 40.224 | 41.353 |
| W90 | Standalone, dual-core | 24.009 | 0 | 31.324 | 31.334 |
| W360 | Standalone, serial | 23.905 | 7,200 | 41.830 | 41.901 |
| W360 | Standalone, dual-core | 24.009 | 0 | 31.326 | 31.336 |
| W90 | OreoOS Gallery | 12.170 | 720 | 80.400 | 92.102 |
W90 and W360 are the 90–100 s and 360–370 s windows of Big Buck Bunny, encoded at 180×135 and 24 FPS. The OreoOS row is one 720-frame run; Gallery slows playback instead of skipping frames.
Cite
@misc{bhattacharya2026rv565,
author = {Ayushman Bhattacharya and Anwesha Chakraborty},
title = {RV565: Cross-Layer Co-Design for Frame-Independent Video Playback on MicroPython-Class ESP32-S3 Systems},
year = {2026},
eprint = {2610.35935},
archivePrefix = {arXiv},
primaryClass = {cs.AR}
}