My last post was mostly about adding multi-channel support to GStreamer.

That was only partially implemented though - many elements in GStreamer
(and pretty much all of the ones that support more than stereo) require
each channel to be explicitly labeled with its position. This
information wasn't bridged until now.

LV2 "roles" correspond to GstAudioChannelPosition. Unfortunately, the
mapping was a bit strained with the Port Groups extension as it was at
midterm time. Fortunately, that extension is not finalized yet, and in
the process I found some other problems with it, so I decided to bring
it closer to the way GStreamer does things, which seems to be common in
other software that does this sort of stuff. Formerly, the port groups
extension used the channel names from the relevant surround spec (see
the Wikipedia page on Surround
Sound). This resulted in a
lot of roles that were really the same thing, e.g. the "Surround Left"
channel in 5.1 is really the same as the "Left Back" channel in 7.1.
This was pretty confusing in practice. GStreamer instead always uses
positional names like "Left Back", which is unambiguous regardless of
context (you don't have to know if it's 17.2 or whatever to know what
"Left Back" probably means...). So, I changed the LV2 port groups
extension to be similar (though not identical; munging an LV2 extension
to match GStreamer API wouldn't be appropriate).

This information is now queried out from LV2 plugins that have it,
mapped to GStreamer channel positions, and set as capabilities on
mulit-channel pads. This means multi-channel surround LV2 plugins should
now work fine with surround sound GStreamer set-ups, for example playing
a Theora video through some audio processing and out through Alsa.

I updated swh-plugins for the minor
changes, and added port group information to Invada Studio Plugins.