# bernhardu/dvbcut-deb architecture

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

- Interactive diagram: https://gitdiagram.com/bernhardu/dvbcut-deb
- Repository: https://github.com/bernhardu/dvbcut-deb

## Overview

DVBCUT is a Qt editor for selecting MPEG transport-stream segments and exporting them as a single MPEG file. The workflow opens a recording, loads or builds a picture index, lets the user navigate and mark ranges, then exports selected ranges while mostly preserving encoded data and recoding boundary frames as needed. README and sampled code support the indexing, playback, and muxing flow; several editor capabilities are documented or visible in UI strings, but their detailed wiring is not shown in the excerpts.

Main entry points: [`src/dvbcut.cpp`](https://github.com/bernhardu/dvbcut-deb/blob/master/src/dvbcut.cpp) (Cut editor), [`src/mpgfile.cpp`](https://github.com/bernhardu/dvbcut-deb/blob/master/src/mpgfile.cpp) (MPEG reader), [`src/muxer.h`](https://github.com/bernhardu/dvbcut-deb/blob/master/src/muxer.h) (Muxer interface), [`src/main.cpp`](https://github.com/bernhardu/dvbcut-deb/blob/master/src/main.cpp) (Application entry)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_editing["Editing and preview"]
  node_editor["Cut editor<br/>[dvbcut.cpp]"]
  node_markers["Cut markers<br/>[eventlistitem.cpp]"]
  node_preview["Frame preview<br/>[imageprovider.cpp]"]
  node_difference["Frame comparison"]
  node_audio["Audio playback<br/>[playaudio.cpp]"]
end

subgraph group_media["MPEG processing"]
  node_buffer["Input buffer<br/>[buffer.cpp]"]
  node_mpg["MPEG reader<br/>[mpgfile.cpp]"]
  node_transport["Transport parser<br/>[tsfile.cpp]"]
  node_program["Program parser<br/>[psfile.cpp]"]
  node_streams["Stream data<br/>[streamdata.cpp]"]
  node_index[("Picture index<br/>[index.cpp]")]
  node_frames["Frame handling<br/>[avframe.cpp]"]
end

subgraph group_export["Export and output"]
  node_mux["Muxer interface<br/>[muxer.h]"]
  node_mpegmux["MPEG muxer<br/>[mpegmuxer.cpp]"]
  node_lavfmux["Libav muxer<br/>[lavfmuxer.cpp]"]
end

subgraph group_support["Application support"]
  node_main["Application entry<br/>[main.cpp]"]
  node_settings[("User settings<br/>[settings.cpp]")]
end

node_user(("Editor user"))
node_input["MPEG recording"]
node_output["MPEG export"]
node_mplayer["MPlayer process"]

node_user -->|"launches"| node_main
node_main -->|"creates"| node_editor
node_main -->|"opens input"| node_buffer
node_input -->|"read by"| node_buffer
node_buffer -->|"provides bytes"| node_mpg
node_mpg -->|"probes TS"| node_transport
node_mpg -->|"probes PS"| node_program
node_transport -->|"appends payload"| node_streams
node_program -->|"provides streams"| node_streams
node_editor -->|"opens media"| node_mpg
node_editor -->|"uses index"| node_index
node_index -->|"reads stream"| node_mpg
node_editor -->|"manages markers"| node_markers
node_editor -->|"requests frames"| node_preview
node_preview -->|"decodes images"| node_mpg
node_editor -->|"compares frames"| node_difference
node_editor -->|"plays audio"| node_audio
node_editor -->|"starts playback"| node_mplayer
node_editor -->|"reads options"| node_settings
node_editor -->|"exports ranges"| node_mux
node_mpg -->|"recodes boundaries"| node_frames
node_mpg -->|"writes packets"| node_mux
node_mux -->|"selects built-in"| node_mpegmux
node_mux -.->|"selects libav"| node_lavfmux
node_mpegmux -->|"writes MPEG"| node_output
node_lavfmux -.->|"writes MPEG"| node_output

click node_main "https://github.com/bernhardu/dvbcut-deb/blob/master/src/main.cpp"
click node_editor "https://github.com/bernhardu/dvbcut-deb/blob/master/src/dvbcut.cpp"
click node_markers "https://github.com/bernhardu/dvbcut-deb/blob/master/src/eventlistitem.cpp"
click node_preview "https://github.com/bernhardu/dvbcut-deb/blob/master/src/imageprovider.cpp"
click node_difference "https://github.com/bernhardu/dvbcut-deb/blob/master/src/differenceimageprovider.cpp"
click node_audio "https://github.com/bernhardu/dvbcut-deb/blob/master/src/playaudio.cpp"
click node_buffer "https://github.com/bernhardu/dvbcut-deb/blob/master/src/buffer.cpp"
click node_mpg "https://github.com/bernhardu/dvbcut-deb/blob/master/src/mpgfile.cpp"
click node_transport "https://github.com/bernhardu/dvbcut-deb/blob/master/src/tsfile.cpp"
click node_program "https://github.com/bernhardu/dvbcut-deb/blob/master/src/psfile.cpp"
click node_streams "https://github.com/bernhardu/dvbcut-deb/blob/master/src/streamdata.cpp"
click node_index "https://github.com/bernhardu/dvbcut-deb/blob/master/src/index.cpp"
click node_frames "https://github.com/bernhardu/dvbcut-deb/blob/master/src/avframe.cpp"
click node_mux "https://github.com/bernhardu/dvbcut-deb/blob/master/src/muxer.h"
click node_mpegmux "https://github.com/bernhardu/dvbcut-deb/blob/master/src/mpegmuxer.cpp"
click node_lavfmux "https://github.com/bernhardu/dvbcut-deb/blob/master/src/lavfmuxer.cpp"
click node_settings "https://github.com/bernhardu/dvbcut-deb/blob/master/src/settings.cpp"

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_editor,node_markers,node_preview,node_difference,node_audio,node_user toneBlue
class node_buffer,node_mpg,node_transport,node_program,node_streams,node_index,node_frames toneAmber
class node_mux,node_mpegmux,node_lavfmux toneMint
class node_main,node_settings toneRose
class node_input,node_output,node_mplayer toneIndigo
```

## Components

### Editing and preview

- [Cut editor](https://github.com/bernhardu/dvbcut-deb/blob/master/src/dvbcut.cpp): `src/dvbcut.cpp`
- [Cut markers](https://github.com/bernhardu/dvbcut-deb/blob/master/src/eventlistitem.cpp): `src/eventlistitem.cpp`
- [Frame preview](https://github.com/bernhardu/dvbcut-deb/blob/master/src/imageprovider.cpp): `src/imageprovider.cpp`
- [Frame comparison](https://github.com/bernhardu/dvbcut-deb/blob/master/src/differenceimageprovider.cpp): `src/differenceimageprovider.cpp`
- [Audio playback](https://github.com/bernhardu/dvbcut-deb/blob/master/src/playaudio.cpp): `src/playaudio.cpp`

### MPEG processing

- [Input buffer](https://github.com/bernhardu/dvbcut-deb/blob/master/src/buffer.cpp): `src/buffer.cpp`
- [MPEG reader](https://github.com/bernhardu/dvbcut-deb/blob/master/src/mpgfile.cpp): `src/mpgfile.cpp`
- [Transport parser](https://github.com/bernhardu/dvbcut-deb/blob/master/src/tsfile.cpp): `src/tsfile.cpp`
- [Program parser](https://github.com/bernhardu/dvbcut-deb/blob/master/src/psfile.cpp): `src/psfile.cpp`
- [Stream data](https://github.com/bernhardu/dvbcut-deb/blob/master/src/streamdata.cpp): `src/streamdata.cpp`
- [Picture index](https://github.com/bernhardu/dvbcut-deb/blob/master/src/index.cpp): `src/index.cpp`
- [Frame handling](https://github.com/bernhardu/dvbcut-deb/blob/master/src/avframe.cpp): `src/avframe.cpp`

### Export and output

- [Muxer interface](https://github.com/bernhardu/dvbcut-deb/blob/master/src/muxer.h): `src/muxer.h`
- [MPEG muxer](https://github.com/bernhardu/dvbcut-deb/blob/master/src/mpegmuxer.cpp): `src/mpegmuxer.cpp`
- [Libav muxer](https://github.com/bernhardu/dvbcut-deb/blob/master/src/lavfmuxer.cpp): `src/lavfmuxer.cpp`

### Application support

- [Application entry](https://github.com/bernhardu/dvbcut-deb/blob/master/src/main.cpp): `src/main.cpp`
- [User settings](https://github.com/bernhardu/dvbcut-deb/blob/master/src/settings.cpp): `src/settings.cpp`

### Other components

- **Editor user**
- **MPEG recording**
- **MPEG export**
- **MPlayer process**

## Connections

- Editor user → Application entry: launches
- Application entry → Cut editor: creates
- Application entry → Input buffer: opens input
- MPEG recording → Input buffer: read by
- Input buffer → MPEG reader: provides bytes
- MPEG reader → Transport parser: probes TS
- MPEG reader → Program parser: probes PS
- Transport parser → Stream data: appends payload
- Program parser → Stream data: provides streams
- Cut editor → MPEG reader: opens media
- Cut editor → Picture index: uses index
- Picture index → MPEG reader: reads stream
- Cut editor → Cut markers: manages markers
- Cut editor → Frame preview: requests frames
- Frame preview → MPEG reader: decodes images
- Cut editor → Frame comparison: compares frames
- Cut editor → Audio playback: plays audio
- Cut editor → MPlayer process: starts playback
- Cut editor → User settings: reads options
- Cut editor → Muxer interface: exports ranges
- MPEG reader → Frame handling: recodes boundaries
- MPEG reader → Muxer interface: writes packets
- Muxer interface → MPEG muxer: selects built-in
- Muxer interface → Libav muxer: selects libav
- MPEG muxer → MPEG export: writes MPEG
- Libav muxer → MPEG export: writes MPEG
