[MPlayer-dev-eng] [RFC] 6-channel AAC and channel reordering

Corey Hickey bugfood-ml at fatooh.org
Wed Feb 22 11:01:37 CET 2006


The problem: 6-channel AAC has a different channel order than MPlayer
outputs.

MPlayer wants:
0 - front left
1 - front right
2 - rear left
3 - rear right
4 - front center
5 - lfe

MPlayer gets:
0 - front center
1 - front left
2 - front right
3 - rear left
4 - rear right
5 - lfe

--------------------------------------------------------------------------
For a test source you can probably use any recent hd trailer from Apple. Or:
http://movies.apple.com/movies/universal/king_kong/king_kong-tlr_h480p.mov

This works fine because AAC does the downmixing internally:
$ mplayer king_kong-tlr_h480p.mov -channels 2

This sounds odd -- the channels are definitely mixed up:
$ mplayer king_kong-tlr_h480p.mov -channels 6

If you don't have a 5.1 speaker setup (I don't either), then you can do
a quick-n-dirty downmix:
$ mplayer king_kong-tlr_h480p.mov -channels 6 \
-af pan=2:0.4:0:0:0.4:0.2:0:0:0.2:0.3:0.3:0.5:0.5

...or an hrtf one:
$ mplayer king_kong-tlr_h480p.mov -channels 6 -af hrtf

Either way, you'll hear that the channel position isn't right.

--------------------------------------------------------------------------
The attached patch uses af_channels to handle the reordering.
ad_faad.c:init() sets up a routing map and af.c:af_init() uses that map
to put a channels filter at the beginning of the audio chain. Try the
above examples with a patched mplayer -- they should work correctly.

As far as I know the patch doesn't break anything. Probably it does, but
not that I know of. :)  Anyway, I don't consider it finished. Some notes:

* It would probably be ideal to have faad handle the reordering, but I
don't see a way to do that.

* If this kind of approach seems acceptable, I should switch to af_pan
to handle upmixing and downmixing where channels have to be split or
combined.

* I don't have any code to deal with 3- or 4- channel AAC. With af_pan I
could probably upmix or downmix these appropriately to match the output
channel order. Does anyone have a sample?

* This could be applied to audio formats other than AAC, of course. Does
anyone have an example of another format that could benefit?

--------------------------------------------------------------------------
So, what do you think? Am I barking up the wrong tree or should I keep
working in this direction?

-Corey
-------------- next part --------------
An embedded and charset-unspecified text was scrubbed...
Name: chan-map.diff
URL: <http://lists.mplayerhq.hu/pipermail/mplayer-dev-eng/attachments/20060222/ed75140b/attachment.asc>


More information about the MPlayer-dev-eng mailing list