Non-Adreno sound: the daemon falls back on its own; the build's commit in device.txt and the report

The S24 FE's session still had no sound: its AAudio refuses DirectAudio's low-latency stream with
AAUDIO_ERROR_DISCONNECTED, and the sink guard never got to retry because pactl did not reach the
daemon in time ("the daemon did not answer in 15 s"). On a GPU that is not an Adreno the daemon's
own start-up script now asks DirectAudio again without low latency and loads the plain AAudio sink
underneath it, so a default sink exists whatever pactl does. device.txt and graphics-report.txt
name the build label and source commit, so a log says which build it came from.
This commit is contained in:
The412Banner committed 2026-10-12 21:28:04 -04:00
1 parent e1b5309593
commit 5cd0aaa99a
3 files changed
+12

No files matched your search

@@ -138,6 +138,16 @@ public class PulseAudioComponent extends SessionPart {
// AAudio sink in its place.
config.add(".nofail");
config.add("load-module module-directaudio-native-sink sink_name=DirectAudio performance_mode=1 adaptive=1 decay=0 limiter=1 watchdog=1 volume=1.0");
if (!com.droiddeck.launcher.core.DeviceSupport.INSTANCE.adreno()) {
// Not an Adreno: the daemon makes its own fallbacks, without waiting for pactl. A
// Galaxy S24 FE's AAudio refuses the low-latency stream (AAUDIO_ERROR_DISCONNECTED) at
// open, so DirectAudio is asked again without low latency (shared, larger buffer),
// and the plain AAudio sink is loaded as a default underneath it. The last
// set-default-sink that names a sink which exists wins.
config.add("load-module module-directaudio-native-sink sink_name=DirectAudio performance_mode=0 adaptive=1 decay=0 limiter=1 watchdog=1 volume=1.0");
config.add("load-module module-aaudio-sink sink_name=AAudioSink performance_mode=0 adaptive=1 volume=1.0");
config.add("set-default-sink AAudioSink");
}
config.add("set-default-sink DirectAudio");
config.add(".fail");
if (micFifoPath != null && !micFifoPath.isEmpty()) {
@@ -61,6 +61,7 @@ object DeviceReport {
runCatching {
val info = context.packageManager.getPackageInfo(context.packageName, 0)
k("Version", "${info.versionName} (${info.longVersionCode})")
k("App build", "${com.droiddeck.launcher.BuildConfig.BUILD_LABEL} (source ${com.droiddeck.launcher.BuildConfig.SOURCE_COMMIT})")
}
k("Package", context.packageName)
k("targetSdk", context.applicationInfo.targetSdkVersion)
@@ -50,6 +50,7 @@ object GraphicsReport {
private fun start(context: Context, guest: List<String>): String = buildString {
val time = SimpleDateFormat("yyyy-MM-dd HH:mm:ss", Locale.US).format(Date())
appendLine("== graphics report, session start $time")
appendLine("build: ${com.droiddeck.launcher.BuildConfig.BUILD_LABEL} (source ${com.droiddeck.launcher.BuildConfig.SOURCE_COMMIT})")
appendLine()
val gpu = runCatching { GpuInfo.detect() }.getOrNull()
appendLine("-- path")