helpThe OpenVortex Project - Support: sr #103015, SPDIF

 
 

sr #103015: SPDIF

Submitted by:  None
Submitted on:  Sat 17 Apr 2004 05:46:18 AM UTC  
 
Category: NonePriority: 5 - Normal
Severity: 6 - SecurityStatus: None
Privacy: PublicAssigned to: None
Originator Email: -unavailable-Open/Closed: Open
Operating System: None

Add a New Comment (Rich MarkupRich Markup):
   

You are not logged in

Please log in, so followups can be emailed to you.

 

(Jump to the original submission Jump to the original submission)

Sun 23 Oct 2005 09:41:54 AM UTC, comment #15:

FourCC Company name Description Registration date
0x0240 WAVE_FORMAT_RAW_SPORT Aureal Semiconductor Inc. Not specified

http://msdn.microsoft.com/library/en-us/dnwmt/html/registeredfourcccodesandwaveformats.asp?frame=true

Anonymous
Thu 17 Jun 2004 02:40:16 PM UTC, comment #14:

Which mmio is iec958

VORTEX_SPDIF_FLAGS
or
VORTEX_SPDIF_CFG0, VORTEX_SPDIF_CFG1

static void vortex_spdif_init(vortex_t * vortex, int spdif_sr, int spdif_mode)
{
int i, this_38 = 0, this_04 = 0, this_08 = 0, this_0c = 0;

/* CAsp4Spdif::InitializeSpdifHardware(void) */
hwwrite(vortex->mmio, VORTEX_SPDIF_FLAGS,
hwread(vortex->mmio, VORTEX_SPDIF_FLAGS) & 0xfff3fffd);
//for (i=0x291D4; i<0x29200; i+=4)
for (i = 0; i < 11; i++)
hwwrite(vortex->mmio, VORTEX_SPDIF_CFG1 + (i << 2), 0);
//hwwrite(vortex->mmio, 0x29190, hwread(vortex->mmio, 0x29190) | 0xc0000);
hwwrite(vortex->mmio, VORTEX_CODEC_EN,
hwread(vortex->mmio, VORTEX_CODEC_EN) | EN_SPDIF);

/* CAsp4Spdif::ProgramSRCInHardware(enum SPDIF_SR,enum SPDIFMODE) */
if (this_04 && this_08) {
int edi;

i = (((0x5DC00000 / spdif_sr) + 1) >> 1);
if (i > 0x800) {
if (i < 0x1ffff)
edi = (i >> 1);
else
edi = 0x1ffff;
} else {
i = edi = 0x800;
}
/* this_04 and this_08 are the CASp4Src's (samplerate converters) */
vortex_src_setupchannel(vortex, this_04, edi, 0, 1,
this_0c, 1, 0, edi, 1);
vortex_src_setupchannel(vortex, this_08, edi, 0, 1,
this_0c, 1, 0, edi, 1);
}

i = spdif_sr;
spdif_sr |= 0x8c;
switch (i) {
case 32000:
this_38 &= 0xFFFFFFFE;
this_38 &= 0xFFFFFFFD;
this_38 &= 0xF3FFFFFF;
this_38 |= 0x03000000; /* set 32khz samplerate */
this_38 &= 0xFFFFFF3F;
spdif_sr &= 0xFFFFFFFD;
spdif_sr |= 1;
break;
case 44100:
this_38 &= 0xFFFFFFFE;
this_38 &= 0xFFFFFFFD;
this_38 &= 0xF0FFFFFF;
this_38 |= 0x03000000;
this_38 &= 0xFFFFFF3F;
spdif_sr &= 0xFFFFFFFC;
break;
case 48000:
if (spdif_mode == 1) {
this_38 &= 0xFFFFFFFE;
this_38 &= 0xFFFFFFFD;
this_38 &= 0xF2FFFFFF;
this_38 |= 0x02000000; /* set 48khz samplerate */
this_38 &= 0xFFFFFF3F;
} else {
/* J. Gordon Wolfe: I think this stuff is for AC3 */
this_38 |= 0x00000003;
this_38 &= 0xFFFFFFBF;
this_38 |= 0x80;
}
spdif_sr |= 2;
spdif_sr &= 0xFFFFFFFE;
break;

}
/* looks like the next 2 lines transfer a 16-bit value into 2 8-bit
registers. seems to be for the standard IEC/SPDIF initialization
stuff */
hwwrite(vortex->mmio, VORTEX_SPDIF_CFG0, this_38 & 0xffff);
hwwrite(vortex->mmio, VORTEX_SPDIF_CFG1, this_38 >> 0x10);
hwwrite(vortex->mmio, VORTEX_SPDIF_SMPRATE, spdif_sr);
}

