# kamalkarun2124/vlc architecture

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

- Interactive diagram: https://gitdiagram.com/kamalkarun2124/vlc
- Repository: https://github.com/kamalkarun2124/vlc

## Overview

#### Purpose and entry points
VLC is a cross-platform native multimedia engine and player: it ingests files, discs, capture devices, and network streams; plays, converts, encodes, or redistributes them. The desktop executable starts in `bin/vlc.c`; platform launchers also exist in `bin/winvlc.c` and `bin/darwinvlc.m`. Embedders consume the C libVLC API declared in `include/vlc/libvlc.h`, implemented under `lib/`, and backed by the internal core.

#### Core runtime and plugin boundary
`libvlccore` owns application lifecycle, configuration, module discovery/loading, shared objects, threading, and platform abstraction. Key boundaries are `src/libvlc.c`, `src/libvlc-module.c`, and `src/modules/modules.c`. Feature implementations are selected as modules rather than hardwired dependencies; their common contracts are declared in headers such as `include/vlc_modules.h`, `include/vlc_access.h`, `include/vlc_codec.h`, and `include/vlc_vout.h`. This makes input formats, codecs, outputs, interfaces, and optional platform capabilities replaceable at runtime/build time.

#### Playback orchestration
The player and playlist layers turn user/API requests into input sessions, handle queue navigation, track selection, timers, metadata, and output lifecycle. Primary control paths are `src/player/player.c`, `src/player/input.c`, and `src/playlist/playlist.c`. GUI, CLI, DBus, HTTP/Lua, or libVLC clients should control this layer rather than directly composing decoding pipelines.

#### Media ingest and demux pipeline
Input opens an MRL through access/stream modules, applies stream filters or extractors, selects a demuxer, and emits elementary streams. The core coordination is in `src/input/input.c`, `src/input/access.c`, and `src/input/demux.c`; pluggable implementations live in `modules/access/`, `modules/stream_filter/`, `modules/stream_extractor/`, and `modules/demux/`. Examples include HTTP/2 access (`modules/access/http/h2conn.c`) and adaptive HTTP streaming, whose playlist, segment-tracking, and rate-selection layers are under `modules/demux/adaptive/`.

#### Decode, timing, and render pipeline
Demuxed elementary streams pass through packetizers and decoder modules, then synchronized audio/video/subpicture paths. Important stages are `src/input/decoder.c`, `modules/packetizer/`, and `modules/codec/`; FFmpeg integration is represented by `modules/codec/avcodec/avcodec.c`. Audio processing and device output are separated into core audio output (`src/audio_output/output.c`), filters/mixers (`modules/audio_filter/`, `modules/audio_mixer/`), and OS backends (`modules/audio_output/`). Video output similarly separates core vout control (`src/video_output/video_output.c`) from chroma/filter processing and display backends in `modules/video_chroma/`, `modules/video_filter/`, and `modules/video_output/`.

#### Output, streaming, and remote control
The same engine can construct stream-output chains for transcode, mux, file/network delivery, HLS, RTP/RTSP, Chromecast, or DLNA. The chain coordinator is `src/stream_output/stream_output.c`; implementations are under `modules/stream_out/`, `modules/mux/`, and `modules/access_output/`. Control surfaces are plugins: CLI (`modules/control/cli/cli.c`), DBus (`modules/control/dbus/dbus.c`), Qt (`modules/gui/qt/qt.cpp`), macOS UI (`modules/gui/macosx/main/macosx.m`), and Lua HTTP assets (`share/lua/http/`).

#### Dependencies, platforms, and builds
The principal runtime languages are C, C++, Objective-C, assembly, and Rust; Rust bindings/core crates reside under `src/rust/`. Autotools and Meson are both supported (`configure.ac`, `meson.build`). `contrib/` builds pinned third-party dependencies for cross-platform or unavailable-system-library cases, including FFmpeg, Qt, GnuTLS, SQLite, Vulkan, and codec libraries. Platform-specific code spans Windows, Apple, Linux/BSD, Android, Emscripten, and OS/2 directories under `src/` and `modules/`; packaging scripts are in `extras/package/`.

