mixxxdj/mixxx — pull request #56 by illuusio (2013-08-05 09:27:43+00:00)
Title: Fix broken FFMPEG/LibAV Sound source and Add FFMPEG/LibAV encoders

Fixing old API FFMPEG sound source. This one works on FFMPEG 0.10-1.2 and LibAV 0.8.x/9 series. Encoders works also in same versions.

* Pros
- API for every format and container is the same. So you only need FFMPEG/LibAV to read Ogg/Vorbis, MP3, MP4 or WMA (Actually there is longer list but that is not the point).
- Seeking accurate in Ogg and MP3 (also in MP4).
- Little bit caching makes it faster for reading
- There it utilies for resampling FFMPEG/LibAV library that happens to be in hand so if you have libavresample or libswresample or non it works
- Makes conversion from mono to stereo and bit conversions if needed (so you can play 8 bit samples or 32 bit samples if you dare).
- Easy to extend in future.. can easily make work with Float32 samples all the way. Now they are converted to 16-bit integer for compability and after that back to Float32 in mixing
- FFMPEG could be used more in inner parts future to drop some depencies if project likes it
- Encoding is pure joy after you get it working

* Cons
- FFMPEG/LibAV library depencies are huge. To make it compile it needs many libraries
- Some of formats are supported but you can't seek very accurate
- Inner stuff of FFMPEG seems to broke every time they make 1.x release
- To support wide range of FFMPEG/LibAV means many #ifdef. They are pain in resample code