/****************************************************************************/ /* DVB functions and API interface ******************************************/ /****************************************************************************/
staticvoid swap_buffer(u32 *p, u32 len)
{ while (len) {
*p = swab32(*p);
p++;
len -= 4;
}
}
if (dev->ci.en && chan->number == 2) { /* blindly copy buffers if ci_tsfix is disabled */ if (!ci_tsfix) { while (len >= 188) {
tsin_copy_stripped(dev, buf);
buf += 188;
len -= 188;
} return NULL;
}
/* ci_tsfix = 1 */
/* * since the remainder of the TS packet which got cut off * in the previous tsin_exchange() run is at the beginning * of the new TS buffer, append this to the temp buffer and * send it to the DVB ringbuffer afterwards.
*/ if (chan->tsin_offset) {
memcpy(&chan->tsin_buffer[(188 - chan->tsin_offset)],
buf, chan->tsin_offset);
tsin_copy_stripped(dev, &chan->tsin_buffer);
buf += chan->tsin_offset;
len -= chan->tsin_offset;
}
/* * copy TS packets to the DVB ringbuffer and detect new offset * shifts by checking for a valid TS SYNC byte
*/ while (len >= 188) { if (*((char *)buf) != 0x47) { /* * no SYNC header, find new offset shift * (max. 188 bytes, tsoff will be mod 188)
*/
tsoff = tsin_find_offset(buf, len); if (tsoff > 0) {
chan->tsin_offset += tsoff;
chan->tsin_offset %= 188;
buf += tsoff;
len -= tsoff;
dev_info(&dev->pci_dev->dev, "%s(): tsin_offset shift by %d on channel %d\n",
__func__, tsoff,
chan->number);
/* * offset corrected. re-check remaining * len for a full TS frame, break and * skip to fragment handling if < 188.
*/ if (len < 188) break;
}
}
tsin_copy_stripped(dev, buf);
buf += 188;
len -= 188;
}
/* * if a fragment is left, copy to temp buffer. The remainder * will be appended in the next tsin_exchange() iteration.
*/ if (len > 0 && len < 188)
memcpy(&chan->tsin_buffer, buf, len);
return NULL;
}
if (chan->users > 0)
dvb_dmx_swfilter(&chan->demux, buf, len);
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.