Video-Player Keine 100 % CPU last ?

Für sonstige Unterhaltungen, welche nicht direkt mit Lazarus zu tun haben
Antworten
pluto
Lazarusforum e. V.
Beiträge: 7178
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 ?

Beitrag von pluto »

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 ?
MFG
Michael Springwald

Euklid
Lazarusforum e. V.
Beiträge: 2808
Registriert: Fr 22. Sep 2006, 10:38
OS, Lazarus, FPC: Lazarus v2.0.10, FPC 3.2.0
Wohnort: Hessen
Kontaktdaten:

Beitrag von Euklid »

Hallo Pluto!

Ich habe da so eine Vermutung:
Nehme an, der Video-Player geht nicht über die API des Systems, sondern direkt über die Graphiktreiber. Dann muss die CPU nichts weiter tun, als die Bildfolge des Videos in den Graphikspeicher zu verschieben...

Gruß, Euklid

pluto
Lazarusforum e. V.
Beiträge: 7178
Registriert: So 19. Nov 2006, 12:06
OS, Lazarus, FPC: Linux Mint 19.3
CPU-Target: AMD
Wohnort: Oldenburg(Oldenburg)

Beitrag von pluto »

Könnte man das auch irgendwie selbst machen bzw. in meinen Anwendungen verwenden ?

Tut dies SDL schon ? währe ja echt Praktisch...
MFG
Michael Springwald

monta
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:

Beitrag von monta »

Stichwort Hardwarebeschleunigung und direkte ansteuerung der GPU, Framebuffer usw.

Ums kurz zu machen, Wikipedia vertät es:
Die SDL-Bibliothek enthält folgende Funktionalität:

* Videoausgabe: Videomodus setzen, Zugriff auf den Framebuffer, Nutzung der Hardwarebeschleunigung für Grafikoperationen


DirectX und OpenGL machen auch nichts anderes.
Johannes

Christian
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:

Beitrag von Christian »

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.
W.m.k.A.h.e.m.F.h. -> http://www.gidf.de/

mschnell
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 ?

Beitrag von mschnell »

pluto hat geschrieben:Wie machen das "Video-Player" ?


Wenn Du in Deinem Programm berechnete Bilder darstellen kannst ist sicherlich SDL der richtige Weg.

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

Christian
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:

Beitrag von Christian »

Der Codec dekodiert nur und stellt nix dar.
W.m.k.A.h.e.m.F.h. -> http://www.gidf.de/

pluto
Lazarusforum e. V.
Beiträge: 7178
Registriert: So 19. Nov 2006, 12:06
OS, Lazarus, FPC: Linux Mint 19.3
CPU-Target: AMD
Wohnort: Oldenburg(Oldenburg)

Beitrag von pluto »

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....
MFG
Michael Springwald

mschnell
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

Beitrag von mschnell »

Christian hat geschrieben:Der Codec dekodiert nur und stellt nix dar.

Bist Du da sicher ? Ich hatte das bisher anders gehört. Hast Du eine Referenz, die das klärt ?

Gruß und Dank,
-Michael

mschnell
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

Beitrag von mschnell »

pluto hat geschrieben: Aber auch wenn ich kein SDL aus verschiedenen Gründen benutzten möchte....


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.

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.

pluto
Lazarusforum e. V.
Beiträge: 7178
Registriert: So 19. Nov 2006, 12:06
OS, Lazarus, FPC: Linux Mint 19.3
CPU-Target: AMD
Wohnort: Oldenburg(Oldenburg)

Beitrag von pluto »

D geht vielleicht auch anderes aber mit 3D kommst

Ja ! Darum nutzte ich auch nur 2D *G*

können gibt es Jedi-SDL.

Ja ich weiß ! auf http://www.delphigl.com gibt es ein Packt SDL was die Nutzung sehr vereinfacht !
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

bembulak
Beiträge: 370
Registriert: Di 6. Feb 2007, 09:29
OS, Lazarus, FPC: L0.9.29 SVN:24607 FPC 2.4.0-32 bit @ Win XP SP3
CPU-Target: 32bit i386, ARM
Wohnort: Oberösterreich

Beitrag von bembulak »

SDL rockt!
Das habe ich dir schon ein paar mal gesagt!
Ich kenn's von PureBasic, Python und jetzt auch mit FPC.

pluto
Lazarusforum e. V.
Beiträge: 7178
Registriert: So 19. Nov 2006, 12:06
OS, Lazarus, FPC: Linux Mint 19.3
CPU-Target: AMD
Wohnort: Oldenburg(Oldenburg)

Beitrag von pluto »

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 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....
MFG
Michael Springwald

Antworten