Playback fixes: stall watchdog, DVD and MPEG-2, LAN streaming, Dolby Vision

This commit is contained in:
2026-10-14 09:24:35 +03:00
parent dec4b44571
commit 69a793abcb
28 changed files with 2788 additions and 83 deletions

View File

@@ -40,7 +40,10 @@ enum class Loss(val weight: Int, val label: String) {
SOFTWARE_DECODE(15, "программное декодирование"),
DV_TO_BASE_LAYER(30, "Dolby Vision → базовый слой"),
HDR_UNVERIFIED(25, "HDR-вывод не проверен"),
ASS_SIMPLIFIED(20, "ASS упрощён"),
/** Outweighs [SOFTWARE_DECODE]: playback stutters and stalls, not just a quality loss. */
BROKEN_AUDIO_TIMING(30, "сбивается синхронизация звука"),
/** Small: TV SoCs usually deinterlace in the display pipeline after the hardware decoder. */
NO_DEINTERLACE(5, "без деинтерлейса в плеере"),
/** Outweighs [SOFTWARE_DECODE]: visible combing in motion, not a subtle quality loss. */
DVD_COMBING(30, "гребёнка на чересстрочном DVD"),
}

View File

@@ -35,6 +35,8 @@ data class EngineError(
AUDIO_OUTPUT,
NETWORK,
NO_VIDEO_OUTPUT,
/** Playing but not progressing, or dropping a large share of frames (seen by the session's stall watchdog). */
STALLED,
UNKNOWN,
}

View File

@@ -57,6 +57,14 @@ interface VideoPathSwitchable {
fun setVideoPathMode(mode: Mode)
}
/**
* Dolby Vision files with a base layer can be decoded either as that base layer (HDR10/HLG, the default) or through
* the Dolby Vision decoder, which switches the TV into its Dolby Vision mode. Must be set before [PlaybackEngine.load].
*/
interface DolbyVisionSwitchable {
var useDolbyVisionDecoder: Boolean
}
interface SubtitleDelayCapable {
fun setSubtitleDelay(delayMs: Long)
}