Sprite und Movie in Threads
>> Bisher sind diverse Abspielprogramme immer abgestürzt, wenn sie nicht einfach gemeldet haben, dass etwas nicht stimmt, um danach ihre Tätigkeit zu beenden.
Das Programm soll nebenher auch noch Diaprojektoren und anderen Kram steuern. Da kommt das nicht so gut.
>> Aber wozu den Videothread killen und neu starten, wenn die Datei doch sowieso reif für den Papierkorb ist? Wenn die Wiedergabe von vorne gestartet wird, wird alles wieder an derselben Stelle zu Grunde gehen.
Weil das Video nur ein Teil ist, danach geht es mit Bildern oder anderen Videos weiter.
Muss ich euch doch mal mit den Details behelligen: Ursächlich ist das Programm eine Steuersoftware für Geräte (Diaprojektoren und so) über RS232. Daneben - und nicht haupsächlich - soll es Audio- und Videodateien abspielen und Bilder einblenden können. Momentan nur auf einem Screen und aus dem Hauptprogramm heraus. Die Steuerung erfolgt anhand einer Liste, die abgearbeitet wird, sogenannte Timeline.
Jetzt soll das Programm erweitert werden, um auf mehreren Screens => mehreren Beamern ausgeben zu können. Also zwei Grakas, auf einer mit Monitor das Hauptprogramm mit Steueroberfläche. Auf der anderen zwei Ausgänge mit je einem Beamer zur Anzeige der Videos...
Eine Möglichkeit wäre noch, den WindowedScreen über beide Beamer zu ziehen und die Bildinhalte nebeneinander darzustellen. Aber aus Performance-Gründen wäre das die schlechteste Lösung.
>> wenn solltest du Sprite3D benutzen
Jo, hab schon. Es gibt die low-Hardware-Variante, wo nur Bilder und Videos angezeigt werden, mit Sprite und Video-Overlay, und es gibt die rechenintensive Variante, wo die GPU mit Sprite3D arbeitet und Überblenden, Zoomen und so Kram geht.
>> ganz so einfach ist es nicht, weil getrennte Prozesse nicht ohne weiteres auf Memory von anderen Prozessen zugreifen können
Also wieder API? Mist, und ich wollte mal von API wegkommen, um das auch portierbar zu haben.
Das Programm soll nebenher auch noch Diaprojektoren und anderen Kram steuern. Da kommt das nicht so gut.
>> Aber wozu den Videothread killen und neu starten, wenn die Datei doch sowieso reif für den Papierkorb ist? Wenn die Wiedergabe von vorne gestartet wird, wird alles wieder an derselben Stelle zu Grunde gehen.
Weil das Video nur ein Teil ist, danach geht es mit Bildern oder anderen Videos weiter.
Muss ich euch doch mal mit den Details behelligen: Ursächlich ist das Programm eine Steuersoftware für Geräte (Diaprojektoren und so) über RS232. Daneben - und nicht haupsächlich - soll es Audio- und Videodateien abspielen und Bilder einblenden können. Momentan nur auf einem Screen und aus dem Hauptprogramm heraus. Die Steuerung erfolgt anhand einer Liste, die abgearbeitet wird, sogenannte Timeline.
Jetzt soll das Programm erweitert werden, um auf mehreren Screens => mehreren Beamern ausgeben zu können. Also zwei Grakas, auf einer mit Monitor das Hauptprogramm mit Steueroberfläche. Auf der anderen zwei Ausgänge mit je einem Beamer zur Anzeige der Videos...
Eine Möglichkeit wäre noch, den WindowedScreen über beide Beamer zu ziehen und die Bildinhalte nebeneinander darzustellen. Aber aus Performance-Gründen wäre das die schlechteste Lösung.
>> wenn solltest du Sprite3D benutzen
Jo, hab schon. Es gibt die low-Hardware-Variante, wo nur Bilder und Videos angezeigt werden, mit Sprite und Video-Overlay, und es gibt die rechenintensive Variante, wo die GPU mit Sprite3D arbeitet und Überblenden, Zoomen und so Kram geht.
>> ganz so einfach ist es nicht, weil getrennte Prozesse nicht ohne weiteres auf Memory von anderen Prozessen zugreifen können
Also wieder API? Mist, und ich wollte mal von API wegkommen, um das auch portierbar zu haben.
Was haltet ihr von der Idee, die Kommunikation statt über SharedMem über Network zu machen? Also Hauptprogramm als Server, Videoprogramme als Client auf einem Rechner.
Funktioniert das dann nur, wenn eine Netzwerkkarte installiert ist?
Ich hatte dazu vor längerer Zeit mal ein Beispiel gesehen, aber ich finds nicht mehr
Funktioniert das dann nur, wenn eine Netzwerkkarte installiert ist?
Ich hatte dazu vor längerer Zeit mal ein Beispiel gesehen, aber ich finds nicht mehr
-
Rokur
- Beiträge: 167
- Registriert: 29.12.2005 09:58
- Computerausstattung: Intel Core2 Quad (4x2,4 GHz), 4096 MB RAM, GForce 8800GTX 786 MB
Windows XP 32 Bit, PureBasic 4.40 (x86)
Ja das kannst du mit Netzwerk machen. Eine Netzwerkkarte brauchst du dazu nicht unbedingt, es muss halt das verwendete Protokoll (zu empfehlen wäre TCP) installiert, und ein Loop-Back eingerichtet sein. Dann kannst du über die IP-Adresse 127.0.0.1 kommunizieren (verschiedene Ports verwenden). Zum Test kannst du diese Adresse ja mal an pingen.
Ein einfaches Server-Beispiel befindet sich im Examples-Verzeichnis der PB-Installation (FTP- und Web-Server).
Ein einfaches Server-Beispiel befindet sich im Examples-Verzeichnis der PB-Installation (FTP- und Web-Server).
Hab gerade die Beispiele mal ausprobiert, sieht gut aus. Die Zuordnung mach ich über die Ports, also Video 1 = Port 6832, Video 2 = Port 6833, oder?
Was mach ich, wenn ein anderes Programm den Port schon belegt, nächsten suchen?
Können zwei Programme gleichzeitig auf einen Port zugreifen, ohne groß rumzutricksen?
Sorry, Netzwerk war bis jetzt überhaupt nicht mein Ding.
Was mach ich, wenn ein anderes Programm den Port schon belegt, nächsten suchen?
Können zwei Programme gleichzeitig auf einen Port zugreifen, ohne groß rumzutricksen?
Sorry, Netzwerk war bis jetzt überhaupt nicht mein Ding.
- Vermilion
- Beiträge: 1846
- Registriert: 08.04.2006 16:00
- Computerausstattung: Apple iMac (2010) & HP Notebook
- Wohnort: Heidekreis
Da kommst du mit PureBasic internen Befehlen nicht weit. Wenn, musst du mit Betriebssystemabhängigen Includes oder derartigem arbeiten. OS-spezifische APIs verwenden.Also wieder API? Mist, und ich wollte mal von API wegkommen, um das auch portierbar zu haben.
Ja.Was mach ich, wenn ein anderes Programm den Port schon belegt, nächsten suchen?
Dafür brauchst du keine Netzwerk-Befehle. Die sind nicht dazu gemacht lokal rumzukommunizieren, totaler Overkill. Auch wird die eine oder andere Firewall schreien wenn sich da einfach mal so ein Server öffnet, was man als eingeschränkter User nicht immer abstellen kann. Verwende entweder Shared Memory, Named Pipes oder Mailslots. Schmeiß mal die SuFu an und such einen der 3 Begriffe und dir wird schnell geholfen sein...
Gruß, Alex
Gruß, Alex
Projekte: IO.pbi, vcpu
Pausierte Projekte: Easy Network Manager, µC Emulator
Aufgegebene Projekte: ECluster

