Sprite und Movie in Threads

Fragen zu Grafik- & Soundproblemen und zur Spieleprogrammierung haben hier ihren Platz.
Sven
Beiträge: 374
Registriert: 23.09.2004 12:01

Beitrag von Sven »

>> 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.
Sven
Beiträge: 374
Registriert: 23.09.2004 12:01

Beitrag von Sven »

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 :-(
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)

Beitrag von Rokur »

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).
Sven
Beiträge: 374
Registriert: 23.09.2004 12:01

Beitrag von Sven »

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.
Benutzeravatar
Vermilion
Beiträge: 1846
Registriert: 08.04.2006 16:00
Computerausstattung: Apple iMac (2010) & HP Notebook
Wohnort: Heidekreis

Beitrag von Vermilion »

Also wieder API? Mist, und ich wollte mal von API wegkommen, um das auch portierbar zu haben.
Da kommst du mit PureBasic internen Befehlen nicht weit. Wenn, musst du mit Betriebssystemabhängigen Includes oder derartigem arbeiten. OS-spezifische APIs verwenden.
Was mach ich, wenn ein anderes Programm den Port schon belegt, nächsten suchen?
Ja.
Sven
Beiträge: 374
Registriert: 23.09.2004 12:01

Beitrag von Sven »

Sollte ich für die Ports den Bereich 49152 bis 65535 (Dynamic und/oder Private Ports) nehmen oder kann ich einen beliebigen in der IANA-Liste als unassigned beschriebenen Bereich verwenden?
Benutzeravatar
cxAlex
Beiträge: 2111
Registriert: 26.06.2008 10:42

Beitrag von cxAlex »

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
Projekte: IO.pbi, vcpu
Pausierte Projekte: Easy Network Manager, µC Emulator
Aufgegebene Projekte: ECluster

Bild

PB 5.1 x64/x86; OS: Win7 x64/Ubuntu 10.x x86
Sven
Beiträge: 374
Registriert: 23.09.2004 12:01

Beitrag von Sven »

Ich möchte aber keine API, wegen Portierbarkeit.

Netzwerk hätte den Vorteil, dass ich mit wenig Aufwand auch Steuersoftware und Videoclient auf zwei verschiedenen Rechnern laufen lassen könnte, wenn das mal jemand will.
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag von Kaeru Gaman »

"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.
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Sven
Beiträge: 374
Registriert: 23.09.2004 12:01

Beitrag von Sven »

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.
Antworten