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

Aktuelle Zeit: Fr Jul 18, 2025 15:43

Foren-Übersicht » Programmierung » OpenGL
Unbeantwortete Themen | Aktive Themen



Ein neues Thema erstellen Auf das Thema antworten  [ 6 Beiträge ] 
Autor Nachricht
 Betreff des Beitrags: OpenGL und Videos (AVI, MPG ...)
BeitragVerfasst: Mo Mai 08, 2006 09:47 
Offline
DGL Member

Registriert: So Mai 07, 2006 21:20
Beiträge: 4
So, nachdem ich das komplette Forum durchsucht habe, muss ich doch leider nochmal auf diese Frage zurückgreifen, da ich keine zufriedenstellenden Antworten gefunden habe. Und zwar benötige ich eine Möglichkeit mit Hilfe von OpenGL Videos im Mpeg, Avi, DivX Format etc. in Echtzeit abzuspielen. Im Forum wird bei dieser Frage immer auf das Beispiel bei NeHe verwiesen, welches aber lediglich AVI Files einlesen kann und das auch nicht in Echtzeit, so dass es zu großen Verzögerungen kommt sobald das Video mal ca. 3 Minuten oder länger ist. Auch in 3 weiteren Foren hab ich nicht eine sinnvolle Lösung gefunden. Es muss doch eine Möglichkeit geben, so etwas zu realisieren? Ich würde mich sehr freuen wenn mir diesbezüglich jemand weiterhelfen könnte ...


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mo Mai 08, 2006 11:47 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 05, 2002 10:35
Beiträge: 4234
Wohnort: Dortmund
Hallo. Als erstes erst einmal ein Herzliches Willkommen von mir.

Sehr Lobenswert, dass du dich bemüht hast erst einmal so eine Lösung zu finden. :-) Das ist aber auch nicht unbedingt ein sehr leichtes Thema.

Aber jetzt versuche ich mal ein wenig Licht in die Sache zu bringen. DivX, MPEG, AVI. Das sind alles Dateiformate und diese haben nichts mit OpenGL zu tun. OpenGL kann damit ehrlich auch überhaupt nichts anfangen. Ähnlich sieht es mit PNG, JPEG, TGA, BMP auf der Bilderseite aus. Was du brauchst ist einen Loader, der dir das aktuelle Bild als Rohdaten zurückgibt. Also die reinen Pixeldaten. Diese stecken bei einem TGA, BMP zwar direkt so drinne aber auch noch mehr.

Was möchte ich damit jetzt sagen. OpenGL ist nur für die Darstellung zuständig. Die Dekodierung des Formates musst du selber übernehmen oder jemanden überlassen der sich damit auskennt. Hackbart hatte sich mit diesem Thema schon mal beschäftigt. Er hat es so eingerichtet, dass er die Videos mittels Direct Show dekodiert und die erhaltenen Raw Bilddaten mittels OpenGL dargestellt hat.

Links zu diesem Thema.
http://www.delphigl.com/forum/viewtopic.php?t=4270
http://www.delphigl.com/forum/viewtopic.php?t=4548

http://www.delphigl.com/forum/viewtopic.php?p=36840

Ich hoffe das hilft dir ein wenig.

PS: Nicht unerwähnt bleiben sollte auch die Tatsache, dass OpenGL primär nicht für die Wiedergabe von Videos gedacht ist. Was man da teilweise auch sehr deutlich merkt. Es hat seine Ursprünge in der CAD Entwicklung.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mo Mai 08, 2006 12:32 
Offline
DGL Member

Registriert: So Mai 07, 2006 21:20
Beiträge: 4
hm, danke schonmal für die antwort. das openGL von haus aus keine möglichkeiten bietet war mir klar, aber muss ja trotzdem funktionieren. die lösung mit dem import über directX wäre kein problem, da das ganze eh lediglich für windows plattform ausgelegt sein soll. allerdings bekomme ich die unit von hackbart nicht zum laufen. habe bei sourceforge die DSPack units geladen sowie die erforderlichen DirectX Units aber wenn ich versuche die von hackbart mitgelieferte VideoRender.dpr zu kompilieren bekomme ich folgende meldungen

