xbmc/xbmc — pull request #4830 by jmarshallnz (2014-05-31 00:00:22+00:00)
Title: Audio encoders via binary addons

This is work originally by @notspiff, with the API changed a little by me, and with @wsnipex taking care of the build system.

Builds on all platforms, and confirmed runtime on OSX + Android (original Nexus 7). Add-ons build everywhere other than win32. This shouldn't be too hard to rectify - mostly a matter of automating things.

A few things to consider before merge:
1. The TranscodeJob commit needs dropping - it's there for testing (context on any music file->Rip audio CD track tanscodes to special://profile/test.foo)
2. The versioning of add-ons depends on xbmc/GUIInfoManager.h. It might be better to move this to a file that is then used in GUIInfoManager.h (or ideally generate the full versioning in XBMC, but that's a separate PR I think).
3. The audio encoders need to be linked to their git hash. Perhaps consider pulling from xbmc git rather than mine, though this is trivial to change.

A few things to consider after merge:
1. Ideally the depends for add-ons should be de-coupled from depends for xbmc. A simple way might be to move stuff from depends/target to depends/addons-target and have separate xbmc-depends folders for it defined in configure.
2. The dll's for win32 can be removed (flac/vorbis/ogg/vorbisenc/lameenc - not vorbisfile) from xbmc packaging.
3. Generation of the .so/dll name in the addon.xml file.

Will do up a jenkins build for runtime testing.

Ideally this would be this merge window - i.e. around 9 days to get win32 somewhat on the way.

@wsoltys, @Karlson2k suggestion for win32 is to do it like unified deps:
1. Have an xbmc-depends folder that you extract the dependencies (lib/include) to. Deps can be pre-built.
2. Add batch file to download+extract deps to that folder. I'd suggest using .zip files for pre-built, as that way cmake could be used (later on - not needed immediately) for this without additional dependencies.
3. Add batch file to set cmake prefix, toolchain stuff (see Toolchain.cmake.in) to that folder + build.

The wav encoder is ofc the simplest - the only dependency is the addon bindings.