Untertitel lassen sich jetzt einstellen

Groesse in vier Stufen, Schrift und Hintergrund als fuenf feste Paare —
Weiss, Weiss auf Schwarz, Schwarz auf Weiss, Gelb, Gelb auf Schwarz. Feste
Paare statt zweier Regler, weil unabhaengige Achsen unlesbare Mischungen
zulassen: Schwarz auf durchsichtig ueber einer Nachtszene ist eine
gueltige Einstellung und eine wertlose.

Die Uebersetzung nach AVFoundation ist eine Tabelle aus Schluesseln, bei
der jeder Fehler lautlos ist — ein falscher Schluessel laesst den
Initialisierer `nil` zurueckgeben, und dann gibt es gar keine Regel. Auf
dem Bildschirm sieht „keine Regel\" genauso aus wie „Regel ohne Wirkung\".
Zehn Tests decken das ab, darunter die drei Fallen: Alpha zuerst in der
Farbe, Prozentwert statt Punktgroesse, und der Hintergrund auch fuer
„durchsichtig\" ausdruecklich gesetzt statt weggelassen — weggelassen gilt
sonst, was Jellyfins WebVTT selbst mitbringt, und das ist oft ein
schwarzer Kasten.

Als Protokollmethode, nicht als Feld an `PlaybackSource`: die wird einmal
beim Oeffnen gelesen, und eine Einstellung, die erst beim naechsten Film
wirkt, haelt jeder fuer kaputt. Angewandt wird an zwei Stellen — am
laufenden Gegenstand und am frisch angelegten. Nur das erste zu tun hiesse,
dass die naechste Folge wieder in der Vorgabe erscheint.

VLC erbt die leere Vorgabe. Die Einstellungsseite sagt beides: dass es fuer
den Standardplayer gilt, und dass eingebrannte Bilduntertitel von Blu-rays
sich nicht gestalten lassen, weil es dort keinen Text gibt.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
Scarriffle
2026-09-28 21:22:22 +02:00
co-authored by Claude Opus 5
parent a1ff5cb7bb
commit 0815432efd
14 changed files with 815 additions and 0 deletions
+6
View File
@@ -178,6 +178,7 @@ final class PlayerModel {
private let policy: PlaybackPolicy
private let settings: PlaybackSettings
private let languages: LanguagePreferences
private let subtitles: SubtitleAppearance
private let isLocalConnection: Bool
/// Wie die Verbindung in der Diagnose heißt.
///
@@ -410,6 +411,7 @@ final class PlayerModel {
policy: PlaybackPolicy,
settings: PlaybackSettings,
languages: LanguagePreferences,
subtitles: SubtitleAppearance,
isLocalConnection: Bool,
connectionDescription: String?,
unavailableMessage: String
@@ -422,6 +424,7 @@ final class PlayerModel {
self.policy = policy
self.settings = settings
self.languages = languages
self.subtitles = subtitles
self.isLocalConnection = isLocalConnection
self.connectionDescription = connectionDescription
self.unavailableMessage = unavailableMessage
@@ -665,6 +668,9 @@ final class PlayerModel {
self.engine = engine
attachSurface(to: engine)
observe(engine)
// **Vor dem Öffnen.** Ein frisch angelegter Gegenstand ist
// ungestaltet, und der erste Untertitel käme sonst in der Vorgabe.
engine.applySubtitleStyle(subtitles.style)
do {
diagnostics.note("Engine öffnet Quelle")