Beiträge von Dreamy

    Das hatte mir einfach keine Ruhe gelassen, weil die Videos ja über die DP-Filmliste problemlos abgespielt werden konnten.


    Hab daher einfach mal in der MovieList eine Ausgabe der generierten eServiceReferences mit ServiceReference(serviceref).ref.toString() gemacht.


    4097:0:0:0:0:0:0:0:0:0: war es bei .mp4 und .mpg

    1:0:0:0:0:0:0:0:0:0: war es bei .ts


    Hatte irgendwo auch sowas gefunden, um die Zahlen zu generieren - geht auch ;)

    sref = eServiceReference(4097,0,"/media/hdd/video.mp4")

    self.session.nav.playService(sref)

    Damit hatte ich auch schon probiert, wobei ich nicht alles mit 1 hatte.
    Beim ts-file geht es ja auch, wenn man nur den filenamen nimmt.


    Denke eher, weil das Video nur 0,4 sek lang ist, es gar nicht erst sichtbar wird ;)


    Das mit showiframe geht auf der One.
    Na mal schauen ;)

    Hab ja keine One zum Testen ;)

    Und der Tester hat im Moment wohl keine Zeit.


    Mit PlayService hab ich es gerade nicht hinbekommen, so ein jpg-video abzuspielen :/

    Erstellt habe ich das "Video" mit:

    ffmpeg -i hBlackborder.jpg -r 25 -b 20000 -s hd1080 movie.mpg

    (das als .mvi umbenannt, funktioniert mit showiframe hier auf der 920 wunderbar)


    Aber als .mpg mit PlayService geht es nicht, da kommt nur schwarzes Bild:

    Code
    1. playref = eServiceReference(video_pathfilename)
    2. self.session.nav.playService(playref)

    übergebe ich den Pfad zu einem *.ts-file im Movie-Ordner wird es abgespielt.


    Naja, dann muss ich wohl auf den Tester warten ;)

    Danke für deine Bemühungen, mir einen Ansatz zu liefern :thumbup:


    Hab jetzt mal ganz einfach zum Test folgendes gemacht ;)

    Code
    1. self.srefOld = self.session.nav.getCurrentlyPlayingServiceReference()
    2. self.session.nav.stopService()
    3. cmd = "showiframe /usr/share/dreambox-bootlogo/backdrop.mvi"
    4. self.container.execute(cmd)
    5. ...
    6. #on close-screen
    7. self.session.nav.playService(self.srefOld)

    Das geht zumindest auf der 920 (TV-Bild wird gestoppt, das Bootlogo angezeigt und beim Beenden des Screens das TV-Bild wieder gestartet)

    Da könnte man dann ja vordefinierte .mvi (Farbflächen mit schwarzen Balken) mitgeben und auf den Bildschirm zaubern, die dann das tatsächliche Verhalten der LEDs bei TV-Bildern mit schwarzen Balken aufzeigen ;)


    Gab es auf der One nicht ein Problem, dass showiframe nicht geht, solange e2 läuft ? (Botvideo-Plugin)

    Das Ganze müsste vorerst eben gerade auf der One laufen. ;)

    Mit "du" warst schon du gemeint - hatte dich ja in der ersten Zeile mit gutemine angeschrieben ;)


    Hmm, wüsste im Moment gar nicht, wie ich das machen müsste mit dem 4:3 auf 16:9 ausgeben ?

    (in den AV-Settings ändert sich bei 16:9-Sendungen bei diversen Optionen nichts)


    Besser wäre auch, wenn man das Umschalten könnte mit Balken oben/unten oder rechts/links bzw. die Balkenbreite anpassen ;)


    Oder kann man einen Screenshot (jpg) als "Video" per PlayService abspielen und so ein Live-TV mit Balken vorgaukeln ?

    gutemine

    Hi,


    ist es möglich, mit einem Plugin das TV-Bild zu "manipulieren" ?


    Es geht um das HyperionControl-Plugin, wo es eine Option "Schwarzranderkennung" für die LED-Stripes gibt.

    Um die Einstellungen diesbezüglich zu testen, benötigt man ein live-TV-Bild mit horizontalen oder vertikalen schwarzen Balken.

    Ein "Zeichnen" von schwarzen Balken über den Screen hilft da leider nicht, weil Hyperion da nur das echte TV-Bild (ohne OSD) auswertet.


    Könnte man daher irgendwie schwarze Balken ins TV-Bild zaubern, um dem User ein angepasstes live Test-Bild mit Balken zum Testen zur Verfügung zu stellen, ohne dass er einen Sender mit echten Balken suchen muss ?


    Hast du da eine Idee ? ;)

    oleg8000

    Please test this file ;)


    Copy the plugin.py from the zip-file to your box and replace existing file:

    /usr/lib/enigma2/python/Plugins/Extensions/PluginSort/plugin.py


    After GUI-Restart test sorting.

    Dateien

    • PluginSort.zip

      (5,99 kB, 4 Mal heruntergeladen, zuletzt: )

    Danke für die Info.


    Da scheint es dann ein Problem mit der Text-Codierung zu geben.

    Leider ist das nicht mein Lieblingsthema.


    Aber vielleicht schau ich mir das bei Gelegenheit mal an.

    Vielleicht irgendein Plugin mit komischem Namen, das wir nicht installiert haben ?


    oleg8000

    Hänge doch mal deine pluginsort.xml hier als Anlage an.

    Vielleicht sind da ja irgendwelche Zeichen enthalten, die dann das Einlesen stören ?!? :/

    hmm, dann sollte es da eigentlich keine Einschränkungen geben.


    Schau mal, ob es bei dir auf der Box diese Datei gibt:

    /etc/enigma2/pluginsort.xml


    Darin sind alle Plugins aufgelistet.

    Die jeweilige "weight"-Nummer gibt den Sortierplatz an.

    Je kleiner die Nummer, umso weiter oben wird das Plugin angezeigt.

    Das Plugin mit der kleinsten Nummer steht ganz oben.


    Im Bereich <where type="WHERE_PLUGINMENU"> findest du z.B. alle Plugins, die im PluginBrowser angezeigt werden.


    Kannst ja mal testen, ob die Datei auch jedesmal geändert wird, oder immer gleich bleibt.

    oleg8000

    Hast du GP4 installiert ?


    Wenn ja, musst du nach dem Sortieren einfach nur nochmal das GP4-Panel öffnen und wieder schließen.

    Danach sollte die Sortierung auch einen Neustart überleben ;)

    Die python-Variante finde ich schon ganz gut.

    Weil man da eben auch sieht, was passiert ;)


    Direkt nach dem Einlesen des Cache (nach Boxstart) steht manchmal ein ThreadError im E2log.


    Hab das bisher immer ignoriert, da das Plugin ja trotzdem funktioniert ;)

    Auch keine Ahnung, ob die Meldung überhaupt zum Adrenalin gehört.

    Ist aber nicht bei jedem Start.


    Code
    1. ...
    2. enigma2[25347]: [ADRENALIN] ENABLED CACHE 16 MB Files 676
    3. enigma2[25347]: WARNING removeSocketNotifier should be called from thread 25347 but is called from thread 25522
    4. enigma2[25347]: 0xcde0c(sp=0x9ed0f970) <get_backtrace[abi:cxx11](void*, int, int)+1336>
    5. enigma2[25347]: 0xdc860(sp=0x9ed13c00) <eTimer::AddRef()+108>
    6. enigma2[25347]: 0xdcd48(sp=0x9ed13c30) <eMainloop_native::removeSocketNotifier(eSocketNotifier*)+60>
    7. enigma2[25347]: 0xdd190(sp=0x9ed13c58) <eSocketNotifier::stop()+164>
    8. enigma2[25347]: 0xdf414(sp=0x9ed13c78) <eSocketNotifier::~eSocketNotifier()+40>
    9. enigma2[25347]: 0xdf464(sp=0x9ed13c88) <eSocketNotifier::~eSocketNotifier()+16>

    ...Wobei wir langsam alle Stellen im Griff haben sollten ;)

    Ja, ich glaube auch das da sonst nichts mehr sein sollte.

    Hatte das auch mal kurz überflogen (zumindest in Bezug auf os.stat) ;)


    Wenn nicht, werde ich das ja vielleicht in einigen Wochen mitbekommen und melde mich wieder :D

    Ja stimmt, ein delay könnte da auch helfen.


    Aber ist schon erstaunlich wie schnell die Datei plötzlich gelöscht wird ;)

    Im Code wird geprüft, ob die Datei existiert und direkt danach wird die Größe abgefragt, wo die Datei dann aber schon weg ist.

    Das kann doch alles nur im Millisekundenbereich liegen ;)

    Vermutlich würden da 50ms für ein delay schon reichen, wobei man das ja nicht unnötig kompliziert machen muss ;)

    Mit try/except sollte das erstmal passen.


    Aber ich teste das ganze noch weiter.

    Komisch nur, dass ich früher nie solche GS hatte, obwohl ich das Plugin ja schon eine Weile nutze.

    Hab diesen Fehler jetzt nach knapp 6 Wochen noch an anderer Stelle gehabt ;)

    Das scheint aber absoluter Zufall zu sein, dass das Löschen dann doch noch vor dem Cachen zuschlägt.

    Zumal vorher ja noch an der entsprechende Code-Stelle eine Prüfung erfolgt, ob das File existiert.


    Hab mir die Zeile (inkl. der beiden folgenden) jetzt erstmal in ein try/except gepackt und werde das weiter beobachten ;)


    Hier mal die neue Version mit den weiteren ConfigYesNo ;)


    Damit sind jetzt folgende Optionen umgestellt:

    - … mit Raduis

    - GP4

    - AMS

    - Trennlinie

    - Aufnahmesymbol


    "Picon in Kopfleiste" ging nicht, weil das ja das komplizierte Beispiel von oben mit der möglichen Merlin-Option war ;)


    Dabei werden die Configs jetzt einfach als ConfigYesNo definiert (in Klammern der Defaultwert).

    Wenn du später den aktuellen Wert der Option benötigst, dann fragst du nicht ...config...value ab, sondern übergibst die config an die Hilfsfunktion "GetYesNoValue", welche dann den passenden Wert zurückliefert.


    Aber das siehst du ja im Code ;)

    Musst du nur wieder deine Option für die Umschaltgrafik noch reinkopieren.


    Edit:

    Anhang entfernt (war nur ein Test)

    Mit den Menüs komme ich bestimmt erst am Wochenende dazu.

    Da muss ich mir Zeit nehmen, weil ich TemplateDesigns im Skin bisher fast nie verwendet habe ;)

    Ist also noch relatives Neuland für mich.


    Auf die Schnelle in deinem Setup habe ich folgende einfache Ja/Nein-Optionen entdeckt, wo ich aber nicht weiß, ob die evtl. noch weitere Optionen bekommen können:

    - GP4

    - Picon in Kopfleiste

    - Trennlinie

    - Aufnahmesymbol


    Aber das musst du wissen.

    Ich will dir ja nichts aufdrängeln ;)

    Das stimmt, das sollte später auch noch händelbar sein ;)


    Aber für reine Yes/No könnte man es ja noch machen.

    Welche wären das denn ?

    Falls du da später noch weitere Werte dazumachen willst, kannst des es ja analog

    der anderen ConfigSelections wieder zurückbauen ;)

    Ist das der einfache SelectionZoom ?


    Kannst du mir dann mal für dein Setup die configs in eine Liste schreiben, die reine Yes/No-Optionen sind?

    Es gibt ja mehrere wo es auch ein "No", aber dann eben auch weitere echte Text-Optionen gibt.


    Problematisch könnte das hier werden:

    Code
    1. if self.has_channelselectiontitle:
    2. channelselectionPiconopt.append(("channelselection-picon-merlin", _("yes")+_(",")+" "+_("with Merlin Skinoption") ))
    3. else:
    4. channelselectionPiconopt.append(("channelselection-picon", _("yes") ))
    5. if self.has_channelselectiontitle:
    6. channelselectionPiconopt.append(("channelselection-picon-no-merlin", _("no")+_(",")+" "+_("with Merlin Skinoption") ))
    7. channelselectionPiconopt.append(("channelselection-picon-no", _("no") ))
    8. config.plugins.MetrixStyle.ChannelselectionPicon = ConfigSelection(default="channelselection-picon-no", choices = channelselectionPiconopt)

    Mit Merlin kann man kein einfaches Yes/No nehmen (nur weiterhin ein ConfigSelection).

    Ohne Merlin aber schon.

    Da müsste man dann switchen und Yes/No nur nehmen, wenn self.has_channelselectiontitle == False ist.


    :/:/

    Hier mal als ersten Test für die SkinCornerRadius-Option ;)


    Hab da einfach eine Hilfsunktion eingebaut, die dann die echten erforderlichen Werte zurückliefert, wenn man eigentlichen den config.value abgefragt hat.


    Allerdings ist dadurch erstmal die bisherige Einstellungsoption für die Radius-Option "vergessen" worden.

    Weil ja jetzt ein anderer Wert verarbeitet (True/False) wird und nicht mit dem bisherigen gespeicherten Wert ("0012", "0000") zusammenpasst.


    Probiere mal, ob das so passt.

    Dann kann man die anderen Optionen auch noch tauschen ;)


    Edit:

    Anhang entfernt (war nur ein Test)


    Ok, ich hab mal reingeschaut ;)


    Das geht nur bei ConfigYesNo oder ConfigOnOff.

    Du nutzt da Configselection, wo das leider nicht geht.


    Man könnte es bestimmt umbauen, was aber wohl etwas komplexer wird ;)


    Auf die Schnelle hab ich gleich ein paar GS gehabt ;)

    Aber da fehlt mir auch noch der Code-Background.



    Du solltest bei der BA-Installation nur das Gerät anstecken, worauf BA installiert werden soll.


    Alle anderen SD's und USB's solltest du vorher rausnehmen/abziehen, wenn die Box im DeepStandby ist.

    Die kannst du dann nach der BA-Installation wieder anstecken.


    Sonst nimmt BA evtl. das falsche Device ;)

    Warum Nachricht (Meldung auf dem Bildschirm) ?

    Kannst das doch auf Startup stellen, dann macht das Plugin das Backup im Hintergrund.

    Und das kannst du dann auch regelmäßig z.B. alle 7 Tage machen lassen ;)


    Da muss man sich mit dem Thema gar nicht mehr beschäftigen und hat immer ein halbwegs aktuelles Backup ;)

    Aha.

    e2 ist das aktuelle von DMM 4.3.2r6

    EMC ist Version 20181227 (hatte die letzten relevanten Änderung manuell übernommen).

    Ich hatte vorher nur den Film im EMC geschaut, dann beendet und im EMC einfach gelöscht.


    EMC hat das Problem ja nur ausgelöst - das hätte vermutlich auch jedes andere Plugin sein können.

    Ich konnte den Fall auch bisher nicht mehr reproduzieren.


    Der Crash selbst kam ja vom Adrenalin.

    Ich vermute, dass sich da einfach die Events zeitlich ungünstig überschnitten haben.

    Der FileMonitor hat eine Änderung zum film.ts.cuts gemeldet und als Adrenalin das im Cache aktualisieren wollte, hatte der "mv"-Befehl des EMC das File schon in den Papierkorb verschoben.

    Deshalb hatte ich gedacht, dass Adrenalin da vorher nochmal checken könnte, ob das File tatsächlich noch da ist ;)


    So lange das nicht öfter passiert, ist das der jetzige Code auch kein Problem - war ja bisher nur 1x 8o

    Ich hatte vor kurzem einen GS vom Adrenalin nach dem Löschen einer fertigen Aufnahme im EMC.

    Konnte es aber bisher nicht mehr nachstellen und wollte es nun wenigstens noch melden.

    Vielleicht haben sich da einige Processe (Update vom touch und mv) überschnitten.

    So dass Adrenalin wegen des touch ein Update machen wollte, das File dann aber wegen dem mv schon weg war ;)


    Müsste man das  f = os.open(filename, os.O_RDONLY | os.O_NOATIME, 0) evtl. mit einem FileExist oder try abfangen ?