Jump to content

OSD Shadermenu Settings SD/ HD/ 3D


Tüftler

Recommended Posts

Seit Einführung der CustomRenderer bietet der DVBViewer viele Möglichkeiten der Bildverbesserungen oder Bildbeeinflussungen.

Die sogenannten Shader greifen dabei auf die durch das Windows DirectX9 System und einer unterstützten Grafikkarte eingeführten Pixelshader zurück.

Die verschiedenen Shader benötigen je nach Anwendungsfall und Systemeinstellung eine mehr oder weniger potente Hardware, sprich CPU/GPU-Leistung.

Daher kann es vorallem für "schwächere" Systeme sinnvoll sein die eingestellten Shader, abhängig von der jeweiligen Wiedergabe, zu deaktivieren ohne vollständig auf diese verzichten zu müssen.

 

Diese Scriptsammlung ermöglicht zum Einen ein auflösungsabhängiges Shadersetting für

 

  • SD -> mit < 720er vertikaler Auflösung
  • HD -> mit > oder = 720er vertikaler Auflösung
  • 3D -> für Sender mit 3d oder 3D im Sendernamen (muss durch ein Leerzeichen ermittelbar sein bspw. Sky 3D !)

und zum Anderen die Möglichkeit einer automatischen Shaderdeaktivierung für

 

  • Bild in Bild Wiedergabe
  • Medienwiedergabe (betrifft nicht Timeshift!)
  • Playlistwiedergabe
  • Diashowwiedergabe (vorbeugend eingebaut, siehe Erläuterung "Shader if Diashow = 0")
  • sowie für einen Kanalwechsel.

Die Shaderaktivierung für SD/HD/3D erfolgt dabei über das OSD-Menü

 

Settingmenü.pngShadermenü.pngInfomenü.png

 

Die wiedergabeabhängige Deaktivierung dagegen erfolgt über die noShader.txt, die im Scriptordner des DVBViewer zu finden ist (wird beim 1. Start erzeugt, falls nicht vorhanden).

Diese kann mit einem beliebgen Editor (bspw. Notepad) entsprechend ihren Einstellungen angepasst werden (Eine Einstellungsänderung wird erst bei einem DVBViewer Neustart aktiv!).

Erläuterung noShader.txt:

-> eine 0 bedeutet der Shader wird dafür deaktiviert, eine 1 bewirkt das Gegenteil!

 

  • Shader at PiP = 0 -> setzt die Shader bei Bild in Bild auf "none"
  • Shader at Mediaplayback (nicht Timeshift!) = 0 -> setzt die Shader bei Medienwiedergabe (CD/DVD/Videowiedergabe etc.) auf "none"
  • Shader at Playlist = 0 -> setzt die Shader bei Playlistwiedergabe auf "none"
  • Shader at Diashow = 0 -> setzt die Shader bei Diashowwiedergabe auf "none" (ist derzeit zwar nicht notwendig, da diese generell nicht benutzt werden, aber man weiß ja nicht was zukünftig noch kommt)
  • no Shader at channelchange = 1 -> setzt die Shader bei einem Kanalwechsel auf "none"

Inhalt und Detailfunktion:

 

Sämtliche implementierten Funktionen greifen ausschließlich bei Verwendung der Custom Renderer.

 

!! Achtung, die gesetzte/n Shaderdeaktivierung/en aus der noShader.txt funktionieren nur wenn der DVBViewer auch mit einem Custom Renderer gestartet wird !!

Einmal gestartet behält diese ihre Funktionsaufgabe aber bei, auch wenn zwischenzeitlich zwischen "normalem" und CustomRenderer hin und her geschaltet werden sollte.

 

