Moin,
"Alter Inhalt - 12.6.12"
Schon vor einiger Zeit bin ich über Folgendes gestolpert auf der Suche nach einer ordentlichen Interpolationsmethode:
http://en.wikipedia.org/wiki/Hqx
Wie es aussieht liegt das Projekt HQx auf Eis, während andere ähnliche Projekte noch weiterentwickelt werden.
Ein kleines Grafikprogramm beherrscht alle aktuell verfügbaren interpolationsmethoden dieser Art und viele Andere:
http://en.wikipedia.org/wiki/Hqx
Was mich daran fasziniert ist, dass die Grafiken im Nachhinein noch komplett verändert werden können. Man kann also (was mir sehr entgegenkommt) in AutoIt ein winziges Spielchen schreiben (Vorteil, da AutoIt + Große Grafiken = Langsam) und ihm anschließend einen Flash ähnlichen Look verpassen.
Angeblich soll das sogar in Echtzeit funktionieren. (so im Bereich < 3ms schätze ich). Dann könnte man den Filter praktisch direkt vor die Ausgabe im GUI schalten.
Ich tue mich leider schwer diese Filter in AutoIt zu nutzen.
Ideal wäre eine Anbindung über einen standard DllCall. (mit hdc1, hdc2 oä).
Hat da jemand eventuell ein Paar Tipps wie man das bewerkstelligen kann ?
Nur das rohe Downloaden der dll bringt mich irgendwie nicht weiter^^
Außerdem brauche ich ja auch nur einen einzigen Filter (xBR 3x) und nicht alle 50.
Beispiel für 3x Zoom
[Blockierte Grafik: http://i.imgur.com/EJQlp.png]
[Blockierte Grafik: http://i.imgur.com/js5cv.png]
Edit:
Hab jetzt auch mal Quellcode gefunden.
https://github.com/libretro/commo…ter/xBR/3xBR.cg
https://github.com/libretro/commo…BR/3xBR-v2.1.cg
Es gibt doch bestimmt jemanden der damit was anfangen kann.
Optimal wäre eine Übersetzung in ASM. Ansonsten geht natürlich auch C++
Wenn alles schief geht muss eine Funktion selbst geschrieben werden.
Die wird dann aber eher schlecht und langsam als recht und schnell.
"Nicht ganz so alter Inhalt - 16.6.12"
Nach einigem Suchen und durchfragen habe ich den Quellcode (in C++) erhalten.
DEV C++ habe ich installiert (um die .dev Projekte zu öffnen).
Das Kompillieren zu einer Dll war auch (nach kleinen Modifikationen) erfolgreich.
Jetzt brauche ich noch Infos wie ich den DllCall ausführe.
Es werden irgendwelche Parameter/Structs und sonstiges benötigt.
Ich kenne mich mit C++ aber nicht genug aus um herauszufinden wie ich was wo übergeben muss.
Gefundene in AutoIt nutzbare Funktionen:
- RenderPluginGetInfo
- RenderPluginOutput
Erstere ließ sich leicht in AutoIt einbauen.
Der DllCall war simpel, keine Parameter und die Ausgabe klar.
Die Funktion steckt also im 2ten Call.
Dazu wird eine umfangreiche Dllstruct benötigt.
Der Aufbau der Struct konnte man dem DllHeader entnehmen.
Leider schmiert AutoIt beim Aufruf ab.
Das liegt vermutlich daran, dass ich bei einigen Parametern den Sinn noch nicht gefunden habe und nicht weiß welche Werte eingetragen werden müssen.
Schaut mal bitte jemand der C++ besser kennt als ich drüber wo der Fehler im Aufruf ist ?
Die Dll ist korrekt kompilliert worden. Ansonten würde die erste Funktion nicht funktionieren. Und die geht Problemlos.
Anbei ist:
- Quellclode von 3xBR
- Testskript
Wichtige Zeilen:
49 - Aufruf der Dll Info Funktion
52 - Aufruf der Vergrößerungsfunktion
52ff - Aufbau der Vergrößerungsfunktion. Hier brauche ich Hilfe von jemandem der C++ kennt.
17.6.12
Sooo...
Wo ein Wille ist, ist auch ein Weg scheint es.
Es ist zwar (wie immer) alles wesentlich komplizierter als man es gerne hätte, aber es geht wenigstens.
Der Filter funktioniert erstens mit total seltsamen Parametern (die man sich auch in der Dll berechnen könnte),
und benötigt 2tens 16Bit Grafik (555 oder 565) wie wir sie von den guten alten Zeiten her kennen.
Also müssen Konvertierungsfunktionen her.
Zum Testen der Dll habe ich diese beiden (von 32Bit -> 16Bit und zurück) provisorisch in AutoIt realisiert.
Das Durchlaufen der Schleifen und der im Prinzip sehr hardwarenahe Bitshift fressen aber unglaubliche Zeiten^^
eine ASM Version (die das in 1ms statt 1s packt) ist bereits in Arbeit.
Anschließend gehts ans optimieren.
Im Anhang:
Ein Ordner mit allem möglichen seltsamen Zeug.
Startet man die Vergrößern.au3 kann man erste Resultate sehen.
Falls es bei jemandem nicht funktioniert, bitte melden.
Ich bin noch auf Fehlersuche. Das ist alles noch etwas wackelig. Und im Endeffekt soll es ja überall laufen.
Edit:
Die erste ASM gestützte Version ist fertig.
Und es wurde im Code etwas aufgeräumt.
lg
Mars