Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Multimedia (https://www.delphipraxis.net/16-multimedia/)
-   -   Delphi FFEncoder in DLL (https://www.delphipraxis.net/210296-ffencoder-dll.html)

ISMIRSCHLECHT 31. Mär 2022 13:17

FFEncoder in DLL
 
Hallo,

ich benutze die Komponenten von FFVCL, speziell den FFEncoder.
Ich erstelle Videos aus einer Ansammlung (Verzeichnis) von Bitmaps.
Das klappt, sogar mit wählbarer Vorschau.
Wenn es sich um eine Anwendung mit Hauptforumlat und den Mainthread handelt.
Jetzt soll das ganze Procedere aber in einer DLL (Plugin) laufen.
- die komponenteneigene Vorschau (Preview) geht gar nicht, die Anwendung ist fest
- eine aus "Previewbitmaps" anzuzeigende Vorschau geht auch nicht, Anwendung hängt
- schaltet man beide Vorschauen mittels den entsprechenden Properties ab, gehts manchmal
Nun hat die Komponente reichlich Ereignisse, und man kann (per Smartinpect) feststellen, daß der Prozeß noch die Startroutine durchläuft, alles Weitere schon nicht mehr.
Jetzt wirds verrückt: Geht man mit dem Debugger in die Arbeitsroutine der Komponente, kann es sein, das der Prozeß ohne Festgehen durchlaufen wird.
Wir sind ratlos.
ism

Sinspin 31. Mär 2022 14:00

AW: FFEncoder in DLL
 
Klingt mächtig nach einem DeadLock. Beim Debuggen in der IDE findet man die selten da meißt nur der Thread wirklich "läuft" in dem man gerade drinne ist.

Bernhard Geyer 31. Mär 2022 14:08

AW: FFEncoder in DLL
 
Zitat:

Zitat von ISMIRSCHLECHT (Beitrag 1504153)
und den Mainthread handelt.

Alles was mit VCL (und z.B. mit (T)Bitmap zu tun hat, muss im Hauptthread der Anwendung laufen.
Hintergrund ist das GUI-Ressourcen nur im erzeugenden Thread gültig sind.
Und bei der VLC kommt dazu das diese teilweise "wie Wild" auf globale Ressourcen wie auf die Application-Instanz, Screen oder ähnliches zugreift.
Und wenn man mit Threads arbeitet kann man da einige Instabilitäten Reinbekommen, wenn man nicht aufpasst.

Uwe Raabe 31. Mär 2022 14:51

AW: FFEncoder in DLL
 
Wird die DLL und die Anwendung denn mit Packages compiliert?

Renate Schaaf 1. Apr 2022 01:41

AW: FFEncoder in DLL
 
Hilft zwar der ursprünglichen Frage nicht, aber das
Zitat:

Alles was mit VCL (und z.B. mit (T)Bitmap zu tun hat, muss im Hauptthread der Anwendung laufen.
Hintergrund ist das GUI-Ressourcen nur im erzeugenden Thread gültig sind.
ist nicht ganz richtig.

Regeln:

TBitmap.Canvas mit Lock/Unlock gegen Zugriffe der Delphi-GDI-Aufräumung schützen
Draw und Stretchdraw sind auch damit nicht threadsafe
Wenn mehrere Threads auf die gleiche Bitmap zugreifen, dürfen sie nie GetScanline benutzen

Unter Beachtung dieser Regeln habe ich noch nie Probleme mit threads und TBitmap gehabt.
(Außer bei Verwendung von TTask..)

Renate

ISMIRSCHLECHT 5. Apr 2022 12:08

AW: FFEncoder in DLL
 
Hallo,

die Anwendung + DLL wird ohe Laufzeitpackages compiliert

Uwe Raabe 5. Apr 2022 13:01

AW: FFEncoder in DLL
 
Zitat:

Zitat von ISMIRSCHLECHT (Beitrag 1504283)
die Anwendung + DLL wird ohe Laufzeitpackages compiliert

In dem Fall verwendet die DLL ihre eigene Kopie der RTL/VCL und liegt somit außerhalb der Application.Run-Schleife. Die Messages der Applikation kommen so ohne weiteres also auch nicht in der DLL an. Wenn man also nicht gezielt eine Funktion der DLL aufruft, dann passiert dort auch nicht wirklich was.

Du kannst ja mal probieren, ob es mit Runtime-Packages funktioniert.


Alle Zeitangaben in WEZ +1. Es ist jetzt 05:13 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz