Jump to content

Upscaling per Pixelshader?


ZappoB

Recommended Posts

Ich muss leider mal wieder das leidige Thema Upscaling rauskramen:

 

Seit dem Umstieg auf einen 50" FullHD Plasma ist das Bild von SD-Sendern absolut grausam, mit meinem alten HD-Ready 42-Zöller war das nicht so wahrzunehmen (was einigermaßen nachvollziehbar ist).

 

Nun habe ich ein bisschen mit ffdshow und Größenänderung rumprobiert und muss sagen, dass das Bild deutlich an Qualität gewinnt, leider ist ffdshow was den Rest der Decodierung anbelangt wenig geeignet, auch das Deinterlacing ist richtig schlecht im Vergleich zu Hardware-VA. Soweit ich mitbekommen habe, ist auch DXVA nicht verfügbar, wenn man das Postprocessing aktiviert, womit ffdshow endgültig aus dem Rennen ist.

 

Jetzt kommt mir in den Sinn, ob denn ein Upscaling per Pixelshader möglich wäre? Hier könnte mit einem hochwertigen Algorithmus (Bikubisch oder Lancos) doch einiges aus einem SD-Bild herausgeholt werden?!

 

Ist so etwas denk- oder gar machbar? Oder habe ich hier ein vollkommen falsches Verständnis von den Pixelshadern?

Link to comment

Denkbar ist sowas.

z.B. MPC-HC kann per Shader über den EVR Customrenderer bicubisch scalieren.

Kannst du ja mal ausprobieren obs dann besser ist.

 

Ob das im DVBViewer auch machbar ist kann ich dir derzeit aber nicht sagen.

Ganz so einfach wie bei mpc-hc ist das mit dem aufwendigen OSD (&LiveTV) nämlich nicht.

Schöner wäre es wenn von windows bzw. den Graka Treibern da mal aus besseres kommen würde ... diese bilineare scalierung find ich auch recht bescheiden ... :rolleyes:

 

 

P.S. EVRVideoprocessor=1 könntest du in der setup.xml noch versuchen.

Link to comment

P.S. EVRVideoprocessor=1 könntest du in der setup.xml noch versuchen.

Das habe ich eben versucht, kann aber direkt keinen Unterschied feststellen - was wird denn damit geändert?

 

EDIT: Wow, Bicubic ist im MPC-HT eine Offenbarung, daneben sieht das Bild im DVBViewer wie nearest neighbor aus.

Edited by ZappoB
Link to comment

Ich habe in der Richtung auch schon Nachforschungen angestellt...

 

Der DVBViewer macht die Skalierung über DirectX. Bilinear ist da das höchste der Gefühle für lineare Skalierung (anisotropische Skalierung macht nur bei Abbildungen von Texturen auf ein 3D-Objekt Sinn). Das wird über die Textureinheiten in der GPU erledigt (welche den Shadern nachgeschaltet sind).

 

MPC-HC kann zusätzlich auch über die Shader (SIMD Prozessoren in der GPU) skalieren, was den Vorteil hat, dass man noch andere Shader-Skripte über sogenannte "Screen Space Shader" nachschalten kann (z.B. Schärfefilter, welche nach dem Skalieren mehr Sinn machen). Der andere Vorteil ist natürlich, dass man darüber effizientere Skalierer realisieren kann (siehe madVR mit Lanczos, den von mir angestellten Vergleich kann man hier nachlesen). Die MPC-HC Shader-Skripte für Bilinear und Bicubic findet man hier. Da aber die Texturgröße durch den Shader verändert wird, funktioniert das im Gegensatz zu den anderen nicht ohne Hilfe des Renderers.

 

P.S. EVRVideoprocessor=1 könntest du in der setup.xml noch versuchen.

Bringt hinsichtlich der Skalierung gar nichts. Der Video Processor kommt vor dem eigentlichen Rendering ins Spiel. Skalierung wird immer bilinear über DirectX als einer der letzten Schritte in der Grafikpipeline durchgeführt.

 

daneben sieht das Bild im DVBViewer wie nearest neighbor aus.

