ich bin dabei eine Client-Server Anwendung zu programmieren, es funktioniert leider die Videoübertragung nicht einwandfrei.
ich bekomme zwischendurch vertikale Streifen im Anzeigefenster,
Willkommen Memory-Leak und ein total unnötiges Kopieren des Images noch dazu.
Des weiteren sollte man überprüfen, ob auch alles geschrieben wurde und auch alles wieder ausgelesen - read() und write() geben nicht umsonst Werte zurück.
Abgesehen davon würde ich ein kleines Protokoll oberhalb von TCP aufsetzen so dass man vorher weiß wie viele Daten im nächsten Bild kommen anstatt davon auszugehen dass immer k_blockSize Bytes kommen. Auf der Senden-Seite sendest Du ja auch nicht k_blockSize sondern img->imageSize
Eric_123 hat geschrieben:
Memory-Leak wird das Problem sein. Leider weiss ich nicht wie ich das umgehen kann.
1. Warum überhaupt mit new ein Objekt anlegen
2. Wie wäre es mit 'delete' ?
Und eine Ausgabe von Image.Size nützt nix - Du sollst schauen was read() und write() zurückliefern um zu überprüfen ob wirklich alle Daten gesendet/gelesen werden!
1. Warum überhaupt mit new ein Objekt anlegen
um cv::mat in ein iplimage zu convertieren
2. Wie wäre es mit 'delete' ?
delete habe ich jetzt auch drin.
3. Und eine Ausgabe von Image.Size nützt nix - Du sollst schauen was read() und write() zurückliefern um zu überprüfen ob wirklich alle Daten gesendet/gelesen werden!
Ausgabe von read() und write() liefern das gleiche zurück.
Eric_123 hat geschrieben:1. Warum überhaupt mit new ein Objekt anlegen
um cv::mat in ein iplimage zu convertieren
Erklärt trotzdem nicht dass man das nicht z.B. auf dem Stack anlegt oder direkt cv::mat überträgt.
Eric_123 hat geschrieben:
3. Und eine Ausgabe von Image.Size nützt nix - Du sollst schauen was read() und write() zurückliefern um zu überprüfen ob wirklich alle Daten gesendet/gelesen werden!
Ausgabe von read() und write() liefern das gleiche zurück.
[/quote]
Wenn, wie behauptet, die Daten korrekt am Client ankommen kann es nicht an der Datenübertragung liegen.
Also solltest Du ein Protokoll in deine TCP-Verbindung einbauen und somit sicherstellen, dass immer alles gelesen wird bzw. wenn nicht korrekt beim nächsten Bild aufsetzt wie ich im ersten Post geschrieben habe.
/edit: Demnach ist auch, wie ich schon im ersten Post schrieb, k_blockSize != img->imageSize, sonst würdest Du nicht mehr als 19200 auslesen oder du schickst eben nicht alles.