Auto 3D - klappt nicht bei (einigen) Aufnahmen

  • Hallo,


    Das Plugin Auto 3D ist nicht in der Lage, für die bei uns aufgenommenen Dateien auf 3D umzuschalten.


    Ich habe dem Quellcode Plugins/SystemPlugins/3DSettings/plugins.py zwei print hinzugefügt (Variablen spath und name, in dem "3D" gesucht wird). In der Console steht:


    3Ds [ /media/hdd/movie/20121215 2124 - ASTRA 3D Demo - ASTRA 3 D Demo.ts ]
    3Dn [ HSE24 EXTRA HD ]


    3Ds [ /media/hdd/movie/20131229 2347 - ServusTV HD Deutschland - Die Höhle der vergessenen Träume - 3D - .ts ]
    3Dn [ ServusTV HD Deutschland ]


    Problem 1: Das Plugin sucht anhand des Dateinamens (etwa die .meta zur .ts?) eine ServiceReference. Leider ist der Kanal "ASTRA 3D Demo" vor Monaten umgezogen, so dass die Referenz heutzutage zu "HSE24 EXTRA HD" aufgelöst wird. :loudly_crying_face: Der Algorithmus schlägt also fehl (übrigens habe ich weitere alte Aufnahmen von anderen Sendern, die jetzt ebenso den falschen Ursprungssender im Filmlistenmenü nennen).


    Problem 2: Sollte ein normaler Sender auf die Idee kommen, ausnahmsweise mal in 3D zu senden, wie im obigen Beispiel Servus TV, wird durch das Heranziehen des Sendernamens anstelle des ursprünglichen Dateinamens ebenfalls nicht auf 3D geschaltet. :pouting_face: - ja sogar ein von Hand eingeschalteter 3D-Modus verlassen.


    Ich schlage jetzt noch keinen Patch vor, weil ich mir noch nicht sicher bin, wie die beste Lösung lauten kann. Derzeit vermute ich, der Code sollte spath nicht ersetzen, nach wie vor nach 3D suchen, aber "33D" und "3Dims" ignorieren. Wie man "Spiel der Klasse 3d" :wacko: ignorieren könnte, ist mir noch nicht klar.

  • Anbei meine 2x print zum Quellcode in git bzw. in /usr/lib/enigma2/python/ meiner dm800se mit OE2.0:



    Leider ist mir die ganze Logik mit ServiceReference oder auch mal eServiceReference nicht vertraut. Ergänzend noch die Ausgabe beim Schalten auf einen Sat-Kanal anstelle einer Datei:


    3Ds [ ]
    3Dn [ ZDF HD ]

  • Wie man "Spiel der Klasse 3d" :wacko: ignorieren könnte, ist mir noch nicht klar.


    Das wird gar nicht gehen. Wie soll ein Computer das entscheiden können? :smiling_face:


    Die Sache ist die (ich hatte mir ja damals was dabei gedacht): Ist im Sendernamen ein 3D enthalten, dann gehe ich einfach davon aus, dass dieser Sender auch in 3D sendet. Ist das abzuspielende Video keine Aufnahme (bzw. der Servicename kann nicht ermittelt werden), dann nehme ich den Filenamen, beispielsweise wird dann "HalloFilm3D.mkv" ausgewertet.


    Nun zu Deiner Problematik: In der Tat ist das natürlich unschön, wenn Sender ihren Sendernamen ändern. Da dieser aber mit Enigma2 nicht in der Meta-Datei beispielsweise gespeichert wird kann ich da auch nicht mehr den ursprünglichen Sendernamen ermitteln. Ebenso ist das natürlich auch nicht automatisch machbar, wenn Sender zwischenzeitlich außer der Reihe mal einen 3D-Film senden, da das Kriterium nach wie vor der Sendernamen ist bei der Umschaltung.



    Wofür ist diese automatische Umschaltung also gut? Wenn man verlässlich einen 3D-Sender hat, oder 99,9% der Nicht-TS-Videos auch richtig mit einem 3D im Dateinamen getaggt wurden.
    Ansonsten würde ich vorschlagen, dass Du in den 3 mal im Jahr, in dem das automatische Verhalten des Plugins nicht stimmt, einfach die manuelle 3D Umschaltung verwendest.



    Wenns Dich dennoch richtig stört kannst Du folgendes mal im Code machen bzw. die Methode einfach mal kopieren:
    Hier lese ich, auch wenn sich ein Sendernamen zu dem Video ermitteln lässt, zusätzlich noch den Filenamen aus.
    Das kannst Du mal testen, ob das so besser bei Dir geht und mir bitte bescheid geben.


  • Ohne ihn ausprobiert zu haben, meine ich, dass Dein Vorschlag nichts verbessert, denn im Fall spath[0]='/' berücksichtigt die Kombination "name or name2" (statt "+") einzig den Sendernamen aus der ServiceRef - und die ist bekanntlich veraltet bzw. seither einem anderen Sender zugewiesen worden.


    Hier ist, was derzeit alle meine Dateien erkennt:


    Später möchte ich die Namenserkennung verfeinern:
    re.search(r"(\A|\D)3[Dd]([\W_0-9]|\Z)",name,re.LOCALE)
    Es bleibt zu prüfen, ob re.LOCALE oder re.UNICODE bei "\w" tatsächlich Umlaute erkennt. :upside_down_face:


    Bei mir hat also der Dateiname Vorrang. Das klappt bei mir gut, weil ich lange Dateinamen erzeugen lasse, also "Datum Sender - Titel - Beschreibung.ts".


    Um auch kurze Dateinamen.ts besser zu unterstützen, kann ich mir vorstellen, zusätzlich Titel und Beschreibung aus der .meta auszuwerten (s.Testfall TC3d in meinem nächsten Beitrag).


    Die ServiceReference aus der .meta möchte ich im Gegensatz zu Dir nicht ausgewertet sehen, denn der Kanal 1:0:... könnte neu zugewiesen worden sein. Leider steht in der .meta nicht der ursprüngliche Sendername wie "Astra 3D Demo", der steckt nur im langen Dateinamen.

  • Ich habe mir diese Testfälle überlegt.


    Live ist der Sendername bestimmend:
    TC1a ZDF HD: 2D pass
    TC1b ASTRA 3D Demo: 3D pass


    Bei Aufnahmen ist der Dateiname ausschlaggebend:
    TC2a Tagesschau.avi: 2D pass
    TC2b Movie3D.avi: 3D pass
    TC2c 2-3Dimensionen.avi: 2D pass (Wortgrenze)
    TC2d Flug-373D.avi: 2D pass
    TC2e 3Dünger.avi: 2D (wird Umlaut als Wortbestandteil erkannt?)
    TC2f 3D-Drucker.avi: 2D expected failure (false positive)
    TC2g Klassentreff 3d.avi: 2D expected failure
    TC2h Movie-3d.avi: 3D (Kleinbuchstabe)


    ts.meta sei vorhanden:
    TC3a Tagesschau.ts: 2D pass
    TC3b PINA 3D.ts: 3D pass (ServiceReference Astra 3D)
    TC3c Servus 3D.ts: 3D pass (dank Dateiname, ServiceRef Servus TV enthält kein 3D)
    TC3d Servus.ts: ?? ("3D" nur in Titel o. Beschreibung der .meta zu finden)
    TC3e 3D-Drucker.ts: 2D expected failure
    TC3f 2012-3D-Demo.ts: 3D pass (damals Astra 3D Demo, heute ServiceRef HSE24)
    TC3g 2012-Astra-Demo.ts: ?? (dito, ohne 3D im Dateinamen)
    TC3h 2013-Test.ts: 2D (damals Kanal NN, heute ServiceRef Astra 3D Demo)


    TC4a PiP 2D in 2D: 2D
    TC4b PiP 2D in 3D: ??
    TC4c PiP 3D in 2D: ?? (wird Plugin beim Wechsel des kleinen Bildes überhaupt aktiviert?)
    TC4d PiP 3D in 3D: ??
    kann meine dm800se(v1), glaube ich, nicht, oder etwa doch?


    TC5 CutListEditor: ??
    Derzeit ist das linke Teilbild verschoben, daher in 3D unbenutzbar.


    TC6 Radio Bremen: 2D
    hängt vermutlich vom Hintergrundbild ab, s. TC7


    TC7a Panorama.jpg: 2D (soll überhaupt umgeschaltet, d.h. Plugin aktiv werden?)
    TC7b Movie3D-Snapshot.jpg: 3D (warum nicht auch 3D für Standbilder?)
    TC7c Magic3D-Puzzle.jpg: 2D expected failure


    "expected failure" bedeutet, dass die Heuristik falsch entscheidet, bspw. bei Magic3D-Puzzle. Zuverlässig ist 3D nur erkennen, wenn man ins Bild schaut.
    Unterschiede zwischen Deinem unnd meinem Vorschlag finden sich insbes. in TC3c-h.

  • Zitat

    Es bleibt zu prüfen, ob re.LOCALE oder re.UNICODE bei "\w" tatsächlich Umlaute erkennt.


    re.LOCALE oder re.UNICODE war keine Hilfe bei Umlauten. Wie sind die Strings im Python der Dreambox kodiert? :question_mark: Als Folge von 8 Bit Zeichen mit s'abc' statt u'abc'?
    Setzt Enigma2 irgendetwas, damit re.LOCALE funktionieren könnte? Viele Module enthalten os.environ["LANGUAGE"] = .. im Initialisierungscode, aber damit wird eher gettext, also die Übersetzungen in der GUI, gesteuert.


    Work-around: Alles UTF-8 hat das 8. Bit gesetzt, also wird hinter der 3 alles ASCII außer A-Z und a-z als Worttrenner angenommen. Das ist für Umlaute wie ä und à in Ordnung, aber nicht für 3D€.

    Code
    init:	self.candidate = re_compile(r"(\A|\D)3[Dd]([\0-@[-`{-~]|\Z)")
    ev_UpdatedInfo:	if self.candidate.search(name) is not None: