dbraner Posted July 13, 2012 Share Posted July 13, 2012 (edited) 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 July 16, 2012 by dbraner Quote Link to comment
dbraner Posted July 17, 2012 Author Share Posted July 17, 2012 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? Quote Link to comment
hackbart Posted July 17, 2012 Share Posted July 17, 2012 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. Quote Link to comment
erwin Posted July 17, 2012 Share Posted July 17, 2012 aber z.B. keine ES-Pakete wie z.B. AIT. Doch das geht. Genau so hab ich es in http://www.DVBViewer.tv/forum/topic/39309-ist-hbbtv-geplant-machbar/page__view__findpost__p__360857 gemacht. Schick mir PM, wenn du an meinen (Quick&Dirty)-Quellen interessiert bist. erwin Quote Link to comment
dbraner Posted July 17, 2012 Author Share Posted July 17, 2012 (edited) 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 @erwin: komme ggf. auf Dein Angebot zurück. Momentan bin ich aber noch nicht verzweifelt genug Edited July 17, 2012 by dbraner Quote Link to comment
erwin Posted July 17, 2012 Share Posted July 17, 2012 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 Quote Link to comment
Griga Posted July 17, 2012 Share Posted July 17, 2012 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). Quote Link to comment
dbraner Posted July 18, 2012 Author Share Posted July 18, 2012 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) Quote Link to comment
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.