int pids_size )
{
mpegts_apids_t wpid, padd, pdel;
- int i, max = MAX(14, lfe->lfe_pids_max);
+ int i, max = MAX(14, lfe->lfe_pids_max), overlimit;
int all = lfe->lfe_pids.all;
char buf[512];
pthread_mutex_lock(&lfe->lfe_dvr_lock);
if (!all) {
- mpegts_pid_weighted(&wpid, &lfe->lfe_pids, max);
+ overlimit = mpegts_pid_weighted(&wpid, &lfe->lfe_pids, max);
if (tvhtrace_enabled()) {
mpegts_pid_dump(&wpid, buf, sizeof(buf), 1, 1);
tvhtrace(LS_LINUXDVB, "%s - weighted PIDs %s", name, buf);
}
- if (wpid.count > max && lfe->lfe_pids_use_all) {
+ if (overlimit && lfe->lfe_pids_use_all) {
all = 1;
mpegts_pid_done(&wpid);
} else {
+ if (overlimit)
+ tvhwarn(LS_LINUXDVB, "%s - unable to set filter for %d PIDs", name, overlimit);
mpegts_pid_compare(&wpid, tuned, &padd, &pdel);
for (i = 0; i < pdel.count; i++)
linuxdvb_frontend_close_pid0(lfe, name, pids, pids_size, pdel.pids[i].pid);
int
mpegts_pid_weighted(mpegts_apids_t *dst, mpegts_apids_t *pids, int limit)
{
- int i, j;
+ int i, j, overlimit = 0;
mpegts_apids_t sorted;
mpegts_apid_t *p;
else
mpegts_pid_update_max_weight_by_index(dst, j, p->weight);
}
+ for ( ; i < sorted.count; i++) {
+ p = &sorted.pids[i];
+ if (mpegts_pid_find_rindex(dst, sorted.pids[i].pid) < 0)
+ overlimit++;
+ }
dst->all = pids->all;
mpegts_pid_done(&sorted);
- return 0;
+ return overlimit;
}
int