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_weighted ( mpegts_apids_t *dst, mpegts_apids_t *src, int limit, int mweight );
int mpegts_pid_dump ( mpegts_apids_t *pids, char *buf, int len, int wflag, int raw );
/* **************************************************************************
#define MPS_WEIGHT_RAW 400
#define MPS_WEIGHT_NIT2 300
#define MPS_WEIGHT_SDT2 300
+#define MPS_WEIGHT_ALLLIMIT 200 /* values under this limit does not switch */
+ /* input to the unfiltered PIDs (all) mode */
#define MPS_WEIGHT_TDT 101
#define MPS_WEIGHT_STT 101
#define MPS_WEIGHT_PMT_SCAN 100
pthread_mutex_lock(&lfe->lfe_dvr_lock);
if (!all) {
- overlimit = mpegts_pid_weighted(&wpid, &lfe->lfe_pids, max);
+ overlimit = mpegts_pid_weighted(&wpid, &lfe->lfe_pids, max, MPS_WEIGHT_ALLLIMIT);
if (tvhtrace_enabled()) {
mpegts_pid_dump(&wpid, buf, sizeof(buf), 1, 1);
tvhtrace(LS_LINUXDVB, "%s - weighted PIDs %s", name, buf);
}
int
-mpegts_pid_weighted(mpegts_apids_t *dst, mpegts_apids_t *pids, int limit)
+mpegts_pid_weighted
+ (mpegts_apids_t *dst, mpegts_apids_t *pids, int limit, int mweight)
{
int i, j, overlimit = 0;
mpegts_apids_t sorted;
}
for ( ; i < sorted.count; i++) {
p = &sorted.pids[i];
- if (mpegts_pid_find_rindex(dst, sorted.pids[i].pid) < 0)
+ if (p->weight < mweight)
+ continue;
+ if (mpegts_pid_find_rindex(dst, p->pid) < 0)
overlimit++;
}
dst->all = pids->all;
if (pids->all)
return snprintf(buf, len, "all");
if (!raw) {
- mpegts_pid_weighted(&spids, pids, len / 2);
+ mpegts_pid_weighted(&spids, pids, len / 2, 0);
pids = &spids;
}
*buf = '\0';
tr->sf_pids_tuned.all ||
tr->sf_pids.count == 0) {
- overlimit = mpegts_pid_weighted(&wpid, &tr->sf_pids, max_pids_count);
+ overlimit = mpegts_pid_weighted(&wpid, &tr->sf_pids,
+ max_pids_count, MPS_WEIGHT_ALLLIMIT);
if (overlimit > 0 && sd->sd_fullmux_ok) {
mpegts_pid_done(&wpid);
} else {
- overlimit = mpegts_pid_weighted(&wpid, &tr->sf_pids, max_pids_count);
+ overlimit = mpegts_pid_weighted(&wpid, &tr->sf_pids,
+ max_pids_count, MPS_WEIGHT_ALLLIMIT);
if (overlimit > 0 && sd->sd_fullmux_ok) {
mpegts_pid_done(&wpid);
}
}
- mpegts_pid_weighted(&wpids, &pids, 128 /* max? */);
+ mpegts_pid_weighted(&wpids, &pids, 128 /* max? */, MPS_WEIGHT_ALLLIMIT);
for (i = 0; i < wpids.count; i++)
tvhdhomerun_device_open_pid(hfe, wpids.pids[i].pid);
if (wpids.all)