Files |  Tutorials |  Articles |  Links |  Home |  Team |  Forum |  Wiki |  Impressum

Aktuelle Zeit: Mi Mai 15, 2024 21:25

Foren-Übersicht » Sonstiges » Meinungen zu den Projekten
Unbeantwortete Themen | Aktive Themen



Ein neues Thema erstellen Auf das Thema antworten  [ 7 Beiträge ] 
Autor Nachricht
 Betreff des Beitrags: OpenGL VideoRender Filter
BeitragVerfasst: Mo Sep 12, 2005 11:58 
Offline
DGL Member

Registriert: Mi Okt 16, 2002 15:06
Beiträge: 1012
Tach,

also erstmal muss ich sagen: Klasse idee ;)
Die Idee ist wirklich gut und interessiert mich brennend, grad weil ich momentan voll in der Entwicklung von einer DirectShow engine bin, welche ich für mein Player projekt nehme.

Hing die ganze zeit an der sache, weil manche formate machen absoluten käse wenn ich via IVideoWindow, die Position und grösse verändere.
Mach das genau wie du mit der Aspect Ratio sache.

War die ganze zeit am grübeln, wie ich das mit VMR mache, weil damit geht es, zumindest wenn DX den Filtergraphen generieren darf.
Das ist aber genau das was ich nicht will !
Weil ich nämlich selbst bestimme welcher FileSource/Splitter/Decoder/Renderer benutzt werden muss.

Auf jedemfall, habe dein Filter unter Delphi 5 Standard kompiliert und dann gleich mal mit GraphEdit getestet.
Ein einfaches MPEG1 Video lief problemlos.
Bild

Danach ein XVid konvertieres vid welches mit DivX Decoder abgespielt wird ebeneso.
Bild

Allerdings als ich dann versucht habe, den XVid Decoder zu benutzen dann kann man die Pins nicht verbinden.
Bild

Nicht desto trotz, hab ich dann gleich mal mein Directshow Player umgeschrieben, das er als Video Renderer nicht den "VMR 9 Video Renderer" nimmt, sondern deinen "OpenGL Video Renderer".

Also der Filtergraph wird absolut korrekt erstellt wie man hier sieht (das erste file wie oben Mpeg1):
Bild

Allerdings bleibt das Bild immer schwarz und am ende gibts nen Fehler das das Fenster Handle ungültig ist :(
Tippe mal darauf das da irgendnen fehler unterlaufen ist, mit dem Ausgabe Handle.
Kann dazu aber nix sagen... kenn mich da nicht aus.

So stell ich zumindest mein zeugs im IVideoWindow ein:
Code:
  1.  
  2.   // Video Ausgabe handle anpassen und zum ersten mal das Bild resizen
  3.   if Assigned(fVW) then
  4.   begin
  5.     fVW.put_Owner(_VideoHandle);
  6.     fVW.put_WindowStyle(WS_CHILD or WS_CLIPSIBLINGS);
  7.     fVW.put_WindowStyleEx(0);
  8.     fVW.put_MessageDrain(_MsgHandle);
  9.  
  10.     Windows.GetClientRect(_VideoHandle, R);
  11.     W := R.Right - R.Left;
  12.     H := R.Bottom - R.Top;
  13.     ResizeEngine(W, H, _Ratio);
  14.  
  15.     fVW.put_Visible(True);
  16.   end;
  17.  


In ResizeEngine wird dann über SetWindowPosition die Position gesetzt.

Kannst auf jedemfall sicher sein, das ich dich in dem Projekt unterstützen werde ;)
Hab nämlich keine lust mehr auf VMR :p$

Werd dir dann auch helfen mit der Farbkonvertierung ;)


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mo Sep 12, 2005 12:21 
Offline
DGL Member

Registriert: Mi Okt 16, 2002 15:06
Beiträge: 1012
Hab hier grad noch nen test gemacht, ob der Untertitel Filter "DirectVobSub" auch mit deinem OpenGL Video Renderer zusammenarbeitet und es läuft :)

Hier in graphedit, generiert von XPlayer:
Bild

