[Ffmpeg-devel] The "Intermingled Mess" issue.

Colin Ward lists
Mon Sep 19 05:40:50 CEST 2005

   Good morning all.

   Well that "FFMPEG code a mess" thread was certainly a fun way to 
start a Monday morning.  :-)  As a first E-Mail on a mailing list it's 
certainly not a way to make friends fast!

   However, the fellow does have a point, albeit expressed rather 
bluntly.  Recently I wanted to build a libavcodec and libavformat that 
contained only support for MPEG 1 and 2 video, MP3 audio, Ogg Vorbis and 
Ogg Theora.  When I tried this I found some problems:

   1) Certain encoding related functions still get compiled into the 
libraries when CONFIG_ENCODERS is turned off.  This in turn pulled in 
other functions, and I had to #ifdef out some code.  I will submit a 
patch for discussion soon.  I am an FFMPEG newbie though so I might have 
it wrong of course.  :-)

   2) Some of the generic functions that get reused such as IDCT 
functions need to be moved into their own files.  I found that I had to 
link in some H.263 modules and even WMV (!) modules to compile a library 
that only supported MPEG 1 and 2 video!  And of course every time you 
add one of these extra modules, it in turn causes other modules to be 
required and so on.  If there is a generic function or data table then 
it needs to be in its own module, not in an H.263 or WMV module somewhere.

   3) My resulting library was still quite large (about 3.5 MB) which 
indicates to me that maybe a lot of non MPEG and Ogg code was pulled in 
by #2 above.

   So to an extent FFMPEG *is* a bit of an "Intermingled mess" but it's 
nothing that a few #ifdefs wouldn't fix.  I'll write a follow up E-Mail 
with more concrete details when I am back in front of my home computer.

   I hope nobody takes offence at this E-Mail;  it is simply an 
objective description of some general dependency issues that I have noticed.

   PS.  Does anyone know if GCC does function level linking?

[Hitman/Code HQ - 6502/z80/68000/604e/80x86/ARM coder - Amiga rulez!]
[VZ-200/VIC-20/MZ-700/c16/c64*10/c128*8/Plus-4/CPC464/CD32/500*2    ]
[600/1000/1200*2/A4000/SNES/N64/Dreamcast/Athlon 1100/AmigaOne      ]
[Assembly Language: The most fun you can have with your clothes on! ]

More information about the ffmpeg-devel mailing list