Anonymous
Thu 17 Jun 2004 03:10:48 AM UTC, comment #13:

How to record using SPDIF/IN ?

http://www.turtlebeach.com/site/kb_ftp/5766026.asp

Anonymous
Thu 10 Jun 2004 05:55:46 PM UTC, comment #12:

this_38 is most likely sent to IEC958

http://lists.gnu.org/archive/html/openvortex-dev/2003-11/msg00007.html

Anonymous
Thu 10 Jun 2004 08:31:14 AM UTC, comment #11:

#define IEC958_AES0_NONAUDIO (1<<1) 0 = audio, 1 = non-audio

#define IEC958_AES0_PROFESSIONAL (1<<0) 0 = consumer, 1 = professional

#define IEC958_AES0_PRO_FS_NOTID (0<<6)
#define IEC958_AES0_PRO_FS_44100 (1<<6)
#define IEC958_AES0_PRO_FS_48000 (2<<6)
#define IEC958_AES0_PRO_FS_32000 (3<<6)

this_38 |= 0x00000003;
this_38 &= 0xFFFFFFBF; <-- 0xFFFFFF3F
this_38 |= 0x80; // #define IEC958_AES0_PRO_FS_48000 (2<<6)

Anonymous
Thu 10 Jun 2004 08:21:11 AM UTC, comment #10:

If it is IEC958

#define IEC958_AES3_CON_FS (15<<0) mask - sample frequency

#define IEC958_AES3_CON_FS_32000 (3<<0)
#define IEC958_AES3_CON_FS_44100 (0<<0)
#define IEC958_AES3_CON_FS_48000 (2<<0)

the correct code should be

case 32000:
this_38 &= 0xF0FFFFFF;
this_38 |= 0x03000000;

case 44100:
this_38 &= 0xF0FFFFFF;

case 48000:
this_38 &= 0xF0FFFFFF;
this_38 |= 0x02000000;

Anonymous
Thu 10 Jun 2004 08:16:27 AM UTC, comment #9:

The only difference is the sample rate at 44100

case 44100:
this_38 &= 0xF0FFFFFF; // #define IEC958_AES3_CON_FS_44100 (0<<0)
this_38 |= 0x03000000; <---- is this value correct ???

Anonymous
Thu 10 Jun 2004 08:12:09 AM UTC, comment #8:

this_38 &= 0xF3FFFFFF;
this_38 &= 0xF2FFFFFF;
this_38 &= 0xF0FFFFFF;

#define IEC958_AES3_CON_FS (15<<0) mask - sample frequency

Anonymous
Thu 10 Jun 2004 08:07:16 AM UTC, comment #7:

i = spdif_sr;
spdif_sr |= 0x8c;
switch (i) {
case 32000:
this_38 &= 0xFFFFFFFE; // #define IEC958_AES0_PROFESSIONAL (1<<0) 0 = consumer, 1 = professional
this_38 &= 0xFFFFFFFD; // #define IEC958_AES0_NONAUDIO (1<<1) 0 = audio, 1 = non-audio
this_38 &= 0xF3FFFFFF; ???
this_38 |= 0x03000000; // #define IEC958_AES3_CON_FS_32000 (3<<0)
this_38 &= 0xFFFFFF3F; // #define IEC958_AES0_CON_MODE (3<<6) mask - mode
spdif_sr &= 0xFFFFFFFD;
spdif_sr |= 1;
break;
case 44100:
this_38 &= 0xFFFFFFFE;
this_38 &= 0xFFFFFFFD;
this_38 &= 0xF0FFFFFF; // #define IEC958_AES3_CON_FS_44100 (0<<0)
this_38 |= 0x03000000; ???
this_38 &= 0xFFFFFF3F;
spdif_sr &= 0xFFFFFFFC;
break;
case 48000:
if (spdif_mode == 1) {
this_38 &= 0xFFFFFFFE;
this_38 &= 0xFFFFFFFD;
this_38 &= 0xF2FFFFFF; ???
this_38 |= 0x02000000; // #define IEC958_AES3_CON_FS_48000 (2<<0)
this_38 &= 0xFFFFFF3F;
} else {
/* J. Gordon Wolfe: I think this stuff is for AC3 */
this_38 |= 0x00000003;
this_38 &= 0xFFFFFFBF;
this_38 |= 0x80;
}
spdif_sr |= 2;
spdif_sr &= 0xFFFFFFFE;
break;

}
/* looks like the next 2 lines transfer a 16-bit value into 2 8-bit
registers. seems to be for the standard IEC/SPDIF initialization
stuff */
hwwrite(vortex->mmio, VORTEX_SPDIF_CFG0, this_38 & 0xffff);
hwwrite(vortex->mmio, VORTEX_SPDIF_CFG1, this_38 >> 0x10);
hwwrite(vortex->mmio, VORTEX_SPDIF_SMPRATE, spdif_sr);

