# jens-duttke/edge264-mvc architecture

> Architecture diagram of the GitHub repository jens-duttke/edge264-mvc, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-11-15). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/jens-duttke/edge264-mvc
- Repository: https://github.com/jens-duttke/edge264-mvc

## Overview

edge264-mvc is a C H.264/MVC decoder. A client submits NAL units and receives decoded frames through a small API; internally, the decoder parses stream metadata and slices, reconstructs pictures, manages MVC view pairing and output order, and schedules work across threads. The graph keeps parsing, reconstruction, and decoder coordination distinct. Evidence is limited to the README and supplied source excerpts/index; some internal calls and unsampled subsystems are therefore omitted.

Main entry points: [`src/edge264mvc_headers.c`](https://github.com/jens-duttke/edge264-mvc/blob/main/src/edge264mvc_headers.c) (Header Parser), [`edge264mvc.h`](https://github.com/jens-duttke/edge264-mvc/blob/main/edge264mvc.h) (Decoder API), [`src/edge264mvc.c`](https://github.com/jens-duttke/edge264-mvc/blob/main/src/edge264mvc.c) (Decoder Engine), [`src/edge264mvc_internal.h`](https://github.com/jens-duttke/edge264-mvc/blob/main/src/edge264mvc_internal.h) (Decoder State)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_api["Public API"]
  node_api_header["Decoder API<br/>[edge264mvc.h]"]
  node_frames["Decoded Frames<br/>[edge264mvc.h]"]
end

subgraph group_control["Decode Coordination"]
  node_decoder["Decoder Engine<br/>[edge264mvc.c]"]
  node_shared_state["Decoder State"]
end

subgraph group_parse["Stream Parsing"]
  node_headers["Header Parser"]
  node_bitstream["Bitstream Reader"]
  node_sei["SEI Parser<br/>[edge264mvc_sei.c]"]
  node_slice["Slice Decoder<br/>[edge264mvc_slice.c]"]
end

subgraph group_recon["Picture Reconstruction"]
  node_motion["Motion Prediction"]
  node_inter["Inter Prediction<br/>[edge264mvc_inter.c]"]
  node_intra["Intra Prediction<br/>[edge264mvc_intra.c]"]
  node_residual["Residual Transform"]
  node_high_bit["High-bit Reconstruction<br/>[edge264mvc_hbd.c]"]
  node_deblock["Deblocking Filter"]
end

node_client(("Decoder Client"))

node_client -->|"submits NALs"| node_api_header
node_api_header -->|"calls API"| node_decoder
node_decoder -->|"dispatches parsing"| node_headers
node_decoder -->|"uses state"| node_shared_state
node_headers -->|"uses state"| node_shared_state
node_headers -->|"includes"| node_bitstream
node_headers -.->|"parses SEI"| node_sei
node_headers -->|"includes"| node_slice
node_headers -->|"includes"| node_high_bit
node_headers -->|"includes"| node_deblock
node_headers -->|"includes"| node_inter
node_headers -->|"includes"| node_intra
node_headers -->|"includes"| node_motion
node_headers -->|"includes"| node_residual
node_slice -->|"uses state"| node_shared_state
node_api_header -->|"returns frames"| node_frames
node_client -->|"receives frames"| node_frames

click node_api_header "https://github.com/jens-duttke/edge264-mvc/blob/main/edge264mvc.h"
click node_decoder "https://github.com/jens-duttke/edge264-mvc/blob/main/src/edge264mvc.c"
click node_shared_state "https://github.com/jens-duttke/edge264-mvc/blob/main/src/edge264mvc_internal.h"
click node_headers "https://github.com/jens-duttke/edge264-mvc/blob/main/src/edge264mvc_headers.c"
click node_bitstream "https://github.com/jens-duttke/edge264-mvc/blob/main/src/edge264mvc_bitstream.c"
click node_sei "https://github.com/jens-duttke/edge264-mvc/blob/main/src/edge264mvc_sei.c"
click node_slice "https://github.com/jens-duttke/edge264-mvc/blob/main/src/edge264mvc_slice.c"
click node_motion "https://github.com/jens-duttke/edge264-mvc/blob/main/src/edge264mvc_mvpred.c"
click node_inter "https://github.com/jens-duttke/edge264-mvc/blob/main/src/edge264mvc_inter.c"
click node_intra "https://github.com/jens-duttke/edge264-mvc/blob/main/src/edge264mvc_intra.c"
click node_residual "https://github.com/jens-duttke/edge264-mvc/blob/main/src/edge264mvc_residual.c"
click node_high_bit "https://github.com/jens-duttke/edge264-mvc/blob/main/src/edge264mvc_hbd.c"
click node_deblock "https://github.com/jens-duttke/edge264-mvc/blob/main/src/edge264mvc_deblock.c"
click node_frames "https://github.com/jens-duttke/edge264-mvc/blob/main/edge264mvc.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_api_header,node_frames,node_client toneBlue
class node_decoder,node_shared_state toneAmber
class node_headers,node_bitstream,node_sei,node_slice toneMint
class node_motion,node_inter,node_intra,node_residual,node_high_bit,node_deblock toneRose
```

## Components

### Public API

- [Decoder API](https://github.com/jens-duttke/edge264-mvc/blob/main/edge264mvc.h): `edge264mvc.h`
- [Decoded Frames](https://github.com/jens-duttke/edge264-mvc/blob/main/edge264mvc.h): `edge264mvc.h`

### Decode Coordination

- [Decoder Engine](https://github.com/jens-duttke/edge264-mvc/blob/main/src/edge264mvc.c): `src/edge264mvc.c`
- [Decoder State](https://github.com/jens-duttke/edge264-mvc/blob/main/src/edge264mvc_internal.h): `src/edge264mvc_internal.h`

### Stream Parsing

- [Header Parser](https://github.com/jens-duttke/edge264-mvc/blob/main/src/edge264mvc_headers.c): `src/edge264mvc_headers.c`
- [Bitstream Reader](https://github.com/jens-duttke/edge264-mvc/blob/main/src/edge264mvc_bitstream.c): `src/edge264mvc_bitstream.c`
- [SEI Parser](https://github.com/jens-duttke/edge264-mvc/blob/main/src/edge264mvc_sei.c): `src/edge264mvc_sei.c`
- [Slice Decoder](https://github.com/jens-duttke/edge264-mvc/blob/main/src/edge264mvc_slice.c): `src/edge264mvc_slice.c`

### Picture Reconstruction

- [Motion Prediction](https://github.com/jens-duttke/edge264-mvc/blob/main/src/edge264mvc_mvpred.c): `src/edge264mvc_mvpred.c`
- [Inter Prediction](https://github.com/jens-duttke/edge264-mvc/blob/main/src/edge264mvc_inter.c): `src/edge264mvc_inter.c`
- [Intra Prediction](https://github.com/jens-duttke/edge264-mvc/blob/main/src/edge264mvc_intra.c): `src/edge264mvc_intra.c`
- [Residual Transform](https://github.com/jens-duttke/edge264-mvc/blob/main/src/edge264mvc_residual.c): `src/edge264mvc_residual.c`
- [High-bit Reconstruction](https://github.com/jens-duttke/edge264-mvc/blob/main/src/edge264mvc_hbd.c): `src/edge264mvc_hbd.c`
- [Deblocking Filter](https://github.com/jens-duttke/edge264-mvc/blob/main/src/edge264mvc_deblock.c): `src/edge264mvc_deblock.c`

### Other components

- **Decoder Client**

## Connections

- Decoder Client → Decoder API: submits NALs (evidence: `README.md`)
- Decoder API → Decoder Engine: calls API (evidence: `README.md`)
- Decoder Engine → Header Parser: dispatches parsing (evidence: `src/edge264mvc.c`)
- Decoder Engine → Decoder State: uses state (evidence: `src/edge264mvc.c`)
- Header Parser → Decoder State: uses state (evidence: `src/edge264mvc_headers.c`)
- Header Parser → Bitstream Reader: includes (evidence: `src/edge264mvc_headers.c`)
- Header Parser → SEI Parser: parses SEI (evidence: `src/edge264mvc_headers.c`)
- Header Parser → Slice Decoder: includes (evidence: `src/edge264mvc_headers.c`)
- Header Parser → High-bit Reconstruction: includes (evidence: `src/edge264mvc_headers.c`)
- Header Parser → Deblocking Filter: includes (evidence: `src/edge264mvc_headers.c`)
- Header Parser → Inter Prediction: includes (evidence: `src/edge264mvc_headers.c`)
- Header Parser → Intra Prediction: includes (evidence: `src/edge264mvc_headers.c`)
- Header Parser → Motion Prediction: includes (evidence: `src/edge264mvc_headers.c`)
- Header Parser → Residual Transform: includes (evidence: `src/edge264mvc_headers.c`)
- Slice Decoder → Decoder State: uses state (evidence: `src/edge264mvc_slice.c`)
- Decoder API → Decoded Frames: returns frames (evidence: `README.md`)
- Decoder Client → Decoded Frames: receives frames (evidence: `README.md`)
