From: Jaroslav Kysela Date: Thu, 22 Feb 2018 14:20:14 +0000 (+0100) Subject: mpegts pid: fix mpegts_pid_weighted() for duplicate PIDs with different weight X-Git-Tag: v4.2.6~22 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=36990849388c681c8c449da837286fce67164079;p=thirdparty%2Ftvheadend.git mpegts pid: fix mpegts_pid_weighted() for duplicate PIDs with different weight --- diff --git a/src/input/mpegts/mpegts_pid.c b/src/input/mpegts/mpegts_pid.c index b643eb899..0d16e8e91 100644 --- a/src/input/mpegts/mpegts_pid.c +++ b/src/input/mpegts/mpegts_pid.c @@ -277,19 +277,18 @@ int mpegts_pid_weighted(mpegts_apids_t *dst, mpegts_apids_t *pids, int limit) { int i, j; + mpegts_apids_t sorted; + + mpegts_pid_init(&sorted); + mpegts_pid_copy(&sorted, pids); + qsort(sorted.pids, sorted.count, sizeof(mpegts_apid_t), pid_wcmp); + mpegts_pid_init(dst); - mpegts_pid_copy(dst, pids); - qsort(dst->pids, dst->count, sizeof(mpegts_apid_t), pid_wcmp); - for (i = j = 0; i < dst->count; i++) - if (j == 0 || (dst->pids[j-1].pid != dst->pids[i].pid)) { - if (j < limit || dst->pids[i].weight > MPS_WEIGHT_PMT_SCAN) { - dst->pids[j].weight = 0; - dst->pids[j++].pid = dst->pids[i].pid; - } - } - dst->count = j; - dst->sorted = 0; + for (i = j = 0; i < sorted.count && dst->count < limit; i++) + mpegts_pid_add(dst, sorted.pids[i].pid, 0); dst->all = pids->all; + + mpegts_pid_done(&sorted); return 0; }