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.
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.
Any processing can be seen as having 3 working parts:
Contains QuickTime, MP4, 3GPP input handling
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.
Files for encoding to various (audio) codecs (decoder only, see this page's link list for encoders)
Files for encoding with various (video) codecs
GUI dialogs and windows for filters, codec configs, preferences, etc. Mostly everyting with a GUI can be found in this directory.
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.
Contains the management code (loading and GUI's) for the video filters. For actual video filter files see ADM_video.
Contains lots of various codecs handled by libavcodec and associated codecs.
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.
Contains a miscellanious collection of files for various small and a large tasks, including frames, images, file IO, FourCC information, RIFF parser
Contains files for audio muxing and demuxing, audio stream information and handling, and various pieces of code relating to general audio management.
Contains ECMAScript/JavaScript scripting files and source code.
Contains some useful functions, mostly GTK+ related. There are also some code to emulate UNIX functions on win32.
Controls the scripts (most specifically the ECMAScript .js scripts).
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.