Notwendige vbs Dateien:

 

  • shaderlist.vbs : Diese liest aus dem Shaderverzeichnis des DVBViewer alle enthaltenen XML Dateien aus. !! Achtung, liegen dort XML Dateien die keine Shader sind so werden sie trotzdem gelistet !!
  • shadermenu.vbs : Hier ist alles enthalten was das OSD Menü und deren Einstellungen selbst angeht.
  • shaderset.vbs : In diesem wird das Handling aus der OSD Auswahl abgearbeitet.
  • channelchange.vbs : Setzt einen Merker bei einem Kanalwechsel.
  • command.vbs : Hierüber wird das OSD-Shadermenü aufgerufen. >> es muss ein >neuer Befehl< mit Userdefined 30517 angelegt und eine Taste dafür angelernt werden
  • windowload.vbs : Beim ersten Aufruf einer OSD Seite wird die polling.vbs gestartet, sofern ein CustomRenderer verwendet wird.
  • polling.vbs : Prüft die in der noShader.txt eingestellten Einträge auf Aktivierung und leitet die jeweilige Umsetzung ein.

Es können unterschiedliche Shader für SD-Sender (Video Vres < 720), HD-Sender (Video Vres > 720) und 3D Sender festgelegt werden

Um den 3D Sender zu ermitteln habe ich mich für das Durchsuchen des #Channelname nach der Syntax " 3D" entschieden (inclusive Leerzeichen vor der 3) und hoffe das es so passt.

 

In der Setup.xml werden 3 neue Einträge unter >Section MPEG mit den Namen "LastSDShader", "LastHDShader" und "Last3DShader" angelegt, sofern ein Eintrag für SD/ HD/ 3D vorgenommen wird. Diese werden beim DVBViewer Start entsprechend angewendet -> sofern ein Custom Renderer verwendet wird!

Im Datamanager sind folgende Einträge mit der aktuellen Belegung verfügbar: "#SD-Shader", "#HD-Shader", "#3D-Shader", "#LastSD-Shader", "#LastHD-Shader", "#Last3D-Shader", "#Shadercount" (enthällt die Anzahl gefundener XML Dateien) sowie "#1.Shader" und folgende mit der jeweiligen Shaderbezeichnung, sofern vorhanden.

 

Im OSD Menü erhält der Eintrag "Last SD/HD/3D Shader" erst nach einer Änderung des jeweiligen Sendershaders eine Zuordnung (! Ist beim DVBViewer Start immer 0 !). Weiterhin zählt auch die Wahl "keinen/none" als "Last Shader" Eintrag.

Im Infomenü können die aktuellen Shaderbelegungen abgerufen werden, wobei die Einstellung none als leerer Eintrag bei aktuell wiedergegeben wird.

 

Viel Spaß beim Anwenden -> Shadersetting.zip

English version can be found here -> http://www.DVBViewer...post__p__330973

Edited by Tüftler
Link to comment
  • 3 weeks later...

Hi Tüftler,

 

ich habe mich gewundert wieso der Prozess WmiPrvSE.exe auf meinem System (Win7 32bit)

permanent zwischen 5-10% CPU Last erzeugt, aber auch nur, wenn DVBViewer läuft.

Killt man den Prozess kommt er sofort wieder, und das immer wieder.

 

Daraufhin habe ich mal das Tracing für WMI-Activity aktiviert und siehe da:

 

Gruppenvorgangs-ID = 274678; Vorgangs-ID = 274679; Vorgang = Start IWbemServices::ExecQuery - Select * from Win32_Process Where Name = 'DVBViewer.exe'; Clientcomputer = VDR; Benutzer = vdr\vdr; Clientprozess-ID = 5712; Namespacename = \\.\root\cimv2

 

und das MEHRFACH in der Sekunde, permanent!

 

Dann habe ich mal geschaut, was denn mit DVBViewer diesen select benutzt und

habe gesehen, daß es diese VB-Skriptsammlung ist.

 

Nehme ich z.B. das Skript polling.vbs raus ist Schluß mit permanenter CPU Last

von WmiPrvSE.exe.

 

Ich denke, daß das noch optimierungswürdig ist ;)

Link to comment

Wenn du darauf verzichten möchtest das die Settings Zeitnah aktiv werden dann kann man das natürlich optimieren.

VBS ist nicht gerade die effektivste Variante was den Speicherverbrauch angeht.

Was ich dir aber versichern kann ist das die jetzige CPU-Leistung bereits eine optimierte Version darstellt, ich war am Anfang bei ca. 40%.

Wenn du in die polling.vbs siehst findest du einige Einträge mit

WScript.Sleep(500)

