linuxdvb_frontend_enabled_updated ( mpegts_input_t *mi )
{
char buf[512];
- linuxdvb_frontend_t *lfe = (linuxdvb_frontend_t*)mi;
+ linuxdvb_frontend_t *lfe = (linuxdvb_frontend_t*)mi, *lfe2;
mi->mi_display_name(mi, buf, sizeof(buf));
/* Ensure FE opened (if not powersave) */
} else if (!lfe->lfe_powersave && lfe->lfe_fe_fd <= 0 && lfe->lfe_fe_path) {
- lfe->lfe_fe_fd = tvh_open(lfe->lfe_fe_path, O_RDWR | O_NONBLOCK, 0);
+
+ /* Share FD across frontends */
+ if (lfe->lfe_adapter->la_exclusive) {
+ LIST_FOREACH(lfe2, &lfe->lfe_adapter->la_frontends, lfe_link) {
+ if (lfe2->lfe_fe_fd > 0) {
+ lfe->lfe_fe_fd = dup(lfe2->lfe_fe_fd);
+ break;
+ }
+ }
+ }
+
+ if (lfe->lfe_fe_fd <= 0)
+ lfe->lfe_fe_fd = tvh_open(lfe->lfe_fe_path, O_RDWR | O_NONBLOCK, 0);
tvhtrace(LS_LINUXDVB, "%s - opening FE %s (%d)",
buf, lfe->lfe_fe_path, lfe->lfe_fe_fd);
}