Jump to content

Verständnisproblem PID callbacks


dbraner

Recommended Posts

Hallo,

 

Wie verhält sich das mit den PID callbacks?

 

Kann man mehrere Callback- Funktionen für separate PIDs gleichzeitig aktivieren oder überschreiben die sich gegenseitig.?

 

Gesetz dem Fall, man kann mehrere Callbacks haben: was passiert, wenn man einen Callback per PID = 0x1FFF abschaltet, werden dann alle abgeschaltet oder nur die angegebene Funktion?

 

Ich hätte gerne eine Callback für PID n, und eine andere für PID m, gleichzeitig aktiv. Und ich möchte die auch getrennt deaktivieren. geht das ? Ich frage deshalb, weil mir mein Testplugin gerade um die Ohren geflogen ist.

 

EDIT: Ich beantworte das mal selbst, falls jemand diese Info benötigt. Nach einigem Trial & Error bin ich zu der Erkenntnis gelangt, dass der DVBViewer hier eine Callback-Funktion je PID unterstützt. Wenn man allerdings unterschiedliche Callbacks für 2 PIDs eingerichtet hat und eine davon mit PID = 0x1FFF löscht, werden anscheinend alle beide deaktiviert. Es empfiehlt sich also, auch beim Löschen von Callbacks immer die PID anzugeben und nicht die "Wildcard" 0x1FFF zu verwenden.

Edited by dbraner
Link to comment

Jetzt muss ich dem Thread nochmal einen Tritt geben wg. einer anderen Frage im Zusammenhang mit PID-Filtern:

 

Kann es sein, dass die normalen PID-Filter nur einige PID- bzw. Stream-Typen filtern können? Ich bekomme z.B. problemlos Audio-, Video- oder PMT-Pakete an meine Callback-Funktion übergeben aber z.B. keine ES-Pakete wie z.B. AIT. Muss man für diese PIDs den RAW-TS-Filter verwenden?

Link to comment

Nein die Pidfilter liefern dir deine gewünschten Pakete, wenn du mit PidDelete 0x1fff übergibst, werden alle deine gesetzten Pidfilter (und nur die von deinem Callback) freigegeben.

Sorry hab die Anfrage erst zu spät gesehen.

ChristianPs: AddTsCallback liefert dir die ganzen Daten ungefiltert.

Link to comment

Erst mal danke für Euer Feedback!

 

Ich hab so eine Vermutung, woran es liegt, dass zwar meine 1. Callback-Funktion für die PMT aufgerufen wird, die zweite für die PID mit der AIT (die ich mir aus der PMT besorge) aber nicht:

 

Die 2. Callback-Funktion wird in der 1. Callback-Funktion gesetzt. Hier verwende ich SendMessage(). Werde es mal mit der asynchronen Variante PostMessage() versuchen. Möglicherweise ist SendMessage() innerhalb einer Callback-Funktion keine gute Idee.

 

Oder ich seh mal wieder den Wald vor lauter Bäumen nicht und habe ein ganz anderes Problem :iiam:

 

@erwin: komme ggf. auf Dein Angebot zurück. Momentan bin ich aber noch nicht verzweifelt genug :sadwalk:

Edited by dbraner
Link to comment

Ich hab so eine Vermutung, woran es liegt, dass zwar meine 1. Callback-Funktion für die PMT aufgerufen wird, die zweite für die PID mit der AIT (die ich mir aus der PMT besorge) aber nicht:

 

Die 2. Callback-Funktion wird in der 1. Callback-Funktion gesetzt. Hier verwende ich SendMessage().

Mach ich auch so.

 

und habe ein ganz anderes Problem

PMT gut geparst? D.h. den Callback auch auf die richtige PID angesetzt?

 

erwin

Link to comment
Die 2. Callback-Funktion wird in der 1. Callback-Funktion gesetzt. Hier verwende ich SendMessage(). Werde es mal mit der asynchronen Variante PostMessage() versuchen.

Ist vorzuziehen. Das (De-)Allozieren von PIDs ist in aktuellen DVBViewer und RS-Versionen nicht threadsicher (wird sich vermutlich in Zukunft ändern, damit habe ich mich letztes Wochenende herumgeschlagen). Also im Streaming Thread auf jeden Fall PostMessage nehmen. Tödlich ist insbesondere, in einem Callback mit SendMessage die PID abzuräumen, die in selbigem verarbeitet wird (z.B. die PMT PID in einem PMT Parser).

Link to comment

Danke, funktioniert jetzt. Das PostMessage wars und mein Versuch, die AIT als lokale Datenstruktur in der Callback Funktion anzulegen. Interessanterweise hat SenMessage manchmal funktioniert ( Zufallsprinzip)

Link to comment

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...