Entweder das ist jetzt stark übertrieben oder du hast anderweitige Probleme. 'Nearest Neighbor' ist reine Pixelverdoppelung. Die Interpolation durch einen bilinearen Filter sollte man schon mehr als deutlich sehen. Wie sieht es aus, wenn du Bilinear in MPC-HC mit Bilinear im DVBViewer vergleichst? In MPC gibt es Bilinear einmal über die Textureinheiten und einmal über die Shader (PS Variante).

Link to comment

Übrigens halte ich das Gerücht, dass Standard EVR bikubische Skalierung macht für unbestätigt. Ich glaube belegen zu können, dass der auch nichts anderes als bilineare Skalierung über DirectX macht. Das kann man leicht mit einem Vergleich der Bildqualität verifizieren. Außerdem kann man das am Unterschied der Shaderauslastung sehen, welche gegenüber EVR Custom unwesentlich ist. Für diesen Vergleich sollte man MPC-HC heranziehen, da beim DVBViewer die Shaderauslastung mit Standard EVR wohl auf Grund zweier Streams, Video und OSD, die gemixt werden müssen, höher ist. OSD mittels Direct3D über das Video zu lagern scheint wesentlich effizienter zu sein.

 

Bikubische Skalierung würde den Renderer im DVBViewer definitiv aufwerten.

Link to comment

Übrigens halte ich das Gerücht, dass Standard EVR bikubische Skalierung macht für unbestätigt

Ich auch, woher hast du das denn?

 

Die bikubische Skalierung optional über Shader fände ich gut.

Bei schwacher hardware kann man dann ja auf die Standardvariante zurück gehen.

Link to comment

Also wenn ich CiNcH nun richtig verstehe, ist ohne Anpassung des Custom EVR eine bikubische Größenänderung nur mit Pixelshadern nicht möglich?!

 

Das wäre schade, da ich kaum annehme, dass diese Änderungen in absehbarer Zeit in den Custom EVR wandern werden...

 

PS: Was macht der EVRVideoprocessor denn nun genau? Das Wiki gibt hier auch keine Auskunft, außer dass mit diesem Wert der EVRVideoprocessor aus- und eingeschaltet wird :blink:

Edited by ZappoB
Link to comment

Genau dazu müsste auch im customrenderer was gemacht werden.

Änderungen an den renderern ist aber nicht gerade das Lieblingsthema der Entwickler :D

 

EVRVideoprocessor=1 macht "irgendwas" davor (pre-processing), ähnlich wie die Shader.

So richtig sichtbar ist bei mir da auch keine Änderung.

Die Auswirkung könnte aber je nach GPU/Treiber unterschiedlich sein. :whistle:

Edited by nuts
Link to comment

Dann kann man nur hoffen, das Lars hier mal vorbei schaut und das auf die ToDo-Liste setzt :whistle:

 

Könnte bei ATI/AMD-GraKas die Einstellung im CCC etwas am Scaling ändern? Ich habe im 3D-Bereich alles auf niedrigste Werte gestellt...

Link to comment

Etwas OT, passt aber zum Thema Upscaling.

 

Wisst ihr nach welcher Methode die Hardware-Scaler in den Monitoren/TV in der Regel arbeiten oder wie man dies festellen kann?

 

erwin

Link to comment
  • 1 month later...

Hallo allerseits!

 

Sorry, aber ich hab von der Technik dahinter leider absolut keine Ahnung.

Besteht da jetzt Hoffnung, das sich auf dem Gebiet in naher Zukunft mal was tut,

oder bleibt das vorerst nur ein Wunschtraum?

 

Dem TE kann ich da nur zu 100% zustimmen.

Die Zahl derer, die mittlerweile größere Bildschirme oder sogar Projektoren nutzt, dürfte ständig steigen.

Da wäre eine Möglichkeit für ein ordentliches Upscaling sicherlich sehr zu begrüßen.

 

Das Thema mit ffdShow/Avisynth hab ich inzwischen auch abgeschlossen,

da die damit verbundenen Nachteile m.E.n. überwiegen.

Link to comment

Hallo Zappo B,

 