Anonymous
Thu 10 Jun 2004 05:39:53 AM UTC, comment #6:

http://www.alsa-project.org/~iwai/writing-an-alsa-driver/x1268.htm

http://cvs.sourceforge.net/viewcvs.py/checkout/alsa/alsa-kernel/pci/emu10k1/emumixer.c?rev=1.22

http://cvs.sourceforge.net/viewcvs.py/checkout/alsa/alsa-kernel/pci/ice1712/ice1712.c?rev=1.53

http://cvs.sourceforge.net/viewcvs.py/checkout/alsa/alsa-kernel/pci/cmipci.c?rev=1.65

http://cvs.sourceforge.net/viewcvs.py/checkout/alsa/alsa-kernel/pci/au88x0/au88x0_pcm.c?rev=1.3

Anonymous
Fri 21 May 2004 04:00:57 AM UTC, comment #5:

Why do au88x0 do not have IEC958 when it support SNDRV_PCM_FMTBIT_IEC958_SUBFRAME_LE ?

http://cvs.sourceforge.net/viewcvs.py/checkout/alsa/alsa-kernel/pci/au88x0/au88x0_pcm.c?rev=1.3

static snd_pcm_hardware_t snd_vortex_playback_hw_spdif = {
.info =
(SNDRV_PCM_INFO_MMAP | SNDRV_PCM_INFO_RESUME |
SNDRV_PCM_INFO_PAUSE | SNDRV_PCM_INFO_INTERLEAVED |
SNDRV_PCM_INFO_MMAP_VALID),
.formats =
SNDRV_PCM_FMTBIT_S16_LE | SNDRV_PCM_FMTBIT_U8 |
SNDRV_PCM_FMTBIT_IEC958_SUBFRAME_LE | SNDRV_PCM_FMTBIT_MU_LAW |
SNDRV_PCM_FMTBIT_A_LAW,

Anonymous
Fri 30 Apr 2004 03:28:44 PM UTC, comment #4:

AES0=0x2
IEC958_AES0_PROFESSIONAL (1<<0)
IEC958_AES0_NONAUDIO (1<<1)
AES1=0x82
IEC958_AES1_CON_DIGDIGCONV_ID 0x02
IEC958_AES1_CON_ORIGINAL (1<<7)
AES2=0x0

AES3=0x2
IEC958_AES3_CON_FS_44100 (0<<0)
IEC958_AES3_CON_FS_48000 (2<<0)
IEC958_AES3_CON_FS_32000 (3<<0)

Consumer IEC958 at 48000 Hz for AC3 pass through SPDIF.

Anonymous
Mon 19 Apr 2004 05:40:15 PM UTC, comment #3:

Digital Audio Compression (AC-3) Standard

http://www.atsc.org/standards.html

http://www.alsa-project.org/alsa-doc/alsa-lib/group___digital___audio___interface.html

Anonymous
Mon 19 Apr 2004 08:20:48 AM UTC, comment #2:

By logging the callback functions in ac97_codec.c during /etc/init.d/alsasound.start , playing AC3 pass=through onboard SPDIF (AC97 2.2) and /etc/init.d/alsasound.stop

snd_ac97_spdif_default_put()
snd_ac97_spdif_default_get()
snd_ac97_put_spsa()
snd_ac97_spdif_cmask_get()
snd_ac97_spdif_pmask_get()

We will need to implement the above callback functions for a new spdif control SNDRV_CTL_ELEM_TYPE_IEC958 in au8830 driver if au8830 support AC3 pass-through.

Anonymous
Sun 18 Apr 2004 12:56:41 PM UTC, comment #1:

It seem that it search for ctl_type SNDRV_CTL_ELEM_TYPE_IEC958 when using AC3 pass-through.

http://cvs.sourceforge.net/viewcvs.py/checkout/alsa/alsa-kernel/pci/au88x0/au88x0_pcm.c?content-type=text%2Fplain&rev=1.3

/* SPDIF kcontrol */
static int
snd_vortex_spdif_info(snd_kcontrol_t * kcontrol, snd_ctl_elem_info_t * uinfo)
{
static char *texts[] = { "32000", "44100", "48000" };

uinfo->type = SNDRV_CTL_ELEM_TYPE_ENUMERATED;

Anonymous
Sat 17 Apr 2004 05:46:18 AM UTC, original submission:

mplayer -ao alsa9:hw:0,0 -ac hwac3

same error with different option
-ao alsa9:hw:0,1
-ao alsa9:hw:0,2
-ao alsa9:hw:0,3

Forced audio codec: hwac3
Opening audio decoder: [hwac3] AC3/DTS pass-through SP/DIF
No accelerated IMDCT transform found
hwac3: switched to AC3, 448000 bps, 48000 Hz
AUDIO: 48000 Hz, 2 ch, 16 bit (0x400), ratio: 56000->192000 (448.0 kbit)
Selected audio codec: [hwac3] afm:hwac3 (AC3 through SPDIF)

Checking audio filter chain for 48000Hz/2ch/16bit -> 48000Hz/2ch/16bit...
AF_pre: af format: 2 bps, 2 ch, 48000 hz, big endian AC3
AF_pre: 48000Hz 2ch AC3
alsa-init: requested format: 48000 Hz, 2 channels, AC3
alsa-init: soundcard set to iec958:AES0=0x2,AES1=0x82,AES2=0x0,AES3=0x2

snd_config_search_alias_hooks : err=0 key=iec958 base=pcm
snd_config_search err : -2

ALSA lib conf.c:2671:(snd_config_hooks_call) function snd_config_hook_load_for_all_cards returned error: Invalid argument
ALSA lib pcm.c:1841:(snd_pcm_open_conf) Invalid type for PCM iec958:AES0=0x2,AES1=0x82,AES2=0x0,AES3=0x2 definition (id: iec958, value: cards.pcm.iec958)
alsa-init: playback open error: Invalid argument
Could not open/initialize audio device -> no sound.
Audio: no sound

It's not mplayer bugs, using mplayer with snd-intel8x0 with ac97 v2.2 codec

Forced audio codec: hwac3
Opening audio decoder: [hwac3] AC3/DTS pass-through SP/DIF
No accelerated IMDCT transform found
hwac3: switched to AC3, 448000 bps, 48000 Hz
AUDIO: 48000 Hz, 2 ch, 16 bit (0x400), ratio: 56000->192000 (448.0 kbit)
Selected audio codec: [hwac3] afm:hwac3 (AC3 through SPDIF)

Checking audio filter chain for 48000Hz/2ch/16bit -> 48000Hz/2ch/16bit...
AF_pre: af format: 2 bps, 2 ch, 48000 hz, big endian AC3
AF_pre: 48000Hz 2ch AC3
alsa-init: requested format: 48000 Hz, 2 channels, AC3
alsa-init: soundcard set to iec958:AES0=0x2,AES1=0x82,AES2=0x0,AES3=0x2
alsa9: 48000 Hz/2 channels/4 bpf/65536 bytes buffer/Signed 16 bit Little Endian
AO: [alsa9] 48000Hz 2ch AC3 (2 bps)
Building audio filter chain for 48000Hz/2ch/16bit -> 48000Hz/2ch/16bit...

Is it related to conf files ?

/usr/share/alsa/alsa.conf
/usr/share/alsa/cards/AU8830.conf
/usr/share/alsa/pcm/ice958.conf

or

SPDIF is defined in AC 97 v2.2 but au8830 with AC97 v2.1 codec

http://www.intel.com/labs/media/audio/

Anonymous

 

(Note: upload size limit is set to 16384 kB, after insertion of the required escape characters.)

Attach File(s):
   
   
Comment:
   

No files currently attached

 

Depends on the following items: None found

Items that depend on this one: None found

 

CC list is empty

 

Do you think this task is very important?
If so, you can click here to add your encouragement to it.
This task has 0 encouragements so far.

Only logged-in users can vote.

 

Please enter the title of George Orwell's famous dystopian book (it's a date):

 

 

No Changes Have Been Made to This Item

Back to the top


Powered by Savane 3.1-cleanup