memset(fetypes, 0, sizeof(fetypes));
LIST_FOREACH(lfe, &la->la_frontends, lfe_link)
fetypes[lfe->lfe_type]++;
- for (i = 0; i < ARRAY_SIZE(fetypes); i++)
+ for (i = j = r = 0; i < ARRAY_SIZE(fetypes); i++) {
if (fetypes[i] > 1)
- tvhwarn("linuxdvb", "adapter %d has multiple tuners %d for type %s, "
- "only one can be used at a time",
- a, fetypes[i], dvb_type2str(i));
+ r++;
+ else if (fetypes[i] > 0)
+ j++;
+ }
+ if (r && j) {
+ la->la_exclusive = 1;
+ for (i = 0; i < ARRAY_SIZE(fetypes); i++)
+ if (fetypes[i] > 0)
+ tvhwarn("linuxdvb", "adapter %d has tuner count %d for type %s (wrong config)",
+ a, fetypes[i], dvb_type2str(i));
+ } else if (!r && j > 1) {
+ la->la_exclusive = 1;
+ tvhinfo("linuxdvb", "adapter %d setting exlusive flag", a);
+ }
#endif
/* Save configuration */
int weight = 0;
linuxdvb_adapter_t *la = ((linuxdvb_frontend_t*)mi)->lfe_adapter;
linuxdvb_frontend_t *lfe;
- LIST_FOREACH(lfe, &la->la_frontends, lfe_link)
- weight = MAX(weight, mpegts_input_get_weight((mpegts_input_t*)lfe, mm, flags));
+ if (la->la_exclusive) {
+ LIST_FOREACH(lfe, &la->la_frontends, lfe_link)
+ weight = MAX(weight, mpegts_input_get_weight((mpegts_input_t*)lfe, mm, flags));
+ } else {
+ weight = mpegts_input_get_weight(mi, mm, flags);
+ }
return weight;
}