]> git.ipfire.org Git - thirdparty/tvheadend.git/commitdiff
mpegts pid: fix mpegts_pid_weighted() for duplicate PIDs with different weight
authorJaroslav Kysela <perex@perex.cz>
Thu, 22 Feb 2018 14:20:14 +0000 (15:20 +0100)
committerJaroslav Kysela <perex@perex.cz>
Thu, 22 Feb 2018 14:20:19 +0000 (15:20 +0100)
src/input/mpegts/mpegts_pid.c

index b643eb8996db58f5bf16bd5f2770b1a2de4ab96a..0d16e8e91ecab0a7b9907ffa6309a70e2f92919c 100644 (file)
@@ -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;
 }