From e4fa6470d747db2a7e0aa8eba872e95e3b29236b Mon Sep 17 00:00:00 2001 From: Jaroslav Kysela Date: Thu, 22 Feb 2018 15:20:14 +0100 Subject: [PATCH] mpegts pid: fix mpegts_pid_weighted() for duplicate PIDs with different weight --- src/input/mpegts/mpegts_pid.c | 21 ++++++++++----------- 1 file changed, 10 insertions(+), 11 deletions(-) diff --git a/src/input/mpegts/mpegts_pid.c b/src/input/mpegts/mpegts_pid.c index 0cc671bf4..cb98896e5 100644 --- a/src/input/mpegts/mpegts_pid.c +++ b/src/input/mpegts/mpegts_pid.c @@ -294,19 +294,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; } -- 2.47.3