Heaer Dateien in include/vdr stimmen nicht mit ausgelieferten Binaries ueberein?

  • Hallo,


    Erst mal vielen Dank an das yavdr Team fuer die super Distribution!!!


    Beim integrieren eines Plugins bin ich auf folgendes Problem gestossen:


    Das Plugins verwendet die Ca() Funktion aus der Klasse cChannel. Mir ist aufgefallen, dass die Ca() Funktion immer den Wert 0 zurueckliefert, obwohl in channels.conf entsprechende CAIDs eingetragen sind. Ein Versuch die CAID zu setzen (ueber die verfuegbare Memberfunktion) hat auch nicht geklappt. Es wird immer 0 zuruckgeliefert.


    Daraufhin habe ich mir die Sourcen von vdr via launchpad runtergeladen (apt-get source vdr und auch direkt vom git hub) und dabei festgestellt,dass sich die header Dateien unterscheiden. Und zwar sind genau vor der Member Variable caids 3 zusaetzlich Eintraege in den Headern der Distribution enthalten die in der Version vom Repository nicht drinnen sind. Der Versuch das Plugin mit den runtergeladenen VDR Headern zu builden hat zwar geklappt aber beim Laden des Plugins konnten nicht alle Symbole aufgeloest werden.


    Der naechste Versuch war das Header File channels.h zu patchen (auskommentieren der 3 zusaetzlichen Member) und das Plugin neu builden. Diese Version hat dann die richtigen CAIDS mit der Funtion geliefert (cChannel::Ca()).
    Durch die Inline Funktionen ist ein solches Verhalten erklaerbar. Ansonsten faellt mir leider keine andere Erklaerung dafuer ein.


    Nun zu meiner Frage: Koennte es sein, dass die Header Dateien in der Distribution nicht konsistent sind mit denjenigen Header Dateien die fuer das Builden verwendet wurden.


    Gruss
    Roman

    Mainboard: ION ITX-S-E, Gehaeuse: Antec ISK 300-150, DVB Karte: Satix S2 Dual V3, 60 GB SDD, Puls-Eight CEC, 2 GB RAM

  • aptitude install vdr-dev sollte die zum vdr passenden Header installieren. Bei bestimmten Plugins brauch man einen Patch der das Plugin auf die veränderten Klassen anpasst die wir durch dynamite haben.

    VDR User: 87 - LaScala LC14B - LG/Phillipps 6,4" VGA Display | Asrock H61/U3S3 | G630T | 1x 16GB Mobi Mtron 3035 1x WD 750GB 2,5" |1x L4m DVB-S2 Version 5.4

  • aptitude install vdr-dev sollte die zum vdr passenden Header installieren. Bei bestimmten Plugins brauch man einen Patch der das Plugin auf die veränderten Klassen anpasst die wir durch dynamite haben.


    Steffen beschreibt die richtige Vorgehensweise. Aber nochmal generell, die Header stimmen natürlich überein. Nur nach dem Auspacken des Source-Paketes sind ja die Patches in dem Verzeichnis debian/patches noch nicht ausgeführt worden, deshalb gibt es dann noch Unterschiede.


    Gerald


    HP Proliant MicroServer Gen8, Xeon E3-1230, 12 GB RAM, 3xWD red 2TB im RAID 5, 2xSundtek MediaTV Home DVB-C/T, L4M TWIN-C/T, Ubuntu Server 14.04.1, Plex Media Server
    Samsung UE55H6470

  • Danke fuer die schnelle Antwort.


    aptitude install vdr-dev hab ich schon gemacht. Aber die Patches nicht angebracht. Werde ich schleunigst nachholen.


    Gruss
    Roman

    Mainboard: ION ITX-S-E, Gehaeuse: Antec ISK 300-150, DVB Karte: Satix S2 Dual V3, 60 GB SDD, Puls-Eight CEC, 2 GB RAM

  • aptitude install vdr-dev hab ich schon gemacht. Aber die Patches nicht angebracht. Werde ich schleunigst nachholen.


    Nein, nicht nachholen! Denn du brauchst das Source-Paket doch gar nicht. Es war nur eine Erklärung für die Unterschiede.


    Gerald


    HP Proliant MicroServer Gen8, Xeon E3-1230, 12 GB RAM, 3xWD red 2TB im RAID 5, 2xSundtek MediaTV Home DVB-C/T, L4M TWIN-C/T, Ubuntu Server 14.04.1, Plex Media Server
    Samsung UE55H6470

  • Hallo noch einmal,


    Jetzt habe ich aber einen Knopf im Hirn.


    Bekomme ich mit der "normalen" Installation von yavdr die richtigen Header files installiert?


    Wenn ja, wo finde ich die? Weil unter /usr/include/vdr sind diejenigen die nicht zum System passen (ist zumindest meine Interpretation aus meinen Tests), oder ich hab sie schon durch irgend ein Gebastel selber vermurkst.
    Wenn nein, mit welchem Befehl bekomme ich die richtigen Header Files auf mein System und muss ich dann noch einen oder mehrere Patches anbringen.


    Meine Annahme war, dass ich unter /usr/include/vdr von vornherein die richtigen Header Dateien finde.


    Danke & Gruss
    Roman

    Mainboard: ION ITX-S-E, Gehaeuse: Antec ISK 300-150, DVB Karte: Satix S2 Dual V3, 60 GB SDD, Puls-Eight CEC, 2 GB RAM

  • Bekomme ich mit der "normalen" Installation von yavdr die richtigen Header files installiert?


    Die Header sind im binären vdr-dev-Paket das du deiner Aussage nach ja installiert hast. Ansonsten gehe ich einfach davon aus, dass deine Annahme die Header würden nicht passen falsch ist.


    Gerald


    HP Proliant MicroServer Gen8, Xeon E3-1230, 12 GB RAM, 3xWD red 2TB im RAID 5, 2xSundtek MediaTV Home DVB-C/T, L4M TWIN-C/T, Ubuntu Server 14.04.1, Plex Media Server
    Samsung UE55H6470

    Einmal editiert, zuletzt von gda ()

  • Hallo,


    Sorry fuer die spaete Antwort (family business).


    Die Antwort von apt-cache policy vdr-dev

    Code
    vdr-dev:
      Installiert: 1.7.21-4yavdr1~natty
      Kandidat:    1.7.21-4yavdr1~natty
      Versionstabelle:
     *** 1.7.21-4yavdr1~natty 0
            500 http://ppa.launchpad.net/yavdr/stable-vdr/ubuntu/ natty/main amd64 Packages
            100 /var/lib/dpkg/status
         1.7.17-1 0
            500 http://at.archive.ubuntu.com/ubuntu/ natty/universe amd64 Packages


    Passt das?


    Hier ist noch die Klasse cChannel aus /usr/include/vdr/channels.h. Zumindest der Teil bis zum caids Member.


    Mit diesem Header bekomme ich im Plugin fuer jeden Aufruf von Ca() eine 0 zurueck. Ein Aufruf von Ca(1) bringt die Fortlaufende Nummer, beginnend mit 1.


    Sobald ich die 3 Zeilen vor dem Member caids auskommentiere stimmen die Returnwerte von Ca().


    Danke u. schoene Gruesse
    Roman

    Mainboard: ION ITX-S-E, Gehaeuse: Antec ISK 300-150, DVB Karte: Satix S2 Dual V3, 60 GB SDD, Puls-Eight CEC, 2 GB RAM

  • Habe auch noch als Vergleich die patches auf den VDR Source Baum angebracht. Stimmt dann mit den Header Files aus dem vdr-Dev paket zusammen.


    Bin auch deiner Meinung, dass die Header stimmen. Jedoch gehen mir die Erklärungen für das Verhalten aus.


    Vielleicht faellt euch noch was ein.


    Gruß
    Roman

    Mainboard: ION ITX-S-E, Gehaeuse: Antec ISK 300-150, DVB Karte: Satix S2 Dual V3, 60 GB SDD, Puls-Eight CEC, 2 GB RAM

  • Moin!


    Poste doch mal bitte einen Eintrag aus deiner channels.conf mit so einer CA-Id.
    Ich kann mir das Verhalten auch nicht erklären.


    Magst du (einfach aus Interesse) auch verraten, was du mit den CA-Ids vor hast?


    Lars.

  • Die 1. beiden Zeilen meiner Channels.conf lauten


    Code
    ORF1 HD;ORF:11303:HC23M5O35S1:S19.2E:22000:1920=27:1921=deu@4,1922=eng@4;1923=deu@106:1925:648,D05,D95,1702,1833,9C4:4911:1:1007:0
    ORF2 V;ORF:12692:HC56M2O0S0:S19.2E:22000:500=2:501=deu@3;503=deu@106:505:D95,D05,648,1702,1833,9C4:13009:1:1117:0


    Ich versuche das Plugin mit einem Namen aus 2 Buchstaben das mit s anfaengt und c aufhoert zum Laufen zu bringen. Jedoch glaube ich nicht dass es am Plugin liegt.
    Habe eine gueltige ORF Karte und moechte sie damit zur Mitarbeit bewegen.


    Hier noch der Teil des Source Code der fehlschlaegt.



    channel->Ca()>=CA_ENCRYPTED_MIN schlaegt dabei fehl und daher wird der Kanal nicht in die Liste aufgenommen und dann funktioniert das Werkel nicht.
    PRINTF(L_CORE_CAIDS,"Testing channel %s with CAID %d", channel->Name(),channel->Ca()); liefert dabei im Moment immer 0 fuer die caid.


    Gruss
    Roman

    Mainboard: ION ITX-S-E, Gehaeuse: Antec ISK 300-150, DVB Karte: Satix S2 Dual V3, 60 GB SDD, Puls-Eight CEC, 2 GB RAM

  • Moin!


    Ich würde auch vorschlagen, dass du es erst mal mit dem passend zu yaVDR gepatchtem Plugin probierst.
    Wenn's dann immer noch nicht geht, können wir es ja noch mal probieren.


    Baust du innerhalb des vdr-Source oder als Debian-Paket mittels "debianize plugin" (oder wie das heißt)?


    Lars.

  • Habe der Test gemacht mit hat nicht funktioniert. Gleiches Verhalten.
    Bislang hat nur die Version mit der von mir gepatchten cChannel Klasse funktioniert.


    Gruss
    Roman

    Mainboard: ION ITX-S-E, Gehaeuse: Antec ISK 300-150, DVB Karte: Satix S2 Dual V3, 60 GB SDD, Puls-Eight CEC, 2 GB RAM

    Einmal editiert, zuletzt von migitsned ()

  • Hallo,


    Habe entlich wieder etwas Zeit gefunden dem Problem nachzugehen.
    Um das Problem einzugrenzen und nicht wieder in Versuchung zu geraten die Forumsregeln zu verletzen :) habe ich das Hello World Plugin umgebaut um die caid am Display auszugeben.


    Der Source des veraenderten Plugins ist angehaengt. Es funktioniert sehr einfach. Es nimmt die 1. 3 Kanaele aus der Kanalliste und gibt deren CAID aus.
    Bei mir wird fuer alle Kanaele der Wert 0 ausgegeben. Obwohl bei den 1. beiden eine gueltige CAID eingetragen ist.


    Meine channels.conf

    Code
    ORF1 HD;ORF:11303:HC23M5O35S1:S19.2E:22000:1920=27:1921=deu@4,1922=eng@4;1923=deu@106:1925:648,D05,D95,1702,1833,9C4:4911:1:1007:0
    ORF2 V;ORF:12692:HC56M2O0S0:S19.2E:22000:500=2:501=deu@3;503=deu@106:505:D95,D05,648,1702,1833,9C4:13009:1:1117:0
    Das Erste HD;ARD:11361:HC23M5O35S1:S19.2E:22000:6010=27:6020=deu@3,6021=mis@3;6022=deu@106:6030;6031=deu:0:11100:1:1011:0


    Der Source der die CAID ausgibt:


    Basis sind die Header Files die ich mit apt-get install vdr-dev bekommen habe. Ich habe das Header File channels.h auch mit einem Header File von jemand anderem verglichen (danke hotzenplotz5) und die stimmen zusammen.


    Das ergibt aus meiner Sicht die folgenden Fakten:


    1. Ich habe die richtigen Header Files
    2. Beim Aufruf von Ca() wird nicht der richtige Member zurueckgegeben
    3. Da die Funktion inline ist wird nicht die Funktion aus den installierten Binaries genommen
    4. Der Offset von caids den der Compiler berechnet stimmt nicht mit dem in den Binaries ueberein.


    Wenn ich die 3 Member

    Code
    int fixedTtxtSubtitlePages;
      int totalTtxtSubtitlePages;
      tTeletextSubtitlePage teletextSubtitlePages[MAXTXTPAGES];


    aus cChannel auskommentiere liefert mein Testplugin die richtigen CAID Werte.
    D. h. wiederum, dass vdr die CAIDs richtig aus channels.conf ausliest.


    Vielleicht hat ja jemand Zeit od. Lust mein Beispiel mal zu kompilieren und einen Test zu machen ob bei ihm auch falsche CAIDS kommen.


    Im Moment bleibt bei nur die Moeglichkeit uebrig, dass irgend etwas mit der Kompatibilitaet zwischen den Headern und den Binaries nicht stimmt. Oder habt ihr eine andere Erklaerung fuer dieses Verhalten?


    Gruss
    Roman

  • Da ich fast nicht glauben konnte, dass meine Header sich von den Binaries unterscheiden hab ich das hello world noch etwas erweitert.


    Und zwar habe ich versucht einen bestehendes Kanalobjekt herzunehmen und zu versuchen den Offset fuer den caids Member herauszufinden.
    Das schaut etwa so aus:

    Code
    long GetMemberCAIDOffset()
        {
          long iOffset = (long)&caids - (long)this;
          return iOffset;
        }


    Als naechstes habe ich eine kleine Binärsuche nach dem exakten CAID Wertes gemacht und mir ebenfalls den Offset zum this Pointer ausgerechnet.


    Das Ganze ist innerhalb einer von cChannel abgeleiteten Klasse implementiert die zusätzlich noch als friend in cChannel aufgenommen wurde (caids ist ein private Member).


    Wie hat das Ergebnis ausgeschaut?
    GetMemberCAIDOffset(): 1548
    FindDAIDOffset: 1484


    D. h. die beiden Berechungsmethoden fuer den Offset von caids in der cChannel Klasse unterscheiden sich um 64 Byte!!


    Als Verifikation habe ich noch die Groesse der 3 Member die ich auskommentiert habe berechnet (danach funktionierts ja).

    Code
    int iDiff = sizeof(int)*2 + sizeof(tTeletextSubtitlePage)*MAXTXTPAGES;


    iDiff liefert auch 64 Byte!!


    Angehaengt ist noch das modifizierte hello.c und channels.h.


    Es schaut wirklich so aus als waeren auf meinem System der channel header nicht konsistent mit den installierten Binaries.


    Gruss
    Roman

  • Das Thema gehört hier nicht hin, in keinster weise. Könnte bitte mal einer von den Admins diesen Thread aus dem Weg räumen bevor noch irgendwelche Rechtsverdreher auf falsche Ideen kommen.

  • Moin!


    Darf ich noch mal fragen, wie du das Plugin übersetzt?
    Innerhalb des vdr-Source im PLUGIN/src-Verzeichnis oder als Paket mittels debianize-vdrplugin?


    Lars.

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!