On Screen Display (OSD)

Für Fragen zu Grafik APIs wie DirectX und OpenGL sowie Shaderprogrammierung.
Antworten
IH82W8
Beiträge: 15
Registriert: 08.06.2009, 23:05

On Screen Display (OSD)

Beitrag von IH82W8 »

Hallo,
hat jemand von euch Erfahrung in der Anreicherung/ Modifikation von Videosignalen mit DirectX?
Ziel ist es, auf ein eingehendes Videosignal weitere Inhalte (sprich: ein On Screen Display) zu rendern bzw. Videosignal und Render-Output zu mischen.

Viele Grüße,
IH82W8
Unknown GER
Beiträge: 49
Registriert: 09.01.2003, 13:04

Re: On Screen Display (OSD)

Beitrag von Unknown GER »

Das eleganteste wird wohl ein DirectShow-Filter sein, den du mit in den Filtergraphen einbaust bzw. schau dir auch mal z.B. den Video Mixing Renderer 9 an, mit dem Du mehrere Streams überlagern kannst inkl. Alpha-Kanal, vielleicht reicht das ja schon. Gibt Samples dazu im Windows SDK. Windows Media Foundation würd ich erstmal noch links liegen lassen, da es nur in Windows 7 komplett unterstützt wird. Das grundsätzliche vorgehen wäre übrigens, deine Szene in eine Off-Screen-Textur zu rendern und diese z.B. mit dem Video Mixing Renderer 9 auf den eigentlichen Stream zu überlagern. Der VMR9 hat DirectX-Unterstützung. Allerdings macht es nicht so viel Spaß, mit DirectShow zu programmieren. Viel Spaß. :)
Benutzeravatar
Chromanoid
Moderator
Beiträge: 4263
Registriert: 16.10.2002, 19:39
Echter Name: Christian Kulenkampff
Wohnort: Lüneburg

Re: On Screen Display (OSD)

Beitrag von Chromanoid »

Also wenn du das ganze auf dem PC anschauen willst oder so, kann ich libVLC vom VideoLan Projekt empfehlen. Wenn der VideoLan Player deine Videoquelle lesen kann, kannst du damit entwickeln. Der VideoLan Player hat ein Modul (vout) mit dem du das abspielende Videosignal direkt in einen Video Memory Bereich schreiben lassen kannst. Darauf kannst du dann bspw. in SDL wie im folgenden Sample zufgreifen (Video wird in ein SDL Surface gerendert):
http://wiki.videolan.org/LibVLC_SampleCode_SDL

Ich habe mir für Java eine kleine Schnittstelle dafür zusammengehackt, so dass ich das Zeug als byte array abrufen kann: http://kenai.com/projects/javavideograbber
(ist aber eher unausgereift, vor allem weil ich mir nicht sicher bin ob man nicht auch ohne sdl in java auf video speicherbereiche zugreifen kann)...

Naja ich habe das benutzt um die Java Version von NyARToolkit für augumented reality mit einem Videosignal von meiner Webcam zu füttern. Das hat auch einwandfrei mit hoher framerate funktioniert. So sieht das dann ungefähr aus (man kann statt Quader natürlich jedes andere 3D Objekt benutzen): http://nyatla.jp/nyartoolkit/wiki/index ... ava_01.jpg

Leider funktioneren Point Grey Kameras (eigentliche Ziel-Videoquelle) mit dem VLC Player bei mir irgendwie nicht. Aber da arbeite ich noch dran... Naja jedenfalls ist es deswegen sinnvoll vorher mal zu schauen ob der videolan Player deine Videoquelle lesen kann... Das schöne beim VLC Projekt ist neben open source die Plattformunabhängigkeit und die breite Codec Unterstützung, allerdings weiß ich momentan nicht genau, ob das vout Modul auch unter Linux geht...

http://www.videolan.org/ für mehr

Ansonsten wird im AR Bereich viel mit dieser (recht alten und noch "nicht fertigen") Bibliothek gearbeitet: http://sourceforge.net/projects/dsvideolib/
Das ist ein DirectShow Wrapper der dir deine Arbeit ziemlich erleichtern sollte. Sofern es für eine direkte Anzeige auf dem Bildschirm ist, solltest du damit in C++ sofort loslegen können. Einfach Video in eine DirectX Textur Rendern und den Rest dann per Direct3D o.Ä. erledigen. Mit der Bibliothek sollten übrigens Point Grey Kameras keine Probleme haben, jedenfalls funktioniert das ganze mit Reactivision, welches dsvideolib benutzt... Bei Point Grey gibt es sonst ja sowieso noch deren eigenen SDK, der ohne DirectShow auskommt, und nur mit dem kann man die hohe Auflösung der ptgrey kameras nutzen. Solltest bei Zielsystemen mit Win7 oder Vista aber vorher noch Tests machen, weil ich bei mir zu hause unter Vista Reactivision nicht zum laufen kriege...

Gruß
Chromanoid
Antworten