PB 5.1 x64/x86; OS: Win7 x64/Ubuntu 10.x x86
Pausierte Projekte: Easy Network Manager, µC Emulator
Aufgegebene Projekte: ECluster
PB 5.1 x64/x86; OS: Win7 x64/Ubuntu 10.x x86
-
Kaeru Gaman
- Beiträge: 17389
- Registriert: 10.11.2004 03:22
"Portierbarkeit" wird bei so einem komplexen Problem sowieso nicht damit getan sein,
den selben Code ohne API zu schreiben und ihn einfach durch alle Compiler zu jagen.
ein sehr großer Arbeitsaufwand wird nötig sein, um die Routinen so anzupassen,
dass sie auf allen Systemen wirklich die gleiche Funktionalität zeigen.
ein paar Unterroutinen zu schreiben, die die jeweiligen API Funktionen Wrappen,
wird dagegen ein Sonntagsspaziergang werden.
vergiß erst mal die Portierbarkeit, die wird dir nochmal ein riesiges Extra-Problem werden,
wenn du mit der jetzigen Aufgabenstellung durch bist.
den selben Code ohne API zu schreiben und ihn einfach durch alle Compiler zu jagen.
ein sehr großer Arbeitsaufwand wird nötig sein, um die Routinen so anzupassen,
dass sie auf allen Systemen wirklich die gleiche Funktionalität zeigen.
ein paar Unterroutinen zu schreiben, die die jeweiligen API Funktionen Wrappen,
wird dagegen ein Sonntagsspaziergang werden.
vergiß erst mal die Portierbarkeit, die wird dir nochmal ein riesiges Extra-Problem werden,
wenn du mit der jetzigen Aufgabenstellung durch bist.
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Der Weise weiß, dass er ein Narr ist.
Davon gehe ich aus, aber ich muss es mir ja nicht schwerer machen als nötig. Darum gehts aber jetzt nicht.
Kann sein, dass das mit den Netzwerkfunktionen Overkill ist, aber bis auf das Argument Firewall find ich das nicht schlimm. Da das bei ausgewählten Projekten läuft, hab ich da zum Einrichten eh Admin-Rechte und kann das der Firewall beibringen.
Kann sein, dass das mit den Netzwerkfunktionen Overkill ist, aber bis auf das Argument Firewall find ich das nicht schlimm. Da das bei ausgewählten Projekten läuft, hab ich da zum Einrichten eh Admin-Rechte und kann das der Firewall beibringen.