From: Adam Sutton Date: Sat, 9 Nov 2013 13:15:21 +0000 (+0000) Subject: capmt linuxdvb: some minor tweaks to ensure only necessary are enabled X-Git-Tag: v4.1~2420 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=9de5cc4c985c60bf60f7f4eccb9532bcd559c902;p=thirdparty%2Ftvheadend.git capmt linuxdvb: some minor tweaks to ensure only necessary are enabled Only adapters that have active frontends will be enabled in capmt. In addition to this I've also fixed code so it will actually honour the port configuration (which was being ignored in OSCAM mode). --- diff --git a/src/descrambler/capmt.c b/src/descrambler/capmt.c index 0670319e7..de54a3a60 100644 --- a/src/descrambler/capmt.c +++ b/src/descrambler/capmt.c @@ -576,25 +576,24 @@ capmt_thread(void *aux) /* open connection to emulated ca0 device */ if (!capmt->capmt_oscam) { - bind_ok = capmt_create_udp_socket(&capmt->capmt_sock_ca0[0], capmt->capmt_port); + bind_ok = capmt_create_udp_socket(&capmt->capmt_sock_ca0[0], + capmt->capmt_port); } else { - int i; + int i, n; extern const idclass_t linuxdvb_adapter_class; linuxdvb_adapter_t *la; idnode_set_t *is = idnode_find_all(&linuxdvb_adapter_class); for (i = 0; i < is->is_count; i++) { la = (linuxdvb_adapter_t*)is->is_array[i]; -#if TODO_FIXME - if (!la || !la->mi_is_enabled) continue; - if (!la->mi_is_enabled((mpegts_input_t*)la)) continue; -#endif - if (la->la_dvb_number > MAX_CA) { + if (!la || !la->la_is_enabled(la)) continue; + n = la->la_dvb_number; + if (n < 0 || n > MAX_CA) { tvhlog(LOG_ERR, "capmt", "adapter number > MAX_CA"); continue; } - tvhlog(LOG_INFO, "capmt", "Creating capmt UDP socket for adapter %d", - la->la_dvb_number); - bind_ok = capmt_create_udp_socket(&capmt->capmt_sock_ca0[la->la_dvb_number], 9000 + la->la_dvb_number); + tvhlog(LOG_INFO, "capmt", "created UDP socket %d", n); + bind_ok = capmt_create_udp_socket(&capmt->capmt_sock_ca0[n], + capmt->capmt_port + n); } } if (bind_ok) diff --git a/src/input/mpegts/linuxdvb/linuxdvb_adapter.c b/src/input/mpegts/linuxdvb/linuxdvb_adapter.c index 5b20fd145..959da4fae 100644 --- a/src/input/mpegts/linuxdvb/linuxdvb_adapter.c +++ b/src/input/mpegts/linuxdvb/linuxdvb_adapter.c @@ -103,6 +103,20 @@ linuxdvb_adapter_save ( linuxdvb_adapter_t *la, htsmsg_t *m ) htsmsg_add_msg(m, "frontends", l); } +/* + * Check if enabled + */ +static int +linuxdvb_adapter_is_enabled ( linuxdvb_adapter_t *la ) +{ + linuxdvb_frontend_t *lfe; + LIST_FOREACH(lfe, &la->la_frontends, lfe_link) { + if (lfe->mi_is_enabled((mpegts_input_t*)lfe)) + return 1; + } + return 0; +} + /* * Create */ @@ -124,6 +138,7 @@ linuxdvb_adapter_create0 LIST_INSERT_HEAD(&ld->ld_adapters, la, la_link); la->la_device = ld; la->la_dvb_number = -1; + la->la_is_enabled = linuxdvb_adapter_is_enabled; /* No conf */ if (!conf) diff --git a/src/input/mpegts/linuxdvb/linuxdvb_private.h b/src/input/mpegts/linuxdvb/linuxdvb_private.h index fa3450f02..1e0403968 100644 --- a/src/input/mpegts/linuxdvb/linuxdvb_private.h +++ b/src/input/mpegts/linuxdvb/linuxdvb_private.h @@ -92,6 +92,11 @@ struct linuxdvb_adapter * Frontends */ LIST_HEAD(,linuxdvb_frontend) la_frontends; + + /* + * Functions + */ + int (*la_is_enabled) ( linuxdvb_adapter_t *la ); }; struct linuxdvb_frontend