Table of Contents

Source file notes

This section of the documentation is designed to help outside (and inside) code writers quickly figure out where a patch or feature needs to be written for, as well as generally provide an overview of the source files and their purposes. Files in Avidemux tend to do more than just one task, so most information here will not always describe the full range of a file's functions.

General notes

Avidemux is written using the C++ programming language, but it does not use the STL, though this is not a very big deal in general. Avidemux is built with the GTK+ graphical libraries. Lastly Avidemux also has the SpiderMonkey ECMAScript scripting engine built into it for project handling. As of yet, this cannot be directly called by Avidemux. If you want to add code or edit code for Avidemux, you will need to understand these languages and libraries. The ECMAScript is rarely used outside of a few specific functions, so most people do not need to know it if they want to modify code. However C/C++ and GTK+ are usually necessary knowledge.

Avidemux makes heavy use of polymorphism and class derivation.

General architecture

Any processing can be seen as having 3 working parts:

Directory: /avidemux/

ADM_3gp

Contains QuickTime, MP4, 3GPP input handling

ADM_audiofilter

Contains audio filter files (generally not the source code for the audio codecs themselves), including the mixer. Encoding is seen as a filter so interfaces to audio encoders are in that directory too.

ADM_audiocodec

Files for encoding to various (audio) codecs (decoder only, see this page's link list for encoders)

ADM_codecs

Files for encoding with various (video) codecs

ADM_dialog

GUI dialogs and windows for filters, codec configs, preferences, etc. Mostly everyting with a GUI can be found in this directory.

ADM_encoder

Contains source files that handle the high level video encoders. The high level encoders offer the same interface to core whatever the codec used. They also handle internally the setup for 2-pass encoding. They can be seen as an abstraction layer.

ADM_filter

Contains the management code (loading and GUI's) for the video filters. For actual video filter files see ADM_video.

ADM_lavcodec

Contains lots of various codecs handled by libavcodec and associated codecs.

ADM_lavformat

It is the file format library from FFmpeg. It is only used actually to save as MP4. There is some dead code to use it to output MPEG(nbsp)TS also.

ADM_library

Contains a miscellanious collection of files for various small and a large tasks, including frames, images, file IO, FourCC information, RIFF parser

ADM_mplex

Contains files for audio muxing and demuxing, audio stream information and handling, and various pieces of code relating to general audio management.

ADM_script

Contains ECMAScript/JavaScript scripting files and source code.

ADM_toolkit

Contains some useful functions, mostly GTK+ related. There are also some code to emulate UNIX functions on win32.

ADM_script

Controls the scripts (most specifically the ECMAScript .js scripts).

ADM_video

Contains most of the actual source files for video filters.

Each filter is declared as a C++ class. They are all derived from the same class. They all use one input and one output and are chained together.

They exchange their configuration with the outside world through the Couples class that does the translation between a parameter name and its value. Most of the filters are ported from MPlayer or Avisynth. The internals of Avidemux are close to both of them. There is also some code to provide a C emulation layer to Avisynth so that porting code is easier.