From 38d4ffec95fbefb402255a244536a09eec2c5e36 Mon Sep 17 00:00:00 2001 From: Adam Sutton Date: Tue, 4 Jun 2013 15:20:35 +0100 Subject: [PATCH] mpegts: added some additional routines for network setup --- src/input/mpegts.h | 3 ++ src/input/mpegts/linuxdvb/linuxdvb_frontend.c | 20 +++++++++++ src/input/mpegts/linuxdvb/linuxdvb_hardware.c | 2 ++ src/input/mpegts/mpegts_input.c | 35 +++++++++++++++++-- 4 files changed, 58 insertions(+), 2 deletions(-) diff --git a/src/input/mpegts.h b/src/input/mpegts.h index a7f674fc..4711b376 100644 --- a/src/input/mpegts.h +++ b/src/input/mpegts.h @@ -390,6 +390,7 @@ struct mpegts_input 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__ */ @@ -404,6 +405,8 @@ extern mpegts_network_list_t mpegts_network_all; * 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 ); diff --git a/src/input/mpegts/linuxdvb/linuxdvb_frontend.c b/src/input/mpegts/linuxdvb/linuxdvb_frontend.c index 9cc83e6e..2e2e8f11 100644 --- a/src/input/mpegts/linuxdvb/linuxdvb_frontend.c +++ b/src/input/mpegts/linuxdvb/linuxdvb_frontend.c @@ -127,6 +127,25 @@ const idclass_t linuxdvb_frontend_atsc_class = * 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 ) { @@ -672,6 +691,7 @@ linuxdvb_frontend_create0 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; diff --git a/src/input/mpegts/linuxdvb/linuxdvb_hardware.c b/src/input/mpegts/linuxdvb/linuxdvb_hardware.c index 053d9540..9b8b3883 100644 --- a/src/input/mpegts/linuxdvb/linuxdvb_hardware.c +++ b/src/input/mpegts/linuxdvb/linuxdvb_hardware.c @@ -74,8 +74,10 @@ linuxdvb_hardware_class_get_childs ( idnode_t *in ) return linuxdvb_hardware_enumerate(&((linuxdvb_hardware_t*)in)->lh_children); } +extern const idclass_t mpegts_input_class; const idclass_t linuxdvb_hardware_class = { + .ic_super = &mpegts_input_class, .ic_class = "linuxdvb_hardware", .ic_caption = "LinuxDVB Hardware", .ic_get_title = linuxdvb_hardware_class_get_title, diff --git a/src/input/mpegts/mpegts_input.c b/src/input/mpegts/mpegts_input.c index b34dfba2..3fe75248 100644 --- a/src/input/mpegts/mpegts_input.c +++ b/src/input/mpegts/mpegts_input.c @@ -30,13 +30,31 @@ * 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 + }, {} } }; @@ -45,6 +63,13 @@ const idclass_t mpegts_input_class = * 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 ) { @@ -263,6 +288,8 @@ mpegts_input_table_thread ( void *aux ) * 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, @@ -281,6 +308,7 @@ mpegts_input_create0 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); @@ -292,6 +320,9 @@ mpegts_input_create0 /* 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; }