[Patch] CAM-Tweaks für Multi Channel Decryption

  • Hello HelmutB , was trying to update from 2.4.1 to 2.4.4. Downloaded the patch but I cannot get it to apply cleanly. Am I doing something wrong?


  • Hello again, found that I needed to apply the first patch and then optionally the second. :)


    But still I get this.


    Code
    1. root@timeshift:/home/timeshift/Nedlastinger/vdr-2.4.4# patch -p1 < ../camtweaks-patch/vdr-2.4.4-camtweaks-2.4.1_scaForceNewCat.patch
    2. patching file ci.c
    3. Reversed (or previously applied) patch detected! Assume -R? [n] n
    4. Apply anyway? [n] y
    5. Hunk #1 FAILED at 123.
    6. Hunk #2 FAILED at 154.
    7. Hunk #3 FAILED at 213.
    8. Hunk #4 succeeded at 279 (offset 3 lines).


    Now it does compile so I will give this a whirl. It comes down to my lacking german skills... :D Thanks!

  • Hi Corvy,

    even if your first try with vdr-2.4.4-camtweaks-2.4.1_scaForceNewCat.patchfailed, the file ci.c was partially patched and that's why you got a warning on the second try

    Apply both patches in the right order again, but with a clean vdr-2.4.4 (or the newest vdr-2.4.5) source.
    Helmut


  • Hello HelmutB I did actually revert to original and apply them both again but still the error on the 3 first hunks. When I manually checked I could see that the information was allready there so that might be the issue. I did compile and it works just fine.


    I might go for the newest 2.4.5 source, but I was hesitant due to it not being released yet. Thanks for the support!

  • Hallo zusammen,


    hab mit 2.4.5 weiterhin das Problem, das der VDR bisweilen nicht per CI-Modul aufnimmt. Im Prinzip:


    1) VDR Start (per Timer)

    2) Steht auf verschlüsseltem Programm ... Annahme: Schwarzbild.



    Jetzt schalten wir die zweite Karte von 100 auf was "Freies" und zurück:



    Der VDR bemerkt nun endlich die Kanaldatenänderung


    vdr: [26876] stopping recording due to modification of channel 100 ([..])

    vdr: [26932] recording thread ended (pid=26876, tid=26932)

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

    [..]

    vdr: [26876] retuning due to modification of channel 100 ([..])

    vdr: [26876] switching to channel 100 S19.2E-133...

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

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

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

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

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

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

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

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

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

    vdr: [26876] switching device 1 to channel 100 S19.2E-133...

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

    [..]

    vdr: [26876] cFileName::SetOffset: removing zero-sized file /srv/vdr/video/local/../00001.ts

    vdr: [26876] recording to '/srv/vdr/video/local/xx/xx/00001.ts'

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


    .. und die Daten landen auf der Platte.


    Stellen sich zwei Fragen:

    - Warum merkt der VDR nicht, daß die Kanaleinstellungen zuvor nicht passen kann ( -> retune)?

    - Was genau geht da verloren?


    Lösung wäre, den Retune auch in diesem Falle zu erzwingen, denke ich. Nur wie?


    Grüße,

    Stefan

  • Wieso startest du nicht auf einem FTA Sender? Kann man doch so im Setup des VDRs einstellen...

  • Hallo,


    starten auf einem FTA Sender hilft nur für einzelne Aufnahmen (und nicht zuverlässig).


    Guckt jemand über das Modul und eine PayTV Aufnahme startet auf einem anderen Programm, gibt es teilweise auch "leere" Aufnahmen (oder, falls aktiv, VDSB-Neustarts, die es eher verschlimmern).


    Daher die Retune-Idee, etwa wie bei der Einkabellösung, wenn die Datenlage nicht ist, wie sie erwartet wurde.


    Grüße,

    Stefan

  • Ich habe das Problem auch, VDR startet auf dem verschlüsseltem Sender, das Bild bleibt meist schwarz, die Aufnahme startet und VDSB.

    Workaround der bei mir funktioniert: Ich lasse VDR auf einem anderen verschlüsseltem Sender auf demselben Transponder starten, wenn die Aufnahme beginnt schaltet er um und die Aufnahme ist OK. Starten auf FTA hatte übrigens auch nicht geholfen (mit älterer VDR Version).

    Dieses Problem gibt es erst seit ein paar Wochen/Monaten, vermutlich nachdem VDR upgedatet wurde.

    Ich benutze dabei KEINE CAM-Tweaks.

  • Stellen sich zwei Fragen:

    - Warum merkt der VDR nicht, daß die Kanaleinstellungen zuvor nicht passen kann ( -> retune)?

    - Was genau geht da verloren?

    Gleich nach dem Start oder wenn VDR einen Transponder zum erstem mal verwendet, werden in pat.c aus den PMTs u.a. die CaDescriptoren der einzelnen (verschlüsseltetn) Programme ausgelesen. Das dauert normalerweise ca. 1 bis 2 Sekunden. Danach folgt erforderlichenfalls ein Retune mit Senden der nun vollständigen CaPmt an das CI-Modul.


    Du verwendest epg2vdr (zumindest lt. Log in diesem Post).


    Möglicherweise bekommt pat.c vor dem Verarbeiten der PMT keinen Zugriff auf die "Channels", weil epg2vdr in cUpdate::refreshEpg() bereits einen Lock auf die "Channels" hält - und zwar länger als 10ms. Dadurch wird aber die PMT für das betreffende Programm nicht ausgewertet. Nach einem neuerlichen Tunen auf diesen Transponder klappt es dann, weil epg2vdr das Update schon erledigt - oder zumindest die "Channels" nicht mehr blockiert.


    Um festzustellen ob das wirklich die Ursache ist, im Anhang ein in kleiner Patch der eine Meldung ausgibt, wenn in pat.c der Lock auf "Channels" fehlschlägt und es dann auch noch ein zweites Mal versucht, diesmal mit längerem Timeout.

    LG Helmut

  • Hallo Helmut,


    Bei Start auf FTA-Programm:

    vdr: [7679] VAAPI: video: --:--:--.--- +0 0 0/\ms 0+1 v-buf

    vdr: [7636] PMT 111493/10303: GetChannelsWrite(10) failed

    vdr: scraper2vdr: Got UUID '705CACD0-806D-43A1-BF7B-6AFD5D198836' by epg2vdr

    vdr: scraper2vdr: Trying to re-connect to database!

    vdr: scraper2vdr: Calling mysql_init(7667)

    vdr: [7636] PMT 111493/10304: GetChannelsWrite(10) failed

    vdr: scraper2vdr: Connection established successfull!

    vdr: scraper2vdr: epgd busy, trying again in 60 seconds ...

    vdr: [7636] PMT 111493/10304: GetChannelsWrite(100) failed

    vdr: [7653] EPGSearch: search timer update finished

    vdr: [7679] VAAPI: video/vaapi: synced after 164 frames



    Und bei Start auf CI+-Programm:

    vdr: [7955] CAM 2: no module present

    vdr: [7953] CAM 1: Xxx XXX CI Plus Modul, 01, CAFE, BABE

    vdr: [7953] CAM 1: system ids: 0ooo

    vdr: [7953] CAM 1: activating static CaPmt mapping: CAID 0xoooo, 2 services, 4 pids

    vdr: [7953] CAM 1: Tweaks [enabled]: Flags: 0x843, Limit: 2 (MCD STATIC DESELECT)

    vdr: [7953] CAM 1: multi channel decryption (MCD) forced by Setup!

    vdr: [7953] CAM 1: supports multi transponder decryption (MTD)

    vdr: [7953] CAM 1: activating MTD support

    vdr: [7943] CAM 1: ready, master (Xxx XXX CI Plus Modul)

    vdr: [7943] CAM 2: ready, master (empty)

    vdr: [7943] switching to channel 100 S19.2E-133...

    vdr: [7943] CAM 1/1: creating new MTD CAM slot

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

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

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

    vdr: [7943] setting watchdog timer to 180 seconds

    vdr: [7983] SVDRP server handler thread started (pid=7943, tid=7983, prio=low)

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

    vdr: [7983] SVDRP roadrunner opening port 6419/tcp

    vdr: [7983] SVDRP roadrunner listening on port 6419/tcp

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

    vdr: [7985] SVDRP client handler thread started (pid=7943, tid=7985, prio=low)

    vdr: [7985] SVDRP roadrunner opening port 6419/udp

    vdr: [7985] SVDRP roadrunner listening on port 6419/udp

    vdr: [7943] VAAPI: video/vaapi: clear image

    vdr: [7943] timer 1 ..

    [..]

    vdr: [7943] timer 13 ..

    vdr: [7943] max. latency time 1 seconds

    vdr: [7966] EPGSearch: timer conflict check started

    vdr: [7965] EPGSearch: search timer update started

    vdr: [7966] EPGSearch: timer conflict check finished

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

    vdr: [7948] PMT 111914/267: GetChannelsWrite(10) failed

    vdr: [7948] PMT 111914/267: GetChannelsWrite(100) failed

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

    vdr: [7943] retuning due to modification of channel 100 ...

    vdr: [7943] switching to channel 100 S19.2E-133-...

    vdr: [7986] VAAPI: video: reset start

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

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

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

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

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

    vdr: [7948] PMT 111914/516: GetChannelsWrite(100) failed

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

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

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

    vdr: scraper2vdr: Got UUID '705CACD0-806D-43A1-BF7B-6AFD5D198836' by epg2vdr

    vdr: scraper2vdr: Trying to re-connect to database!

    vdr: scraper2vdr: Calling mysql_init(7979)

    vdr: [7948] PMT 111914/43: GetChannelsWrite(10) failed

    vdr: scraper2vdr: Connection established successfull!

    vdr: scraper2vdr: epgd busy, trying again in 60 seconds ...

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

    vdr: [7982] buffer stats: 83472 (0%) used

    vdr: [7982] device 1 receiver thread ended (pid=7943, tid=7982)

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

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

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

    vdr: [7948] PMT 111914/43: GetChannelsWrite(100) failed

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

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

    vdr: [7965] EPGSearch: search timer update finished

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

    vdr: [7986] VAAPI: video/vaapi: synced after 50 frames


    Bild ist jetzt bei mehreren Versuchen immer da...


    Grüße,

    Stefan


  • vdr: [7948] PMT 111914/267: GetChannelsWrite(10) failed

    vdr: [7948] PMT 111914/267: GetChannelsWrite(100) failed

    ....

    Bild ist jetzt bei mehreren Versuchen immer da...


    Aber noch nicht zuverlässig - mit Sid 267 (Sky Sport Bundesliga 2 HD) hätte es z.B. nicht funktioniert.


    Es sollte eher in epg2vdr angepasst werden.

    Wenn es die Stelle ist, die ich meine, dann braucht es bei epg2vdr in 'update.c' erstens keinen Write-Lock auf "channels", und zweites kann dieser Lock viel früher wieder aufgehoben werden.

    Ich hätte hier einen Patch für epg2vdr - ich habe ihn aber aber nicht getestet.

    LG Helmut

  • Mal eben durch den Compiler geschoben:


    Code
    1. update.c: In member function ‘int cUpdate::refreshEpg(const char*, int)’:
    2. update.c:1622:55: error: invalid conversion from ‘const cChannels*’ to ‘cChannels*’ [-fpermissive]
    3. cChannels* channels = cChannels::GetChannelsRead(channelsKey, 500);
    4. ~~~~~~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~
    5. make[1]: *** [Makefile:127: update.o] Fehler 1
    6. make[1]: *** Es wird auf noch nicht beendete Prozesse gewartet....


    Das kam, meine ich, wenn die Definition mangels Lock fehlte ... (lange her)..


    Stefan

  • Das verschiebt den Fehler:


    Code
    1. update.c: In member function ‘int cUpdate::refreshEpg(const char*, int)’:
    2. update.c:1641:71: error: invalid conversion from ‘const cChannel*’ to ‘cChannel*’ [-fpermissive]
    3. if (channels && schedules && (channel = channels->GetByChannelID(channelId, true)))
    4. ~~~~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~
    5. make[1]: *** [Makefile:127: update.o] Fehler 1


    Stefan

  • Log-Output:
    vdr: [12969] CAM 2: no module present

    vdr: [12966] CAM 1: Xxx XXX CI Plus Modul, 01, CAFE, BABE

    vdr: [12966] CAM 1: system ids: oooo

    vdr: [12966] CAM 1: activating static CaPmt mapping: CAID 0xoooo, 2 services, 4 pids

    vdr: [12966] CAM 1: Tweaks [enabled]: Flags: 0x843, Limit: 2 (MCD STATIC DESELECT)

    vdr: [12966] CAM 1: multi channel decryption (MCD) forced by Setup!

    vdr: [12966] CAM 1: supports multi transponder decryption (MTD)

    vdr: [12966] CAM 1: activating MTD support

    vdr: [12954] CAM 1: ready, master (Xxx XXX CI Plus Modul)

    vdr: [12954] CAM 2: ready, master (empty)

    vdr: [12954] switching to channel 100 S19.2E-133...

    vdr: [12954] CAM 1/1: creating new MTD CAM slot

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

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

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

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

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

    vdr: [12954] setting watchdog timer to 180 seconds

    vdr: [12954] VAAPI: video/vaapi: clear image

    vdr: [12954] timer 1

    [..]

    vdr: [12954] timer 13

    vdr: [12978] EPGSearch: search timer update started

    vdr: [12979] EPGSearch: timer conflict check started

    vdr: [12979] EPGSearch: timer conflict check finished

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

    vdr: [12960] PMT 111914/131: GetChannelsWrite(100) failed

    vdr: [12960] PMT 111914/267: GetChannelsWrite(10) failed

    vdr: [12960] PMT 111914/329: GetChannelsWrite(10) failed

    vdr: [12960] PMT 111914/329: GetChannelsWrite(100) failed

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

    vdr: [12960] PMT 111914/43: GetChannelsWrite(10) failed

    vdr: [12960] PMT 111914/43: GetChannelsWrite(100) failed

    vdr: scraper2vdr: Got UUID '705CACD0-806D-43A1-BF7B-6AFD5D198836' by epg2vdr

    vdr: scraper2vdr: Trying to re-connect to database!

    vdr: scraper2vdr: Calling mysql_init(12992)

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

    vdr: scraper2vdr: Connection established successfull!

    vdr: scraper2vdr: epgd busy, trying again in 60 seconds ...

    vdr: [12960] PMT 111914/118: GetChannelsWrite(100) failed

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

    vdr: [12978] EPGSearch: search timer update finished

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

    vdr: [12954] VAAPI: video/vaapi: clear image

    vdr: [12999] VAAPI-ERROR: video/vaapi: black surface displayed

    vdr: [12999] VAAPI: video: --:--:--.--- +0 0 0/\ms 0+0 v-buf

    vdr: scraper2vdr: epgd busy, trying again in 60 seconds ...

    vdr: epg2vdr: Cleanup deleted recordings at database (forced)

    vdr: epg2vdr: Info: Marked 1 recordings as deleted

    vdr: epg2vdr: Updating recording list table


    Mal kein Bild ... (mit "Write", wg. Fehler).


    Stefan


  • Das mit dem "break" stimmte nicht ganz.

    Hier ein Patch mit GetChannelsRead() der sich kompilieren lässt.

    Zusätzlich noch ein Patch für dieses seltsame "my_bool" falls ihn wer braucht.


    Falls sich damit nichts ändert muß der Lock irgendwo anders gehalten werden.

    Gibt es die Probleme auch ohne epg2vdr?

    LG Helmut

  • Hallo Helmut,


    hab mir gerade eine while-Schleife um GetChannelsWrite(1000) in die pat.c gepatched um mal zu gucken, ob das irgendwann mal zur Besinnung kommt. Nach 180 Sekunden schlägt dann der Watchdog zu.


    Bleibt eigentlich nur, sich den GetChannelsWrite-Fehler zu merken und das später nachzuholen.


    Grüße,

    Stefan