und ausgabe mit Externen Untertitel (Matroska Format):
Bild

Saubere sache, nur schade das es mit dem Ausgabehandle noch nich ganz hinhaut, aber das wird schon bald klappen :)


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Sep 14, 2005 07:41 
Offline
DGL Member

Registriert: Mi Okt 16, 2002 15:06
Beiträge: 1012
So habe jetzt mal dein source studiert und festegestellt, es basiert auf das "RGB 24 Renderer" D6 Sample von DSPack.
Hab darauf hin mal selbst versucht, den code so minimal wie nur möglich zu halten das es aber auch mit dem Ausgabe Handle funzt.

Also da ich in meinem DirectShow Player das Ausgabe Handle via put_Owner setzte, sieht man das Gerenderte Bild nicht mehr.

Man muss bei put_Owner, den vorhanden rendercontext löschen, das DC neu holen und ihn wieder neu erstellen.
Logischweise muss dann auch die Video Texture neu erstellt werden.

Das zeichnen ist Sinnvoller über die Paint routine zu machen, anstatt nen billigen Timer zu nehmen.
Das vergrössern von GL (glViewPort, glOrtho), überlass ich der Paint routine und zeichne OnResize einfach neu.

Werde mich jetzt noch mit 2 Problemen befassen:

- Farbkonvertierung einbauen welches auch der normale Video Renderer von DShow supported.
Das was du ja schon gemacht hast, allerdings lass ich mir von nem Kolleg der ahnung von ASM hat und SSE/SSE2 das machen.

- Problem bei meinem Laptop wenn ich Lautstärke einstelle, wird über eine Acer Software das OSD auf Desktop drüber gezeichnet.
Bei dem vorgang ruckelt dann das Video + OSD :(
Da fehlt wahrscheinlich nur ne MSG oder so die Weiterzeichnet ;)

- Test Pixel Shader für ein einfachen Weichzeichnungsfilter, allerdings raff ich nicht wie ich da jeden einzelnen Pixel ansteuern soll, da man ja Fragment weise arbeitet. Mein Rechteck hat aber nur 4 Punkte :p wären das ja bloss 4 Fragmente, naja wird schon irgendwie gehen :p

Funzt auf jedemfall bisher ganz gut ;)


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Sep 15, 2005 12:28 
Offline
DGL Member

Registriert: Mi Okt 16, 2002 15:06
Beiträge: 1012
Werde mal dein OpenGL Video Renderer umbauen so das er korrekt funzt und poste dann source.
Also sachen fixen die nötig sind usw.

Betreffend deinen Farbroutinen hab ich bisher deine unverändert gelassen, die scheinen recht flott zu laufen.
Viel kann man da nicht mehr drehen, aber mit ASM und CPU spezfische berechnungen wie es MPlayer, VLC usw. machen könnte man einiges herausholen.

Farbformat RGB32 und RGB16 werd ich noch hinzufügen, eventuell noch das ein oder andere.
Ich versuche gerade das mit dem Overlay Mixer zu machen, so das man auch den Overlay Mixer mit dem OpenGL Video Renderer verbinden kann, da der ja nen Overlay Farbformat hat.

Hab noch nen Flag eingebaut das man das vorhandene Video Rect welches du ja über UpdateVideoRect berechnest ignorieren kannst, so das die origignal grösse vom jeweiligen DirectShow Player über das IVideoWindow interface selbst geregelt wird.
Und einfach das rect auf die fenster grösse gezeichnet wird.

Code:
  1.  
  2.     R.Left := 0;
  3.     R.Top := ClientWidth;
  4.     R.Top := 0;
  5.     R.Bottom := ClientHeight;
  6.  


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Sep 15, 2005 13:48 
Offline
DGL Member

Registriert: Sa Jun 11, 2005 12:47
Beiträge: 11
Zitat:
So habe jetzt mal dein source studiert und festegestellt, es basiert auf das "RGB 24 Renderer" D6 Sample von DSPack.

