void (*mi_stop_mux) (mpegts_input_t*,mpegts_mux_instance_t*);
void (*mi_open_service) (mpegts_input_t*,mpegts_service_t*);
void (*mi_close_service) (mpegts_input_t*,mpegts_service_t*);
+ const idclass_t *(*mi_network_class) (mpegts_input_t *mi);
};
#endif /* __TVH_MPEGTS_H__ */
* Functions
* ***************************************************************************/
+extern mpegts_input_list_t mpegts_input_all;
+
mpegts_input_t *mpegts_input_create0
( mpegts_input_t *mi, const idclass_t *idc, const char *uuid, htsmsg_t *c );
* Class methods
* *************************************************************************/
+static const idclass_t *
+linuxdvb_frontend_network_class ( mpegts_input_t *mi )
+{
+ linuxdvb_frontend_t *lfe = (linuxdvb_frontend_t*)mi;
+
+ switch (lfe->lfe_info.type) {
+ case FE_QPSK:
+ return &linuxdvb_frontend_dvbs_class;
+ case FE_QAM:
+ return &linuxdvb_frontend_dvbc_class;
+ case FE_OFDM:
+ return &linuxdvb_frontend_dvbt_class;
+ case FE_ATSC:
+ return &linuxdvb_frontend_atsc_class;
+ default:
+ return NULL;
+ }
+}
+
static int
linuxdvb_frontend_is_enabled ( mpegts_input_t *mi )
{
lfe->mi_open_service = linuxdvb_frontend_open_service;
lfe->mi_close_service = linuxdvb_frontend_close_service;
lfe->lfe_open_pid = linuxdvb_frontend_open_pid;
+ lfe->mi_network_class = linuxdvb_frontend_network_class;
/* Adapter link */
lfe->lh_parent = (linuxdvb_hardware_t*)la;
* Class definition
* *************************************************************************/
+static const char *
+mpegts_input_class_get_name ( void *in )
+{
+ static char buf[256];
+ mpegts_input_t *mi = in;
+ if (mi->mi_display_name)
+ mi->mi_display_name(mi, buf, sizeof(buf));
+ else
+ *buf = 0;
+ return buf;
+}
+
const idclass_t mpegts_input_class =
{
.ic_class = "mpegts_input",
.ic_caption = "MPEGTS Input",
.ic_properties = (const property_t[]){
- { PROPDEF1("enabled", "Enabled",
- PT_BOOL, mpegts_input_t, mi_enabled) },
+ {
+ PROPDEF1("enabled", "Enabled", PT_BOOL,
+ mpegts_input_t, mi_enabled)
+ },
+ {
+ PROPDEF0("displayname", "Name", PT_STR, PO_NOSAVE | PO_RDONLY),
+ .str_get = mpegts_input_class_get_name
+ },
{}
}
};
* Class methods
* *************************************************************************/
+static const idclass_t *
+mpegts_input_network_class (mpegts_input_t *mi)
+{
+ extern const idclass_t mpegts_network_class;
+ return &mpegts_network_class;
+}
+
static int
mpegts_input_is_enabled ( mpegts_input_t *mi )
{
* Creation/Config
* *************************************************************************/
+mpegts_input_list_t mpegts_input_all;
+
mpegts_input_t*
mpegts_input_create0
( mpegts_input_t *mi, const idclass_t *class, const char *uuid,
mi->mi_stop_mux = mpegts_input_stop_mux;
mi->mi_open_service = mpegts_input_open_service;
mi->mi_close_service = mpegts_input_close_service;
+ mi->mi_network_class = mpegts_input_network_class;
/* Init mutex */
pthread_mutex_init(&mi->mi_delivery_mutex, NULL);
/* Init input thread control */
mi->mi_thread_pipe.rd = mi->mi_thread_pipe.wr = -1;
+ /* Add to global list */
+ LIST_INSERT_HEAD(&mpegts_input_all, mi, mi_global_link);
+
return mi;
}