# aedancullen/gst-plugins-aw architecture

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

- Interactive diagram: https://gitdiagram.com/aedancullen/gst-plugins-aw
- Repository: https://github.com/aedancullen/gst-plugins-aw

## Overview

This repository provides optimized GStreamer 1.0 video sink plugins for Linux console framebuffers. The user-facing workflow is to send video frames through a GStreamer sink, where the shared framebuffer sink handles configuration, buffers, and display timing, and a backend presents frames through fbdev, DRM, or sunxi hardware. The sunxi implementation adds display-engine and transform support. The README is brief; backend links below follow sampled inheritance declarations and source-index references, while undocumented runtime details are omitted or marked unverified.

Main entry points: [`src/gstfbdevframebuffersink.c`](https://github.com/aedancullen/gst-plugins-aw/blob/1.8.2-sun20iw1p1-fixes/src/gstfbdevframebuffersink.c) (Fbdev backend), [`src/gstsunxifbsink.c`](https://github.com/aedancullen/gst-plugins-aw/blob/1.8.2-sun20iw1p1-fixes/src/gstsunxifbsink.c) (Sunxi sink), [`src/gstframebuffersink.c`](https://github.com/aedancullen/gst-plugins-aw/blob/1.8.2-sun20iw1p1-fixes/src/gstframebuffersink.c) (Framebuffer sink core), [`src/displayInterface.c`](https://github.com/aedancullen/gst-plugins-aw/blob/1.8.2-sun20iw1p1-fixes/src/displayInterface.c) (Display interface)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_sink["GStreamer sinks"]
  node_fbdev2["Fbdev2 sink<br/>[gstfbdev2sink.c]"]
  node_fbdev2_api["Fbdev2 sink API<br/>[gstfbdev2sink.h]"]
end

subgraph group_fbdev["Framebuffer rendering"]
  node_base["Framebuffer sink core"]
  node_base_api["Sink state and API"]
end

subgraph group_hardware["Display backends"]
  node_fbdev_backend["Fbdev backend"]
  node_fbdev_api["Fbdev backend API"]
  node_drm["DRM sink<br/>[gstdrmsink.c]"]
  node_drm_api["DRM sink API<br/>[gstdrmsink.h]"]
end

subgraph group_sunxi["Sunxi acceleration"]
  node_sunxi["Sunxi sink<br/>[gstsunxifbsink.c]"]
  node_sunxi_api["Sunxi sink API<br/>[gstsunxifbsink.h]"]
  node_display["Display interface<br/>[displayInterface.c]"]
  node_display_api["Display interface API<br/>[displayInterface.h]"]
  node_disp_v1["Display ABI v1<br/>[sunxi_display_v1.h]"]
  node_disp_v2["Display ABI v2<br/>[sunxi_display_v2.h]"]
  node_transform["Transform definitions<br/>[sunxi_tr.h]"]
  node_g2d["G2D definitions<br/>[g2d_driver_enh.h]"]
end

node_producer(("GStreamer pipeline"))
node_display_device["Linux display devices"]

node_producer -.->|"submits frames"| node_base
node_base -->|"uses sink state"| node_base_api
node_fbdev_backend -->|"extends sink"| node_base
node_fbdev2 -->|"specializes backend"| node_fbdev_backend
node_fbdev2_api -->|"extends API"| node_fbdev_backend
node_drm -->|"implements hooks"| node_base
node_drm_api -->|"extends API"| node_base_api
node_sunxi -->|"extends backend"| node_fbdev_backend
node_sunxi_api -->|"extends API"| node_fbdev_api
node_sunxi -->|"uses interface"| node_display
node_display -->|"implements API"| node_display_api
node_display_api -->|"includes ABI"| node_disp_v1
node_display_api -->|"includes ABI"| node_disp_v2
node_sunxi -->|"uses definitions"| node_transform
node_sunxi -->|"uses definitions"| node_g2d
node_fbdev_backend -.->|"maps framebuffer"| node_display_device
node_drm -.->|"accesses DRM"| node_display_device
node_display -.->|"controls display"| node_display_device

click node_base "https://github.com/aedancullen/gst-plugins-aw/blob/1.8.2-sun20iw1p1-fixes/src/gstframebuffersink.c"
click node_base_api "https://github.com/aedancullen/gst-plugins-aw/blob/1.8.2-sun20iw1p1-fixes/src/gstframebuffersink.h"
click node_fbdev_backend "https://github.com/aedancullen/gst-plugins-aw/blob/1.8.2-sun20iw1p1-fixes/src/gstfbdevframebuffersink.c"
click node_fbdev_api "https://github.com/aedancullen/gst-plugins-aw/blob/1.8.2-sun20iw1p1-fixes/src/gstfbdevframebuffersink.h"
click node_fbdev2 "https://github.com/aedancullen/gst-plugins-aw/blob/1.8.2-sun20iw1p1-fixes/src/gstfbdev2sink.c"
click node_fbdev2_api "https://github.com/aedancullen/gst-plugins-aw/blob/1.8.2-sun20iw1p1-fixes/src/gstfbdev2sink.h"
click node_drm "https://github.com/aedancullen/gst-plugins-aw/blob/1.8.2-sun20iw1p1-fixes/src/gstdrmsink.c"
click node_drm_api "https://github.com/aedancullen/gst-plugins-aw/blob/1.8.2-sun20iw1p1-fixes/src/gstdrmsink.h"
click node_sunxi "https://github.com/aedancullen/gst-plugins-aw/blob/1.8.2-sun20iw1p1-fixes/src/gstsunxifbsink.c"
click node_sunxi_api "https://github.com/aedancullen/gst-plugins-aw/blob/1.8.2-sun20iw1p1-fixes/src/gstsunxifbsink.h"
click node_display "https://github.com/aedancullen/gst-plugins-aw/blob/1.8.2-sun20iw1p1-fixes/src/displayInterface.c"
click node_display_api "https://github.com/aedancullen/gst-plugins-aw/blob/1.8.2-sun20iw1p1-fixes/src/displayInterface.h"
click node_disp_v1 "https://github.com/aedancullen/gst-plugins-aw/blob/1.8.2-sun20iw1p1-fixes/src/sunxi_display_v1.h"
click node_disp_v2 "https://github.com/aedancullen/gst-plugins-aw/blob/1.8.2-sun20iw1p1-fixes/src/sunxi_display_v2.h"
click node_transform "https://github.com/aedancullen/gst-plugins-aw/blob/1.8.2-sun20iw1p1-fixes/src/sunxi_tr.h"
click node_g2d "https://github.com/aedancullen/gst-plugins-aw/blob/1.8.2-sun20iw1p1-fixes/src/g2d_driver_enh.h"

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_fbdev2,node_fbdev2_api toneBlue
class node_base,node_base_api toneAmber
class node_fbdev_backend,node_fbdev_api,node_drm,node_drm_api toneMint
class node_sunxi,node_sunxi_api,node_display,node_display_api,node_disp_v1,node_disp_v2,node_transform,node_g2d toneRose
class node_producer,node_display_device toneIndigo
```

## Components

### GStreamer sinks

- [Fbdev2 sink](https://github.com/aedancullen/gst-plugins-aw/blob/1.8.2-sun20iw1p1-fixes/src/gstfbdev2sink.c): `src/gstfbdev2sink.c`
- [Fbdev2 sink API](https://github.com/aedancullen/gst-plugins-aw/blob/1.8.2-sun20iw1p1-fixes/src/gstfbdev2sink.h): `src/gstfbdev2sink.h`

### Framebuffer rendering

- [Framebuffer sink core](https://github.com/aedancullen/gst-plugins-aw/blob/1.8.2-sun20iw1p1-fixes/src/gstframebuffersink.c): `src/gstframebuffersink.c`
- [Sink state and API](https://github.com/aedancullen/gst-plugins-aw/blob/1.8.2-sun20iw1p1-fixes/src/gstframebuffersink.h): `src/gstframebuffersink.h`

### Display backends

- [Fbdev backend](https://github.com/aedancullen/gst-plugins-aw/blob/1.8.2-sun20iw1p1-fixes/src/gstfbdevframebuffersink.c): `src/gstfbdevframebuffersink.c`
- [Fbdev backend API](https://github.com/aedancullen/gst-plugins-aw/blob/1.8.2-sun20iw1p1-fixes/src/gstfbdevframebuffersink.h): `src/gstfbdevframebuffersink.h`
- [DRM sink](https://github.com/aedancullen/gst-plugins-aw/blob/1.8.2-sun20iw1p1-fixes/src/gstdrmsink.c): `src/gstdrmsink.c`
- [DRM sink API](https://github.com/aedancullen/gst-plugins-aw/blob/1.8.2-sun20iw1p1-fixes/src/gstdrmsink.h): `src/gstdrmsink.h`

### Sunxi acceleration

- [Sunxi sink](https://github.com/aedancullen/gst-plugins-aw/blob/1.8.2-sun20iw1p1-fixes/src/gstsunxifbsink.c): `src/gstsunxifbsink.c`
- [Sunxi sink API](https://github.com/aedancullen/gst-plugins-aw/blob/1.8.2-sun20iw1p1-fixes/src/gstsunxifbsink.h): `src/gstsunxifbsink.h`
- [Display interface](https://github.com/aedancullen/gst-plugins-aw/blob/1.8.2-sun20iw1p1-fixes/src/displayInterface.c): `src/displayInterface.c`
- [Display interface API](https://github.com/aedancullen/gst-plugins-aw/blob/1.8.2-sun20iw1p1-fixes/src/displayInterface.h): `src/displayInterface.h`
- [Display ABI v1](https://github.com/aedancullen/gst-plugins-aw/blob/1.8.2-sun20iw1p1-fixes/src/sunxi_display_v1.h): `src/sunxi_display_v1.h`
- [Display ABI v2](https://github.com/aedancullen/gst-plugins-aw/blob/1.8.2-sun20iw1p1-fixes/src/sunxi_display_v2.h): `src/sunxi_display_v2.h`
- [Transform definitions](https://github.com/aedancullen/gst-plugins-aw/blob/1.8.2-sun20iw1p1-fixes/src/sunxi_tr.h): `src/sunxi_tr.h`
- [G2D definitions](https://github.com/aedancullen/gst-plugins-aw/blob/1.8.2-sun20iw1p1-fixes/src/g2d_driver_enh.h): `src/g2d_driver_enh.h`

### Other components

- **GStreamer pipeline**
- **Linux display devices**

## Connections

- GStreamer pipeline → Framebuffer sink core: submits frames
- Framebuffer sink core → Sink state and API: uses sink state (evidence: `src/gstframebuffersink.c`)
- Fbdev backend → Framebuffer sink core: extends sink
- Fbdev2 sink → Fbdev backend: specializes backend
- Fbdev2 sink API → Fbdev backend: extends API (evidence: `src/gstfbdev2sink.h`)
- DRM sink → Framebuffer sink core: implements hooks (evidence: `src/gstdrmsink.c`)
- DRM sink API → Sink state and API: extends API (evidence: `src/gstdrmsink.h`)
- Sunxi sink → Fbdev backend: extends backend
- Sunxi sink API → Fbdev backend API: extends API (evidence: `src/gstsunxifbsink.h`)
- Sunxi sink → Display interface: uses interface (evidence: `src/gstsunxifbsink.c`)
- Display interface → Display interface API: implements API (evidence: `src/displayInterface.c`)
- Display interface API → Display ABI v1: includes ABI (evidence: `src/displayInterface.h`)
- Display interface API → Display ABI v2: includes ABI (evidence: `src/displayInterface.h`)
- Sunxi sink → Transform definitions: uses definitions (evidence: `src/gstsunxifbsink.c`)
- Sunxi sink → G2D definitions: uses definitions (evidence: `src/gstsunxifbsink.c`)
- Fbdev backend → Linux display devices: maps framebuffer
- DRM sink → Linux display devices: accesses DRM
- Display interface → Linux display devices: controls display
