Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Multimedia (https://www.delphipraxis.net/16-multimedia/)
-   -   Delphi ASIO Callback nur bei Mausbewegung (https://www.delphipraxis.net/215083-asio-callback-nur-bei-mausbewegung.html)

TomyN 4. Mai 2024 13:30

ASIO Callback nur bei Mausbewegung
 
Hallo,
Hier tritt mit einem ASIO Gerät der folgende Fehler auf , dass ich nicht verstehe.

Es ist eine kleine Testanwendung, in der nur die vom Treiber zurückgemeldeten Werte (Sampleposition und -Zeit) angezeigt werden.
Mit vielen Treibern (u.a. ASIO4ALL) läuft das wunderbar.
Mit einem Treiber passiert aber folgendes:
Es kommt ein Callback, dann passiert erstmal nix mehr.

Bewegt man nun die Maus, dann läuft die Anzeige ganz normal hoch, aber nur solange man die Maus wirklich bewegt.

Die Anzeige läuft dann kontinuierlich, auch springt sie nicht, d.h. die erste Vermutung des fehlenden Updates der Anzeige ist es nicht.
Das wirklich verrückte (finde ich) ist, dass der Effekt auch auftritt, wenn die Anwendung nicht den Focus hat, d.h. bei einer Mausbewegung in einem anderen Fenster läuft es, solange man die Maus bewegt.

Mein System ist win10/64, Delphi 10.3

himitsu 4. Mai 2024 13:46

AW: ASIO Callback nur bei Mausbewegung
 
Wie/Wo kommt der Callback an?

* im Hauptthread
* im einem eigenen Thread
* falls im Thread, wird und wenn ja wie wird synchronisiert?

Wenn die Anzeige/Verarbeitung im Haupthread ankommt/verarbeitet

Wenn etwas in den Hauptthread synchronisiert wird, aber das Benachrictigungsevent nicht annkommt / nicht gesendet wird, und der hauptthread ist grade im Idle, dann wartet er bis zur nächsten Message (z.B. von der Maus).

TomyN 4. Mai 2024 16:17

AW: ASIO Callback nur bei Mausbewegung
 
Dem Treiber wird eine Callbackfunktion übergeben, die dann vom Treiber aufgerufen wird (werden soll) wenn er Daten hat bzw. braucht.
In der konkreten Situation sieht das ganze so aus

Code:
procedure TMainForm.BufferSwitchTimeInfo(index: integer; const params: TAsioTime);
begin
  // tell the interface that the sample position has changed
  PostMessage(Handle, PM_UpdateSamplePos, params.timeInfo.samplePosition.hi,
                params.timeInfo.samplePosition.lo);
  Driver.OutputReady;   // some asio drivers require this
end;
Was mich eben verwirrt, ist das die Sampleposition sich immer um die Buffergröße erhöht. Wenn es ein Problem mit der Synchronisation / Nachricht wäre, dann müsste der Zähler ja 'hupfen'.

jaenicke 4. Mai 2024 16:22

AW: ASIO Callback nur bei Mausbewegung
 
Du hast aber schon geprüft, ob der Callback nicht aufgerufen wird oder die Message danach nicht verarbeitet wird, oder? (z.B. mit OutputDebugString)
Das geht aus deinem Post leider nicht hervor, da du nur den Effekt in der Anzeige beschreibst.

TomyN 4. Mai 2024 17:49

AW: ASIO Callback nur bei Mausbewegung
 
Ja, hab ich. Das Callback wird nicht aufgerufen.

TomyN 4. Mai 2024 18:34

AW: ASIO Callback nur bei Mausbewegung
 
Extrem komisch... jetzt läuft es wie es soll .. obwohl ich nix geändert hab... :?

TigerLilly 5. Mai 2024 15:39

AW: ASIO Callback nur bei Mausbewegung
 
Ich weiß nicht, ob das was beiträgt. Aber ich hatte genau dieses Phänomen letztens bei einem Server, den ich mit TeamViewer steuern wollte: Screen wurde nur aktualisiert, wenn ich die Maus bewegt habe. Abhilfe war, die Hardwarebeschleunigung zu deaktivieren.

himitsu 5. Mai 2024 18:26

AW: ASIO Callback nur bei Mausbewegung
 
Zitat:

Teamviewer
War das ein Monitor am Rechner?

Ich hatte das bei einem MiniPC, wenn nichts am HDMI hängt.
Hatte es nicht ausprobiert, aber dafür gibt es so FakeMonitore.

https://www.amazon.de/Headless-Emula.../dp/B06XT1Z9TF

TomyN 5. Mai 2024 21:06

AW: ASIO Callback nur bei Mausbewegung
 
Ich weiss nicht, fehlendes Update / Synchronisation eines Controls oder einer Anzeige kann ich mir vorstellen. Aber das der Treiber die Callbacks nur dann aufruft, wenn die Maus bewegt wird und dann die Samples/Zeit entsprechend erhöht finde ich extrem seltsam.

TigerLilly 6. Mai 2024 06:24

AW: ASIO Callback nur bei Mausbewegung
 
Zitat:

Zitat von himitsu (Beitrag 1536423)
Zitat:

Teamviewer
War das ein Monitor am Rechner?

Nein, kein Monitor dran. Virtualisierter Rechner auf VMWare.


Alle Zeitangaben in WEZ +1. Es ist jetzt 02:53 Uhr.
Seite 1 von 2  1 2      

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