[ALSA] usb-audio - Fix AC3 with M-Audio Audiophile USB
Fixed AC3 interface in device_setup=0x00 mode thanks to Hakan Lennestal and updated documentation Signed-off-by: Thibault Le Meur <Thibault.LeMeur@supelec.fr> Signed-off-by: Takashi Iwai <tiwai@suse.de> Signed-off-by: Jaroslav Kysela <perex@suse.cz>
This commit is contained in:
committed by
Jaroslav Kysela
parent
1b290a510c
commit
cac19c3ba1
@@ -1,4 +1,4 @@
|
|||||||
Guide to using M-Audio Audiophile USB with ALSA and Jack v1.4
|
Guide to using M-Audio Audiophile USB with ALSA and Jack v1.5
|
||||||
========================================================
|
========================================================
|
||||||
|
|
||||||
Thibault Le Meur <Thibault.LeMeur@supelec.fr>
|
Thibault Le Meur <Thibault.LeMeur@supelec.fr>
|
||||||
@@ -12,6 +12,8 @@ History
|
|||||||
- Added Low Endianness nature of 16bits-modes
|
- Added Low Endianness nature of 16bits-modes
|
||||||
found by Hakan Lennestal <Hakan.Lennestal@brfsodrahamn.se>
|
found by Hakan Lennestal <Hakan.Lennestal@brfsodrahamn.se>
|
||||||
- Modifying document structure
|
- Modifying document structure
|
||||||
|
* v1.5 - Thibault Le Meur (2007-07-12)
|
||||||
|
- Added AC3/DTS passthru info
|
||||||
|
|
||||||
|
|
||||||
1 - Audiophile USB Specs and correct usage
|
1 - Audiophile USB Specs and correct usage
|
||||||
@@ -105,9 +107,12 @@ way (I suppose the device's index is 1):
|
|||||||
|
|
||||||
In this mode, the device uses Big Endian byte-encoding so that
|
In this mode, the device uses Big Endian byte-encoding so that
|
||||||
supported audio format are S16_BE for 16-bit depth modes and S24_3BE for
|
supported audio format are S16_BE for 16-bit depth modes and S24_3BE for
|
||||||
24-bits depth mode. One exception is the hw:1,2 port which is reported
|
24-bits depth mode.
|
||||||
to be Little Endian compliant (supposedly supporting S16_LE) but processes
|
|
||||||
in fact only S16_BE streams.
|
One exception is the hw:1,2 port which was reported to be Little Endian
|
||||||
|
compliant (supposedly supporting S16_LE) but processes in fact only S16_BE streams.
|
||||||
|
This has been fixed in kernel 2.6.23 and above and now the hw:1,2 interface
|
||||||
|
is reported to be big endian in this default driver mode.
|
||||||
|
|
||||||
Examples:
|
Examples:
|
||||||
* playing a S24_3BE encoded raw file to the Ao port
|
* playing a S24_3BE encoded raw file to the Ao port
|
||||||
@@ -116,6 +121,8 @@ Examples:
|
|||||||
% arecord -D hw:1,1 -c2 -t raw -r48000 -fS24_3BE test.raw
|
% arecord -D hw:1,1 -c2 -t raw -r48000 -fS24_3BE test.raw
|
||||||
* playing a S16_BE encoded raw file to the Do port
|
* playing a S16_BE encoded raw file to the Do port
|
||||||
% aplay -D hw:1,1 -c2 -t raw -r48000 -fS16_BE test.raw
|
% aplay -D hw:1,1 -c2 -t raw -r48000 -fS16_BE test.raw
|
||||||
|
* playing an ac3 sample file to the Do port
|
||||||
|
% aplay -D hw:1,2 --channels=6 ac3_S16_BE_encoded_file.raw
|
||||||
|
|
||||||
If you're happy with the default Alsa driver mode and don't experience any
|
If you're happy with the default Alsa driver mode and don't experience any
|
||||||
issue with this mode, then you can skip the following chapter.
|
issue with this mode, then you can skip the following chapter.
|
||||||
@@ -205,13 +212,16 @@ mode" above for an aplay command example)
|
|||||||
|
|
||||||
3.2.1.3 - AC3 w/ DTS passthru mode
|
3.2.1.3 - AC3 w/ DTS passthru mode
|
||||||
|
|
||||||
This mode is untested, I have no AC3 compliant device to test it. I uses:
|
Thanks to Hakan Lennestal, I now have a report saying that this mode works.
|
||||||
|
|
||||||
* device_setup=0x03
|
* device_setup=0x03
|
||||||
- 16bits 48kHz mode with only the Do port enabled
|
- 16bits 48kHz mode with only the Do port enabled
|
||||||
- AC3 with DTS passthru (not tested)
|
- AC3 with DTS passthru
|
||||||
- Caution with this setup the Do port is mapped to the pcm device hw:1,0
|
- Caution with this setup the Do port is mapped to the pcm device hw:1,0
|
||||||
|
|
||||||
|
The command line used to playback the AC3/DTS encoded .wav-files in this mode:
|
||||||
|
% aplay -D hw:1,0 --channels=6 ac3_S16_LE_encoded_file.raw
|
||||||
|
|
||||||
3.2.2 - How to use the device_setup parameter
|
3.2.2 - How to use the device_setup parameter
|
||||||
----------------------------------------------
|
----------------------------------------------
|
||||||
|
|
||||||
|
@@ -2532,7 +2532,18 @@ static int parse_audio_format_i(struct snd_usb_audio *chip, struct audioformat *
|
|||||||
* but we give normal PCM format to get the existing
|
* but we give normal PCM format to get the existing
|
||||||
* apps working...
|
* apps working...
|
||||||
*/
|
*/
|
||||||
pcm_format = SNDRV_PCM_FORMAT_S16_LE;
|
switch (chip->usb_id) {
|
||||||
|
|
||||||
|
case USB_ID(0x0763, 0x2003): /* M-Audio Audiophile USB */
|
||||||
|
if (device_setup[chip->index] == 0x00 &&
|
||||||
|
fp->altsetting == 6)
|
||||||
|
pcm_format = SNDRV_PCM_FORMAT_S16_BE;
|
||||||
|
else
|
||||||
|
pcm_format = SNDRV_PCM_FORMAT_S16_LE;
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
pcm_format = SNDRV_PCM_FORMAT_S16_LE;
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
pcm_format = parse_audio_format_i_type(chip, fp, format, fmt);
|
pcm_format = parse_audio_format_i_type(chip, fp, format, fmt);
|
||||||
if (pcm_format < 0)
|
if (pcm_format < 0)
|
||||||
|
Reference in New Issue
Block a user