Project

General

Profile

Actions

Support Request #18068

closed

AcceptType won't be called when using ProcessInput(base::flash::tNanoSeconds, streaming::flash::ISampleReader*)

Added by hidden over 1 year ago. Updated about 1 year ago.

Status:
Closed
Priority:
Normal
Customer:
CARIAD
Department:
Requester's Priority:
Normal
Support Level:
2nd Level
Resolution:
Solved Issue
Product Issue Numbers:
Affected Products:
Platform:
Windows 10 64bit
Topic:
ADTF::SDK
FAQ Links:

Description

Supportanfrage

Ich versuche herauszufinden, warum in bestimmten Fällen die AcceptType zur Verifikation der Kompatibilität der Streams nicht aufgerufen wird.
Ich habe dazu den Test im Anhang geschrieben.

Während die Datenkommunikation offenbar funktioniert (ProcessInput wird gerufen), scheint keine Typprüfung stattzufinden (AcceptType wird NICHT gerufen).
Was habe ich übersehen?

Lösung

Im ersten Moment ist das verwirrend, es gibt aber eine simple logische Erklärung:
  • Die AcceptType() (oder natürlich dein eigenes SetAcceptTypeCallback()) wir nur gerufen, wenn am reader auch ein sample gelesen wird.
  • In der von dir verwendeten ProcessInput() mit dem reader bist du selbst dafür verantwortlich, die samples aus der queue zu holen. Deshalb brauchst du mindestens ein GetLastSample() / GetNextSample()
  • Alternativ kannst du die ProcessInput() mit dem sample nehmen, hier ist das sample bereits geholt, dadurch wird automatisch der type im Vorfeld geprüft (weil das Sample bereits vorher geholt wurde, siehe Reihenfolge der ProcessInput Calls) und auch nur dann diese ProcessInput() gerufen, wenn das sample bzw. der type akzeptiert wird

Folgende Tests veranschaulichen das:

ProcessInput mit Reader

ProcessInput mit Sample

ProcessInput mit Sample Data

in ADTF 3.15 versuchen wir das bei der Doku zu den API Funktionen zu verdeutlichen.


Files

image003.png (7.36 KB) image003.png hidden, 2022-08-11 19:30
adtf_test.cpp (6.54 KB) adtf_test.cpp hidden, 2022-08-11 19:30
Actions

Also available in: Atom PDF