-
Forum: Multimedia
Delphi
by TERWI,
18. Jul 2018
Nachtrag: .... die Welt ist doch noch nicht untergegangen. 8-)
Das o.g. noch mal in meine Update-Methode eingebaut:
procedure TTeletext.UpdateOSD();
var
ID1, ID2 : cardinal;
begin
ID1 := MainThreadID;
ID2 := GetCurrentThreadId; // TThread.CurrentThread.ThreadId;
if ID1 = ID2 then
-
Forum: Multimedia
Delphi
by TERWI,
18. Jul 2018
TThread.Current.ThreadId kennt D2009 nicht, aber TThread.CurrentThread.ThreadId. Schreibfehler oder Tokyo ?
Die aufrufende Methode:
procedure TTeletext.ShowTTxt(Mode : boolean; Page : integer);
var
ID1, ID2 : cardinal;
begin
ID1 := MainThreadID;
ID2 := GetCurrentThreadId; // TThread.CurrentThread.ThreadId;
-
Forum: Multimedia
Delphi
by TERWI,
18. Jul 2018
Neues ...
@jaenicke
System.TMonitor.Enter/Exit auf irgendeine andere Bitmap als innerhalb der aufrufenden Klasse anzuwenden, geht hier völlig in die Hose. Programmabsturz.
Da ich keine Ahnung von der Anwendung dieser Methoden habe und auch nix wirklich gescheites dazu finde, hab ich das erst mal verworfen.
Und Zuweisen von Handles von Quell- zu Ziel-Bitmap scheint ohne Release (BM ungültig...
-
Forum: Multimedia
Delphi
by TERWI,
17. Jul 2018
Das mit den Handles zuweisen hat hier auch nur bedingt geklappt. Der Effekt wie bei meinen weiteren Versuchen:
Die Anzeige kommt, keine Fehler - aber irgendwann friert das OSD ein, obwohl der Datenstrom / Generierung der Quell-BitMap weiter läuft.
Synchronize kann ich hier nicht nutzen, weil ich (im eigentlichen Programm) nicht explizit einen Thread selbst mache, sondern der Thread-Kontext...
-
Forum: Multimedia
Delphi
by TERWI,
14. Jul 2018
Nach vielem & langen suchen & lesen bin ich ein klein wenig schlauer geworden - so wirklich verstanden hab ich das allerdings immer noch nicht, wieso genau das nicht funktioniert...
Nach dem Beispiel von Sir Rufo u. a. in "Threads und TBitmaps" scheint es ja mit BitMap.Assign zu funktionieren (wenn man weiteres beachtet).
Mein Versuch nun, die Bitmap mittels IVMRMixerBitmap9 in den...
-
Forum: Multimedia
Delphi
by TERWI,
12. Jul 2018
Gut, sei es einfach eben mal so.
Allerdings - siehe #20 - scheint es ja zu funktionieren. Auch Image1.Picture.Assign(BitMap); geht.
X andere Versuche mit Draw, CopyRect, BrushCopy auf (irgendein) Canvas funzen nicht, bzw. nur (sehr ) kurz.
Und:
Das Geflacker scheint offensichtlich eine ganz andere Ursache zu haben -> nämlich in der "Malerei" der Ursprungs-Bitmap, also FBMOSD.
Die Katze...
-
Forum: Multimedia
Delphi
by TERWI,
11. Jul 2018
Siehe #26.
-
Forum: Multimedia
Delphi
by TERWI,
11. Jul 2018
Jetzt bin ich etwas verwirrt (überfordert...)
Hier mal auszugsweise die CREATE der besagten Unit:
constructor TDATA2.Create();
begin
inherited Create;
...
FParserThread := TParserThread.Create(Self);
FParserThread.SuspendWork;
FParserThread.Resume;
-
Forum: Multimedia
Delphi
by TERWI,
11. Jul 2018
Sorry, wenn es so erscheint, als wenn ich mich (bewusst oder absolut) dumm stelle ...
Wie ist den bitte "threadsicher" (genau !) definiert ?
Meiner Erkenntnis nach gilt das für den Fall, wenn (in einer Form, Unit, Methode, ...) der zeitgleiche oder auch zeit-überschreibende Zugriff auf "den selben" Datenbereich (oder Methode ?!) verhindert wird.
Gilt für lesen wie scheiben !?
Meine...
-
Forum: Multimedia
Delphi
by TERWI,
11. Jul 2018
Die DVB-PSI-Abteilung meines (Langzeit-)Projekts arbeitet mit exakt den gleichen Funktionen betreff Callback und Thread samt Puffer und anderen Hilfsfunktionen. Quasi eine 1:1-Kopie.
Auch da werden Daten daraus angezeigt, gelesen, verwendet. Dort läuft alles wie "geschmiert".
Der einzige Unterschied: Ich gebrauche dort kein BitMap.
Da stört es den "VCL-(Main)thread" auch nicht die Wurst oder...
-
Forum: Multimedia
Delphi
by TERWI,
11. Jul 2018
Hmmm ... hier arbeiten aber doch eigentlich keine 2 (oder mehr) Fredl's gegeneinander.
Diese Unit wird in einem CallBack getriggert, eingehende Daten in einen eigenen Puffer kopiert.
Danach gehts gleich zurück zum Caller - zuvor wird noch der Auswerte-Thread gestartet, der die Daten zwecks Inkonsistenz aus dem internen Puffer liest.
Und wie gesagt: So lange der Thread arbeitet (interne...
-
Forum: Multimedia
Delphi
by TERWI,
11. Jul 2018
Der Thread arbeit nur in einer Schleife den TS-DatenBlock ab.
Es greift auch niemand anderes auf den Thread zu.
Der DatenBlock selbst wird wieder in Teile gesplittet und evaluiert - das Ergebnis daraus wird angezeigt.
Soweit ich das bisher feststellen konnte, ist das alles (noch) schnell genug, bevor ein neuer DatenBlock einrifft (ca. alle o,5 Sek.)
Zur Sicherheit habe ich noch ein Blocking...
-
Forum: Multimedia
Delphi
by TERWI,
11. Jul 2018
Hab numehr diverses zum Thema "Flackern" nachgesucht, bin aber nicht wirklich fündig geworden.
"DoubleBuffered" an/aus in der OSD-Form bringt nichts.
Beim TImage scheint es so was nicht zu geben ?
Folgendes probiert:
procedure TForm_OSD.Init(BitMap : TBitMap);
begin
if Assigned(Bitmap) then
begin
-
Forum: Multimedia
Delphi
by TERWI,
11. Jul 2018
Hölle - es funzt !
procedure TForm_OSD.Update(BitMap : TBitMap);
begin
if Assigned(Bitmap) then
begin
Image.Picture.Bitmap.Assign(BitMap);
// Image.Repaint;
end;
end;
-
Forum: Multimedia
Delphi
by TERWI,
11. Jul 2018
... es formt sich was 8-) - kleinen Moment, muss noch was testen ...
-
Forum: Multimedia
Delphi
by TERWI,
11. Jul 2018
Es klappt immer noch nicht - ABER:
Das scheint ganz offensichtlich nicht daran zu liegen, ob ich meine erstellte BitMap direkt in das Canvas der OSD-Form schreibe oder ggf. extra noch ein Image in die Form packe und da rein schreibe.
Anscheinend wir hier zur Laufzeit meine FBMOSD-Bitmap irgendwie "zerballert", so dass kein Inhalt mehr erscheint und das Canvas dort nach RePaint wieder "grau"...
-
Forum: Multimedia
Delphi
by TERWI,
9. Jul 2018
ach Leute, ihr immer mit Quellcode ... verstehe ich ja zum verstehen - aber was ist an meinen Fragen so unverständlich, das man's auch nicht auch ohne verseht ? ... sorry.
Ist im Prinzip das gleich wie in #3.
Bitmap an OSD.Canvas: ... da tut sich nix !
Direkt schreiben an OSD.Canvas: ... ist OK !!!
Ich verstehe eben genau dieses "Feature" nicht.
@Redeemer
Ob mit oder ohne TImage -...
-
Forum: Multimedia
Delphi
by TERWI,
9. Jul 2018
"FormOSD" ist eine eigenständige Form und wird in meine Unit eigebunden.
Das Image wird dort korrekt de-/initialisiert, Alignment ist alClient.
Die Form wird zur Laufzeit (vor Zugriff) mittels CLientWidth/Height auf die gleiche Größe meiner BitMap gesetzt. Sollte also eigentlich alles passen.
Tut es aber nicht "tuten" - alles grau. Direktes schreiben auf FormOSD funktioniert so weit (auch...
-
Forum: Multimedia
Delphi
by TERWI,
9. Jul 2018
Wäre theoretisch moglich - aber in der Komplexität steigt da mit Sicherheit niemand auch nach längerem nicht durch ... (hab ich schon nach 1 Woche Pause meine Sorgen)
Nächstes Prob wäre: Die Daten kommen aus einem DVB-Transport-Strom und es müsste der Tester schon ein DVB-Gerät oder adäquate TS-Files haben.
Wer da ernsthaft (!) interesse dran hat ... melden.
Hier ist einfach nur das Prob:...
-
Forum: Multimedia
Delphi
by TERWI,
9. Jul 2018
Kleine Korrektur:
Ich hab in der Eile 'Image.Create/Free' vergessen.
Das ändert aber nichts an der mangelhaften / keine Ausgabe.
-
Forum: Multimedia
Delphi
by TERWI,
9. Jul 2018
... das gibt eine nette Zugriffsverletzung.
Neuer Versuch:
Ich schreibe direkt aus dem Programm auf's Canvas der OSD-Form.
Z.B.
FormOSD.Canvas.TextOut(X, Y, ansistring(Text));
ohne Repaint u. a. --- das geht !
... ist aber nicht Sinn der Sache.
-
Forum: Multimedia
Delphi
by TERWI,
9. Jul 2018
// OSD-Form
type
...
public
FBitmap : TBitMap;
end;
...
procedure TFormOSD.FormPaint(Sender: TObject);
-
Forum: Multimedia
Delphi
by TERWI,
9. Jul 2018
Das Ziel:
Ich erzeuge in einer Unit meines Proggis eine BitMap (ca. 600 X 600) und fülle diese kontinuierlich mittels FillRect und Textout mit irgendwelchen 'bunten' Sachen. Das klappt auch so weit ....
Neben dem speichern 'on demand' soll diese Bitmap als Kontrolle auch jederzeit zu sehen sein - d.h. ich möchte gerne diese (permanent geänderte) BM auf einer separatem Form (bei Bedarf) sehen.
...