wobei der Zahlenwert in diesem Fall einer Pause von 500ms entspricht. Ich habe dabei Versucht das Optimum zwischen ansprechen der Funktionen und der CPU-Last zu finden und eine längere Pause macht da nicht viel Unterschied, außer natürlich der Abstand zwischen den Peaks ändert sich.

Alle Funktionen und Variablen wurden auf ihre Auswirkungen im Bezug auf Speicherverbrauch und CPU-Last getestet (habe ich bisher bei keinem anderen Script gemacht :whistle:) und ich glaube einfach da ist nicht mehr viel möglich.

Wenn einer mit mehr Scripterfahrung und Ahnung auf dem Gebiet eine Idee hat ich lerne gerne dazu. :bye:

Link to comment

Hi Tüftler,

 

hmmm, ohne jetzt VB-Skript zu beherschen und ohne mir genau angeschaut zu

haben was in den Skripten _genau_ passiert, aber wozu mußt Du dafür 2x in

der Sekunde WMI Abfragen machen? Warum überhaupt WMI-Abfragen?

 

würde es evtl. nicht ausreichen, wenn Dein Skript aktiv wird, wenn folgendes

zutrifft:

 

- Änderung der Shader im Menü (die Änderungen werden ja in eine Datei geschrieben)

 

- Wechsel der Shader abfragen WENN man ein Programm wechselt, Video Datei abspielt

 

- wenn Shader "not set" oder "keiner" einfach nichts machen solange man via

Shader-Menü nichts ändert

 

?

Link to comment

Hi Tüftler,

 

hmmm, ohne jetzt VB-Skript zu beherschen und ohne mir genau angeschaut zu

haben was in den Skripten _genau_ passiert, aber wozu mußt Du dafür 2x in

der Sekunde WMI Abfragen machen? Warum überhaupt WMI-Abfragen?

Nur so kann ich ermitteln ob der DVBViewer noch läuft und wenn nicht wird das Script beendet.

würde es evtl. nicht ausreichen, wenn Dein Skript aktiv wird, wenn folgendes

zutrifft:

 

- Änderung der Shader im Menü (die Änderungen werden ja in eine Datei geschrieben)

- Wechsel der Shader abfragen WENN man ein Programm wechselt, Video Datei abspielt

- wenn Shader "not set" oder "keiner" einfach nichts machen solange man via

Shader-Menü nichts ändert

 

?

Die polling.vbs wird gebraucht für:

- die Einstellungsanalyse der shader.ini (was soll wie gehandhabt werden)

- Ausführung der dort gewünschten Aktivitäten

- Auflistung der vorhandenen Shader und füllen der Datamanager Variablen

 

Was natürlich geht wäre die polling.vbs wieder zu beenden wenn kein eingreifen laut der shader.ini gefordert wird, aber dann braucht man eigentlich diese Scripts auch nicht zu installieren (werde das aber zumindest für die iMonPad&MCE-Konfig überdenken/austesten).

Link to comment

Hi Tüftler,

 

Nur so kann ich ermitteln ob der DVBViewer noch läuft und wenn nicht wird das Script beendet.

hmm. Grade mal den Gockel gefragt:

 

set service = GetObject ("winmgmts:")

 

for each Process in Service.InstancesOf ("Win32_Process")

If Process.Name = "DVBViewer.exe" then

wscript.echo "DVBViewer is running"

wscript.quit

End If

next

wscript.echo "DVBViewer is not running"

 

wobei das von der Last her evtl. genauso viel oder mehr Last erzeugt als die WMI Abfragen,

wobei ich denke, daß man nicht 2x in der Sekunde nachfragen muß ob das Ding noch läuft oder

nicht ;)

 

Was natürlich geht wäre die polling.vbs wieder zu beenden wenn kein eingreifen laut der shader.ini gefordert wird, aber dann braucht man eigentlich diese Scripts auch nicht zu installieren

na das sehe ich anders :) evtl. braucht man gerade keinen Shader oder hat nur einen

für SD konfiguriert oder nur einen für 3D oder was auch immer. Ich finde diese

Skriptsammlung _sehr_ hilfreich, aber manchmal, z.B. auf RTL, macht ein Shader wie

Sharpen oder so das Bild noch schlechter als es eh schon ist, daher mache ich die,

