--- multiplexer/en300468ts.c 2005/01/04 22:25:48 1.3 +++ multiplexer/en300468ts.c 2006/07/14 17:54:51 1.4 @@ -71,6 +71,7 @@ static unsigned char nextversion[TABLEID #define TS_PACKET_SIZE 188 #define TS_HEADSLEN 3 #define TS_PACKET_HEADSIZE 4 +#define TS_PFIELDLEN 1 #define TS_SYNC_BYTE 0x47 #define OUTBUF_PACKETS 256 #define OUTBUF_SIZE (TS_PACKET_SIZE*OUTBUF_PACKETS) @@ -2330,7 +2331,7 @@ static unsigned int tab2ts(unsigned char unsigned char *i = &t[2]; unsigned char *o; unsigned char c = *conticnt; - l = ((t[3] & 0x0F) << 8) + t[4] + TS_HEADSLEN; + l = ((t[3] & 0x0F) << 8) + t[4] + TS_HEADSLEN + TS_PFIELDLEN; d = (l-1) % (TS_PACKET_SIZE - TS_PACKET_HEADSIZE) + 1; if (outin >= OUTBUF_SIZE) { outin = 0; @@ -2346,9 +2347,11 @@ static unsigned int tab2ts(unsigned char } else { o[3] = (0x00 << 6) | (0x01 << 4) | c; } + o[TS_PACKET_SIZE - d] = 0; /* pointer_field */ + d -= TS_PFIELDLEN; memcpy(&o[TS_PACKET_SIZE - d], i, d); i += d; - d = l - d; + d = l - d - TS_PFIELDLEN; o[1] = (0 << 7) | (1 << 6) | (0 << 5) | t[0]; o[2] = t[1]; o[0] = TS_SYNC_BYTE; @@ -2411,7 +2414,7 @@ static void argloop(int f0) for (i = 0; i <= TABLE_PID_LAST-TABLE_PID_FIRST; i++) { if ((tabin[i] > tabout[i]) && (r >= (((((tabbuf[i][tabout[i]+3] & 0x0F) << 8) - + tabbuf[i][tabout[i]+4] + TS_HEADSLEN + + tabbuf[i][tabout[i]+4] + TS_HEADSLEN + TS_PFIELDLEN + TS_PACKET_SIZE - TS_PACKET_HEADSIZE) * 131) / 128))) { tmo = 0; @@ -2445,7 +2448,7 @@ static void argloop(int f0) for (i = 0; i <= TABLE_PID_LAST-TABLE_PID_FIRST; i++) { while ((tabin[i] > tabout[i]) && (r >= (((((tabbuf[i][tabout[i]+3] & 0x0F) << 8) - + tabbuf[i][tabout[i]+4] + TS_HEADSLEN + + tabbuf[i][tabout[i]+4] + TS_HEADSLEN + TS_PFIELDLEN + TS_PACKET_SIZE - TS_PACKET_HEADSIZE) * 131) / 128))) { tabout[i] += tab2ts(&tabbuf[i][tabout[i]], &conticnt[i]);