Steam Deck HDMI: alsa-card0.conf re-adds `api.alsa.period-size = 256`, forcing 1.33 ms graph cycles for HDMI passthrough

オープン 初心者向け
#3,037 コメント 0 件 リアクション 0 件 担当者 0 名 GitHub で見る

まだ誰も着手していません。

評価

難易度
2/5
見積もり時間
1〜3時間
初心者へのやさしさ
70/100
issue の種類
バグ
明瞭さ
明確に書かれている
活発さ
活発
技術スタック
linux

調査の方向性

/usr/share/wireplumber/hardware-profiles/valve-jupiter/wireplumber.conf.d/alsa-card0.conf と、対応する valve-galileo のファイルを読み、HDMI の設定を issue で引用されている履歴と比較してください。記載されている pw-top と pw-cli のコマンドを使って、passthrough 中に HDMI sink の period と graph quantum がどのように振る舞うかを確認してください。両方のプロファイルから固定 period の設定がなくなり、passthrough が強制された 256 フレームのサイクルを使わなくなれば完了です。

索引モデルが issue の本文から書いたものです。

説明

Your system information
  • Steam client version: not recorded (the line is in steamdeck-dsp, an OS package)
  • SteamOS version: 3.9.5 (build 20261023.100)
  • Opted into Steam client beta?: Yes
  • Opted into SteamOS beta?: Yes
  • Have you checked for updates in Settings > System?: No. The deck is held on 3.9.5 for kernel testing; steamdeck-dsp 1.03-1 is still the newest package on Valve's source mirror (checked 2026-11-03).
  • Steam Deck LCD (jupiter), kernel 7.2.7-valve2-2-neptune-72
  • steamdeck-dsp 1.03, pipewire 1:1.6.8-1.7, wireplumber 0.5.18. First measured on SteamOS 3.9.2 (steamdeck-dsp 1.02-1, pipewire 1:1.6.8-1.4); unchanged after the update.
  • Steam Deck Docking Station → HDMI → LG C4 TV, TrueHD bitstream (IEC958 passthrough, 8 ch HBR at 192 kHz)
Please describe your issue in as much detail as possible:

The LCD Deck's hardware profile sets a fixed ALSA period on the HDMI/DP card: /usr/share/wireplumber/hardware-profiles/valve-jupiter/wireplumber.conf.d/alsa-card0.conf, line 18, api.alsa.period-size = 256. valve-galileo has the same line.

For PCM this barely matters: with timer-based scheduling the graph quantum follows the clock settings. For IEC958 passthrough it sets the graph cycle. In PipeWire 1.6.8 (spa/plugins/alsa/alsa-pcm.c), the iec958 format branch sets state->force_quantum = true (line 2238), and check_position_config overwrites the graph's target duration with the device period on every cycle (lines 3148-3150). So every passthrough stream runs a 256-frame cycle: 1.33 ms at 192 kHz (TrueHD, DTS-HD MA) and 5.3 ms at 48 kHz (AC3, DTS). Neither node.force-quantum nor a global clock.force-quantum in the settings metadata changes it.

That leaves a passthrough client 1.33 ms to deliver each buffer. Our player, DSVP (a native PipeWire client; https://github.com/ASIXicle/DSVP-deck, though the public repo is well behind our development build), ran its process callback at normal priority. Under 4K HEVC decode it missed that deadline: its node's xrun count climbed about 0.5/s, and the TV dropped audio audibly. We have since worked around it in the player (a real-time process callback and a lock-free buffer), so this doesn't block us. Other passthrough players face the same 1.33 ms deadline.

The line looks like an accident. From the valve-hardware-audio-processing history inside Valve's own source package (steamdeck-packages.steamos.cloud/archlinux-mirror/sources/jupiter-main/steamdeck-dsp-1.03-1.src.tar.gz):

  • f17d7e3b26 (2023-11-03, initial commit): api.alsa.period-size = 256 on the HDMI card and on the acp5x card.
  • b12855881a (2023-11-17): "Remove bug where we were stomping api.alsa.period-size, which is meant to be readonly. This fixes audio input usage over certain applications like discord." This removes the acp5x line.
  • eb980781dc (2023-11-22): "remove period_size. As talked about previously, this doesn't actually invoke any alsa ctls, and just causes source+sink enumeration over pulse to provide incorrect information about our callback size." This removes the HDMI line. Around the same time, a user in #1254 was asked to delete this exact line.
  • 1477b278b0 (2024-03-27, "Update hardware-specific wireplumber config to new json format"): the new alsa-card0.conf for valve-jupiter and valve-galileo has api.alsa.period-size = 256 again, although the lua config it replaced no longer did.
  • The line has shipped in every steamdeck-dsp tag since 0.43, through 1.03.

Suggested fix: remove api.alsa.period-size = 256 from alsa-card0.conf in valve-jupiter and valve-galileo. That restores the 2023-11-22 state. With the property unset, PipeWire 1.6.8 sizes a passthrough period from the graph's requested quantum when the stream opens (alsa-pcm.c 2430-2441). We have not tested the deletion itself; we tested changing the property at runtime (below).

Steps for reproducing this issue:
  1. Play a TrueHD (or AC3) track with HDMI bitstream passthrough through PipeWire, to a TV or receiver that accepts it.
  2. pw-top shows the HDMI sink at QUANT 256, RATE 192000 (TrueHD):
    R   92    256 192000  35.7us   5.9us  0.03  0.00  1840 IEC958 Tr 192000 alsa_output.pci-0000_04_00.1.hdmi-stereo-extra2
    
  3. pw-cli enum-params <sink id> Props lists api.alsa.period-size as Int 256.
  4. pw-cli set-param <sink id> Props '{ params = [ "api.alsa.period-size" 4096 ] }'. Then restart the passthrough stream so the sink re-opens. pw-top now shows the sink at QUANT 4096:
    R   92   4096 192000 106.9us 239.9us  0.01  0.01  1840 IEC958 Tr 192000 alsa_output.pci-0000_04_00.1.hdmi-stereo-extra2
    
  5. Undo with systemctl --user restart wireplumber.
主要言語
言語のデータがありません
スター
2.7k
フォーク
89
PR マージ指標
30日以内にマージされた PR はありません

環境構築

このプロジェクトには開発コンテナ、Dockerfile、コントリビューションガイドがありません。まず README を読み、一般的な手順ははじめてのコントリビューションガイドを参照してください。

はじめの一歩

  1. issue を最後まで読み、次にプロジェクトのコントリビューションガイドを読みます。
  2. 着手することを issue にコメントします — 二人が同じ作業をするのを防げます。
  3. リポジトリをフォークし、ブランチを切って変更します。
  4. issue 番号を参照したプルリクエストを送ります。

ValveSoftware/SteamOS のほかの issue

ValveSoftware/SteamOS の issue をすべて見る

似ている issue

Operating Systems の issue をもっと見る

新しい issue をメールで受け取る

初心者向けの GitHub issue を短くまとめたダイジェスト。