Code:
  1. [Pascal Error] UProperty.pas(10): E2003 Undeclared identifier: 'TFormPropertyPage'
  2. [Pascal Error] UProperty.pas(10): E2021 Class type required
  3. [Pascal Error] UProperty.pas(51): E2137 Method 'OnConnect' not found in base class
  4. [Pascal Error] UProperty.pas(52): E2137 Method 'OnDisconnect' not found in base class
  5. [Pascal Error] UProperty.pas(53): E2137 Method 'OnApplyChanges' not found in base class
  6. [Pascal Error] UProperty.pas(65): E2003 Undeclared identifier: 'Handle'
  7. [Pascal Error] UProperty.pas(157): E2010 Incompatible types: 'TBCBasePropertyPageClass' and 'Class reference'
  8. [Pascal Fatal Error] VideoRenderer.dpr(26): F2063 Could not compile used unit 'UProperty.pas'


Die Base Class ist allerdings korrekt eingebunden.

Ist OpenGL eigentlich alternativ fähig ein bestehendes Videofenster (zb die Delphi Kompo des Windows Media Player) zu überlagern um beispielsweise bestimmte Teile des Videos mit Partikeleffekten zu versehen. Das ist nämlich der eigentliche Grund warum ich eine Lösung darauf suche, da ich irgendwie bestehende Videodateien mit 3D Effekten versehen möchte und somit eine Kombination dafür benötige.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mo Mai 08, 2006 12:55 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 05, 2002 10:35
Beiträge: 4234
Wohnort: Dortmund
Also zu dem Meldungen kann ich dir leider nichts sagen, da ich mich mit den Units bisher nicht beschäftigt habe. Ich habe fast das Gefühl als ob in dem DSPack etwas an der Schnittstelle verändert wurde. Und der so jetzt Probleme bekommen hat.

Zu der anderen Frage. Nein. Das ist leider nicht möglich. Die einzige Möglichkeit die du dabei hast ist eben das Video als Textur in OpenGL einzubinden.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mo Mai 08, 2006 13:21 
Offline
DGL Member

Registriert: So Mai 07, 2006 21:20
Beiträge: 4
hm, ok, dann hoffe ich ja mal dass sich noch jemand zu wort meldet, der mir weiterhelfen kann. aber danke schon mal ...


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di Mai 09, 2006 11:26 
Offline
Guitar Hero
Benutzeravatar

Registriert: Do Sep 25, 2003 15:56
Beiträge: 7810
Wohnort: Sachsen - ERZ / C
Programmiersprache: Java (, Pascal)
Hmm.. Ich glaub Lossy hat da recht.

Zuerst Textur anlegen, in die das Video größenmäßig reinpasst (nächste potenz von 2),
VideoFrame laden,
dann dekodieren,
den Frame per glCopySubImage (war glaub ichd as schnellste, oder?) in die alte Textur kopieren,
dann OpenGL-Frame rendern,
dann nächsten Frame laden.


Eventuell kannst du das Laden auch in einem extra Thread machen. Und das dekodieren, vielleicht auch. Das könnte bei neueren Prozessoren durchaus was bringen.

Hauptarbeit wird aber bleiben das Video zu dekodieren. Und da wirst du dir zwangsläufig eine bestehende lib besorgen müssen.
Ich persönlich kenn jetzt keine, könnte dir aber den Rat geben, mal bei DSDT.info im Multimedia-Forum zu fragen. Die haben ein - zwei Mitglieder mehr als wir. Eventuell kennen die eine lib.

_________________
Blog: kevin-fleischer.de und fbaingermany.com


Nach oben
 Profil  
Mit Zitat antworten  
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 6 Beiträge ] 
Foren-Übersicht » Programmierung » OpenGL


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 3 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.047s | 16 Queries | GZIP : On ]