Main entry points: [`src/modules/modules.c`](https://github.com/kamalkarun2124/vlc/blob/master/src/modules/modules.c) (Module manager), [`src/player/player.c`](https://github.com/kamalkarun2124/vlc/blob/master/src/player/player.c) (Player control), [`modules/codec/avcodec/avcodec.c`](https://github.com/kamalkarun2124/vlc/blob/master/modules/codec/avcodec/avcodec.c) (Packetizer & codec modules), [`src/input/input.c`](https://github.com/kamalkarun2124/vlc/blob/master/src/input/input.c) (Input coordinator)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_entry["Entry &amp; API"]
  node_desktop["Desktop launchers<br/>native entry<br/>[vlc.c]"]
  node_libvlc_api["libVLC C API<br/>public API<br/>[libvlc.h]"]
  node_libvlc_impl["libVLC implementation<br/>API runtime"]
end

subgraph group_core["Core control"]
  node_core_runtime["libvlccore lifecycle<br/>core runtime<br/>[libvlc.c]"]
  node_module_manager{{"Module manager<br/>plugin loader<br/>[modules.c]"}}
  node_module_contracts["Module contracts<br/>plugin API<br/>[vlc_modules.h]"]
  node_player["Player control<br/>playback orchestration<br/>[player.c]"]
  node_playlist["Playlist<br/>queue controller<br/>[playlist.c]"]
end

subgraph group_ingest["Media pipeline"]
  node_input["Input coordinator<br/>ingest orchestration<br/>[input.c]"]
  node_access{{"Access &amp; stream modules<br/>ingest plugins"}}
  node_demux{{"Demux modules<br/>demux plugins"}}
  node_adaptive["Adaptive streaming<br/>HTTP adaptive demux"]
end

subgraph group_render["Decode &amp; render"]
  node_decoder["Decoder coordination<br/>decode control<br/>[decoder.c]"]
  node_codec{{"Packetizer &amp; codec modules<br/>decode plugins<br/>[avcodec.c]"}}
  node_audio["Audio processing &amp; output<br/>audio pipeline<br/>[output.c]"]
  node_video["Video processing &amp; output<br/>video pipeline<br/>[video_output.c]"]
end

subgraph group_delivery["Delivery &amp; UI"]
  node_stream_output["Stream-output chains<br/>transcode &amp; delivery<br/>[stream_output.c]"]
  node_interfaces{{"Control interfaces<br/>UI/control plugins<br/>[cli.c]"}}
end

subgraph group_build["Build &amp; platform"]
  node_build_systems["Autotools &amp; Meson<br/>build systems<br/>[configure.ac]"]
  node_contrib["Pinned dependencies<br/>dependency build"]
end

node_desktop -->|"starts"| node_core_runtime
node_libvlc_api -->|"declares"| node_libvlc_impl
node_libvlc_impl -->|"backs API"| node_core_runtime
node_core_runtime -->|"loads"| node_module_manager
node_module_manager -->|"uses"| node_module_contracts
node_interfaces -->|"controls"| node_player
node_libvlc_impl -->|"controls"| node_player
node_player -->|"navigates"| node_playlist
node_player -->|"creates session"| node_input
node_input -->|"opens MRL"| node_access
node_access -->|"supplies stream"| node_demux
node_demux -.->|"includes"| node_adaptive
node_input -->|"selects"| node_demux
node_demux -->|"elementary streams"| node_decoder
node_decoder -->|"uses"| node_codec
node_codec -->|"decoded audio"| node_audio
node_codec -->|"decoded video"| node_video
node_player -->|"constructs delivery"| node_stream_output
node_module_manager -.->|"loads"| node_access
node_module_manager -.->|"loads"| node_demux
node_module_manager -.->|"loads"| node_codec
node_module_manager -.->|"loads"| node_interfaces
node_build_systems -->|"builds dependencies"| node_contrib
node_contrib -.->|"provides FFmpeg and codecs"| node_codec

click node_desktop "https://github.com/kamalkarun2124/vlc/blob/master/bin/vlc.c"
click node_libvlc_api "https://github.com/kamalkarun2124/vlc/blob/master/include/vlc/libvlc.h"
click node_core_runtime "https://github.com/kamalkarun2124/vlc/blob/master/src/libvlc.c"
click node_module_manager "https://github.com/kamalkarun2124/vlc/blob/master/src/modules/modules.c"
click node_module_contracts "https://github.com/kamalkarun2124/vlc/blob/master/include/vlc_modules.h"
click node_player "https://github.com/kamalkarun2124/vlc/blob/master/src/player/player.c"
click node_playlist "https://github.com/kamalkarun2124/vlc/blob/master/src/playlist/playlist.c"
click node_input "https://github.com/kamalkarun2124/vlc/blob/master/src/input/input.c"
click node_decoder "https://github.com/kamalkarun2124/vlc/blob/master/src/input/decoder.c"
click node_codec "https://github.com/kamalkarun2124/vlc/blob/master/modules/codec/avcodec/avcodec.c"
click node_audio "https://github.com/kamalkarun2124/vlc/blob/master/src/audio_output/output.c"
click node_video "https://github.com/kamalkarun2124/vlc/blob/master/src/video_output/video_output.c"
click node_stream_output "https://github.com/kamalkarun2124/vlc/blob/master/src/stream_output/stream_output.c"
click node_interfaces "https://github.com/kamalkarun2124/vlc/blob/master/modules/control/cli/cli.c"
click node_build_systems "https://github.com/kamalkarun2124/vlc/blob/master/configure.ac"

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_desktop,node_libvlc_api,node_libvlc_impl toneBlue
class node_core_runtime,node_module_manager,node_module_contracts,node_player,node_playlist toneAmber
class node_input,node_access,node_demux,node_adaptive toneMint
class node_decoder,node_codec,node_audio,node_video toneRose
class node_stream_output,node_interfaces toneIndigo
class node_build_systems,node_contrib toneTeal
```

## Components

### Entry & API

- [Desktop launchers](https://github.com/kamalkarun2124/vlc/blob/master/bin/vlc.c): native entry · Starts the VLC application runtime. · `bin/vlc.c`
- [libVLC C API](https://github.com/kamalkarun2124/vlc/blob/master/include/vlc/libvlc.h): public API · Embedding API for external clients. · `include/vlc/libvlc.h`
- **libVLC implementation**: API runtime

### Core control

- [libvlccore lifecycle](https://github.com/kamalkarun2124/vlc/blob/master/src/libvlc.c): core runtime · Owns lifecycle, configuration, threading, and platform abstraction. · `src/libvlc.c`
- [Module manager](https://github.com/kamalkarun2124/vlc/blob/master/src/modules/modules.c): plugin loader · Discovers and loads replaceable feature modules. · `src/modules/modules.c`
- [Module contracts](https://github.com/kamalkarun2124/vlc/blob/master/include/vlc_modules.h): plugin API · `include/vlc_modules.h`
- [Player control](https://github.com/kamalkarun2124/vlc/blob/master/src/player/player.c): playback orchestration · Creates input sessions and manages tracks, timers, and output lifecycle. · `src/player/player.c`
- [Playlist](https://github.com/kamalkarun2124/vlc/blob/master/src/playlist/playlist.c): queue controller · `src/playlist/playlist.c`

### Media pipeline

- [Input coordinator](https://github.com/kamalkarun2124/vlc/blob/master/src/input/input.c): ingest orchestration · Opens media and coordinates access, stream processing, and demux. · `src/input/input.c`
- **Access & stream modules**: ingest plugins · Reads files, devices, and network MRLs; may filter or extract streams.
- **Demux modules**: demux plugins · Selects containers and emits elementary streams.
- **Adaptive streaming**: HTTP adaptive demux · Handles playlists, segments, and rate selection.

### Decode & render

- [Decoder coordination](https://github.com/kamalkarun2124/vlc/blob/master/src/input/decoder.c): decode control · Routes elementary streams through packetizers and decoders. · `src/input/decoder.c`
- [Packetizer & codec modules](https://github.com/kamalkarun2124/vlc/blob/master/modules/codec/avcodec/avcodec.c): decode plugins · Includes FFmpeg-backed decoding. · `modules/codec/avcodec/avcodec.c`
- [Audio processing & output](https://github.com/kamalkarun2124/vlc/blob/master/src/audio_output/output.c): audio pipeline · Core output uses filter, mixer, and device backend modules. · `src/audio_output/output.c`
- [Video processing & output](https://github.com/kamalkarun2124/vlc/blob/master/src/video_output/video_output.c): video pipeline · Core vout uses chroma, filter, and display backend modules. · `src/video_output/video_output.c`

### Delivery & UI

- [Stream-output chains](https://github.com/kamalkarun2124/vlc/blob/master/src/stream_output/stream_output.c): transcode & delivery · Coordinates transcode, mux, and file or network delivery chains. · `src/stream_output/stream_output.c`
- [Control interfaces](https://github.com/kamalkarun2124/vlc/blob/master/modules/control/cli/cli.c): UI/control plugins · CLI, DBus, Qt, macOS, and Lua HTTP control the player layer. · `modules/control/cli/cli.c`

### Build & platform

- [Autotools & Meson](https://github.com/kamalkarun2124/vlc/blob/master/configure.ac): build systems · `configure.ac`
- **Pinned dependencies**: dependency build · Builds cross-platform third-party libraries when needed.

## Connections

- Desktop launchers → libvlccore lifecycle: starts
- libVLC C API → libVLC implementation: declares
- libVLC implementation → libvlccore lifecycle: backs API
- libvlccore lifecycle → Module manager: loads
- Module manager → Module contracts: uses
- Control interfaces → Player control: controls
- libVLC implementation → Player control: controls
- Player control → Playlist: navigates
- Player control → Input coordinator: creates session
- Input coordinator → Access & stream modules: opens MRL
- Access & stream modules → Demux modules: supplies stream
- Demux modules → Adaptive streaming: includes
- Input coordinator → Demux modules: selects
- Demux modules → Decoder coordination: elementary streams
- Decoder coordination → Packetizer & codec modules: uses
- Packetizer & codec modules → Audio processing & output: decoded audio
- Packetizer & codec modules → Video processing & output: decoded video
- Player control → Stream-output chains: constructs delivery
- Module manager → Access & stream modules: loads
- Module manager → Demux modules: loads
- Module manager → Packetizer & codec modules: loads
- Module manager → Control interfaces: loads
- Autotools & Meson → Pinned dependencies: builds dependencies
- Pinned dependencies → Packetizer & codec modules: provides FFmpeg and codecs
