AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

FFEncoder in DLL

Ein Thema von ISMIRSCHLECHT · begonnen am 31. Mär 2022 · letzter Beitrag vom 5. Apr 2022
Antwort Antwort
ISMIRSCHLECHT

Registriert seit: 17. Dez 2018
Ort: Görlitz
69 Beiträge
 
#1

FFEncoder in DLL

  Alt 31. Mär 2022, 14:17
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
  Mit Zitat antworten Zitat
Benutzerbild von Sinspin
Sinspin

Registriert seit: 15. Sep 2008
Ort: Dubai
675 Beiträge
 
Delphi 10.3 Rio
 
#2

AW: FFEncoder in DLL

  Alt 31. Mär 2022, 15:00
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.
Stefan
Nur die Besten sterben jung
A constant is a constant until it change.
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.196 Beiträge
 
Delphi 10.4 Sydney
 
#3

AW: FFEncoder in DLL

  Alt 31. Mär 2022, 15:08
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.
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.447 Beiträge
 
Delphi 12 Athens
 
#4

AW: FFEncoder in DLL

  Alt 31. Mär 2022, 15:51
Wird die DLL und die Anwendung denn mit Packages compiliert?
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
Renate Schaaf

Registriert seit: 25. Jun 2020
Ort: Lippe
114 Beiträge
 
Delphi 11 Alexandria
 
#5

AW: FFEncoder in DLL

  Alt 1. Apr 2022, 02:41
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
Renate
  Mit Zitat antworten Zitat
ISMIRSCHLECHT

Registriert seit: 17. Dez 2018
Ort: Görlitz
69 Beiträge
 
#6

AW: FFEncoder in DLL

  Alt 5. Apr 2022, 13:08
Hallo,

die Anwendung + DLL wird ohe Laufzeitpackages compiliert
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.447 Beiträge
 
Delphi 12 Athens
 
#7

AW: FFEncoder in DLL

  Alt 5. Apr 2022, 14:01
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.
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 23:19 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