ich hatte nun fast 2 Jahre den DVBViewer zusammen mit einem 50" Plasma in Betrieb. Dabei habe ich 720P /50 Hz ausgeben lassen. Ich habe eine Nvidia 9800 GT Graka genutzt welche das Skalieren erledigt hat. Ich konnte mich bei GUTEM SD Material nicht über die Auflösung beschweren und ich bin sehr anspruchsvoll.

 

Ich habe aber den Overlaymixer verwendet da er Subjektiv das schärfere Bild gemacht hat.

 

So aus dem was ich selber getestet hab, ist eine POWER Graka eine sehr sinnvolle Sache für ein gutes Bild. Ich habe da mehrere Evolutionsstufen durchgemacht und bin nun bei einer GTX460.

 

Bei wirklich gutem SD Material ist auch das Bild auf meinem jetzigen 63" Full HD Fernseher wirklich gut. Ich gebe jetzt mit 1080P aus. Ohne Nachschärfen an der Graka.

 

Ich muß aber sagen das die Test´s die ich in den letzten 1,5 Wochen gemacht haben dazu führen das ich oft mit dem DVBViewer aufgezeichnetes Material über den Mediaplayer Classic wiedergebe. Er macht einfach eine tacken Schärfer. Und auf so nem 63er sieht man das eben noch etwas mehr.

 

Grüße

 

Dominic

Link to comment
So aus dem was ich selber getestet hab, ist eine POWER Graka eine sehr sinnvolle Sache für ein gutes Bild. Ich habe da mehrere Evolutionsstufen durchgemacht und bin nun bei einer GTX460.

Tut mir leid, der Zusammenhang aus POWER-GraKa und dem Upscaling des DVBV erschließt sich mir nicht.

 

Das bessere Upscaling des MPC haben wir ja schon besprochen, hier sind die integrierten Upscaler deutlich besser - es bleibt einfach nur zu hoffen, dass der Custom-EVR des DVBV irgendwann ebenfalls angepasst wird und ein besseres Scaling unterstützt.

 

Ich neige allerdings zu der Hoffnung, das auch Lars und Christian (und nicht zuletzt Griga) dem schlechten SD-Bild den Kampf ansagen, da ja der HD-Ausbau in Deutschland absolut ärmlich ist, und so ein totaler Umstieg nicht abzusehen ist.

Link to comment
  • 3 months later...

@LarsMQ @Griga @Hackbart

 

Besteht denn irgendeine Hoffnung für uns qualitätsorientierte User, dass eine deutlich bessere Skalierung im Custom EVR Renderer in näherer Zukunft möglich wird und die unscharfe Ausgabe beendet?

 

Ewig können wir ja nicht mehr bei XP und Overlay bleiben.

Irgendwann werden uns die Grafikkartenhersteller durch fehlende Weiterentwiclung zu dem Umstieg auf Win7 (oder dann Win8) zwingen.

 

Seit die Hardwarebeschleunigung auch bei den aktuellen Browsern Einzug gehalten hat macht das supersmoothe Scollen beim Surfen unter Win7 schon deutlich mehr Spaß als unter XP, von daher würde ich so langsam schon gerne auch beim HTPC das OS wechseln.

 

Auf einen vernünftig funktionierenden EVR von MS brauchen wir ja nicht mehr zu hoffen, das hat ja die (Nicht)Weiterentwicklung seit Vista bis jetzt Win7 SP1 gezeigt.

 

Daher nochmal die Frage: Gibt es denn Ansätze dazu, oder ist das auf der imaginären Prioritätenliste bisher noch gar nicht berücksichtigt?

Link to comment
  • 2 months later...

Hallo zusammen,

will das Thema hier nochmal aufgreifen.

Also Full-HD Output scheidet für mich definitiv aus (zu schlechtes Upscaling).

Damit verliere ich zwar ein wenig Schärfe bei den Full-HD Sendern, gewinne aber durch das Upscaling am AVR massivst Bildqualität bei SD Sendern.

Genauer gesagt habe ich meinen Output momentan auf 720p gestellt.

Hoffe aber weiterhin dass sich da noch was tut..

Grüße

Link to comment

Die Hoffnung stirbt zuletzt :rolleyes:

 