wenn RTL läuft, gerne aus.

 

(werde das aber zumindest für die iMonPad&MCE-Konfig überdenken/austesten).

danke 8-)

Link to comment

Hi Tüftler,

 

 

hmm. Grade mal den Gockel gefragt:

 

set service = GetObject ("winmgmts:")

 

for each Process in Service.InstancesOf ("Win32_Process")

If Process.Name = "DVBViewer.exe" then

wscript.echo "DVBViewer is running"

wscript.quit

End If

next

wscript.echo "DVBViewer is not running"

 

wobei das von der Last her evtl. genauso viel oder mehr Last erzeugt als die WMI Abfragen,

wobei ich denke, daß man nicht 2x in der Sekunde nachfragen muß ob das Ding noch läuft oder

nicht ;)

Macht wohl kaum einen Unterschied (habe es jetzt nicht getestet!) und das dies "2x in der Sekunde" abgefragt wird liegt einfach am Einbau in der Schleife (ich muss sonst noch eine vbs laufen lassen, was irgendwie doppelt gemoppelt wäre).

na das sehe ich anders :) evtl. braucht man gerade keinen Shader oder hat nur einen

für SD konfiguriert oder nur einen für 3D oder was auch immer. Ich finde diese

Skriptsammlung _sehr_ hilfreich, aber manchmal, z.B. auf RTL, macht ein Shader wie

Sharpen oder so das Bild noch schlechter als es eh schon ist, daher mache ich die,

wenn RTL läuft, gerne aus.

Ich meine damit wenn nirgends in der ini irgendeine Änderung zum default des DVBViewer vorgenommen wurde (kein Abschalten beim Umschalten, keine Deaktivierung bei PiP, keine Deaktivierung bei Videowiedergabe etc.)

 

 

ElseIf DVBViewer.GetSetupValue("MPEG", "LastSDShader", "") = "" and DVBViewer.GetSetupValue("MPEG", "LastHDShader", "") = "" and DVBViewer.GetSetupValue("MPEG", "Last3DShader", "") = "" Then
do until ( GetDVBVObject(DVBViewer) and DVBViewer.GetSetupValue("MPEG", "LastSDShader", "") <> "" or DVBViewer.GetSetupValue("MPEG", "LastHDShader", "") <> "" or DVBViewer.GetSetupValue("MPEG", "LastSDShader", "") <> "" )
WScript.Sleep(20000)
loop

Hier stoppe ich ja schon für 20 Sec. wenn nichts über mein Shadermenü eingestellt ist.

Link to comment

ElseIf DVBViewer.GetSetupValue("MPEG", "LastSDShader", "") = "" and DVBViewer.GetSetupValue("MPEG", "LastHDShader", "") = "" and DVBViewer.GetSetupValue("MPEG", "Last3DShader", "") = "" Then
do until ( GetDVBVObject(DVBViewer) and DVBViewer.GetSetupValue("MPEG", "LastSDShader", "") <> "" or DVBViewer.GetSetupValue("MPEG", "LastHDShader", "") <> "" or DVBViewer.GetSetupValue("MPEG", "LastSDShader", "") <> "" )
WScript.Sleep(20000)
loop

Hier stoppe ich ja schon für 20 Sec. wenn nichts über mein Shadermenü eingestellt ist.

hier müßte imho noch "none" zustätzlich zu "" hinein (alle Shader wurden mal gesetzt sind aber derzeit auf none gestellt)

Link to comment

Da muss ich dann noch eine Möglichkeit für "Not Set" einbauen da bei "none" explizit der jeweilige Shader deaktiviert werden soll.

Bsp. mit deiner vorgeschlagenen Änderung: Alle 3 Shader stehen auf "none" und im DVBViewer Kontextmenü stellst du einen Shader ein. Nun beendest du den DVBViewer und startest ihn anschließend wieder neu dann würde die Einstellung "none" nicht greifen sondern der letzte von dir gewählte aktive Shader durch den DVBViewer wieder aktiviert werden da mein Script ja in der Warteschleife hängt.

Link to comment
  • 2 weeks later...