Deswegen hab ich das Beispiel auch als Opensource und LGPL (sofern das nicht irgendwo steht) veröffentlicht. Im Prinzip war es auch nur als Demo gedacht. Zum einen damit ich besser Überprüfen konnte wie schnell OpenGL im Vergleich zu Direct3d ist und zum anderen aufgrund meiner Neugierde wie man mit Shadern ein Video verschönern kann :) OpenGL ist halt im Vergleich zu Direct3d logischer und verständlicher aufgebaut.
Neben der Farbkonvertierung gibt es aber noch ein paar Probleme. Diese Konvertierung würde ich via Shader machen, denn das hat gleich mehrere Vorteile:
1. die Grafikkarte rechnet und lässt die CPU in Ruhe.
2. du kannst dieses leidige Problem mit den Speicherzugriffen umfahren, da du dann das Bild in einen Allocator rendern kannst und der darf auch im Grafikkartenspeicher liegen!

Im Prinzip ist das nicht notwendig, doch spiele mal ein HDTV Filmchen mit einer 1920x1088i Auflösung als Textur ab. Das kriegt meine CPU (3.2 Ghz) nicht mehr hin ;)

Weiterhin hatte ich geplant ein Interface für das Bildseitenverhältnis bzw. für ein auschnittsweises Vergrößern des Videos einzubinden, sowie ein paar Funktionen zu liefern mit denen noch diverse OSD Layer eingeblendet werden können.

Aus mangelnder Zeit und weil ich die Rechenauslastung nicht drücken konnte habe ich das Projekt dann erstmal bei Seite gelegt.

@Finalspace: Ich finds klasse, dass du dich damit beschäftigst :)

Grüße
Christian


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mo Sep 19, 2005 09:24 
Offline
DGL Member

Registriert: Mi Okt 16, 2002 15:06
Beiträge: 1012
Also hab den Video Renderer fertig, allerdings kämpf ich gerade mit der optimierung.
Wie du schon erkannt hast, HDTV vids laufen extrem ruckelig, hab an meinem laptop hier 5-10 fps :P für ne auflösung von 1440 x 1088, RGB32, ohne konvertierung nach RGB24, direkt die bits nach glTexSubImage2d und GL_RGBA :(

Hab von lars gehört das es was schnelleres als texsubimage gibt.
Pixel Buffer Objects, allerdings hab ich kein plan wie das funzt und ist natürlich erst ab ner bestimmten graka variante in Hardware :(

Betreffend Shader, das bringt im moment nicht wirklich viel.
Da ja direkt die übernahme via gltexsubimage2d zu langsam ist :(

DirectX scheint mit grossen grafiken wohl keine probleme zu haben :(


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mo Sep 19, 2005 12:40 
Offline
DGL Member

Registriert: Sa Jun 11, 2005 12:47
Beiträge: 11
Das hab ich auch schon probiert :) Das alte D3D Demo was ich hier irgendwo noch rumliegen habe ging auch den Weg über einen Allocator. Testweise hatte ich das via VMR9 gemacht, aber durch einbinden des Allocator Interfaces sollte das auch im eigenen Renderer gehen.
Der Vorteil von besagten Allocatoren ist, dass du die Speicherbereiche in welche das Video geschrieben werden soll selber definieren kannst. Bei D3D war es gleich der Grafikkartenspeicher. Wie das in OpenGL geht, weiß ich allerdings nicht. Damit hast du dann aber die schnellstmögliche Darstellung nach Overlay.

Christian


Nach oben
 Profil  
Mit Zitat antworten  
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 7 Beiträge ] 
Foren-Übersicht » Sonstiges » Meinungen zu den Projekten


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 4 Gäste


Du darfst keine neuen Themen in diesem Forum erstellen.
Du darfst keine Antworten zu Themen in diesem Forum erstellen.
Du darfst deine Beiträge in diesem Forum nicht ändern.
Du darfst deine Beiträge in diesem Forum nicht löschen.
Du darfst keine Dateianhänge in diesem Forum erstellen.

Suche nach:
Gehe zu:  
  Powered by phpBB® Forum Software © phpBB Group
Deutsche Übersetzung durch phpBB.de
[ Time : 0.015s | 17 Queries | GZIP : On ]