SPDIF AC3/DTS Passthrough Issues on Fedora 41 (plus audio pops and cutouts)

Hi everyone,

I’m facing two issues with a Realtek USB-to-SPDIF-out adapter on Fedora 41.

First, AC3/DTS passthrough isn’t working. My receiver only gets/detects stereo PCM. Even though surround profiles (e.g., 5.1) appear to be available with aplay -L.

Note that on Garuda Linux (Arch/KDE) and on Windows 10/11, passthrough (5.1) works perfectly with the same hardware. Normal stereo audio works fine (except for the second issue below), but KDE Plasma’s Audio settings do not show any surround options. In Garuda Linux there are surround options in the list.

Secondly, I hear faint pops from the speakers after playing sound (as if the audio device is going into a low-power mode) and often the initial few milliseconds of audio playback gets cut off. This doesn’t really happen on said other operating systems. So clearly something is configured differently.

Details on the USB SPDIF output adapter:

Bus 003 Device 014: ID 0bda:4e27 Realtek Semiconductor Corp. USB SPDIF Adapter

Why does AC3/DTS passthrough fail on Fedora? and how can I properly fix the pops and audio cut-offs?

These issues occur a on fresh and fully updated installation of Fedora 41 KDE.

Any help fixing this would be greatly appreciated!

(some additional information in a post below…)

Additional Information:

aplay -l

output
**** List of PLAYBACK Hardware Devices ****
<some other devices like wireless headset and HDMI devices>
card 5: Adapter [USB SPDIF Adapter], device 0: USB Audio [USB Audio]
  Subdevices: 1/1
  Subdevice #0: subdevice #0
