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
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:
cOsdObject *cPluginHello::MainMenuAction(void)
{
// Perform the action when selected from the main VDR menu.
//Interface->Confirm(UseAlternateGreeting ? tr("Howdy folks!") : tr("Hello world!"), GreetingTime);
Channels.Lock(false);
printf("Number of channels %d",Channels.Count());
int i = 0;
for(cChannel *channel=Channels.First(); i < 3 && channel; channel=Channels.Next(channel))
{
char szText[256];
sprintf( szText, "Channel: %s, CAID: %d", channel->Name(), channel->Ca());
Interface->Confirm(szText, GreetingTime);
printf("Testing channel %s with CAID %d", channel->Name(),channel->Ca());
i++;
}
Channels.Unlock();
return NULL;
}
Alles anzeigen
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
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