From: Jaroslav Kysela Date: Mon, 5 Mar 2018 16:23:59 +0000 (+0100) Subject: mpegts pid: another fix for mpegts_pid_compare() - use only highest weight for return... X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=b440d29220e0adeb91981bdcacb001cc1a492d41;p=thirdparty%2Ftvheadend.git mpegts pid: another fix for mpegts_pid_compare() - use only highest weight for returned add/del pids --- diff --git a/src/input/mpegts/mpegts_pid.c b/src/input/mpegts/mpegts_pid.c index e864de2fd..646b80107 100644 --- a/src/input/mpegts/mpegts_pid.c +++ b/src/input/mpegts/mpegts_pid.c @@ -261,12 +261,20 @@ mpegts_pid_cmp(mpegts_apids_t *a, mpegts_apids_t *b) return 0; } +static void +mpegts_pid_update_max_weight_by_index(mpegts_apids_t *a, int i, uint16_t weight) +{ + uint16_t *w = &a->pids[i].weight; + if (*w < weight) + *w = weight; +} + int mpegts_pid_compare(mpegts_apids_t *dst, mpegts_apids_t *src, mpegts_apids_t *add, mpegts_apids_t *del) { mpegts_apid_t *p; - int i; + int i, j; assert(dst); assert(add); @@ -279,13 +287,23 @@ mpegts_pid_compare(mpegts_apids_t *dst, mpegts_apids_t *src, } 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); + if (mpegts_pid_find_rindex(dst, p->pid) < 0) { + j = mpegts_pid_find_rindex(del, p->pid); + if (j < 0) + mpegts_pid_add(del, p->pid, p->weight); + else + mpegts_pid_update_max_weight_by_index(del, j, 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); + if (mpegts_pid_find_rindex(src, p->pid) < 0) { + j = mpegts_pid_find_rindex(add, p->pid); + if (j < 0) + mpegts_pid_add(add, p->pid, p->weight); + else + mpegts_pid_update_max_weight_by_index(add, j, p->weight); + } } return add->count || del->count; }