This project quantitatively tests three core capabilities of the RK3588 platform:
MPPvideo encodingMPPvideo decodingRKNNinference
Test coverage:
- Encoding:
NV12 -> MJPG / H.264 / H.265 - Decoding:
MJPG -> YUV420 - Inference:
640x640input withYOLOv8n / YOLOv8s / YOLOv8m - Resolutions:
720p / 1080p / 2K / 4K / 8K
#RK3588 Benchmark Summary
- Generated at:
2026-09-20 17:09:50 - Codec frames: warm-up
20+ measured120 - Inference frames: warm-up
20+ measured200 - CPU governor:
ondemand - Temperature before/after: approximately
35–36°C / 36–37°C
#Video Encode Benchmark (NV12 -> MJPG / H.264 / H.265)
| Resolution | Size | Codec | Bitrate (Mbps) | Pure FPS | Pipeline FPS | Pure Avg (ms) | Pure P95 (ms) | Output (MB) | Status |
|---|---|---|---|---|---|---|---|---|---|
| 720p | 1280×720 | MJPG | 20.0 | 128.0 | 94.9 | 7.8 | 8.2 | 17.2 | OK |
| 720p | 1280×720 | H.264 | 4.0 | 397.3 | 233.7 | 2.5 | 2.8 | 1.8 | OK |
| 720p | 1280×720 | H.265 | 4.0 | 400.0 | 285.1 | 2.5 | 2.6 | 1.1 | OK |
| 1080p | 1920×1080 | MJPG | 30.0 | 203.0 | 95.9 | 4.9 | 5.3 | 38.6 | OK |
| 1080p | 1920×1080 | H.264 | 8.0 | 218.0 | 121.7 | 4.6 | 5.1 | 3.6 | OK |
| 1080p | 1920×1080 | H.265 | 8.0 | 213.4 | 111.1 | 4.7 | 4.8 | 2.4 | OK |
| 2K | 2560×1440 | MJPG | 45.0 | 120.7 | 45.6 | 8.3 | 8.5 | 68.4 | OK |
| 2K | 2560×1440 | H.264 | 16.0 | 137.0 | 92.7 | 7.3 | 7.4 | 7.3 | OK |
| 2K | 2560×1440 | H.265 | 16.0 | 138.5 | 93.8 | 7.2 | 7.3 | 4.2 | OK |
| 4K | 3840×2160 | MJPG | 60.0 | 55.9 | 20.3 | 17.9 | 19.3 | 153.9 | OK |
| 4K | 3840×2160 | H.264 | 32.0 | 64.0 | 35.4 | 15.6 | 16.0 | 14.6 | OK |
| 4K | 3840×2160 | H.265 | 32.0 | 64.8 | 35.6 | 15.4 | 15.7 | 9.6 | OK |
| 8K | 7680×4320 | MJPG | 90.0 | 15.6 | 10.2 | 64.2 | 65.4 | 615.2 | OK |
| 8K | 7680×4320 | H.264 | 64.0 | 16.7 | 11.3 | 59.9 | 60.7 | 27.5 | OK |
| 8K | 7680×4320 | H.265 | 64.0 | 32.4 | 18.2 | 30.8 | 31.2 | 31.0 | OK |
#Video Decode Benchmark (MJPG -> YUV420)
| Resolution | Size | Frames | Pure FPS | Pipeline FPS | Pure Avg (ms) | Pure P95 (ms) | Status |
|---|---|---|---|---|---|---|---|
| 720p | 1280×720 | 120/120 | 497.4 | 477.8 | 2.0 | 2.4 | OK |
| 1080p | 1920×1080 | 120/120 | 311.7 | 290.3 | 3.2 | 3.4 | OK |
| 2K | 2560×1440 | 120/120 | 208.8 | 198.8 | 4.8 | 5.2 | OK |
| 4K | 3840×2160 | 120/120 | 106.1 | 100.6 | 9.4 | 10.1 | OK |
| 8K | 7680×4320 | 120/120 | 30.4 | 28.8 | 32.9 | 34.4 | OK |
#YOLOv8 640x640 Inference Benchmark
| Model | Inference FPS | Avg (ms) | P95 (ms) | Preprocess (ms) | NPU (ms) | Status |
|---|---|---|---|---|---|---|
| YOLOv8n | 33.9 | 28.6 | 33.1 | 0.9 | 19.6 | OK |
| YOLOv8s | 16.7 | 59.2 | 64.6 | 0.8 | 37.8 | OK |
| YOLOv8m | 9.9 | 100.8 | 105.8 | 0.8 | 81.8 | OK |
#1. How to Run the Benchmark Project
Run the benchmark on the reComputer RK3588 board.
sudo apt update && sudo apt install unzip -y
wget https://files.seeedstudio.com/RK3576/rk3588_mpp_benchmark_install.zip -O install.zip && unzip install.zip
cd ./install && export LD_LIBRARY_PATH="$(pwd)/lib:${LD_LIBRARY_PATH}" && chmod +x ./bin/rk3588_benchmark
sudo ./bin/rk3588_benchmarkThe test results are saved in:
ls ./benchmark_results
benchmark_summary.md video_codec_benchmark.csv yolov8_inference_benchmark.csvCommon parameters:
./bin/rk3588_benchmark \
--output-dir ./benchmark_results \
--resolutions 720p,1080p,2k,4k,8k \
--models yolov8n,yolov8s,yolov8m \
--codec-warmup 20 \
--codec-frames 120 \
--infer-warmup 20 \
--infer-frames 200The wrapper script points LD_LIBRARY_PATH to the packaged lib/ directory. If the current user cannot access /dev/mpp_service or /dev/rga, it reruns through sudo.
#2. Project Capabilities
The project automatically generates test frames, runs multi-resolution encoding, MJPG hardware decoding, and 640x640 YOLOv8 inference tests, and exports a Markdown summary with CSV raw data.
#3. Test Process
- Generate dynamic
YUV420SP (NV12)frames at the selected resolution. - Run the MPP
MJPG,H.264, andH.265encoders separately. - Retain the generated MJPG elementary stream and decode it to
YUV420through the MPP advanced task API. - Generate
640x640 NV12frames and preprocess them through RGA. - Run the RK3588-specific YOLOv8n/s/m RKNN models.
- Aggregate FPS, average latency, P95 latency, and output size.
- Generate Markdown and CSV reports.
#4. Technical Approach
#4.1 Encoding
The encoder uses Rockchip MPP with dynamic YUV420SP (NV12) input. MJPG uses Q=80; H.264 and H.265 use CBR at the listed bitrates. Each group warms up for 20 frames and measures 120 frames.
Pure FPS: measured frames divided by accumulated time in MPPencode_put_frameandencode_get_packetPipeline FPS: full loop including frame generation, input writes, and output copiesPure Avg/P95: per-frame latency of the measured MPP intervalOutput: total encoded size during the 120 measured frames
Pure FPS is a serial-submission service rate. It excludes periods when the VPU may be idle while the CPU prepares the next frame, so it is not the final frame rate of a camera, network, display, or storage pipeline.
#4.2 Decoding
The decoder reuses the MJPG stream at each resolution and runs MJPG -> YUV420 through the RK3588 MPP advanced task API. Each group warms up for 20 frames and measures 120 frames.
Pure Decode FPS: measured after compressed-packet allocation and copying until MPP returns the output framePipeline FPS: also includes packet preparation and task recycling
#4.3 Inference
The inference path generates 640x640 NV12 frames, preprocesses them with RGA, and sends them to RKNN Runtime. It tests:
yolov8n_rk3588.rknnyolov8s_rk3588.rknnyolov8m_rk3588.rknn
Each model warms up for 20 frames and measures 200 frames. The report records complete Infer, RGA preprocessing, and RKNN inference-stage latency.
#5. Explanation of Result Metrics
#5.1 Encoding Results
Use Pure FPS to compare VPU service capability and Pipeline FPS to assess the unoptimized complete loop. Their gap indicates the cost of frame generation and memory copying.
#5.2 Decoding Results
Pure Avg/P95 and Pure FPS describe hardware decoding after packet preparation. Pipeline FPS covers the complete packet-processing loop.
#5.3 Inference Results
Inference FPS comes from the complete serial Infer call. Preprocess isolates RGA work; NPU reports the RKNN stage. Camera capture, networking, display, and application queues are excluded.
#6. Objective Assessment Based on the Current Results
After excluding CPU-side NV12 generation, input-memory writes, and output copying, pure 4K H.264/H.265 encoding on the RK3588 reaches approximately 64 FPS, pure 4K MJPG decoding reaches 106.1 FPS, and YOLOv8n inference reaches 33.9 FPS. The lower end-to-end encoding figures mainly reflect frame preparation and memory movement in this benchmark pipeline rather than the VPU itself. Although pure 8K H.265 encoding reaches 32.4 FPS, the complete loop reaches only 18.2 FPS; sustained end-to-end 8K@30 still requires zero-copy, parallel submission, and optimization of the complete media path.
#7. Recommended Deployment Strategy
- Use YOLOv8n by default. For YOLOv8s/m, use frame sampling and bounded queues.
- Production
4K H.264/H.265pipelines should use zero-copy or shared capture buffers and reserve memory bandwidth for other workloads. - Do not use
32.4 Pure FPSto claim end-to-end8K@30; the current pipeline reaches only18.2 FPS. - Leave engineering margin for
8K MJPGdecoding because P95 exceeds one 30-FPS frame interval. - Before publishing formal results, fix clocks where appropriate, run at least three rounds, and report median, P95, and temperature.