Ich hatte auch schon mit dem Gedanken gespielt, zumindest bei SD dem HQV-Reon meines AVR das Scaling zu überlassen.

Wirklich Sinn macht das aber auch nur, wenn das Signal komplett "untouched" vom PC ausgegeben wird, was aber auch nicht so einfach zu realisieren ist.

 

Bleibt also wirklich nur zu hoffen, das sich dem mal jemand annimmt.

Aber man findet ja nichtmal einen Hinweis. ob überhaupt in dem Bereich jemand am Ball ist.

Zu wünschen wäre das jedenfalls, da die Bildschirme der User immer größer werden, und auch immer mehr Beamer in den Wohnzimmern zum Einsatz kommen.

Bei meinen 2,40m Bildbreite z.B. vergeht einem da manchmal schon der Spaß.

Link to comment

 

Ich hatte auch schon mit dem Gedanken gespielt, zumindest bei SD dem HQV-Reon meines AVR das Scaling zu überlassen.

Wirklich Sinn macht das aber auch nur, wenn das Signal komplett "untouched" vom PC ausgegeben wird, was aber auch nicht so einfach zu realisieren ist.

 

Hallo,

 

na mit dem AVR/HQV-Reon hätte ich kein Gedanke an Upscaling per Pixelshader verschwendet.....

 

Besser als damit wird's selten gehen.

 

 

Gruß

Link to comment

 

Ich hatte auch schon mit dem Gedanken gespielt, zumindest bei SD dem HQV-Reon meines AVR das Scaling zu überlassen.

Wirklich Sinn macht das aber auch nur, wenn das Signal komplett "untouched" vom PC ausgegeben wird, was aber auch nicht so einfach zu realisieren ist.

