esfilter: rewrite the ONCE rule
This commit is contained in:
parent
163ec92059
commit
672f93dbfd
2 changed files with 16 additions and 18 deletions
|
@ -83,7 +83,8 @@ The columns have the following functions:
|
|||
<dd>Use this elementary stream.
|
||||
|
||||
<dt>ONCE
|
||||
<dd>Use this elementary stream only once per selected language.
|
||||
<dd>Use this elementary stream only once per service type.
|
||||
The language is distinguished, too.
|
||||
The first successfully compared rule wins.
|
||||
|
||||
<dt>EXCLUSIVE
|
||||
|
|
|
@ -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:
|
||||
|
|
Loading…
Add table
Reference in a new issue