Im ersten Post findet ihr eine überarbeitete Version des Shader-Settingsmenü.

 

  • Neue Funktion zum Löschen aller Shader im Einstellungsmenü hinzugefügt (es erfolgt vor dem Löschen eine Sicherheitsabfrage und danach eine Bestätigung als OSD Einblendung) -> das Script geht dabei in die Warteschleife bis wieder ein Shader per Einstellungsmenü aktiv gesetzt wird
  • Fehler in der shaderset.vbs beseitigt (unter Umständen konnte die vbs ohne laufenden DVBViewer "überleben")
  • Optimierungen in Bezug auf die CPU-Last -> @test sollte jetzt nach deinen Wünschen laufen, bitte testen :blush:

Link to comment
  • 6 months later...

hmm irgendeine Idee was faul sein könnte wenn das Shader Menü zwar noch

funktioniert aber die Shader-Auswahl nicht mehr? Ich wähle einen Shader

aus, gehe wieder ins Menü und steht wieder auf None.

 

Nur im DVBViewer selber über das Menü kann ich die Shader ändern was

auch funktioniert.

 

Ich habe an dem Setup _NICHTS_ geändert, da es seit Monaten einfach nur

so läuft, seit heute nicht mehr :(

 

ich versteh's nicht ...

Link to comment

Habe das OSD Shadermenue 3D von Tüftler instaliert.Wieso kann ich kein OSD Menüe aufrufen.Habe die VB Scrips in den Scrips order kopiert und dann noch eine Taste im Eingabemenue angelernt,so wie es in der Beschreibung stand.Custom Renderer ist aktiviert.Ebenso ist ist im Viewer auch interne Scips erlauben angehakt.Was habe ich übersehen?

Link to comment

Hallo chinhu,

gehe mal bei laufenden DVBViewer (CustomRenderer muss aktiv sein) in den Scripts Ordner und mache zuerst einen Doppelklick auf die polling.vbs und anschließend auf die shadermenu.vbs.

Erscheint nun im DVBViewer das Menü?

Link to comment

Das OSD ist bei dir aber schon aktiv (funktioniert), oder hast du das unter >Optionen >OSD Allgemein abgeschaltet?

Lade doch bitte mal eine support.zip hoch.

PS: du kannst mal schauen ob du im TaskManager >Prozesse eine WScript exe findest, wenn die sich allerdings gleich wieder beendet dann ist was faul.

Edited by Tüftler
Link to comment
  • 1 year later...

kleines Update der Shader Scripte >hier<,

 

die Erstellung und das Lesen der noShader.ini führte unter Win7 nicht immer zum Erfolg und brachte damit die Shaderfunktionalität zum Erliegen.

Grund: Der DVBViewer startet Scripte immer mit aktiver UAC Virtualisierung.

 

Ich habe daher beschlossen die ini in eine txt zu ändern, womit das Problem nicht mehr auftritt. Ein Abschalten der UAC sollte auf keinen Fall die Lösung sein!

Bitte die angehängten Scripte im DVBViewer/Scripts Ordner ersetzen.

 

Die noShader.txt wird beim ersten Start erstellt und die Einstellungen können mit einem simplen Editor (bspw. Notepad) getätigt werden.

 

Sollte bereits eine noShader.ini vorhanden sein wird versucht diese umzubenennen. > Funktioniert nicht bei aktiver UAC, hier bitte die Einstellungen von Hand anpassen!

 

Die Funktionsweise der Einstellungen könnt Ihr bei Unklarheiten im >1.Post< auch nochmal nachlesen.

 

Neu: In der polling.vbs kann über

' ************
logging = 0 '*  to create logfile set value = 1 
' ************ 

die Erstellung einer Logdatei aktiviert werden. Diese wird, wenn aktiv, in den Scriptsordner geschrieben.

Link to comment
  • 1 year later...

Kann mir jemand sagen wie man die zwei Stereobilder Rot/Cyan verschiebt damit daraus auch ein 3D Bild wird? Weil die sind ja viel zu weit auseinander?! Sinnlos! ??? Und ohne einen echten Kamera Versatz funktioniert die Tiefeninformation doch bestimmt sowieso nicht!? Mfg

Edited by XOROHDTV
Link to comment

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...