int mpegts_pid_cmp ( mpegts_apids_t *a, mpegts_apids_t *b );
int mpegts_pid_compare ( mpegts_apids_t *dst, mpegts_apids_t *src,
mpegts_apids_t *add, mpegts_apids_t *del );
+int mpegts_pid_compare_weight ( mpegts_apids_t *dst, mpegts_apids_t *src,
+ mpegts_apids_t *add, mpegts_apids_t *del );
int mpegts_pid_weighted ( mpegts_apids_t *dst, mpegts_apids_t *src, int limit );
int mpegts_pid_dump ( mpegts_apids_t *pids, char *buf, int len, int wflag, int raw );
mpegts_pid_done(&wpid);
} else {
mpegts_pid_compare(&wpid, tuned, &padd, &pdel);
- mpegts_pid_done(&wpid);
for (i = 0; i < pdel.count; i++)
linuxdvb_frontend_close_pid0(lfe, name, pids, pids_size, pdel.pids[i].pid);
for (i = 0; i < padd.count; i++)
linuxdvb_frontend_open_pid0(lfe, name, pids, pids_size, padd.pids[i].pid);
mpegts_pid_done(&padd);
mpegts_pid_done(&pdel);
- mpegts_pid_done(tuned);
- mpegts_pid_weighted(tuned, &lfe->lfe_pids, max);
+ mpegts_pid_copy(tuned, &wpid);
+ mpegts_pid_done(&wpid);
}
}
mpegts_apid_t *p;
int i;
+ assert(dst);
+ assert(add);
+ assert(del);
+ if (mpegts_pid_init(add) || mpegts_pid_init(del))
+ return -1;
+ if (src == NULL) {
+ mpegts_pid_copy(add, dst);
+ return add->count > 0;
+ }
+ for (i = 0; i < src->count; i++) {
+ p = &src->pids[i];
+ if (mpegts_pid_find_rindex(dst, p->pid) < 0)
+ mpegts_pid_add(del, p->pid, p->weight);
+ }
+ for (i = 0; i < dst->count; i++) {
+ p = &dst->pids[i];
+ if (mpegts_pid_find_rindex(src, p->pid) < 0)
+ mpegts_pid_add(add, p->pid, p->weight);
+ }
+ return add->count || del->count;
+}
+
+int
+mpegts_pid_compare_weight(mpegts_apids_t *dst, mpegts_apids_t *src,
+ mpegts_apids_t *add, mpegts_apids_t *del)
+{
+ mpegts_apid_t *p;
+ int i;
+
assert(dst);
assert(add);
assert(del);
{
int i, j;
mpegts_apids_t sorted;
+ uint16_t pid;
mpegts_pid_init(&sorted);
mpegts_pid_copy(&sorted, pids);
qsort(sorted.pids, sorted.count, sizeof(mpegts_apid_t), pid_wcmp);
mpegts_pid_init(dst);
- for (i = j = 0; i < sorted.count && dst->count < limit; i++)
- mpegts_pid_add(dst, sorted.pids[i].pid, 0);
+ for (i = j = 0; i < sorted.count && dst->count < limit; i++) {
+ pid = sorted.pids[i].pid;
+ if (mpegts_pid_find_rindex(dst, pid) < 0)
+ mpegts_pid_add(dst, pid, sorted.pids[i].weight);
+ }
dst->all = pids->all;
mpegts_pid_done(&sorted);