# openipc/pixelpilot architecture

> Architecture diagram of the GitHub repository openipc/pixelpilot, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-09-26). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/openipc/pixelpilot
- Repository: https://github.com/openipc/pixelpilot

## Overview

PixelPilot is an Android FPV ground-station app: it receives wireless video over supported USB Wi-Fi adapters, displays a live feed with telemetry and signal information, and can record video. The main path runs from the pilot opening the app and connecting an adapter, through the WFB link and RTP/video decoding, to the on-screen stream; optional branches provide DVR, object-detection overlay, and MAVLink/OSD telemetry. The README also documents adaptive FEC, audio, and VPN forwarding. Those capabilities are represented at the subsystem level where source excerpts do not establish their internal wiring.

Main entry points: [`app/src/main/java/com/openipc/pixelpilot/VideoActivity.java`](https://github.com/openipc/pixelpilot/blob/master/app/src/main/java/com/openipc/pixelpilot/VideoActivity.java) (Video activity), [`app/src/main/java/com/openipc/pixelpilot/WfbLinkManager.java`](https://github.com/openipc/pixelpilot/blob/master/app/src/main/java/com/openipc/pixelpilot/WfbLinkManager.java) (WFB wireless link), [`app/mavlink/src/main/cpp/mavlink.cpp`](https://github.com/openipc/pixelpilot/blob/master/app/mavlink/src/main/cpp/mavlink.cpp) (MAVLink bindings), [`app/src/main/java/com/openipc/pixelpilot/WfbNgVpnService.java`](https://github.com/openipc/pixelpilot/blob/master/app/src/main/java/com/openipc/pixelpilot/WfbNgVpnService.java) (VPN forwarding)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_app["Android app"]
  node_activity["Video activity<br/>[VideoActivity.java]"]
  node_stats["Link statistics<br/>[VideoActivity.java]"]
end

subgraph group_link["Wireless link"]
  node_linkmanager["Link manager"]
  node_wfb["WFB wireless link"]
  node_fec["Adaptive FEC"]
  node_vpn["VPN forwarding"]
end

subgraph group_media["Video and analysis"]
  node_rtp["RTP parser<br/>[ParseRTP.cpp]"]
  node_video["Live video<br/>[VideoActivity.java]"]
  node_dvr["DVR recording<br/>[VideoActivity.java]"]
  node_detection["Object detection<br/>[VideoActivity.java]"]
  node_overlay["Detection overlay<br/>[VideoActivity.java]"]
  node_audio["Audio playback"]
end

subgraph group_telemetry["Telemetry"]
  node_osd["OSD manager<br/>[OSDManager.java]"]
  node_mavlink["MAVLink bindings<br/>[mavlink.cpp]"]
end

node_pilot(("Pilot"))
node_wifi["USB Wi-Fi adapter"]
node_camera["FPV camera"]
node_flight["Flight controller"]

node_pilot -->|"opens"| node_activity
node_activity -->|"refreshes adapters"| node_linkmanager
node_linkmanager -->|"opens adapter"| node_wifi
node_linkmanager -->|"starts link"| node_wfb
node_camera -->|"broadcasts feed"| node_wfb
node_wfb -->|"delivers RTP"| node_rtp
node_rtp -->|"reconstructs stream"| node_video
node_activity -->|"presents"| node_video
node_activity -->|"records stream"| node_dvr
node_video -.->|"analyzes frames"| node_detection
node_detection -.->|"provides results"| node_overlay
node_activity -.->|"updates"| node_overlay
node_camera -.->|"streams audio"| node_audio
node_activity -->|"sets up"| node_osd
node_activity -->|"starts telemetry"| node_mavlink
node_flight -->|"sends telemetry"| node_mavlink
node_mavlink -->|"telemetry data"| node_osd
node_activity -->|"shows statistics"| node_stats
node_wfb -.->|"adapts FEC"| node_fec
node_activity -.->|"starts service"| node_vpn
node_vpn -.->|"forwards UDP"| node_wfb

click node_activity "https://github.com/openipc/pixelpilot/blob/master/app/src/main/java/com/openipc/pixelpilot/VideoActivity.java"
click node_linkmanager "https://github.com/openipc/pixelpilot/blob/master/app/src/main/java/com/openipc/pixelpilot/WfbLinkManager.java"
click node_wfb "https://github.com/openipc/pixelpilot/blob/master/app/src/main/java/com/openipc/pixelpilot/WfbLinkManager.java"
click node_fec "https://github.com/openipc/pixelpilot/blob/master/app/wfbngrtl8812/src/main/cpp/FecChangeController.h"
click node_vpn "https://github.com/openipc/pixelpilot/blob/master/app/src/main/java/com/openipc/pixelpilot/WfbNgVpnService.java"
click node_rtp "https://github.com/openipc/pixelpilot/blob/master/app/videonative/src/main/cpp/parser/ParseRTP.cpp"
click node_video "https://github.com/openipc/pixelpilot/blob/master/app/src/main/java/com/openipc/pixelpilot/VideoActivity.java"
click node_dvr "https://github.com/openipc/pixelpilot/blob/master/app/src/main/java/com/openipc/pixelpilot/VideoActivity.java"
click node_detection "https://github.com/openipc/pixelpilot/blob/master/app/src/main/java/com/openipc/pixelpilot/VideoActivity.java"
click node_overlay "https://github.com/openipc/pixelpilot/blob/master/app/src/main/java/com/openipc/pixelpilot/VideoActivity.java"
click node_audio "https://github.com/openipc/pixelpilot/tree/master/app"
click node_osd "https://github.com/openipc/pixelpilot/blob/master/app/src/main/java/com/openipc/pixelpilot/osd/OSDManager.java"
click node_mavlink "https://github.com/openipc/pixelpilot/blob/master/app/mavlink/src/main/cpp/mavlink.cpp"
click node_stats "https://github.com/openipc/pixelpilot/blob/master/app/src/main/java/com/openipc/pixelpilot/VideoActivity.java"

classDef toneNeutral fill:#f8fafc,stroke:#334155,stroke-width:1.5px,color:#0f172a
classDef toneBlue fill:#dbeafe,stroke:#2563eb,stroke-width:1.5px,color:#172554
classDef toneAmber fill:#fef3c7,stroke:#d97706,stroke-width:1.5px,color:#78350f
classDef toneMint fill:#dcfce7,stroke:#16a34a,stroke-width:1.5px,color:#14532d
classDef toneRose fill:#ffe4e6,stroke:#e11d48,stroke-width:1.5px,color:#881337
classDef toneIndigo fill:#e0e7ff,stroke:#4f46e5,stroke-width:1.5px,color:#312e81
classDef toneTeal fill:#ccfbf1,stroke:#0f766e,stroke-width:1.5px,color:#134e4a
class node_activity,node_stats toneBlue
class node_linkmanager,node_wfb,node_fec,node_vpn toneAmber
class node_rtp,node_video,node_dvr,node_detection,node_overlay,node_audio toneMint
class node_osd,node_mavlink toneRose
class node_pilot,node_wifi,node_camera,node_flight toneIndigo
```

## Components

### Android app

- [Video activity](https://github.com/openipc/pixelpilot/blob/master/app/src/main/java/com/openipc/pixelpilot/VideoActivity.java): `app/src/main/java/com/openipc/pixelpilot/VideoActivity.java`
- [Link statistics](https://github.com/openipc/pixelpilot/blob/master/app/src/main/java/com/openipc/pixelpilot/VideoActivity.java): `app/src/main/java/com/openipc/pixelpilot/VideoActivity.java`

### Wireless link

- [Link manager](https://github.com/openipc/pixelpilot/blob/master/app/src/main/java/com/openipc/pixelpilot/WfbLinkManager.java): `app/src/main/java/com/openipc/pixelpilot/WfbLinkManager.java`
- [WFB wireless link](https://github.com/openipc/pixelpilot/blob/master/app/src/main/java/com/openipc/pixelpilot/WfbLinkManager.java): `app/src/main/java/com/openipc/pixelpilot/WfbLinkManager.java`
- [Adaptive FEC](https://github.com/openipc/pixelpilot/blob/master/app/wfbngrtl8812/src/main/cpp/FecChangeController.h): `app/wfbngrtl8812/src/main/cpp/FecChangeController.h`
- [VPN forwarding](https://github.com/openipc/pixelpilot/blob/master/app/src/main/java/com/openipc/pixelpilot/WfbNgVpnService.java): `app/src/main/java/com/openipc/pixelpilot/WfbNgVpnService.java`

### Video and analysis

- [RTP parser](https://github.com/openipc/pixelpilot/blob/master/app/videonative/src/main/cpp/parser/ParseRTP.cpp): `app/videonative/src/main/cpp/parser/ParseRTP.cpp`
- [Live video](https://github.com/openipc/pixelpilot/blob/master/app/src/main/java/com/openipc/pixelpilot/VideoActivity.java): `app/src/main/java/com/openipc/pixelpilot/VideoActivity.java`
- [DVR recording](https://github.com/openipc/pixelpilot/blob/master/app/src/main/java/com/openipc/pixelpilot/VideoActivity.java): `app/src/main/java/com/openipc/pixelpilot/VideoActivity.java`
- [Object detection](https://github.com/openipc/pixelpilot/blob/master/app/src/main/java/com/openipc/pixelpilot/VideoActivity.java): `app/src/main/java/com/openipc/pixelpilot/VideoActivity.java`
- [Detection overlay](https://github.com/openipc/pixelpilot/blob/master/app/src/main/java/com/openipc/pixelpilot/VideoActivity.java): `app/src/main/java/com/openipc/pixelpilot/VideoActivity.java`
- [Audio playback](https://github.com/openipc/pixelpilot/tree/master/app): `app`

### Telemetry

- [OSD manager](https://github.com/openipc/pixelpilot/blob/master/app/src/main/java/com/openipc/pixelpilot/osd/OSDManager.java): `app/src/main/java/com/openipc/pixelpilot/osd/OSDManager.java`
- [MAVLink bindings](https://github.com/openipc/pixelpilot/blob/master/app/mavlink/src/main/cpp/mavlink.cpp): `app/mavlink/src/main/cpp/mavlink.cpp`

### Other components

- **Pilot**
- **USB Wi-Fi adapter**
- **FPV camera**
- **Flight controller**

## Connections

- Pilot → Video activity: opens
- Video activity → Link manager: refreshes adapters
- Link manager → USB Wi-Fi adapter: opens adapter
- Link manager → WFB wireless link: starts link
- FPV camera → WFB wireless link: broadcasts feed
- WFB wireless link → RTP parser: delivers RTP
- RTP parser → Live video: reconstructs stream
- Video activity → Live video: presents
- Video activity → DVR recording: records stream
- Live video → Object detection: analyzes frames
- Object detection → Detection overlay: provides results
- Video activity → Detection overlay: updates
- FPV camera → Audio playback: streams audio
- Video activity → OSD manager: sets up
- Video activity → MAVLink bindings: starts telemetry
- Flight controller → MAVLink bindings: sends telemetry
- MAVLink bindings → OSD manager: telemetry data
- Video activity → Link statistics: shows statistics
- WFB wireless link → Adaptive FEC: adapts FEC
- Video activity → VPN forwarding: starts service
- VPN forwarding → WFB wireless link: forwards UDP
