<dt><b>Power Save</b></dt>
<dd>If enabled, allows the tuner to go to sleep when idle.</dd>
<p>
+ <dt><b>Skip Initial Bytes</b></dt>
+ <dd>If set, first bytes from the MPEG-TS stream are discarded. It may be
+ required for some drivers / hardware which does not flush completely
+ the MPEG-TS buffers after a frequency/parameters change.</dd>
+ <p>
</dl>
<dt><u><i><b>Advanced Settings</b></i></u></dt>
<dl>
.name = "Power Save",
.off = offsetof(linuxdvb_frontend_t, lfe_powersave),
},
+ {
+ .type = PT_U32,
+ .id = "skip_bytes",
+ .name = "Skip Initial Bytes",
+ .opts = PO_ADVANCED,
+ .off = offsetof(linuxdvb_frontend_t, lfe_skip_bytes),
+ },
{}
}
};
int nfds;
tvhpoll_event_t ev[2];
tvhpoll_t *efd;
+ ssize_t n;
+ size_t skip = (MIN(lfe->lfe_skip_bytes, 1024*1024) / 188) * 188;
+ size_t counter = 0;
sbuf_t sb;
/* Get MMI */
if (ev[0].data.fd != dvr) break;
/* Read */
- if (sbuf_read(&sb, dvr) < 0) {
+ if ((n = sbuf_read(&sb, dvr)) < 0) {
if (ERRNO_AGAIN(errno))
continue;
if (errno == EOVERFLOW) {
buf, errno, strerror(errno));
break;
}
+
+ /* Skip the initial bytes */
+ if (counter < skip) {
+ counter += n;
+ if (counter < skip) {
+ sbuf_cut(&sb, n);
+ } else {
+ sbuf_cut(&sb, skip - (counter - n));
+ }
+ }
/* Process */
mpegts_input_recv_packets((mpegts_input_t*)lfe, mmi, &sb, NULL, NULL);