Das gleiche "Problem" (Yamaha 2067) hab ich leider auch und bisher hab ich auch keine vernünftige Lösung gefunden meinem HTPC zu erklären, dass es er das Video Signal unberührt lässt. Ehrlich gesagt, denke ich gibt es dafür auch keine brauchbare Lösung, da ja die Grafikkarte immer ein Vollbild machen will und somit das Signal schon wieder nicht mehr unberührt ist. :(

Link to comment

Ich kenne auch keine Möglichkeit einen externen Videoprozessor sinnvoll hinter einem PC (Schärfefilter mal ausgenommen) zu betreiben.

 

Die beste Lösung wäre, wenn mal bessere Methoden per System (von windows, GPU-Treibern oder wer auch immer da verantwortlich ist) angeboten würden.

Link to comment
Die beste Lösung wäre, wenn mal bessere Methoden per System (von windows, GPU-Treibern oder wer auch immer da verantwortlich ist) angeboten würden.

 

Da würde ich zustimmen.

 

Allerdings befürchte ich, das die Anzahl der User, die einen HTPC mit unseren Ansprüchen betreiben, einfach zu gering ist.

Da werden die Entwickler ihre Schwerpunkte eher in anderen Bereichen setzen.

 

Da halte ich (ohne viel von der Technik zu verstehen) eine Lösung per Pixelshader oder "untouched-Ausgabe an einen externen Scaler" eher für realisierbar.

Leider fehlt mir schon ansatzweise das Fachwissen, um selbst in der Richtung tätig zu werden.

Link to comment

Außerhalb des DVBViewers also per Plugin oder ähnlichem ist das so ziemlich unmöglich.

Die "untouched" Ausgabe direkt hinterm Decoder ist schon bei normalen Zuspielern (DVD Player, Sat Receiver) kritisch. Am PC gibts dafür leider gar nichts für den DVBViewer brauchbares (weder hardware noch software).

 

Ich zitiere mal Lars in ähnlichem Zusammenhang:

LiveTV und ein komplexeres OSD (Texturen), die verschiedensten Interaktionen und umgebungen usw. schaffen ein schwieriges umfeld für sowas.

D.h. alles sehr schwierig. Die lange Betaphase für den Customrenderer ist den meisten ja sicherlich noch in Erinnerung.

Unmöglich ist gar nichts, aber einen Schnellschuss in die Richtung würde ich nicht erwarten.

Link to comment

Ich möchte einfach noch mal in die Runde werden, dass der Tenor hier im Forum immer wieder ist, das der DVBViewer sich auf die TV Wiedergabe spezialisiert hat. Leider ist es in Deutschland traurige Wirklichkeit, dass HD-Inhalte nur in homöopathischen Dosen verteilt werden, SD ist immer noch der Standard. Wie schon erwähnt wurde, werden die Bildschirme in den Wohnzimmern immer größer, bis hin zu Leinwänden - auf meinem 50" Plasma ist es z. B. echt schon grenzwertig, Programme wie z. B. DMAX anzusehen.

 

Es wäre deshalb schön, wenn man (statt weiterer Featuritis) sich auf die ordentliche Aufbereitung des Bildes speziell bei Upscaling kümmern würde - und wenn das heißt, den Custom Renderer zu erweitern, würde ich diese Aktion gutheißen, ja sogar finanziell unterstützen!

 

Was eine gute Skalierung ausmacht, kann ich schon beim XBMC sehen: der Unterschied beim Wechsel zwischen Bilinear (ist glaube ich Standard beim DVBViewer) und Lancos 3 ist bei Videos mit geringer Auflösung (640x480) durchaus beachtlich.

Link to comment

Hmm, ohne da jetzt soo viel Wind aus den Segeln nehmen zu wollen, aber wie genau sollte das gehen? Ich geh mal von folgender Situation aus: Der Allocator/Presenter des jeweiligen Dekoders liefert eine IDirect3DTexture9 Texture und diese wird dann an die Renderklasse übergeben. Da Christian glaub ich irgendwo erwähnt hat das er nicht mit Surfaces, sondern Texturen arbeitet wird das dann so aussehen:

Es wird eine Vertex erstellt mit den Weltkoordinaten (z.b. x und y im Bereich von [0..1] und der z-Vektor unverändert). Davor wird die Welt transformiert, dass man den Koordinatenraum quasi komplett einsehen kann. Den Rest macht doch sowieso die Grafikkarte. Sprich das Skalieren erfolgt zu 100% über den Treiber.

Da beim Vergrößern der Anzeige das Bild nicht flackert, gehe ich mal von aus, dass intern eine feste Größe für den Backbuffer verwendet wird. Da kann man schon ungemein die Bildqualität verbessern, wenn die Anzeige im D3D Exklusivmode läuft. Ich glaub ne Einstellung dafür gibts als Tweaks irgendwo.

 

Holger

Link to comment

Ist der D3D Exclusive Mode nicht nur gegen Timing-Probleme und Mikroruckler gedacht?

Der Upscaling Algorithmus bleibt denke ich auch hier bei Bilinear.

Laut Lars & Co. liegt das wohl am Renderer?

Also ich werde mich jetzt vorerst auf Upscaling via AVR (Pioneer, Marvell) konzentrieren.

Mit 720p Output sah das ganze schon viel besser aus.

Hoffe nur dass das OSD da mitmacht.

Optimal wäre dann auch das automatische Umschalten der Auflösung.

Die Bildwiederhol-Frequenz stelle ich momentan mit Reclock und vbs event notification um.

Evtl. geht da auch was bzgl. Auflösung?!

Link to comment

Von dem was Holger da so geschrieben hat, hab ich nicht wirklich viel verstanden.

Aber so wie sich das anhört, scheint unser Wunsch wohl eine größere Baustelle zu sein,

bei der in der näheren Zeit wohl nicht viel zu erwarten ist.

 

Also ich werde mich jetzt vorerst auf Upscaling via AVR (Pioneer, Marvell) konzentrieren.

Vieleicht wäre das für mich auch vorerst doch eine Alternative,

zumal mein HQV-Reon ja nicht zu den schlechtesten zählt.

 

Optimal wäre dann auch das automatische Umschalten der Auflösung

Genial wäre es, wenn beim Start des DVBViewers (oder beim Umschalten von HD>SD/SD>HD) automatisch auf die endsprechende Auflösung gewechselt wird.

Aber ob das überhaupt machbar ist?

Das wäre für mich allerdings schon fast eine Grundvoraussetzung.

Edited by goldfield
Link to comment

Ich habe mich in letzter Zeit intensiv mit DirectShow, COM, Custom Presenter, D3D, und wie das alles durch Delphi gewrappt wird, beschäftigt (ich komme aus der C/C++ Ecke...). Der Grund dafür ist, dass ich der Meinung bin, dass man der Thematik im DVBViewer mehr Aufmerksamkeit widmen sollte. Christian hat mir freundlicherweise den Code einer kleinen DirectShow-App mit der DVBViewer Custom Presenter Implementierung zur Verfügung gestellt. Diese zerpflücke ich gerade, nachdem ich mir bereits den MS Sample Code und die MPC-HC Implementierungen zu Gemüte geführt habe. Im Zuge dessen verbessere ich gerade etwas das Debug Logging, um die Abläufe besser verstehen zu können. Auch Profiling soll in Zukunft möglich sein (wie lange dauern bestimmte Abläufe im Renderer, Statistiken zu Timings, i.e. Clock Drifts, um Probleme in diversen System identifizieren zu können usw.).

 

Mein erstes größeres Ziel ist es, die Timings im DVBViewer Custom Presenter zu optimieren. Da gibt es noch offensichtliche Schwächen. Das kann ganz gut funktionieren, muss aber nicht, je nach Umgebung (Aero/DWM, D3D-Fullscreen, Grafiktreiber) und fps/Hz Konstellation. Ohne jetzt weiter ins Detail gehen zu wollen soll ein Sychnronisationsmechanismus implementiert werden, der ohne jegliche Optionen immer optimal arbeitet. D3D-Fullscreen und 'VSync durch Aero' (diese Option ist sowieso etwas zweifelhaft, da hier im Presenter überhaupt keine Synchronisation stattfindet und macht höchstens noch dann Sinn, wenn fps <> Hz, da man dann Ruckler sowieso nicht vermeiden kann) sollten überflüssig werden. Wie gut mir das gelingt, wird sich noch zeigen.

 

Anschließend möchte ich die hier angesprochenen Themen etwas angehen. D3D benötigt bei mir definitiv noch etwas Einarbeitungszeit. Bei den Möglichkeiten bin ich aber stets auf dem Laufenden (hier findet man z.B. Resizer-Pixelshader, welche aber nicht ohne spezielle Behandlung in der Applikation arbeiten). Allerdings will ich es hier nicht übertreiben. Es soll Massentauglich ohne großartige Konfiguration sein (ICC Profile werdet ihr von mir nicht sehen) und auch Sinn machen. Ob es z.B. so viel Sinn macht, den Farbraum zu erweitern, hängt natürlich auch von der Quelle, von der Post-Processing Pipeline (Shader) und vom Ausgabegerät ab, oder weiß Gott wie komplexe Algorithmen zu verwenden um Chroma und Luma zu skalieren, bezweifle ich noch etwas.

Ich bin zum Beispiel auch kein allzu großer Fan von madVR. Ich persönlich sehe meist nicht einmal Unterschiede, wenn ich Bilder direkt vergleiche (vorausgesetzt der Custom Presenter verwendet mindestens einen bikubischen Skalierer), geschweige denn wenn ich ein Video erst mit Renderer A und anschließend mit Renderer B anschaue. Und wenn der Renderer alles perfekt macht, macht es halt ein anderes Glied in der Kette "kaputt".

 

Ob das Vorhaben von Erfolg gekrönt sein wird und wie wir das in den DVBViewer Kontext bekommen, bleibt abzuwarten.

Link to comment

Cinch, es bedeutet mir viel, dass du dich mit dem Thema überhaupt beschäftigst!

 

Viel Erfolg und vielen Dank schon mal als Vorschuss :)

Link to comment

Juhu,

es gibt noch Hoffnung.

Der madVR Renderer wird ja u.A. auch wegen dem Dithering hochgelobt.

Zusätzlich gibts die Möglichkeit yCMS einzubinden, was z.B. bis zu 256 Graustufen (vgl. 10/20-Punkt bei anderen CMS) kalibrieren kann und ne Gamma-Korrektur mitbringt.

Für DTV wäre ich aber auf alle Fälle mit nem alternativen Upscaling-Algorithmus äußerst zufrieden.

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...