# oxideav/oxideav-mjpeg architecture

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

- Interactive diagram: https://gitdiagram.com/oxideav/oxideav-mjpeg
- Repository: https://github.com/oxideav/oxideav-mjpeg

## Overview

oxideav-mjpeg is a pure-Rust JPEG/Motion-JPEG codec with a standalone API and optional oxideav registry integration. The main workflow accepts JPEG bytes or packets, decodes them into image planes, or encodes image planes into JPEG; the still-image container passes a JPEG stream through as a packet. It also provides a general T.81 writer, JPEG metadata inspection, and RTP packetization/depacketization. The README documents broad JPEG process and hierarchical-mode support; source excerpts were incomplete, so uncertain internal wiring is omitted.

Main entry points: [`src/decoder.rs`](https://github.com/oxideav/oxideav-mjpeg/blob/master/src/decoder.rs) (JPEG Decoder), [`src/encoder.rs`](https://github.com/oxideav/oxideav-mjpeg/blob/master/src/encoder.rs) (JPEG Encoder), [`src/registry.rs`](https://github.com/oxideav/oxideav-mjpeg/blob/master/src/registry.rs) (Codec Registry), [`src/mjpeg_container.rs`](https://github.com/oxideav/oxideav-mjpeg/blob/master/src/mjpeg_container.rs) (JPEG Container)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_integration["Framework Integration"]
  node_registry["Codec Registry<br/>[registry.rs]"]
  node_still_container["JPEG Container<br/>[mjpeg_container.rs]"]
  node_packet_container["Container Support<br/>[container.rs]"]
end

subgraph group_codec["JPEG Codec"]
  node_decoder["JPEG Decoder<br/>[decoder.rs]"]
  node_encoder["JPEG Encoder<br/>[encoder.rs]"]
  node_image["Image Types<br/>[image.rs]"]
end

subgraph group_engine["JPEG Internals"]
  node_jpeg_parser["Marker Parser<br/>[parser.rs]"]
  node_jpeg_primitives["Codec Primitives"]
  node_error["Error Types<br/>[error.rs]"]
end

subgraph group_extras["Additional Capabilities"]
  node_t81["T.81 Writer<br/>[t81.rs]"]
  node_inspector["JPEG Inspector<br/>[inspect.rs]"]
  node_rtp["RTP Transport<br/>[rtp.rs]"]
end

node_consumer(("Application"))
node_framework(("oxideav Framework"))

node_consumer -->|"registers codecs"| node_registry
node_registry -->|"registers with"| node_framework
node_registry -->|"exposes decoder"| node_decoder
node_registry -->|"exposes encoder"| node_encoder
node_registry -->|"exposes container"| node_still_container
node_consumer -->|"opens JPEG"| node_still_container
node_still_container -->|"provides packet"| node_decoder
node_encoder -->|"writes JPEG stream"| node_still_container
node_consumer -->|"submits JPEG"| node_decoder
node_decoder -->|"produces planes"| node_image
node_consumer -->|"submits image"| node_encoder
node_encoder -->|"returns JPEG"| node_consumer
node_decoder -->|"parses markers"| node_jpeg_parser
node_decoder -->|"decodes scans"| node_jpeg_primitives
node_encoder -->|"uses primitives"| node_jpeg_primitives
node_t81 -->|"uses primitives"| node_jpeg_primitives
node_consumer -->|"encodes frame"| node_t81
node_t81 -->|"returns JPEG"| node_consumer
node_consumer -->|"inspects JPEG"| node_inspector
node_inspector -->|"walks markers"| node_jpeg_parser
node_consumer -->|"packetizes JPEG"| node_rtp
node_consumer -->|"depacketizes RTP"| node_rtp
node_decoder -->|"reports failures"| node_error
node_encoder -->|"reports failures"| node_error

click node_registry "https://github.com/oxideav/oxideav-mjpeg/blob/master/src/registry.rs"
click node_still_container "https://github.com/oxideav/oxideav-mjpeg/blob/master/src/mjpeg_container.rs"
click node_packet_container "https://github.com/oxideav/oxideav-mjpeg/blob/master/src/container.rs"
click node_decoder "https://github.com/oxideav/oxideav-mjpeg/blob/master/src/decoder.rs"
click node_encoder "https://github.com/oxideav/oxideav-mjpeg/blob/master/src/encoder.rs"
click node_image "https://github.com/oxideav/oxideav-mjpeg/blob/master/src/image.rs"
click node_jpeg_parser "https://github.com/oxideav/oxideav-mjpeg/blob/master/src/jpeg/parser.rs"
click node_jpeg_primitives "https://github.com/oxideav/oxideav-mjpeg/tree/master/src/jpeg"
click node_error "https://github.com/oxideav/oxideav-mjpeg/blob/master/src/error.rs"
click node_t81 "https://github.com/oxideav/oxideav-mjpeg/blob/master/src/t81.rs"
click node_inspector "https://github.com/oxideav/oxideav-mjpeg/blob/master/src/jpeg/inspect.rs"
click node_rtp "https://github.com/oxideav/oxideav-mjpeg/blob/master/src/rtp.rs"

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_registry,node_still_container,node_packet_container toneBlue
class node_decoder,node_encoder,node_image toneAmber
class node_jpeg_parser,node_jpeg_primitives,node_error toneMint
class node_t81,node_inspector,node_rtp toneRose
class node_consumer,node_framework toneIndigo
```

## Components

### Framework Integration

- [Codec Registry](https://github.com/oxideav/oxideav-mjpeg/blob/master/src/registry.rs): `src/registry.rs`
- [JPEG Container](https://github.com/oxideav/oxideav-mjpeg/blob/master/src/mjpeg_container.rs): `src/mjpeg_container.rs`
- [Container Support](https://github.com/oxideav/oxideav-mjpeg/blob/master/src/container.rs): `src/container.rs`

### JPEG Codec

- [JPEG Decoder](https://github.com/oxideav/oxideav-mjpeg/blob/master/src/decoder.rs): `src/decoder.rs`
- [JPEG Encoder](https://github.com/oxideav/oxideav-mjpeg/blob/master/src/encoder.rs): `src/encoder.rs`
- [Image Types](https://github.com/oxideav/oxideav-mjpeg/blob/master/src/image.rs): `src/image.rs`

### JPEG Internals

- [Marker Parser](https://github.com/oxideav/oxideav-mjpeg/blob/master/src/jpeg/parser.rs): `src/jpeg/parser.rs`
- [Codec Primitives](https://github.com/oxideav/oxideav-mjpeg/tree/master/src/jpeg): `src/jpeg`
- [Error Types](https://github.com/oxideav/oxideav-mjpeg/blob/master/src/error.rs): `src/error.rs`

### Additional Capabilities

- [T.81 Writer](https://github.com/oxideav/oxideav-mjpeg/blob/master/src/t81.rs): `src/t81.rs`
- [JPEG Inspector](https://github.com/oxideav/oxideav-mjpeg/blob/master/src/jpeg/inspect.rs): `src/jpeg/inspect.rs`
- [RTP Transport](https://github.com/oxideav/oxideav-mjpeg/blob/master/src/rtp.rs): `src/rtp.rs`

### Other components

- **Application**
- **oxideav Framework**

## Connections

- Application → Codec Registry: registers codecs
- Codec Registry → oxideav Framework: registers with
- Codec Registry → JPEG Decoder: exposes decoder
- Codec Registry → JPEG Encoder: exposes encoder
- Codec Registry → JPEG Container: exposes container
- Application → JPEG Container: opens JPEG
- JPEG Container → JPEG Decoder: provides packet
- JPEG Encoder → JPEG Container: writes JPEG stream
- Application → JPEG Decoder: submits JPEG
- JPEG Decoder → Image Types: produces planes
- Application → JPEG Encoder: submits image
- JPEG Encoder → Application: returns JPEG
- JPEG Decoder → Marker Parser: parses markers
- JPEG Decoder → Codec Primitives: decodes scans
- JPEG Encoder → Codec Primitives: uses primitives
- T.81 Writer → Codec Primitives: uses primitives
- Application → T.81 Writer: encodes frame
- T.81 Writer → Application: returns JPEG
- Application → JPEG Inspector: inspects JPEG
- JPEG Inspector → Marker Parser: walks markers
- Application → RTP Transport: packetizes JPEG
- Application → RTP Transport: depacketizes RTP
- JPEG Decoder → Error Types: reports failures
- JPEG Encoder → Error Types: reports failures
