0.95.6: surround sound undecoded by default again (the box's DTS decoder is silent)
pauljd/davidson-ci: Davidson CI / quality (push) Failing after 2m8s
pauljd/davidson-ci: Davidson CI / ai-review (push) Failing after 1m30s

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
This commit is contained in:
2026-11-03 22:27:36 +00:00
co-authored by Claude Opus 5.5
parent cf7ca53631
commit c3e910eadb
5 changed files with 14 additions and 8 deletions
+2 -2
View File
@@ -9,8 +9,8 @@ android {
applicationId = "tv.orbit.classic"
minSdk = 26
targetSdk = 36
versionCode = 124
versionName = "0.95.5-plain-sound"
versionCode = 125
versionName = "0.95.6-sound-passthrough"
}
buildFeatures { compose = true }
compileOptions { sourceCompatibility = JavaVersion.VERSION_17; targetCompatibility = JavaVersion.VERSION_17 }
@@ -66,7 +66,7 @@ internal class HttpsEmbyTransport(internal val deviceId: String = UUID.randomUUI
connection.connectTimeout = 10_000
connection.readTimeout = request.readTimeoutMs ?: if (request.path == "/Sessions/Logout") 5_000 else 15_000
connection.setRequestProperty("Accept", "application/json")
connection.setRequestProperty("X-Emby-Authorization", "Emby Client=\"Orbit TV\", Device=\"Orbit TV\", DeviceId=\"$deviceId\", Version=\"0.95.5\"")
connection.setRequestProperty("X-Emby-Authorization", "Emby Client=\"Orbit TV\", Device=\"Orbit TV\", DeviceId=\"$deviceId\", Version=\"0.95.6\"")
request.token?.let { connection.setRequestProperty("X-Emby-Token", it) }
if (request.method == "POST") {
val bytes = request.body.orEmpty().toByteArray(Charsets.UTF_8)
@@ -33,7 +33,7 @@ internal class SecureMediaDataSource(private val session: EmbySampleSession) : B
next.instanceFollowRedirects = false
next.connectTimeout = 10_000
next.readTimeout = 20_000
next.setRequestProperty("User-Agent", "OrbitTV/0.95.5")
next.setRequestProperty("User-Agent", "OrbitTV/0.95.6")
next.setRequestProperty("Accept-Encoding", "identity")
session.mediaHeaders(address).forEach { (key, value) -> next.setRequestProperty(key, value) }
if (dataSpec.position != 0L || dataSpec.length != C.LENGTH_UNSET.toLong()) {
@@ -59,10 +59,11 @@ internal class OrbitSettings(context: Context) {
var driveInIntro: Boolean
get() = saved.getBoolean("drive_in_intro", true)
set(value) { saved.edit().putBoolean("drive_in_intro", value).apply() }
/** Off: Orbit decodes Dolby and DTS on the box and sends plain sound, which any TV plays. On: sends them undecoded, for an amplifier. */
/** On (the default): Dolby and DTS go out undecoded, as before 0.95.4. Off: decoded on the box, which plays nothing for DTS on
* this Xiaomi box (its decoder runs but is silent, checked 3 November 2026), so off is only for a box whose decoders work. */
var surroundToAmplifier: Boolean
get() = saved.getBoolean("surround_to_amplifier", false)
set(value) { saved.edit().putBoolean("surround_to_amplifier", value).apply() }
get() = saved.getBoolean("surround_to_amplifier_v2", true)
set(value) { saved.edit().putBoolean("surround_to_amplifier_v2", value).apply() }
/** Turns off moving presentation such as the Drive-In's curtains. More screens will follow it as they gain motion. */
var reduceMotion: Boolean
get() = saved.getBoolean("reduce_motion", false)
@@ -170,7 +171,7 @@ private fun ViewingDetail(totsOn: Boolean, windingDown: Boolean, onWindDown: (Bo
SettingLine("Drive-In curtains", "Play the curtain intro, with its fanfare, as you go into a screening. Back skips it.") {
OrbitButton(if (driveInIntro) "On" else "Off", Modifier.width(64.dp), selected = driveInIntro, onClick = { driveInIntro = !driveInIntro; settings.driveInIntro = driveInIntro })
}
SettingLine("Surround sound to an amplifier", "Send Dolby and DTS sound undecoded, for an amplifier or soundbar that decodes it. Leave off when the TV's own speakers play the sound. Takes effect from the next programme.") {
SettingLine("Surround sound undecoded", "Send Dolby and DTS sound as it is, for the TV or an amplifier to decode. Off decodes it on the box instead, which on some boxes leaves DTS silent. Takes effect from the next programme.") {
OrbitButton(if (surroundToAmplifier) "On" else "Off", Modifier.width(64.dp), selected = surroundToAmplifier, onClick = { surroundToAmplifier = !surroundToAmplifier; settings.surroundToAmplifier = surroundToAmplifier })
}
SettingLine("Reduce motion", "Leave out moving presentation, such as the Drive-In's curtains.") {
+5
View File
@@ -0,0 +1,5 @@
# Orbit TV 0.95.6: surround sound undecoded again by default
0.95.5 decoded DTS on the box and was silent on Paul's Xiaomi box (22:25, 3 November 2026): the Amlogic C2 DTS decoder runs and a PCM stream flows, but nothing is heard. 0.95.6 restores the pre-0.95.4 behaviour as the default: Dolby and DTS go out undecoded, which played fine on Terra at 22:21. The setting is renamed "Surround sound undecoded" (on by default, stored under a new key so the earlier off value doesn't carry over); off decodes on the box, for boxes whose decoders work. The earlier Terra dropouts, seen right after an install with several players opening, are unexplained; if they return, check the log while they happen.
365 unit tests pass; lint has no errors.