mplayer + AC3/DTS tracks using SPDIF

Talk about anything related to Gentoox or Gentoo.
Post Reply
core
Newbie
Posts: 1
Joined: Fri Sep 02, 2005 11:35 pm

mplayer + AC3/DTS tracks using SPDIF

Post by core »

Hi,

After reading viewtopic.php?t=2778 I still coudnt get mplayer to play AC3/DTS tracks. Every time it exited with an error
ALSA lib setup.c:548:(add_elem) Cannot obtain info for CTL elem (MIXER,'IEC958 Playback AC97-SPSA',0,0,0):....
This simple patch for mplayer disables IEC958 initialization within mplayer code.

Code: Select all

*** MPlayer-1.0pre7/libao2/ao_alsa.c    Sun Feb 27 23:06:32 2005
--- MPlayer-1.0pre7_mod/libao2/ao_alsa.c        Sat Sep  3 00:55:18 2005
***************
*** 369,389 ****
       * 'iec958'
       */
      if (format == AF_FORMAT_AC3) {
!       unsigned char s[4];
!
!       s[0] = IEC958_AES0_NONAUDIO |
!         IEC958_AES0_CON_EMPHASIS_NONE;
!       s[1] = IEC958_AES1_CON_ORIGINAL |
!         IEC958_AES1_CON_PCM_CODER;
!       s[2] = 0;
!       s[3] = IEC958_AES3_CON_FS_48000;
!
!       snprintf(alsa_device, ALSA_DEVICE_SIZE,
!               "iec958:{CARD 0 AES0 0x%02x AES1 0x%02x AES2 0x%02x AES3 0x%02x}",
!               s[0], s[1], s[2], s[3]);
!       device.str = alsa_device;
!
!       mp_msg(MSGT_AO,MSGL_V,"alsa-spdif-init: playing AC3, %i channels\n", channels);
      }
    else
          /* in any case for multichannel playback we should select
--- 369,375 ----
       * 'iec958'
       */
      if (format == AF_FORMAT_AC3) {
!       device.str = "default";
      }
    else
          /* in any case for multichannel playback we should select
Now I can use -hwac3 and -hwdts !
This was tested on Xbox running 2.6.12(+ xbox-linux.org patch) + alsa 1.0.9b (with ac97 patch) and patched mplayer 1.0pre7.

Just for completness - I'm using /etc/asound.conf found in already mentioned post:
# Override the default output used by ALSA.
# If you do not override the default, your default
# device is identical to the (unmixed) analog device
# shown below. If you prefer mixed and/or digital
# output, uncomment the appropriate four lines below
# (only one slave.pcm line).
pcm.!default {
type plug
## Uncomment the following to use mixed analog by default
# slave.pcm "dmix-analog"
# Uncomment the following to use unmixed digital by default
slave.pcm "digital-hw"
## Uncomment the following to use mixed digital by default
# slave.pcm "dmix-digital"
}

# Alias for analog output on the nForce2 (hw:0,0)
# - This is identical to the device named "default"--which
# always exists and refers to hw:0,0 (unless overridden)
# - Therefore, we can specify "hw:0,0", "default", or "analog"
# to access analog output on the nForce2
pcm.analog {
type plug
slave.pcm "analog-hw"
}

# Control device (mixer, etc.) for the nForce2 card
ctl.analog {
type hw
card 0
}

# Alias for (rate-converted) mixed analog output on the
# nForce2 (hw:0,0)
# - This will accept audio input--regardless of rate--and
# convert to the rate required for the dmix plugin
# (in this case 48000Hz)
pcm.mixed-analog {
type plug
slave.pcm "dmix-analog"
}

# Control device (mixer, etc.) for the nForce2 card
ctl.mixed-analog {
type hw
card 0
}

# Alias for (rate-converted) digital (S/PDIF) output on the
# nForce2 (hw:0,2)
# - This will accept audio input--regardless of rate--and
# convert to the rate required for the S/PDIF hardware
# (in this case 48000Hz)
pcm.digital {
type plug
slave.pcm "digital-hw"
}

# Control device (mixer, etc.) for the nForce2 card
ctl.digital {
type hw
card 0
}

# Alias for mixed (rate-converted) digital (S/PDIF) output on the
# nForce2 (hw:0,2)
# - This will accept audio input--regardless of rate--and
# convert to the rate required for the S/PDIF hardware
# (in this case 48000Hz)
pcm.mixed-digital {
type plug
slave.pcm "dmix-digital"
}

# Control device (mixer, etc.) for the nForce2 card
ctl.mixed-digital {
type hw
card 0
}

# The following devices are not useful by themselves. They
# require specific rates, channels, and formats. Therefore,
# you probably do not want to use them directly. Instead use
# of of the devices defined above.

# Alias for analog output on the nForce2 (hw:0,0)
# Do not use this directly--it requires specific rate,
# channels, and format
pcm.analog-hw {
type hw
card 0
# The default value for device is 0, so no need to specify
}

# Control device (mixer, etc.) for the nForce2 card
ctl.analog-hw {
type hw
card 0
}

# Alias for digital (S/PDIF) output on the nForce2 (hw:0,2)
# Do not use this directly--it requires specific rate,
# channels, and format
pcm.digital-hw {
type hw
card 0
device 2
}

# Control device (mixer, etc.) for the nForce2 card
ctl.digital-hw {
type hw
card 0
}

# Direct software mixing plugin for analog output on
# the nForce2 (hw:0,0)
# Do not use this directly--it requires specific rate,
# channels, and format
pcm.dmix-analog {
type dmix
ipc_key 1234
slave {
pcm "analog-hw"
period_time 0
period_size 1024
buffer_size 4096
rate 48000
}
}

# Control device (mixer, etc.) for the nForce2 card
ctl.dmix-analog {
type hw
card 0
}

# Direct software mixing plugin for digital (S/PDIF) output
# on the nForce2 (hw:0,2)
# Do not use this directly--it requires specific rate,
# channels, and format
pcm.dmix-digital {
type dmix
ipc_key 1235
slave {
pcm "digital-hw"
period_time 0
period_size 1024
buffer_size 4096
rate 48000
}
}

# Control device (mixer, etc.) for the nForce2 card
ctl.dmix-digital {
type hw
card 0
}
Post Reply