diff --git a/docs/html/config_esfilter.html b/docs/html/config_esfilter.html index 75a03de4..f1a7a40b 100644 --- a/docs/html/config_esfilter.html +++ b/docs/html/config_esfilter.html @@ -83,7 +83,8 @@ The columns have the following functions:
Use this elementary stream.
ONCE -
Use this elementary stream only once per selected language. +
Use this elementary stream only once per service type. + The language is distinguished, too. The first successfully compared rule wins.
EXCLUSIVE diff --git a/src/service.c b/src/service.c index 2fac4b32..88e11244 100644 --- a/src/service.c +++ b/src/service.c @@ -475,26 +475,23 @@ filter: case ESFA_IGNORE: st->es_filter |= ESFM_IGNORE; break; + case ESFA_ONCE: + TAILQ_FOREACH(st2, &t->s_components, es_link) { + if (st == st2) + continue; + if ((st2->es_filter & ESFM_USED) == 0) + continue; + if (st2->es_type != st->es_type) + continue; + if (esf->esf_language[0] != '\0' && strcmp(st2->es_lang, st->es_lang)) + continue; + } + if (st2 != NULL) break; + /* fall through */ + break; case ESFA_USE: service_build_filter_add(t, st, sta, &p); break; - case ESFA_ONCE: - if (esf->esf_language[0] == '\0') { - service_build_filter_add(t, st, sta, &p); - } else { - int present = 0; - TAILQ_FOREACH(st2, &t->s_components, es_link) { - if ((st2->es_filter & ESFM_USED) == 0) - continue; - if (strcmp(st2->es_lang, st->es_lang) == 0) { - present = 1; - break; - } - } - if (!present) - service_build_filter_add(t, st, sta, &p); - } - break; case ESFA_EXCLUSIVE: break; case ESFA_EMPTY: