]> git.ipfire.org Git - thirdparty/tvheadend.git/commitdiff
mpegts: added some additional routines for network setup
authorAdam Sutton <dev@adamsutton.me.uk>
Tue, 4 Jun 2013 14:20:35 +0000 (15:20 +0100)
committerAdam Sutton <dev@adamsutton.me.uk>
Tue, 4 Jun 2013 14:20:35 +0000 (15:20 +0100)
src/input/mpegts.h
src/input/mpegts/linuxdvb/linuxdvb_frontend.c
src/input/mpegts/linuxdvb/linuxdvb_hardware.c
src/input/mpegts/mpegts_input.c

index a7f674fcf72c50ed8e63d690515d06a52e1f4266..4711b3762391ae233d35435f3aa69ec67940387c 100644 (file)
@@ -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 );
 
index 9cc83e6eb0b8ecdc0d7b4a6b97d8531a9d57358b..2e2e8f11075f18cb227e75f4ab5a6479ffc46b2c 100644 (file)
@@ -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;
index 053d95400f1accd652fb2bc5fa2ff4fb6d3e89cd..9b8b3883514676cb94ed10aa1a4895d4977fac07 100644 (file)
@@ -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,
index b34dfba2581e3e498ecd6941f0acb8de30270525..3fe7524845e3e5f9495886a051946ab028e5062f 100644 (file)
  * 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;
 }