Video-Player Keine 100 % CPU last ?
-
- Lazarusforum e. V.
- Beiträge: 7192
- Registriert: So 19. Nov 2006, 12:06
- OS, Lazarus, FPC: Linux Mint 19.3
- CPU-Target: AMD
- Wohnort: Oldenburg(Oldenburg)
Video-Player Keine 100 % CPU last ?
Hallo,
mir ist schon häufiger aufgefallen wenn ich mir Filme in einem Video-Player anschaue egal ob unter Linux oder Windows sehe ich kaum CPU-Last.
Sobald ich in Lazarus Grafiken Kopiere und das Ständig also in einem Timer der z.b. auf 3 oder 2 MS gestellt ist, 0-1 geht so unter Linux nicht...
Bekomme ich sofort 100% CPU last.
Wie machen das "Video-Player" ?
Stellen sie den Timer evlt. so ein das die CPU last Soweit runter geht wie möglich ohne den Film zu beeinflussen ?
mir ist schon häufiger aufgefallen wenn ich mir Filme in einem Video-Player anschaue egal ob unter Linux oder Windows sehe ich kaum CPU-Last.
Sobald ich in Lazarus Grafiken Kopiere und das Ständig also in einem Timer der z.b. auf 3 oder 2 MS gestellt ist, 0-1 geht so unter Linux nicht...
Bekomme ich sofort 100% CPU last.
Wie machen das "Video-Player" ?
Stellen sie den Timer evlt. so ein das die CPU last Soweit runter geht wie möglich ohne den Film zu beeinflussen ?
MFG
Michael Springwald
Michael Springwald
-
- Lazarusforum e. V.
- Beiträge: 2809
- Registriert: Sa 9. Sep 2006, 18:05
- OS, Lazarus, FPC: Linux (L trunk FPC trunk)
- CPU-Target: 64Bit
- Wohnort: Dresden
- Kontaktdaten:
Stichwort Hardwarebeschleunigung und direkte ansteuerung der GPU, Framebuffer usw.
Ums kurz zu machen, Wikipedia vertät es:
Ums kurz zu machen, Wikipedia vertät es:
DirectX und OpenGL machen auch nichts anderes.Die SDL-Bibliothek enthält folgende Funktionalität:
* Videoausgabe: Videomodus setzen, Zugriff auf den Framebuffer, Nutzung der Hardwarebeschleunigung für Grafikoperationen
Johannes
-
- Beiträge: 6079
- Registriert: Do 21. Sep 2006, 07:51
- OS, Lazarus, FPC: iWinux (L 1.x.xy FPC 2.y.z)
- CPU-Target: AVR,ARM,x86(-64)
- Wohnort: Dessau
- Kontaktdaten:
Naja DirectX und OpenGL machen einiges anders als n Videoplayer
Euklid hats prinzipiell richtig beschrieben. Nennt sich Overlay. Gibt dabei aber wieder mehrere verschiedene verfahren. Prinzipiell läufts so an, das die Anwendung Der Grafikkarte sagt auf welchen Bereich des Bildschirms die Ausgabe erscheinen soll und die Daten dann im nativen Format des Grafikspeichers an einen bestimmten bereich auf der graka schreibt. Die Grafikkarte skaliert und verschiebt das Bild dann in Hardware an die richtige Stelle.
Aber selbst wenn dieser Modus nicht zur Verfügung steht z.b. auf seehr alten Grafikkarten braucht man keine 100% CPU Last um ein Video darzustellen. Wenn du jedoch versuchst jede ms ein Bild zu zeichnen ist das kein Wunder. Die meissten Videoplayer versuchen eh nur 25 Frames / s darzustellen das wäre also alle 40 ms ein Bild. Damit hast du die CPU Last schon ziemlich reduziert. Die Lazarus GTK/GTK2 Canvas kapselung ist auch nicht sonderlich performant. Jedenfalls wenn ich das mit Windows vergleiche. Geht aber wenn man auf Bitmaps zeichnet und die im ganzen auf den Canvas malt.

