Avi in OpenGL abspielen und auf Tastendruck neustarten
-
Also ich will dabei ja schon was lernen
Hinweise wie man es machen könnte wäre ja auch schon was
Das Problem ist ja, und warum ich den Player bevorzuge, dass dieser keine pausen macht beim neustart. Insgesamt wirkt er robuster. Mediaplayer Classic scheint ein paar Frames zu droppen, dieser hier nicht. Diesen Player kann ich dann ja auch für ein RTOS kompilieren.
Nun soll der Player auf Tastendruck ein Video
OpenAVI("data/face2.avi");
mit möglichst geringer Zeitverögerung abspielen können. Das muss ich jetzt nur noch implementieren. Nur weiß ich nicht wie ich vorgehen muss.
Ich habe auf zeile 229 dies gefunden:
frame=0; // Reset The Frame Back To Zero (Start Of Vide
Hat jemand Vorschläge wo man ein "reset" des Videos einbauen könnte? Einfach per Tastendruck frame = 0 setzen? oO
Die Lösung von henna ist auch nicht schlecht. Nur hab ich von OpenGL programieren leider keine Erfahrung. Ein Echtzeitsystem brauche ich wohl eher nicht, da das Video unterhalb einer Sekunde neu gestartet werden soll. Wenn da mal ein Hänger ist, passst das schon. Später kann ich darüber nachdenken.
-
Ich hoffe ich habe euch nicht verschreckt.. .(
Ich habe jetzt folgendes gemacht:
Zeile 38bool fp; // 'F' pressed?
Zeile ~195:
if ((g_keys->keyDown ['F']) && !fp) // Is 'F' Being Pressed And Not Held? { frame=0; // restart the video }
Oder lieber so:
if (g_keys->keyDown ['F'] == TRUE) // Is 'F' Being Pressed? { frame=0; // restart the video }
Passt das so? Ganz bestimmt doch nicht ...
-
Nachdem der Bildschirm eine Frequenz hat, die Grafikkarte mit einer Frequenz rendert und das Video auch noch eine Frequenz hat, gehen IMMER mal ein Frame dazwischen flöten. Die einen Probleme kriegt man in den Griff, aber dass das Video meist mit verschnörkselten fps läuft eher nicht. Deswegen nimmt man bei Games gerne über 60Hz her, weil das menschliche Auge ab ca. 24fps etwas als flüssig interpretiert und somit keine Standbilder entstehen, wenn man doppelt so hoch frequentiert das Bild updated.
-
Das Problem klär ich dann
Lösung ist ein 1000Hz Display.
Was sagen die anderen zu meinem "Programierkünsten"?^^
-
-
Ich hab es immer so gemacht, dass sobald sich der Zustand von nicht gedrückt auf gedrückt ändert, sollte er auslösen, nicht wenn gedrückt wird. Also nur bei einer Zustandsänderung.
if(g_keys->keyDown['F'] && !fp) { fp=true; frame=0; } else if(!g_keys->keyDown['F'] && fp) { fp=false; }
-
Dieser Thread wurde von Moderator/in pumuckl aus dem Forum C++ (auch C++0x und C++11) in das Forum Spiele-/Grafikprogrammierung verschoben.
Im Zweifelsfall bitte auch folgende Hinweise beachten:
C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?Dieses Posting wurde automatisch erzeugt.
-
ah cool.
kannst Du mir dein Quellcode geben? Dann kann ich schauen wo genau und warum Du das so implementiert hast , etc..
-
-
na die if Abfragen kommen da hin, wo die ganzen Abfragen sind. Und du brauchst halt noch einen Zustand außen, z.B. bool fp; wie du es doch schon gemacht hast, allerdings war dein Ablauf im Quelltext falsch.
Ich hab meine alten Codes nicht mehr, ist schon lange her.
-
Hallo und danke!
Was war denn mit meinem Ablauf falsch?
-
Weil du fp nicht gesetzt hast!
-
Danke!
Ich hatte das hier schon eingefügt:
bool fp; // 'F' pressed?
Auf was muss die Variable nun noch gesetzt werden? 1 oder 0?
-
heno schrieb:
Danke!
Ich hatte das hier schon eingefügt:
bool fp; // 'F' pressed?
Auf was muss die Variable nun noch gesetzt werden? 1 oder 0?
Tu Dir den Gefallen und kauf Dir ein Buch. bool nimmt Wahrheitswerte an true oder false. Und du musst fp einmalig in BOOL Initialize(...) auf false setzen: fp=false; Weil am Anfang F noch nicht (also false) gedrückt wird. bool fp=false; geht nicht.