The core of VLC media player is the LibVLC, which provides an interface for applications to handle features such as playlist management, audio and video decoding and output, a thread system. All the LibVLC source files are located in the src/ directory and its subdirectories:
- config/: load the configuration from command line and configuration file, provides functions for the modules to read and write to configuration
- control/: functions to control the behaviour of LibVLC, like Play/Pause, volume management, fullscreen, log verbosity, etc.
- extras/: mostly platform-specific code
- modules/: module management
- network/: network interface (socket management, network errors, etc.)
- osd/: On Screen Display manipulation
- test/: LibVLC needs to be tested, and not only by users :)
- text/: charset stuff
- interface/: contains code for user interaction such as key presses and device ejection.
- playlist/: manages playlist interaction such as stop, play, next, or random playback.
- input/: opens an input module, reads packets, parses them and passes reconstituted elementary streams to the decoder(s).
- video_output/: initializes the video display, gets all pictures and subpictures (ie. subtitles) from the decoder(s), optionally converts them to another format (such as YUV to RGB), and displays them.
- audio_output/: initializes the audio mixer, ie. finds the right playing frequency, and then resamples audio frames received from the decoder(s).
- stream_output/: functions to stream audio and video to the network
- misc/: miscellaneous utilities used in other parts of libvlc, such as the thread system, the message queue, CPU detection, the object lookup system, or platform-specific code.