Aber selbst wenn dieser Modus nicht zur Verfügung steht z.b. auf seehr alten Grafikkarten braucht man keine 100% CPU Last um ein Video darzustellen. Wenn du jedoch versuchst jede ms ein Bild zu zeichnen ist das kein Wunder. Die meissten Videoplayer versuchen eh nur 25 Frames / s darzustellen das wäre also alle 40 ms ein Bild. Damit hast du die CPU Last schon ziemlich reduziert. Die Lazarus GTK/GTK2 Canvas kapselung ist auch nicht sonderlich performant. Jedenfalls wenn ich das mit Windows vergleiche. Geht aber wenn man auf Bitmaps zeichnet und die im ganzen auf den Canvas malt.
W.m.k.A.h.e.m.F.h. -> http://www.gidf.de/
-
- Beiträge: 3444
- Registriert: Mo 11. Sep 2006, 10:24
- OS, Lazarus, FPC: svn (Window32, Linux x64, Linux ARM (QNAP) (cross+nativ)
- CPU-Target: X32 / X64 / ARMv5
- Wohnort: Krefeld
Re: Video-Player Keine 100 % CPU last ?
Wenn Du in Deinem Programm berechnete Bilder darstellen kannst ist sicherlich SDL der richtige Weg.pluto hat geschrieben:Wie machen das "Video-Player" ?
Aber Achtung: Pixelbilder berechnen und per SDL darstellen bringt auch keine dolle Performance, weil der Flaschenhals die Schnittstelle zwischen PC und Grafik-Hardware ist. Ud da muss dan jedes Einzelbild 'rüber. Richtig flott wird es erst, wenn man die Bildberechnungs-Features der Grafik-Hardware (Rendering Engine) benutzt. So machen das 3-D Spiele und CAD-Programme.
P.S.: Ein Video-Player-Programm benutzt überhaupt keine Grafik für das Video. Er stellt nur ein "Loch" in der GUI zur Verfügung und sagt dem Codec (DLL oft von einer anderen Firma produziert) was und wo es etwas anzeigen soll.
-Michaek
-
- Lazarusforum e. V.
- Beiträge: 7192
- Registriert: So 19. Nov 2006, 12:06
- OS, Lazarus, FPC: Linux Mint 19.3
- CPU-Target: AMD
- Wohnort: Oldenburg(Oldenburg)
Interessant ! Also ist ein Spiel über SDL doch nicht so schlecht... auch wenn es in einem eigenen Fenster ablaufen muss.
Wenn ich euch richtige Verstanden habe nutzt der Video-Player einfach die Grafikkarte direkt. Und das gleiche können SDL. OpenGL, und DirectX auch ?
Mir geht es eigentlich nur darum in meinen eigenen 2D Spielen die CPU Last zu reduzieren. Im Moment habe ich noch wenige 2D Spiele die ständig das bild neu aufbauen müssen. Z.B. bei einem 2D Shoter der Scrollt währe das notwendig...
Evlt. reicht das ja wenn ich den timer auf 25 MS Stelle....
Oder das ich zwei Timer verwende. Einen Für die Kollision Abfragen und einen Weiteren für die Grafik.
Unter Delphi heißt das zwar das der System Timer nicht besonders GUT ist, aber für Lazarus kenne ich keinen besseren.
Habe ihr noch mehr "Tipps" um die CPU-Last zu reduzieren ? Ich nutzte jetzt schon ein hintergrund Buffer wo ich erst rein zeichne. Damit es nicht Flackert. von da aus wird es erst auf die Paintbox gebracht.
(Bei meiner 2D Engine mache ich das z.b. so)....
Aber auch wenn ich kein SDL aus verschiedenen Gründen benutzten möchte.... wie könnte ich das gleiche machen ? Also direkt die Grafikkarte zu nutzen ?
Ich habe ein Vier Jahre alt Unichrome S3 onBord Shard Memory.
Genauso alt ist auch der Notebook den ich nutze....
Wenn ich euch richtige Verstanden habe nutzt der Video-Player einfach die Grafikkarte direkt. Und das gleiche können SDL. OpenGL, und DirectX auch ?
Mir geht es eigentlich nur darum in meinen eigenen 2D Spielen die CPU Last zu reduzieren. Im Moment habe ich noch wenige 2D Spiele die ständig das bild neu aufbauen müssen. Z.B. bei einem 2D Shoter der Scrollt währe das notwendig...
Evlt. reicht das ja wenn ich den timer auf 25 MS Stelle....
Oder das ich zwei Timer verwende. Einen Für die Kollision Abfragen und einen Weiteren für die Grafik.
Unter Delphi heißt das zwar das der System Timer nicht besonders GUT ist, aber für Lazarus kenne ich keinen besseren.
Habe ihr noch mehr "Tipps" um die CPU-Last zu reduzieren ? Ich nutzte jetzt schon ein hintergrund Buffer wo ich erst rein zeichne. Damit es nicht Flackert. von da aus wird es erst auf die Paintbox gebracht.
(Bei meiner 2D Engine mache ich das z.b. so)....
Aber auch wenn ich kein SDL aus verschiedenen Gründen benutzten möchte.... wie könnte ich das gleiche machen ? Also direkt die Grafikkarte zu nutzen ?
Ich habe ein Vier Jahre alt Unichrome S3 onBord Shard Memory.
Genauso alt ist auch der Notebook den ich nutze....
MFG
Michael Springwald
Michael Springwald
-
- Beiträge: 3444
- Registriert: Mo 11. Sep 2006, 10:24
- OS, Lazarus, FPC: svn (Window32, Linux x64, Linux ARM (QNAP) (cross+nativ)
- CPU-Target: X32 / X64 / ARMv5
- Wohnort: Krefeld
Solltest Du aber ! SDL ist genau dafür gemacht und ist nur eine dünne Schicht zwischen dem Programm und der entsprechenden API (z.B: Direct X in Windows). 2D geht vielleicht auch anderes aber mit 3D kommst Du um SDL (oder etwas ähnlichem) nicht herum.pluto hat geschrieben: Aber auch wenn ich kein SDL aus verschiedenen Gründen benutzten möchte....
SDL hat mit Sicherheit auch einen Timer, der dem Delphi-Timer überlegen ist.
(Ein Kumpel von mir hat mit SDL einen komplexen 2D Grafik-Editor für Windows und Linux realisiert (allerdings mit Python, nicht mit Delphi/Lazarus) ).
Um SDL (und damit z.B. Direct X) in Delphi / Lazarus - Programmen leichter benutzen zu können gibt es Jedi-SDL.
Da gibt es auch Beispiele wie man genau das, was Du beschreibst (Buffer-Verwaltung etc.) bewerkstelligt. Es gibt auch eine Mailing List Jedi-SDL (JEDI-SDL@yahoogroups.com) und SDL (sdl-bounces@lists.libsdl.org)
-Michael
Zuletzt geändert von mschnell am Mo 11. Feb 2008, 09:10, insgesamt 1-mal geändert.
-
- Lazarusforum e. V.
- Beiträge: 7192
- Registriert: So 19. Nov 2006, 12:06
- OS, Lazarus, FPC: Linux Mint 19.3
- CPU-Target: AMD
- Wohnort: Oldenburg(Oldenburg)
Ja ! Darum nutzte ich auch nur 2D *G*D geht vielleicht auch anderes aber mit 3D kommst
Ja ich weiß ! auf http://www.delphigl.com" onclick="window.open(this.href);return false; gibt es ein Packt SDL was die Nutzung sehr vereinfacht !können gibt es Jedi-SDL.
Das läuft sogar mit dem FPC...
SDL gefällt mir irgendwie (noch) nicht.... ich weiß auch nicht warum. Evlt. das es in einem Externen Fenster da gestellt werden muss. Und das das mit dem Text nicht so einfach ist....
Ein Spiel ist damit mit Sicherheit einfach.... Mit meiner 2D Engine ist es auch sehr einfach.
Sie nutzt allerdings nicht den Intern Grafik Buffer oder wie das auch heißen mag....
Also das was die Video Player nutzten....
Erstmal Vielen Dank für die Antworten. Sowas habe ich mir schon gedacht. Im Internet finde ich leider nur Allgemeine Infos über Video Player aber keine wie sie intern Funktionieren.
MFG
Michael Springwald
Michael Springwald
-
- Lazarusforum e. V.
- Beiträge: 7192
- Registriert: So 19. Nov 2006, 12:06
- OS, Lazarus, FPC: Linux Mint 19.3
- CPU-Target: AMD
- Wohnort: Oldenburg(Oldenburg)
JA ! Du hast recht. SDL ist doch nicht so schlecht wie ich Anfangs geglaubt habe. Ich habe auch noch vor ein Beispiel zu erweitern, was bei den SDL.Paket auf http://www.delphigl.com" onclick="window.open(this.href);return false; dabei ist.
Aber irgendwie gefällt mir SDL noch nicht so gut wie Canvas. Evlt. weil ich Canvas besser kenne als SDL. Aber es sprechen schon einige gute gründe für SDL. Das Stimmt schon. Genau wie XML was ich Anfagst ja auch nicht so gut fand. Ich finde es immer noch nicht gut, aber Lazarus Unterstützt ist ja recht gut. Darum habe verwende ich XML bei meiner 2D Engine... für das Image List Datei Format. Das erleichtert mir das Parsen....
Aber irgendwie gefällt mir SDL noch nicht so gut wie Canvas. Evlt. weil ich Canvas besser kenne als SDL. Aber es sprechen schon einige gute gründe für SDL. Das Stimmt schon. Genau wie XML was ich Anfagst ja auch nicht so gut fand. Ich finde es immer noch nicht gut, aber Lazarus Unterstützt ist ja recht gut. Darum habe verwende ich XML bei meiner 2D Engine... für das Image List Datei Format. Das erleichtert mir das Parsen....
MFG
Michael Springwald
Michael Springwald