[Patch] Fehler bei Timeraufnahmen durch Lock der "Channels" in cRecordControls::Start()

  • Ausgehend von hier betreffend fehlerhafter Timeraufnahmen:

    'cRecordControls::Start()' in 'menu.c' hält einen Read-Lock auf die "Channels". Beim Erzeugen der cRecordControls kann es vorkommen, dass GetEvent() für den Event erst auf die EPG Daten warten muss, was bis zu 4 Sekunden dauern kann - und genau so lange bleibt der Lock auf "Channels".

    Das hat unter anderem zur Folge, das in pat.c die PMT mancher Programme nicht eingelesen wird, und damit - wenn es der erste Zugriff auf den Transponder war - die CaDescriptoren der verschlüsselten Programme nicht bekannt sind. Aufnahmen solcher Programme enden daher mit einem Emergency Exit.

    Der 1.Patch im Anhang löst nun den Lock schon bevor die cRecordControl erzeugt werden, und im 2. Patch wird in pat.c das Timeout für GetChannelsWrite() von 10ms auf 20ms erhöht. Das genügt um bei mir alle PMTs korrekt einzulesen - ist aber vom Gefühl her noch nicht die beste Lösung für 'pat.c'.
    Helmut

  • Es dürfte auch noch etwas Anderes das zuverlässige Einlesen der PMT verhindern:

    Display Spoiler

    Dec 7 18:55:29 gentoo64vdr vdr[2889]: [3677] epg data writer thread started (pid=2889, tid=3677, prio=low)

    Dec 7 18:55:30 gentoo64vdr vdr[2889]: [3020] PMT 210847/30154: GetChannelsWrite(20) failed - retry

    Dec 7 18:55:30 gentoo64vdr vdr[2889]: [3013] PMT 210818/29951: GetChannelsWrite(20) failed - retry

    Dec 7 18:55:30 gentoo64vdr vdr[2889]: [3020] PMT 210847/30154: GetChannelsWrite(100) failed

    Dec 7 18:55:30 gentoo64vdr vdr[2889]: [3013] PMT 210818/29951: GetChannelsWrite(100) failed

    Dec 7 18:55:30 gentoo64vdr vdr[2889]: [3013] PMT 210818/29956: GetChannelsWrite(20) failed - retry

    Dec 7 18:55:30 gentoo64vdr vdr[2889]: [3020] PMT 210847/30159: GetChannelsWrite(20) failed - retry

    Dec 7 18:55:30 gentoo64vdr vdr[2889]: [3013] PMT 210818/29956: GetChannelsWrite(100) failed

    Dec 7 18:55:30 gentoo64vdr vdr[2889]: [3020] PMT 210847/30159: GetChannelsWrite(100) failed

    Dec 7 18:55:30 gentoo64vdr vdr[2889]: [3013] PMT 210818/29959: GetChannelsWrite(20) failed - retry

    Dec 7 18:55:30 gentoo64vdr vdr[2889]: [3020] PMT 210847/30166: GetChannelsWrite(20) failed - retry

    Dec 7 18:55:30 gentoo64vdr vdr[2889]: [3013] PMT 210818/29959: GetChannelsWrite(100) failed

    Dec 7 18:55:30 gentoo64vdr vdr[2889]: [3020] PMT 210847/30166: GetChannelsWrite(100) failed

    Dec 7 18:55:30 gentoo64vdr vdr[2889]: [3020] PMT 210847/30169: GetChannelsWrite(20) failed - retry

    Dec 7 18:55:31 gentoo64vdr vdr[2889]: [3020] PMT 210847/30169: GetChannelsWrite(100) failed

    Dec 7 18:55:31 gentoo64vdr vdr[2889]: [3013] PMT 210818/29960: GetChannelsWrite(20) failed - retry

    Dec 7 18:55:31 gentoo64vdr vdr[2889]: [3677] epg data writer thread ended (pid=2889, tid=3677)

    Helmut

    HelmutB passed unfortunately away on July 21, 2022 ... RIP 🖤

  • Du hast recht, das 'ChangeState()' sollte bleiben, das habe ich irrtümlich mit rausgelöscht.

    Ich bin mir aber nicht sicher, ob dieser Patch auch tatsächlich das Problem von Fourty2 löst. Er wird eher nur bei einer "Sofortaufnahme" auf einem vorher nocht nie getunten Transponder helfen, aber nicht bei einer normalen Timeraufnahme, da dabei schon bis zu 60 Sek. vor Aufnahmestart - ohne RecordControls - auf den Transponder geschalten wird. Damit sollte der CaDescriptor bei Start der Aufnahme schon bekannt sein.

    LG Helmut

    HelmutB passed unfortunately away on July 21, 2022 ... RIP 🖤

  • Mir scheint, Teil des Problems ist, daß viele Plugins auf die "Bereit" Meldung des VDR warten und sich dann um die Ressourcen "prügeln".

    Hatte gestern noch bemerkt, das ein Teil der GetChannelsWrite an den EPGSearch Threads hingen, die beim Start loslaufen. Ein Delay von 20s für die Suchtimer- und Konfliktcheck-Thread behob das (meist).

    Denke, es bräuchte Plugin-Start-Prioritäten / - Delays oder sowas in der Art.

    VDR mit GIT-epgsearch:

    Display Spoiler

    vdr: [19538] timer 79 (106 2000-2225 'Der goldene Kompass') set to event So. 13.12.2020 20:15-22:10 'Der goldene Kompass'

    vdr: epg2vdr: Handler: Init handler instance for thread 19543

    vdr: [19550] EPGSearch: search timer update started

    vdr: [19551] EPGSearch: timer conflict check started

    vdr: [19551] EPGSearch: timer conflict check finished

    vdr: [19538] retuning due to modification of channel 100 (Sky Cinema Premieren HD)

    vdr: [19538] switching to channel 100 S19.2E-133-6-131 (Sky Cinema Premieren HD)

    vdr: [19584] VAAPI: video: reset start

    vdr: [19584] VAAPI: video: set clock --:--:--.---

    vdr: [19538] SendCaPmts CAM 1: [1] actives in CAM: 1 -> 0 (0 pids)

    vdr: [19538] SendCaPmts CAM 1: [0] actives in CAM: 1 -> 0 (0 pids)

    vdr: [19538] CAM 1: unassigned from device 1

    vdr: [19538] CAM 1/1: reusing MTD CAM slot

    vdr: [19549] VAAPI: audio/alsa: using device 'hdmi:CARD=PCH,DEV=2,AES0=0x04'

    vdr: [19549] VAAPI-ERROR: audio/alsa: set params error: Das Argument ist ungültig

    vdr: [19549] VAAPI-ERROR: audio: can't set channels 0 sample-rate 0Hz

    vdr: [19581] device 1 TS buffer thread ended (pid=19538, tid=19581)

    vdr: [19580] buffer stats: 88924 (0%) used

    vdr: [19580] device 1 receiver thread ended (pid=19538, tid=19580)

    vdr: [19538] CAM 1: assigned to device 1

    vdr: [19585] device 1 receiver thread started (pid=19538, tid=19585, prio=high)

    vdr: [19538] SendCaPmts CAM 1: [0] actives in CAM: 0 -> 0 (0 pids)

    vdr: [19586] device 1 TS buffer thread started (pid=19538, tid=19586, prio=high)

    vdr: [19543] PMT 111914/131: GetChannelsWrite(10) failed

    vdr: [19543] PMT 111914/131: GetChannelsWrite(100) Retry 1 failed

    vdr: [19538] SendCaPmts CAM 1: [1] actives in CAM: 0 -> 1 (3 pids)

    vdr: [19543] PMT 111914/516: GetChannelsWrite(10) failed

    vdr: [19543] PMT 111914/516: GetChannelsWrite(100) Retry 1 failed

    vdr: [19550] timer 0 (114 1150-1320 'His Dark Materials') set to event So. 20.12.2020 12:05-13:05 'His Dark Materials'

    vdr: [19550] timer 0 (114 1250-1420 'His Dark Materials') set to event So. 20.12.2020 13:05-14:05 'His Dark Materials'

    vdr: [19550] timer 0 (114 1350-1525 'His Dark Materials') set to event So. 20.12.2020 14:05-15:10 'His Dark Materials'

    vdr: [19550] timer 0 (114 1455-1625 'His Dark Materials') set to event So. 20.12.2020 15:10-16:10 'His Dark Materials'

    vdr: [19550] timer 0 (114 1555-1725 'His Dark Materials') set to event So. 20.12.2020 16:10-17:10 'His Dark Materials'

    vdr: [19550] timer 0 (114 1655-1825 'His Dark Materials') set to event So. 20.12.2020 17:10-18:10 'His Dark Materials'

    vdr: [19550] timer 0 (114 1755-1925 'His Dark Materials') set to event So. 20.12.2020 18:10-19:10 'His Dark Materials'

    vdr: [19550] timer 0 (114 1855-2030 'His Dark Materials') set to event So. 20.12.2020 19:10-20:15 'His Dark Materials'

    vdr: [19543] PMT 111914/118: GetChannelsWrite(10) failed

    vdr: [19543] PMT 111914/118: GetChannelsWrite(100) Retry 1 failed

    vdr: [19543] PMT 111914/118: GetChannelsWrite(100) Retry 2 failed

    vdr: [19543] PMT 111914/118: GetChannelsWrite(100) Retry 3 failed

    vdr: [19543] PMT 111914/118: GetChannelsWrite failed!

    vdr: [19543] PMT 111914/129: GetChannelsWrite(10) failed

    vdr: [19543] PMT 111914/129: GetChannelsWrite(100) Retry 1 failed

    vdr: [19543] PMT 111914/130: GetChannelsWrite(10) failed

    vdr: [19550] EPGSearch: search timer update finished

    Mit 20s Delay:

    Display Spoiler

    vdr: [2917] timer 78 (106 2000-2225 'Der goldene Kompass') set to event So. 13.12.2020 20:15-22:10 'Der goldene Kompass'

    vdr: [2917] max. latency time 1 seconds

    vdr: [2981] changing pids of channel 100 (Sky Cinema Premieren HD) from 1279+1279=27:0;1283=deu@106:0:0 to 1279+1279=27:0;1283=deu@106,1284=eng@106:0:0

    vdr: [2981] changing pids of channel 108 (Sky Cinema Classics) from 1791+1791=27:1792=deu@4,1793=eng@4:0:0 to 1791+1791=27:1792=deu@4:0:0

    vdr: epg2vdr: Handler: Init handler instance for thread 2981

    vdr: [2981] changing pids of channel 1832 (Sky Cinema Premieren +24) from 4607+4607=27:4608=deu@4:0:0 to 4607+4607=27:4608=deu@4,4609=eng@4:0:0

    vdr: [2917] retuning due to modification of channel 100 (Sky Cinema Premieren HD)

    vdr: [2917] switching to channel 100 S19.2E-133-6-131 (Sky Cinema Premieren HD)

    vdr: [3020] VAAPI: video: reset start

    vdr: [3020] VAAPI: video: set clock --:--:--.---

    vdr: [2917] SendCaPmts CAM 1: [1] actives in CAM: 1 -> 0 (0 pids)

    vdr: [2917] SendCaPmts CAM 1: [0] actives in CAM: 1 -> 0 (0 pids)

    vdr: [2917] CAM 1: unassigned from device 1

    vdr: [2917] CAM 1/1: reusing MTD CAM slot

    vdr: [2981] PMT 111914/118: GetChannelsWrite(10) failed

    vdr: [2988] VAAPI: audio/alsa: using device 'hdmi:CARD=PCH,DEV=2,AES0=0x04'

    vdr: [2988] VAAPI-ERROR: audio/alsa: set params error: Das Argument ist ungültig

    vdr: [2988] VAAPI-ERROR: audio: can't set channels 0 sample-rate 0Hz

    vdr: [3017] device 1 TS buffer thread ended (pid=2917, tid=3017)

    vdr: [3016] buffer stats: 215072 (0%) used

    vdr: [3016] device 1 receiver thread ended (pid=2917, tid=3016)

    vdr: [2981] PMT 111914/118: GetChannelsWrite(100) Retry 1 failed

    vdr: [2917] CAM 1: assigned to device 1

    vdr: [3090] device 1 receiver thread started (pid=2917, tid=3090, prio=high)

    vdr: [3091] device 1 TS buffer thread started (pid=2917, tid=3091, prio=high)

    vdr: [2981] PMT 111914/118: GetChannelsWrite(100) Retry 2 failed

    vdr: [2981] PMT 111914/118: GetChannelsWrite(100) Retry 3 failed

    vdr: [2981] PMT 111914/118: GetChannelsWrite failed!

    vdr: [2917] SendCaPmts CAM 1: [0] actives in CAM: 0 -> 0 (0 pids)

    vdr: [2917] SendCaPmts CAM 1: [1] actives in CAM: 0 -> 1 (3 pids)

    [..]

    vdr: [3000] EPGSearch: timer conflict check started

    vdr: [3000] EPGSearch: timer conflict check finished

    [..]

    EPGSearch: search timer update started

    timer 0 (114 1150-1320 'His Dark Materials') set to event So. 20.12.2020 12:05-13:05 'His Dark Materials'

    timer 0 (114 1250-1420 'His Dark Materials') set to event So. 20.12.2020 13:05-14:05 'His Dark Materials'

    timer 0 (114 1350-1525 'His Dark Materials') set to event So. 20.12.2020 14:05-15:10 'His Dark Materials'

    timer 0 (114 1455-1625 'His Dark Materials') set to event So. 20.12.2020 15:10-16:10 'His Dark Materials'

    timer 0 (114 1555-1725 'His Dark Materials') set to event So. 20.12.2020 16:10-17:10 'His Dark Materials'

    timer 0 (114 1655-1825 'His Dark Materials') set to event So. 20.12.2020 17:10-18:10 'His Dark Materials'

    timer 0 (114 1755-1925 'His Dark Materials') set to event So. 20.12.2020 18:10-19:10 'His Dark Materials'

    timer 0 (114 1855-2030 'His Dark Materials') set to event So. 20.12.2020 19:10-20:15 'His Dark Materials'

    EPGSearch: search timer update finished


    Problem ist allerdings, daß es mal klappt, mal nicht. Also eher eine Race-Condition, denke ich.

    Man kann die Versuche des "GetChannelsWrite" zwar erhöhen, wenn es bei 5 Versuchen nicht geklappt hat, geht es schief.

    Stefan

  • Nochmal zum gucken den Patch von Helmut an das Klaus'sche diff angepaßt:

    Display Spoiler

    Dec 8 13:03:15 roadrunner vdr: [19547] VAAPI: codec/audio: drift( 0) 44055us 21146

    Dec 8 13:03:46 roadrunner vdr: epg2vdr: Updating table timers (and remove deleted and finished timers older than 2 days)

    Dec 8 13:03:47 roadrunner vdr: epg2vdr: Updating table timers done

    Dec 8 13:03:47 roadrunner vdr: [19461] PMT 112031/3503: GetChannelsWrite(10) failed

    Dec 8 13:03:47 roadrunner vdr: [19457] PMT 111914/130: GetChannelsWrite(10) failed

    Dec 8 13:03:47 roadrunner vdr: [19461] PMT 112031/3503: GetChannelsWrite(100) Retry 1 failed

    Dec 8 13:03:47 roadrunner vdr: [19457] PMT 111914/130: GetChannelsWrite(100) Retry 1 failed

    Dec 8 13:03:47 roadrunner vdr: [19461] PMT 112031/3503: GetChannelsWrite(100) Retry 2 failed

    Dec 8 13:03:47 roadrunner vdr: [19457] PMT 111914/130: GetChannelsWrite(100) Retry 2 failed

    Dec 8 13:03:56 roadrunner vdr: [19525] VAAPI: video: 18:28:09.376 +41 597 0/\ms 58+3 v-buf

    Dec 8 13:04:01 roadrunner vdr: [19457] PMT 111914/130: GetChannelsWrite(10) failed

    Dec 8 13:04:36 roadrunner vdr: [19457] PMT 111914/129: GetChannelsWrite(10) failed

    Dec 8 13:04:36 roadrunner vdr: [19457] PMT 111914/118: GetChannelsWrite(10) failed

    Dec 8 13:04:38 roadrunner vdr: [19461] PMT 112031/2691: GetChannelsWrite(10) failed

    Dec 8 13:04:38 roadrunner vdr: [19461] PMT 112031/221: GetChannelsWrite(10) failed

    Dec 8 13:04:38 roadrunner vdr: [19461] PMT 112031/221: GetChannelsWrite(100) Retry 1 failed

    Dec 8 13:04:47 roadrunner vdr: epg2vdr: Updating table timers (and remove deleted and finished timers older than 2 days)

    Dec 8 13:04:47 roadrunner vdr: epg2vdr: Updating table timers done

    Dec 8 13:04:48 roadrunner vdr: [19461] PMT 112031/117: GetChannelsWrite(10) failed

    Dec 8 13:04:48 roadrunner vdr: [19457] PMT 111914/118: GetChannelsWrite(10) failed

    Dec 8 13:04:56 roadrunner vdr: [19525] VAAPI: video: 18:29:09.376 +43 631 0/\ms 64+3 v-buf

    Dec 8 13:04:56 roadrunner vdr: [19525] VAAPI: video/vaapi: 0 missed, 2372 duped, 17 dropped frames of 35962,36000

    Dec 8 13:04:57 roadrunner vdr: [19547] VAAPI: codec/audio: drift( 0) 51400us 24672

    Dec 8 13:05:06 roadrunner vdr: [19457] PMT 111914/43: GetChannelsWrite(10) failed

    Dec 8 13:05:07 roadrunner vdr: [19457] PMT 111914/129: GetChannelsWrite(10) failed

    Dec 8 13:05:07 roadrunner vdr: [19457] PMT 111914/129: GetChannelsWrite(100) Retry 1 failed

    Dec 8 13:05:25 roadrunner vdr: [19457] PMT 111914/516: GetChannelsWrite(10) failed

    Dec 8 13:05:27 roadrunner vdr: [19461] PMT 112031/3974: GetChannelsWrite(10) failed

    Dec 8 13:05:28 roadrunner vdr: [19461] PMT 112031/2691: GetChannelsWrite(10) failed

    Dec 8 13:05:28 roadrunner vdr: [19461] PMT 112031/2691: GetChannelsWrite(100) Retry 1 failed

    Dec 8 13:05:47 roadrunner vdr: epg2vdr: Updating table timers (and remove deleted and finished timers older than 2 days)

    Dec 8 13:05:47 roadrunner vdr: epg2vdr: Updating table timers done

    Dec 8 13:05:48 roadrunner vdr: [19457] PMT 111914/131: GetChannelsWrite(10) failed

    Dec 8 13:05:48 roadrunner vdr: [19461] PMT 112031/223: GetChannelsWrite(10) failed

    Dec 8 13:05:48 roadrunner vdr: [19457] PMT 111914/131: GetChannelsWrite(100) Retry 1 failed

    Dec 8 13:05:48 roadrunner vdr: [19461] PMT 112031/223: GetChannelsWrite(100) Retry 1 failed

    Dec 8 13:05:55 roadrunner vdr: [19457] PMT 111914/516: GetChannelsWrite(10) failed

    Dec 8 13:05:56 roadrunner vdr: [19525] VAAPI: video: 18:30:09.376 +42 566 0/\ms 57+3 v-buf

    Dec 8 13:05:56 roadrunner vdr: [19457] PMT 111914/43: GetChannelsWrite(10) failed

    Dec 8 13:06:21 roadrunner vdr: [19457] PMT 111914/130: GetChannelsWrite(10) failed

    Dec 8 13:06:21 roadrunner vdr: [19457] PMT 111914/130: GetChannelsWrite(100) Retry 1 failed

    Dec 8 13:06:21 roadrunner vdr: [19461] PMT 112031/3974: GetChannelsWrite(10) failed

    Dec 8 13:06:39 roadrunner vdr: [19547] VAAPI: codec/audio: drift( 0) 58733us 28192

    Dec 8 13:06:47 roadrunner vdr: epg2vdr: Updating table timers (and remove deleted and finished timers older than 2 days)

    Dec 8 13:06:47 roadrunner vdr: epg2vdr: Updating table timers done

    Dec 8 13:06:47 roadrunner vdr: [19461] PMT 112031/3501: GetChannelsWrite(10) failed

    Dec 8 13:06:47 roadrunner vdr: [19457] PMT 111914/130: GetChannelsWrite(10) failed

    Dec 8 13:06:51 roadrunner vdr: [19457] PMT 111914/129: GetChannelsWrite(10) failed

    Dec 8 13:06:52 roadrunner vdr: [19457] PMT 111914/130: GetChannelsWrite(10) failed

    Dec 8 13:06:56 roadrunner vdr: [19525] VAAPI: video: 18:31:09.376 +41 661 0/\ms 60+3 v-buf


    "Gefühlt" wird GetChannelsWrite jetzt häufiger aufgerufen, als ohne diff, aber es scheitert nicht mehr entgültig.

    Grüße und Danke,

    Stefan

  • kls : Dein 'vdr-2-4-5-pat-lock-channels-early-diff' ist schon eine gute Lösung um keine PMT zu verpassen, ich habe keine Nachteile bemerkt. Und wie es aussieht, löst das auch die Probleme von Fourty2.

    Eine Frage zum StateKey.Remove() - sollte hier vielleicht doch ein 'false' mitgegeben werden - als Ersatz für 'ChannelsModified' ?

    LG Helmut

    HelmutB passed unfortunately away on July 21, 2022 ... RIP 🖤

  • Bei genauerer Betrachtung wird beim 'vdr-2.4.5-pat-lock-channels-early.diff' die meiste Zeit ein unnötiger Lock auf 'Channels geholt' weil sich die PMTs nicht geändert haben.

    Hier doch noch eine Variante, die den Lock wie zuvor erst nach der Überprüfung auf neue Daten durch 'PmtVersionChanged()' holt, und im Lock-Fehlerfall die SID auf "noch nicht gesehen" zurücksetzt.

    Und dann ist mir noch ein kleiner Fehler bei shared PMTs aufgefallen, der nach dem ersten Durchlauf nicht mehr alle SIDs einer PMT-Pid prüft.

    Fourty2 - vielleicht kannst du diesen Patch auch noch testen.

    LG Helmut

  • HelmutB † :

    Teste ich nach 22:15

    Bisher sieht der ...early-02 sehr gut aus:

    bei zwei laufenden CI-Timern kann ich nun sogar einen Aktiven löschen und damit Livebild-Umschalten (nächster CI-Timer) riskieren, ohne daß der VDR die VDSB-Grätsche macht. Fein.

    Die Aufnahmen hatten auch keine TS-Fehler.

    Stefan

  • HelmutB † :

    Restart mit zwei aktiven CI-Timern:

    Display Spoiler

    Dec 8 22:26:02 roadrunner vdr: [8208] PMT 111170/98/116: GetChannelsWrite() failed *** retry ***

    [..]

    Dec 8 22:26:04 roadrunner vdr: [8208] PMT 111170/98/116: GetChannelsWrite() failed *** retry ***

    Dec 8 22:26:04 roadrunner vdr: [8280] ERROR: video data stream broken

    Dec 8 22:26:04 roadrunner vdr: [8280] emergency exit request ignored according to setup

    Dec 8 22:26:04 roadrunner vdr: [8208] PMT 111170/98/116: GetChannelsWrite() failed *** retry ***
    [..]

    Fängt sich zwar nach einer halben Ewigkeit, aber ... irgendwas klemmt da mehr als bei Klaus' Fix.

    (Läuft auch beim zweiten Versuch in das Problem)

    Log per PN.

    Stefan

  • HelmutB † Noch eine Frage:

    Mir ist der Parameter SetNewVersion in

    bool cPatFilter::PmtVersionChanged(int PmtPid, int Sid, int Version, bool SetNewVersion)

    nicht ganz klar. Es gibt nur *eine* Aufrufstelle dieser Funktion, und an der wird 'true' übergeben. Der (Defaut-)Wert 'false' kommt nie zum Tragen. Ausserdem hat PmtVersionChanged() einiges an Seiteneffekten, die über die bloße Abfrage, ob sich die Version geändert hat, weit hinausgehen. War da mit 'SetNewVersion = false' mal eine reine Abfrage geplant?

    An der Aufrufstelle hängt die Entscheidung, ob 'return' gemacht wird, ja nur davon ab, ob sich die Version geändert hat.

    Könnte man das Ganze eventuell etwas "entwirren" und die Channels erst dann zu locken versuchen, wenn man weiß, dass kein 'return' ausgeführt wird, und die Seiteneffekte erst nach erfolgreichem Locken der Channels ausführen?

  • vdr-2.4.4-pat-fix-shared-pmt.diff ist davon aber unabhängig richtig, oder

    Ja, das ist unabhängig, und eine Fehlerkorrektur, da sonst ab dem zweiten "Umlauf" bei shared PMT-Pids schon nach der ersten SID auf die nächsten PMT-Pid geswitched wird.

    Das "bool SetNewVersion" hat keine Funktion mehr. Es wurde bei VDR-2.4.2 verwendet und ich habe es damals belassen, weil ich nicht sicher war, ob es nicht doch doch irgendwann gebraucht wird. Jetzt kann man es eigentlich entfernen.

    Und entwirren könnte man es vielleicht so (noch mit dem SetNewVersion Parameter);

    Das habe ich jetzt aber nur in einem Texteditor erstellt. Selbst testen kann ich es erst später.

    Helmut

    HelmutB passed unfortunately away on July 21, 2022 ... RIP 🖤

  • Jetzt fällt es mir gerade wieder ein - das "bool SetNewVersion" war so eine Art "query" Parameter, mit dem nur ein PMT Versionswechsel abgefragt, aber nichts geändert wurde, Den könnte man jetzt vielleicht für die Entscheidung ob ein "GetChannelsWrite()" überhaupt notwendig ist verwenden.

    In PmtVersionChanged() so vielleicht:

    Code
    bool cPatFilter::PmtVersionChanged(int PmtPid, int Sid, int Version, bool SetNewVersion)
    {
      int i = 0;
      for (cPmtSidEntry *se = pmtSidList.First(); se; se = pmtSidList.Next(se), i++) {
          if (se->Sid() == Sid && se->Pid() == PmtPid) {
             if (!SetNewVersion)
                return se->Version() != Version; //++++
             if (!se->Received()) {
    ....

    Helmut

    HelmutB passed unfortunately away on July 21, 2022 ... RIP 🖤

Participate now!

Don’t have an account yet? Register yourself now and be a part of our community!