card 5: Adapter [USB SPDIF Adapter], device 1: USB Audio [USB Audio #1]
  Subdevices: 1/1
  Subdevice #0: subdevice #0

aplay -L

output
null
    Discard all samples (playback) or generate zero samples (capture)
sysdefault
    Default Audio Device
pipewire
    PipeWire Sound Server
default
    Default ALSA Output (currently PipeWire Media Server)
...
<some other devices like wireless headset and HDMI devices>
...
sysdefault:CARD=Adapter
    USB SPDIF Adapter, USB Audio
    Default Audio Device
front:CARD=Adapter,DEV=0
    USB SPDIF Adapter, USB Audio
    Front output / input
surround21:CARD=Adapter,DEV=0
    USB SPDIF Adapter, USB Audio
    2.1 Surround output to Front and Subwoofer speakers
surround40:CARD=Adapter,DEV=0
    USB SPDIF Adapter, USB Audio
    4.0 Surround output to Front and Rear speakers
surround41:CARD=Adapter,DEV=0
    USB SPDIF Adapter, USB Audio
    4.1 Surround output to Front, Rear and Subwoofer speakers
surround50:CARD=Adapter,DEV=0
    USB SPDIF Adapter, USB Audio
    5.0 Surround output to Front, Center and Rear speakers
surround51:CARD=Adapter,DEV=0
    USB SPDIF Adapter, USB Audio
    5.1 Surround output to Front, Center, Rear and Subwoofer speakers
surround71:CARD=Adapter,DEV=0
    USB SPDIF Adapter, USB Audio
    7.1 Surround output to Front, Center, Side, Rear and Woofer speakers
iec958:CARD=Adapter,DEV=0
    USB SPDIF Adapter, USB Audio
    IEC958 (S/PDIF) Digital Audio Output
iec958:CARD=Adapter,DEV=1
    USB SPDIF Adapter, USB Audio #1
    IEC958 (S/PDIF) Digital Audio Output

lsusb -v -d 0bda:4e27:

output
Bus 003 Device 014: ID 0bda:4e27 Realtek Semiconductor Corp. USB SPDIF Adapter
Couldn't open device, some information will be missing
Device Descriptor:
  bLength                18
  bDescriptorType         1
  bcdUSB               2.00
  bDeviceClass          239 Miscellaneous Device
  bDeviceSubClass         2 [unknown]
  bDeviceProtocol         1 Interface Association
  bMaxPacketSize0        64
  idVendor           0x0bda Realtek Semiconductor Corp.
  idProduct          0x4e27 USB SPDIF Adapter
  bcdDevice            0.16
  iManufacturer           3 Generic
  iProduct                1 USB SPDIF Adapter
  iSerial                 2 202110200032
  bNumConfigurations      1
  Configuration Descriptor:
    bLength                 9
    bDescriptorType         2
    wTotalLength       0x011d
    bNumInterfaces          3
    bConfigurationValue     1
    iConfiguration          4 
    bmAttributes         0xa0
      (Bus Powered)
      Remote Wakeup
    MaxPower              100mA
    Interface Association:
      bLength                 8
      bDescriptorType        11
      bFirstInterface         0
      bInterfaceCount         2
      bFunctionClass          1 Audio
      bFunctionSubClass       0 [unknown]
      bFunctionProtocol      32 
      iFunction               5 
    Interface Descriptor:
      bLength                 9
      bDescriptorType         4
      bInterfaceNumber        0
      bAlternateSetting       0
      bNumEndpoints           1
      bInterfaceClass         1 Audio
      bInterfaceSubClass      1 Control Device
      bInterfaceProtocol     32 
      iInterface              5 
      AudioControl Interface Descriptor:
        bLength                 9
        bDescriptorType        36
        bDescriptorSubtype      1 (HEADER)
        bcdADC               2.00
        bCategory               4
        wTotalLength       0x0050
        bmControls           0x00
      AudioControl Interface Descriptor:
        bLength                 8
        bDescriptorType        36
        bDescriptorSubtype     10 (CLOCK_SOURCE)
        bClockID                2
        bmAttributes            7 Internal programmable clock (synchronized to SOF)
        bmControls           0x07
          Clock Frequency Control (read/write)
          Clock Validity Control (read-only)
        bAssocTerminal          0
        iClockSource            0 
      AudioControl Interface Descriptor:
        bLength                17
        bDescriptorType        36
        bDescriptorSubtype      2 (INPUT_TERMINAL)
        bTerminalID             4
        wTerminalType      0x0101 USB Streaming
        bAssocTerminal          0
        bCSourceID              2
        bNrChannels             2
        bmChannelConfig    0x00000003
          Front Left (FL)
          Front Right (FR)
        iChannelNames           0 
        bmControls         0x0000
        iTerminal               0 
      AudioControl Interface Descriptor:
        bLength                12
        bDescriptorType        36
        bDescriptorSubtype      3 (OUTPUT_TERMINAL)
        bTerminalID             6
        wTerminalType      0x0605 SPDIF interface
        bAssocTerminal          4
        bSourceID               8
        bCSourceID              2
        bmControls         0x0004
          Connector Control (read-only)
        iTerminal               0 
      AudioControl Interface Descriptor:
        bLength                18
        bDescriptorType        36
        bDescriptorSubtype      6 (FEATURE_UNIT)
        bUnitID                 8
        bSourceID               4
        bmaControls(0)     0x00000003
          Mute Control (read/write)
        bmaControls(1)     0x00000000
        bmaControls(2)     0x00000000
        iFeature                0 
      AudioControl Interface Descriptor:
        bLength                16
        bDescriptorType        36
        bDescriptorSubtype      9 (EXTENSION_UNIT)
        bUnitID                 9
        wExtensionCode     0x0bda
        bNrInPins               1
        baSourceID(0)           8
        bNrChannels             2
        bmChannelConfig    0x00000003
          Front Left (FL)
          Front Right (FR)
        iChannelNames           0 
        bmControls           0x00
        iExtension              0 
      Endpoint Descriptor:
        bLength                 7
        bDescriptorType         5
        bEndpointAddress     0x87  EP 7 IN
        bmAttributes            3
          Transfer Type            Interrupt
          Synch Type               None
          Usage Type               Data
        wMaxPacketSize     0x0010  1x 16 bytes
        bInterval               8
    Interface Descriptor:
      bLength                 9
      bDescriptorType         4
      bInterfaceNumber        1
      bAlternateSetting       0
      bNumEndpoints           0
      bInterfaceClass         1 Audio
      bInterfaceSubClass      2 Streaming
      bInterfaceProtocol     32 
      iInterface              5 
    Interface Descriptor:
      bLength                 9
      bDescriptorType         4
      bInterfaceNumber        1
      bAlternateSetting       1
      bNumEndpoints           1
      bInterfaceClass         1 Audio
      bInterfaceSubClass      2 Streaming
      bInterfaceProtocol     32 
      iInterface              5 
      AudioStreaming Interface Descriptor:
        bLength                16
        bDescriptorType        36
        bDescriptorSubtype      1 (AS_GENERAL)
        bTerminalLink           4
        bmControls           0x00
        bFormatType             1
        bmFormats          0x00000001
          PCM
        bNrChannels             2
        bmChannelConfig    0x00000003
          Front Left (FL)
          Front Right (FR)
        iChannelNames           0 
      AudioStreaming Interface Descriptor:
        bLength                 6
        bDescriptorType        36
        bDescriptorSubtype      2 (FORMAT_TYPE)
        bFormatType             1 (FORMAT_TYPE_I)
        bSubslotSize            2
        bBitResolution         16
      Endpoint Descriptor:
        bLength                 7
        bDescriptorType         5
        bEndpointAddress     0x02  EP 2 OUT
        bmAttributes            9
          Transfer Type            Isochronous
          Synch Type               Adaptive
          Usage Type               Data
        wMaxPacketSize     0x03e4  1x 996 bytes
        bInterval               1
        AudioStreaming Endpoint Descriptor:
          bLength                 8
          bDescriptorType        37
          bDescriptorSubtype      1 (EP_GENERAL)
          bmAttributes         0x00
          bmControls           0x00
          bLockDelayUnits         0 Undefined
          wLockDelay         0x0000
    Interface Descriptor:
      bLength                 9
      bDescriptorType         4
      bInterfaceNumber        1
      bAlternateSetting       2
      bNumEndpoints           1
      bInterfaceClass         1 Audio
      bInterfaceSubClass      2 Streaming
      bInterfaceProtocol     32 
      iInterface              5 
      AudioStreaming Interface Descriptor:
        bLength                16
        bDescriptorType        36
        bDescriptorSubtype      1 (AS_GENERAL)
        bTerminalLink           4
        bmControls           0x00
        bFormatType             1
        bmFormats          0x00000001
          PCM
        bNrChannels             2
        bmChannelConfig    0x00000003
          Front Left (FL)
          Front Right (FR)
        iChannelNames           0 
      AudioStreaming Interface Descriptor:
        bLength                 6
        bDescriptorType        36
        bDescriptorSubtype      2 (FORMAT_TYPE)
        bFormatType             1 (FORMAT_TYPE_I)
        bSubslotSize            3
        bBitResolution         24
      Endpoint Descriptor:
        bLength                 7
        bDescriptorType         5
        bEndpointAddress     0x02  EP 2 OUT
        bmAttributes            9
          Transfer Type            Isochronous
          Synch Type               Adaptive
          Usage Type               Data
        wMaxPacketSize     0x0ae8  2x 744 bytes
        bInterval               1
        AudioStreaming Endpoint Descriptor:
          bLength                 8
          bDescriptorType        37
          bDescriptorSubtype      1 (EP_GENERAL)
          bmAttributes         0x00
          bmControls           0x00
          bLockDelayUnits         0 Undefined
          wLockDelay         0x0000
    Interface Descriptor:
      bLength                 9
      bDescriptorType         4
      bInterfaceNumber        1
      bAlternateSetting       3
      bNumEndpoints           1
      bInterfaceClass         1 Audio
      bInterfaceSubClass      2 Streaming
      bInterfaceProtocol     32 
      iInterface              5 
      AudioStreaming Interface Descriptor:
        bLength                16
        bDescriptorType        36
        bDescriptorSubtype      1 (AS_GENERAL)
        bTerminalLink           4
        bmControls           0x00
        bFormatType             3
        bmFormats          0x00001381
          PCM
        bNrChannels             2
        bmChannelConfig    0x00000003
          Front Left (FL)
          Front Right (FR)
        iChannelNames           0 
      AudioStreaming Interface Descriptor:
        bLength                 6
        bDescriptorType        36
        bDescriptorSubtype      2 (FORMAT_TYPE)
        bFormatType             3 (FORMAT_TYPE_III)
        bSubslotSize            2
        bBitResolution         16
      Endpoint Descriptor:
        bLength                 7
        bDescriptorType         5
        bEndpointAddress     0x02  EP 2 OUT
        bmAttributes            9
          Transfer Type            Isochronous
          Synch Type               Adaptive
          Usage Type               Data
        wMaxPacketSize     0x03e4  1x 996 bytes
        bInterval               1
        AudioStreaming Endpoint Descriptor:
          bLength                 8
          bDescriptorType        37
          bDescriptorSubtype      1 (EP_GENERAL)
          bmAttributes         0x00
          bmControls           0x00
          bLockDelayUnits         0 Undefined
          wLockDelay         0x0000
    Interface Descriptor:
      bLength                 9
      bDescriptorType         4
      bInterfaceNumber        2
      bAlternateSetting       0
      bNumEndpoints           1
      bInterfaceClass         3 Human Interface Device
      bInterfaceSubClass      0 [unknown]
      bInterfaceProtocol      0 
      iInterface              0 
        HID Device Descriptor:
          bLength                 9
          bDescriptorType        33
          bcdHID               1.11
          bCountryCode            0 Not supported
          bNumDescriptors         1
          bDescriptorType        34 Report
          wDescriptorLength      92
          Report Descriptors: 
            ** UNAVAILABLE **
      Endpoint Descriptor:
        bLength                 7
        bDescriptorType         5
        bEndpointAddress     0x88  EP 8 IN
        bmAttributes            3
          Transfer Type            Interrupt
          Synch Type               None
          Usage Type               Data
        wMaxPacketSize     0x0040  1x 64 bytes
        bInterval               4

wpctl status:

output
PipeWire 'pipewire-0' 
 └─ Clients:
        32. plasmashell
        34. xdg-desktop-portal
        36. System Settings
        37. 
        38. 
        42. WirePlumber
        62. WirePlumber [export]
        82. QtPulseAudio:2650
        83. wpctl

Audio
 ├─ Devices:
 │      61. Rembrandt Radeon High Definition Audio Controller [alsa]
 │      68. Family 17h/19h/1ah HD Audio Controller [alsa]
 │      69. BRIO Ultra HD Webcam                [alsa]
 │      70. Arctis Nova Pro Wireless            [alsa]
 │      71. USB SPDIF Adapter                   [alsa]
 │      72. TU104 HD Audio Controller           [alsa]
 │  
 ├─ Sinks:
 │  *   49. USB SPDIF Adapter Digital Stereo (IEC958) [vol: 1.00]
 │      54. Arctis Nova Pro Wireless Digital Stereo (IEC958) [vol: 1.00]
 │  
 ├─ Sources:
 │  *   51. BRIO Ultra HD Webcam Analog Stereo  [vol: 1.00]
 │      53. Arctis Nova Pro Wireless Mono       [vol: 1.00]
 │  
 ├─ Filters:
 │  
 └─ Streams:

Video
 ├─ Devices:
 │      52. Logitech BRIO                       [libcamera]
 │      55. Logitech BRIO                       [v4l2]
 │      56. Logitech BRIO                       [v4l2]
 │      57. Logitech BRIO                       [v4l2]
 │      58. Logitech BRIO                       [v4l2]
 │  
 ├─ Sinks:
 │  
 ├─ Sources:
 │  *   35. Logitech BRIO (V4L2)               
 │      80. Logitech BRIO (V4L2)               
 │  
 ├─ Filters:
 │  
 └─ Streams:

Settings
 └─ Default Configured Devices:
         0. Audio/Sink    alsa_output.usb-Generic_USB_SPDIF_Adapter_202110200032-00.iec958-stereo

pw-dump | grep -A 100 "usb-Generic_USB_SPDIF_Adapter":

output
      { "subject": 0, "key": "default.configured.audio.sink", "type": "Spa:String:JSON", "value": { "name": "alsa_output.usb-Generic_USB_SPDIF_Adapter_202110200032-00.iec958-stereo" } },
      { "subject": 0, "key": "default.audio.sink", "type": "Spa:String:JSON", "value": { "name": "alsa_output.usb-Generic_USB_SPDIF_Adapter_202110200032-00.iec958-stereo" } },
      { "subject": 0, "key": "default.audio.source", "type": "Spa:String:JSON", "value": { "name": "alsa_input.usb-046d_Logitech_BRIO_E35BD8CF-03.analog-stereo" } },
      { "subject": 0, "key": "default.video.source", "type": "Spa:String:JSON", "value": { "name": "v4l2_input.pci-0000_0c_00.0-usb-0_5_1.0" } }
    ]
  },
  {
    "id": 73,
    "type": "PipeWire:Interface:Metadata",
    "version": 3,
    "permissions": [ "r", "w", "x" ],
    "props": {
      "client.id": 42,
      "factory.id": 7,
      "metadata.name": "route-settings",
      "module.id": 6,
      "object.serial": 86
    },
    "metadata": [
      { "subject": 0, "key": "restore.stream.Output/Audio.media.role:Notification", "type": "Spa:String:JSON", "value": { "channels": [ "FL", "FR" ], "volumes": [ 1.000000, 1.000000 ], "mute": false, "volume": 1.000000 } }
    ]
  },
  {
    "id": 62,
    "type": "PipeWire:Interface:Client",
    "version": 3,
    "permissions": [ "r", "w", "x", "m" ],
    "info": {
      "change-mask": [ "props" ],
      "props": {
        "application.language": "en_US.UTF-8",
        "application.name": "WirePlumber [export]",
        "application.process.binary": "wireplumber",
        "application.process.host": "testneo",
        "application.process.id": 13653,
        "application.process.session-id": 6,
        "application.process.user": "ray",
        "application.version": "0.5.8",
        "clock.power-of-two-quantum": true,
        "config.name": "null",
        "context.modules.allow-empty": true,
        "core.name": "pipewire-ray-13653",
        "core.version": "1.2.7",
        "cpu.max-align": 64,
        "default.clock.max-quantum": 2048,
        "default.clock.min-quantum": 32,
        "default.clock.quantum": 1024,
        "default.clock.quantum-floor": 4,
        "default.clock.quantum-limit": 8192,
        "default.clock.rate": 48000,
        "default.video.height": 480,
        "default.video.rate.denom": 1,
        "default.video.rate.num": 25,
        "default.video.width": 640,
        "link.max-buffers": 64,
        "log.level": 2,
        "mem.allow-mlock": true,
        "mem.warn-mlock": false,
        "module.id": 2,
        "object.id": 62,
        "object.serial": 87,
        "pipewire.access": "unrestricted",
        "pipewire.protocol": "protocol-native",
        "pipewire.sec.gid": 1000,
        "pipewire.sec.label": "unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023",
        "pipewire.sec.pid": 13653,
        "pipewire.sec.socket": "pipewire-0-manager",
        "pipewire.sec.uid": 1000,
        "remote.name": "[pipewire-0-manager,pipewire-0]",
        "settings.check-quantum": false,
        "settings.check-rate": false,
        "window.x11.display": ":0",
        "wireplumber.daemon": true,
        "wireplumber.export-core": true,
        "wireplumber.profile": "main"
      }
    }
  },
  {
    "id": 72,
    "type": "PipeWire:Interface:Device",
    "version": 3,
    "permissions": [ "r", "w", "x", "m" ],
    "info": {
      "change-mask": [ "props", "params" ],
      "props": {
        "alsa.card": 1,
        "alsa.card_name": "HDA NVidia",
        "alsa.components": "HDA:10de0092,10438711,00100100",
        "alsa.driver_name": "snd_hda_intel",
        "alsa.id": "NVidia",
        "alsa.long_card_name": "HDA NVidia at 0xde080000 irq 191",
        "alsa.mixer_name": "Nvidia GPU 92 HDMI/DP",
        "api.acp.auto-port": false,
        "api.acp.auto-profile": false,
        "api.alsa.card": 1,
        "api.alsa.card.longname": "HDA NVidia at 0xde080000 irq 191",
        "api.alsa.card.name": "HDA NVidia",
        "api.alsa.path": "hw:1",
        "api.alsa.split-enable": true,
        "api.alsa.use-acp": true,
        "api.dbus.ReserveDevice1": "Audio1",
--
        "device.bus-id": "usb-Generic_USB_SPDIF_Adapter_202110200032-00",
        "device.bus-path": "pci-0000:0c:00.0-usb-0:10:1.0",
        "device.description": "USB SPDIF Adapter",
        "device.enum.api": "udev",
        "device.icon-name": "audio-card-analog-usb",
        "device.name": "alsa_card.usb-Generic_USB_SPDIF_Adapter_202110200032-00",
        "device.nick": "USB SPDIF Adapter",
        "device.plugged.usec": 8387074,
        "device.product.id": "0x4e27",
        "device.product.name": "USB SPDIF Adapter",
        "device.serial": "Generic_USB_SPDIF_Adapter_202110200032",
        "device.string": 5,
        "device.subsystem": "sound",
        "device.sysfs.path": "/devices/pci0000:00/0000:00:02.1/0000:03:00.0/0000:04:08.0/0000:06:00.0/0000:07:0c.0/0000:0c:00.0/usb3/3-10/3-10:1.0/sound/card5",
        "device.vendor.id": "0x0bda",
        "device.vendor.name": "Realtek Semiconductor Corp.",
        "factory.id": 15,
        "media.class": "Audio/Device",
        "object.id": 71,
        "object.path": "alsa:acp:Adapter",
        "object.serial": 90,
        "spa.object.id": 12
      },
      "params": {
        "EnumProfile": [
          {
            "index": 0,
            "name": "off",
            "description": "Off",
            "priority": 0,
            "available": "yes",
            "classes": [
              0
            ]
          },
          {
            "index": 1,
            "name": "output:analog-stereo",
            "description": "Analog Stereo Output",
            "priority": 6500,
            "available": "unknown",
            "classes": [
              1,
              [
                "Audio/Sink",
                1,
                "card.profile.devices",
                [ 2 ]
              ]
            ]
          },
          {
            "index": 2,
            "name": "output:iec958-stereo",
            "description": "Digital Stereo (IEC958) Output",
            "priority": 5500,
            "available": "unknown",
            "classes": [
              1,
              [
                "Audio/Sink",
                1,
                "card.profile.devices",
                [ 3 ]
              ]
            ]
          },
          {
            "index": 3,
            "name": "pro-audio",
            "description": "Pro Audio",
            "priority": 1,
            "available": "yes",
            "classes": [
              1,
              [
                "Audio/Sink",
                2,
                "card.profile.devices",
                [ 0, 1 ]
              ]
            ]
          }
        ],
        "Profile": [
          {
            "index": 2,
            "name": "output:iec958-stereo",
            "description": "Digital Stereo (IEC958) Output",
            "priority": 5500,
            "available": "unknown",
            "classes": [
              1,
              [
                "Audio/Sink",
                1,
                "card.profile.devices",
                [ 3 ]
              ]
            ],
            "save": false
          }
        ],
        "EnumRoute": [
          {
            "index": 0,
--
        "node.name": "alsa_output.usb-Generic_USB_SPDIF_Adapter_202110200032-00.iec958-stereo",
        "node.nick": "USB SPDIF Adapter",
        "node.pause-on-idle": false,
        "object.id": 49,
        "object.path": "alsa:acp:Adapter:3:playback",
        "object.serial": 107,
        "port.group": "playback",
        "priority.driver": 1008,
        "priority.session": 1008
      },
      "params": {
        "EnumFormat": [
          {
            "mediaType": "audio",
            "mediaSubtype": "raw",
            "format": {
              "default": "S24LE",
              "alt1": "S24LE",
              "alt2": "S16LE"
            },
            "rate": { "default": 48000, "min": 44100, "max": 192000 },
            "channels": 2,
            "position": [ "FL", "FR" ]
          },
          {
            "mediaType": "audio",
            "mediaSubtype": "iec958",
            "iec958Codec": {
              "default": "PCM",
              "alt1": "PCM"
            },
            "rate": { "default": 48000, "min": 44100, "max": 192000 }
          }
        ],
        "PropInfo": [
          {
            "id": "volume",
            "description": "Volume",
            "type": { "default": 1.000000, "min": 0.000000, "max": 10.000000 }
          },
          {
            "id": "mute",
            "description": "Mute",
            "type": {
              "default": false,
              "alt1": false,
              "alt2": true
            }
          },
          {
            "id": "channelVolumes",
            "description": "Channel Volumes",
            "type": { "default": 1.000000, "min": 0.000000, "max": 10.000000 },
            "container": "Array"
          },
          {
            "id": "channelMap",
            "description": "Channel Map",
            "type": "",
            "container": "Array"
          },
          {
            "id": "monitorMute",
            "description": "Monitor Mute",
            "type": {
              "default": false,
              "alt1": false,
              "alt2": true
            }
          },
          {
            "id": "monitorVolumes",
            "description": "Monitor Volumes",
            "type": { "default": 1.000000, "min": 0.000000, "max": 10.000000 },
            "container": "Array"
          },
          {
            "id": "softMute",
            "description": "Soft Mute",
            "type": {
              "default": false,
              "alt1": false,
              "alt2": true
            }
          },
          {
            "id": "softVolumes",
            "description": "Soft Volumes",
            "type": { "default": 1.000000, "min": 0.000000, "max": 10.000000 },
            "container": "Array"
          },
          {
            "name": "monitor.channel-volumes",
            "description": "Monitor channel volume",
            "type": {
              "default": false,
              "alt1": false,
              "alt2": true
            },
            "params": true
          },

It’s not my area of expertise, but FWIW, this the documentation that I can find for enabling S/PDIF passthrough with PipeWire: Guide IEC958 · Wiki · PipeWire / pipewire · GitLab

1 Like

Thanks for this information. It definitely gave me some insight in the problem, but unfortunately didn’t bring a solution yet.

I tested and then played around with everything this page mentions. My adapter correctly show/has the Digital Stereo (IEC958) Output profile. I tried enabling AC3, DTS both in pavucontrol and more manually with the pactl and pw-cli. I was able to follow along with all the steps mentioned in the article. I was able to find all the ‘features’ mentioned (output:iec958-stereo, iec958Codecs, etc…). I was able to add/remove the AC3, DTS codecs to the profile with all methods described.

HOWEVER: When it came to testing sound output using VLC (or really any other way I already tried earlier) i do NOT see the right format/codec being used while observing audio playback with pw-top:

I get:

R 112 0 0 17.6us 4.2us 0.00 0.00 17 F32LE 6 48000 + VLC media player (LibVLC 3.0.21)

i.e.:

Instead of IEC958 AC3 48000, i see F32LE 6 48000 instead !

According to the article, this means it is (clearly) NOT using passthrough mode. Instead, my output looks more like what is described under the last sections of the article, suggesting that, perhaps, it may even be using some ALSA layer shenanigans or plugin that prevents passthrough from happening properly.

I know for SURE that my receiver is not detecting the output as AC3/DTS 5.1 surround (as it has LEDs indicating that it does) and I can clearly hear the difference with some of the sample audio files I have, which work flawlessly both on Windows and Garuda Linux.

So what gives?
What am I missing here? What is preventing passthrough mode to actually be used? As all pre-requisites seem to be ‘set-up’ and ‘available’. Is there some layer actively down-muxing/-sampling? or preventing passthrough from being used in some other way?

I appreciate the quick response and additional understanding/tools that this article gave me. Thanks for that ! :folded_hands:

There is comment here about passthough not being supported by VLC with the PipeWire backend.

At this point, I’d suggest creating an issue on that PipeWire bug tracker and noting that you tried what was documented in that HowTo.

Looks like it might be an issue in pipewire then? … I also read that issues with 5.1 arose when the switch to wireplumber was made as wel.

There are so many ‘layers’ to Linux audio. Each javing their obvious purposes, but it sure becomes confusingly quickly on where to look for solutions or proper workarounds.

But the question remains then how does it work properly on Garuda Linux? Or is there any way to work around this (without breaking open the whole architecture around sound in Linux)…

I even got to creating PCM bitstreams that should be AC3/DTS encoded (in stereo), but playing those back still didn’t trick my decoder to recognize them as a ‘passhrough codec’.

What are the people ar Garuda Linux doing differently? And how do I get the same under Fedora? I am pretty sure pipewire is being used there as well.

I lack the in/outs/knowledge on this topic to dive all into Garuda and trying to figure out what is going on… Would be nice if there is someone in the community that is more familiar with the audio side of linux (and maybe Arch/Garuda) who can figure out how things work over there… and how to set up a similar configuration on Fedora.

Any pointers could be helpful.

There are definitely several layers involved. The disconnect between VLC and PipeWire is on the VLC side though as shown in the followup link to the vlc-plugins-pipewire code:

 465         case VLC_CODEC_A52:
 466         case VLC_CODEC_EAC3:
 467         case VLC_CODEC_DTS:
 468             /* TODO: pass-through */
 469             errno = ENOTSUP;
 470             return NULL;

IIUC, there is also a vlc-plugins-pulseaudio of some sort that does output AC3, then there is a pulseaudio to pipeware converter of sorts that will then allow your AC3 sound source from VLC to pass to your audio device.

Good luck. :slightly_smiling_face:

Ah… thanks for the fast replies…they already come while editing my own :nerd_face:

Ok…some things to look into again then (though not sure how far this rabbit hole goes or how far I like to dive in :see_no_evil_monkey:)

But maybe there is a way around pipewire (literally)? And I am still curious what they do at Garuda… because, unless I am mistaken, pipewire has become quite a standard and quite commonplace in Linux these days. Or maybe wireplumber can bring something new to the table?

I mean: when audio is putting out a passthrough codec, then mixing different audio sources on an os level using wireplumber/pipewire becomes pointless anyway…so maybe a workaround vould be to fall back straight to the alsa layer and make audio exclusive for a particular application while it is using the passhrough mode?

But i do not immediately have an idea on how to achieve this or set this up. But it feels like something that should not be too difficult to achieve