PATCH för dvbloopback/plugin_getsid.c för terrestial delivery
Här är en patch för VDR/sasc-ng så att get_sid inte snubblar på "terrestial" carriers, dvs boxer.
Det löser inga krypteringsfel såklart, men snabbar upp synkandet. Jag upplever att kanalbyte går bättre i alla fall.
Tala gärna om hur det går, så kan jag göra en ansats att få upp koden i repositoryt.
Kod:
diff -r 1cc3497be31c contrib/sasc-ng/dvbloopback/src/plugin_getsid.c
--- a/contrib/sasc-ng/dvbloopback/src/plugin_getsid.c Tue Apr 13 09:55:20 2010 +0800
+++ b/contrib/sasc-ng/dvbloopback/src/plugin_getsid.c Tue Sep 21 15:44:45 2010 +0200
@@ -189,7 +189,9 @@
last_sec, MAX_PAT_SECTIONS);
return 1;
}
+ dprintf0("read_pat: end = %0x, sec = %d, last_sec = %d\n", end, sec, last_sec);
if (pat->version != version || last_sec != pat->last_section) {
+ dprintf0("read_pat: pat->version: %d, version: %d, last_sec: %d, pat->last_section\n", pat->version, version, last_sec, pat->last_section);
pat->version = version;
pat->last_section = last_sec;
while(! list_empty(&pat->dmx_filter_ll)) {
@@ -232,6 +234,8 @@
dprintf2("found NIT at PID: %d", pid);
}
}
+ dprintf0("read_pat: ŕeturn 0;");
+
return 0;
}
/*
@@ -270,14 +274,22 @@
static int read_nit(unsigned char *buf, struct nit_data *nit, unsigned int size) {
int len, tsl_len, td_len, tag_len, network_desc_len;
int network_id, pos, tag;
+
+ if( size < 10 ) {
+ dprintf0(
+ "read_nit: to short buffer read (%d) < 10 bytes for header.\n",size);
+ return -1;
+ }
if (buf[0] != 0x40 && buf[0] != 0x41 && buf[0] != 0x72) {
dprintf0(
- "read_nit expected table 0x40 or 0x41 but got 0x%02x\n", buf[0]);
+ "read_nit: aborting! Expected table 0x40,0x41 or 0x72 but got 0x%02x\n", buf[0]);
return -1;
}
if (buf[0] != 0x40) {
+ dprintf0("read_nit: ignoring table 0x%02x. (not NIT)\n", buf[0]);
return 0;
}
+
len = ((buf[1] & 0x07) << 8) | buf[2];
network_id = (buf[3]<<8) | buf[4];
network_desc_len = ((buf[8] & 0x0f) << 8) | buf[9];
@@ -289,6 +301,7 @@
tag = buf[pos+6];
tag_len = buf[pos+7];
if(tag == 0x43 && tag_len >= 11) { //satellite descriptor
+ dprintf0("read_nit: satellite delivery");
nit->type = tag;
nit->frequency = (buf[pos+8] << 24) | (buf[pos+9]<<16) | (buf[pos+10]<<8) | buf[pos+11];
nit->orbit = (buf[pos+12] << 8) | buf[pos+13];
@@ -300,6 +313,7 @@
printf("Orbit: %08x%c\n", nit->orbit, nit->is_east ? 'E' : 'W');
return 1;
} else if(tag == 0x44 && tag_len >= 11) { //cable descriptor
+ dprintf0("read_nit: cable delivery");
nit->type = tag;
nit->frequency = (buf[pos+8] << 24) | (buf[pos+9]<<16) | (buf[pos+10]<<8) | buf[pos+11];
nit->modulation = buf[pos+14];
@@ -307,7 +321,13 @@
nit->fec = buf[pos+18];
printf("Cable: %08x\n", nit->frequency);
return 1;
+ } else if(tag == 0x5A && tag_len >= 11) { //terrestial_delivery
+ dprintf0("read_nit: terrestial delivery");
+ nit->type = tag;
+ nit->frequency = (buf[pos+8] << 24) | (buf[pos+9]<<16) | (buf[pos+10]<<8) | buf[pos+11];
+ return 1;
}
+
pos += tag_len+2;
td_len -= tag_len+2;
}