]> git.ipfire.org Git - thirdparty/tvheadend.git/commitdiff
dvbreorg: Various refactoring
authorAndreas Öman <andreas@lonelycoder.com>
Thu, 31 Jan 2013 08:32:38 +0000 (09:32 +0100)
committerAndreas Öman <andreas@lonelycoder.com>
Thu, 31 Jan 2013 08:32:38 +0000 (09:32 +0100)
src/dvb/dvb.h
src/dvb/dvb_fe.c
src/dvb/dvb_multiplex.c
src/dvb/dvb_network.c
src/dvb/dvb_service.c
src/dvb/dvb_support.c
src/dvb/dvb_support.h
src/v4l.c
src/webui/extjs_v4l.c

index aa08aff037babba1aad9e97e2e7421a15ebb1dd5..9b528554b9862dae52a78abf0387ea346e1d92fb 100644 (file)
@@ -450,6 +450,8 @@ dvb_mux_t *dvb_mux_create(dvb_network_t *tda,
                           const char *logprefix, int enabled,
                           int initialscan, const char *uuid);
 
+int dvb_mux_tune(dvb_mux_t *dm, const char *reason, int weight);
+
 void dvb_mux_set_networkname(dvb_mux_t *dm, const char *name);
 
 void dvb_mux_set_tsid(dvb_mux_t *dm, uint16_t tsid);
@@ -490,10 +492,8 @@ dvb_mux_t *dvb_mux_find(dvb_network_t *dn, const char *netname, uint16_t onid,
 
 void dvb_mux_initial_scan_done(dvb_mux_t *dm);
 
-/**
- * DVB Transport (aka DVB service)
- */
-void dvb_tdmi_destroy(th_dvb_mux_instance_t *tdmi);
+int dvb_fe_tune_tdmi(th_dvb_mux_instance_t *tdmi);
+
 
 /**
  * DVB Transport (aka DVB service)
@@ -521,7 +521,6 @@ void dvb_service_notify_by_adapter(th_dvb_adapter_t *tda);
 /**
  * DVB Frontend
  */
-int dvb_fe_tune(dvb_mux_t *dm, const char *reason, int weight);
 
 //void dvb_fe_stop(th_dvb_adapter_t *tda, int retune);
 
index ba05ed4f1660708dfc4a0ab7983c397e11291b98..a01fb59842903e9b3d2d160d4a663844199888e2 100644 (file)
@@ -92,7 +92,6 @@ dvb_fe_monitor(void *aux)
   fe_status_t fe_status;
   int status, v, vv, i, fec, q;
   th_dvb_mux_instance_t *tdmi = tda->tda_current_tdmi;
-  char buf[50];
   signal_status_t sigstat;
   streaming_message_t sm;
   struct service *t;
@@ -191,10 +190,10 @@ dvb_fe_monitor(void *aux)
   if(status != tdmi->tdmi_fe_status) {
     tdmi->tdmi_fe_status = status;
 
-    dvb_mux_nicename(buf, sizeof(buf), tdmi->tdmi_mux);
     tvhlog(LOG_DEBUG,
           "dvb", "\"%s\" on adapter \"%s\", status changed to %s",
-          buf, tda->tda_displayname, dvb_mux_status(tdmi));
+          dvb_mux_nicename(tdmi->tdmi_mux), tda->tda_displayname,
+           dvb_mux_status(tdmi));
     notify = 1;
   }
 
@@ -385,147 +384,23 @@ dvb_fe_tune_s2(th_dvb_adapter_t *tda, dvb_mux_conf_t *dmc)
 #endif
 
 
-/**
- * These are created on the fly
- */
-static void
-dvb_create_tdmis(dvb_mux_t *dm)
-{
-  th_dvb_mux_instance_t *tdmi;
-  dvb_network_t *dn = dm->dm_dn;
-  th_dvb_adapter_t *tda;
-
-  LIST_FOREACH(tda, &dn->dn_adapters, tda_network_link) {
-
-    LIST_FOREACH(tdmi, &dm->dm_tdmis, tdmi_mux_link) {
-      if(tdmi->tdmi_adapter != NULL)
-        break;
-    }
-
-    if(tdmi == NULL) {
-      tdmi = calloc(1, sizeof(th_dvb_mux_instance_t));
-      tdmi->tdmi_adapter = tda;
-      tdmi->tdmi_mux = dm;
-      LIST_INSERT_HEAD(&tda->tda_tdmis, tdmi, tdmi_adapter_link);
-      LIST_INSERT_HEAD(&dm->dm_tdmis,   tdmi, tdmi_mux_link);
-    }
-  }
-}
 
-
-
-/**
- *
- */
-static void
-dvb_mux_stop(th_dvb_mux_instance_t *tdmi)
+int
+dvb_fe_tune_tdmi(th_dvb_mux_instance_t *tdmi)
 {
-  dvb_mux_t *dm = tdmi->tdmi_mux;
   th_dvb_adapter_t *tda = tdmi->tdmi_adapter;
-  assert(dm->dm_current_tdmi == tdmi);
-  assert(tda->tda_current_tdmi == tdmi);
-
-  dvb_table_flush_all(dm);
-  epggrab_mux_stop(dm, 0);
-
-  assert(dm->dm_scan_status == DM_SCAN_DONE);
-
-  dm->dm_current_tdmi = NULL;
-  tda->tda_current_tdmi = NULL;
-
-  printf("NEED TO TAKE CARE OF SERVICES in dvb_mux_stop\n");
-}
-
-
-/**
- *
- */
-static int
-tdmi_compute_weight(const th_dvb_mux_instance_t *tdmi)
-{
   const dvb_mux_t *dm = tdmi->tdmi_mux;
-  if(dm->dm_scan_status == DM_SCAN_CURRENT)
-    return 1;
-  return 0;
-}
-
-
-/**
- *
- */
-static void
-dvb_mux_initial_scan_timeout(void *aux)
-{
-  dvb_mux_t *dm = aux;
-  char buf[100];
-
-  dvb_mux_nicename(buf, sizeof(buf), dm);
-  tvhlog(LOG_DEBUG, "dvb", "Initial scan timed out for \"%s\"", buf);
-
-  dvb_mux_initial_scan_done(dm);
-}
-
-
-/**
- *
- */
-int
-dvb_fe_tune(dvb_mux_t *dm, const char *reason, int weight)
-{
-  dvb_network_t *dn = dm->dm_dn;
-
   // copy dmc, cause frequency may be change with FE_QPSK
   dvb_mux_conf_t dmc = dm->dm_conf;
   dvb_frontend_parameters_t* p = &dmc.dmc_fe_params;
-  th_dvb_mux_instance_t *tdmi;
-
-  char buf[256];
   int r;
-
-  assert(dm->dm_current_tdmi == NULL);
-
-  lock_assert(&global_lock);
-
-  dvb_create_tdmis(dm);
-
-  retry:
-  // Figure which adapter to use
-  LIST_FOREACH(tdmi, &dm->dm_tdmis, tdmi_mux_link)
-    if(!tdmi->tdmi_tune_failed && tdmi->tdmi_adapter->tda_current_tdmi == NULL)
-      break;
-
-  if(tdmi == NULL) {
-    // None available, need to strike one out
-    LIST_FOREACH(tdmi, &dm->dm_tdmis, tdmi_mux_link) {
-      if(tdmi->tdmi_tune_failed)
-        continue;
-
-      th_dvb_adapter_t *tda = tdmi->tdmi_adapter;
-      th_dvb_mux_instance_t *t2 = tda->tda_current_tdmi;
-      assert(t2 != NULL);
-      assert(t2 != tdmi);
-
-      if(tdmi_compute_weight(t2) < weight) {
-        dvb_mux_stop(t2);
-        break;
-      }
-    }
-
-    if(tdmi == NULL)
-      return SM_CODE_NO_FREE_ADAPTER;
-
-  }
-
-  th_dvb_adapter_t *tda = tdmi->tdmi_adapter;
+  char buf[256];
 
   dvb_adapter_start(tda);
 
   assert(tda->tda_current_tdmi == NULL);
 
-  free(tda->tda_tune_reason);
-  tda->tda_tune_reason = strdup(reason);
 
-  tdmi->tdmi_weight = weight;
 
   if(tda->tda_fe_type == FE_QPSK) {
 
@@ -574,52 +449,26 @@ dvb_fe_tune(dvb_mux_t *dm, const char *reason, int weight)
       tvhlog(LOG_ERR, "dvb", "diseqc setup failed %d\n", r);
     }
 
-  dvb_mux_nicename(buf, sizeof(buf), tdmi->tdmi_mux);
-
   tda->tda_fe_monitor_hold = 4;
 
-
 #if DVB_API_VERSION >= 5
   if (tda->tda_fe_type == FE_QPSK) {
     tvhlog(LOG_DEBUG, "dvb", "\"%s\" tuning via s2api to \"%s\" (%d, %d Baud, "
-           "%s, %s, %s) for %s", tda->tda_rootpath, buf, p->frequency, p->u.qpsk.symbol_rate, 
-      dvb_mux_fec2str(p->u.qpsk.fec_inner), dvb_mux_delsys2str(dmc.dmc_fe_delsys), 
-      dvb_mux_qam2str(dmc.dmc_fe_modulation), reason);
-  
+           "%s, %s, %s)", tda->tda_rootpath, buf, p->frequency, p->u.qpsk.symbol_rate,
+      dvb_mux_fec2str(p->u.qpsk.fec_inner), dvb_mux_delsys2str(dmc.dmc_fe_delsys),
+      dvb_mux_qam2str(dmc.dmc_fe_modulation));
     r = dvb_fe_tune_s2(tda, &dmc);
   } else
 #endif
   {
-    tvhlog(LOG_DEBUG, "dvb", "\"%s\" tuning to \"%s\" (%s) fd:%d", tda->tda_rootpath, buf, reason, tda->tda_fe_fd);
+    tvhlog(LOG_DEBUG, "dvb", "\"%s\" tuning to \"%s\"",
+           tda->tda_rootpath, dvb_mux_nicename(dm));
     r = ioctl(tda->tda_fe_fd, FE_SET_FRONTEND, p);
   }
 
-  if(r != 0) {
-    tvhlog(LOG_ERR, "dvb", "\"%s\" tuning to \"%s\""
-     " -- Front configuration failed -- %s, frequency: %u",
-     tda->tda_rootpath, buf, strerror(errno), p->frequency);
-
-    /* Mark as bad */
-    tdmi->tdmi_tune_failed = 1;
-    goto retry;
-  }
-
-  tda->tda_current_tdmi = tdmi;
-  dm->dm_current_tdmi = tdmi;
-  if(dm->dm_scan_status == DM_SCAN_PENDING) {
-    TAILQ_REMOVE(&dn->dn_initial_scan_pending_queue, dm, dm_scan_link);
-    dm->dm_scan_status = DM_SCAN_CURRENT;
-    TAILQ_INSERT_TAIL(&dn->dn_initial_scan_current_queue, dm, dm_scan_link);
-
-    gtimer_arm(&dm->dm_initial_scan_timeout, dvb_mux_initial_scan_timeout, dm, 10);
-  }
 
+  if(!r)
+    gtimer_arm(&tda->tda_fe_monitor_timer, dvb_fe_monitor, tda, 1);
 
-  gtimer_arm(&tda->tda_fe_monitor_timer, dvb_fe_monitor, tda, 1);
-
-  dvb_table_add_default(dm);
-  epggrab_mux_start(dm);
-
-  dvb_adapter_notify(tda);
-  return 0;
+  return r;
 }
index 49fe59f3433585af0aedf7779ada455955033083..00b54484dffd957659c194d493c0fd6b3ed9dffe 100644 (file)
@@ -218,12 +218,10 @@ dvb_mux_create(dvb_network_t *dn, const struct dvb_mux_conf *dmc,
     }
 
     if(save) {
-      char buf[128];
       dvb_mux_save(dm);
-      dvb_mux_nicename(buf, sizeof(buf), dm);
-      tvhlog(LOG_DEBUG, "dvb", 
-            "Configuration for mux \"%s\" updated by %s%s", 
-            buf, source, buf2);
+      tvhlog(LOG_DEBUG, "dvb",
+            "Configuration for mux \"%s\" updated by %s%s",
+            dvb_mux_nicename(dm), source, buf2);
       dvb_mux_notify(dm);
     }
 
@@ -255,9 +253,8 @@ dvb_mux_create(dvb_network_t *dn, const struct dvb_mux_conf *dmc,
   memcpy(&dm->dm_conf, dmc, sizeof(struct dvb_mux_conf));
 
   if(source != NULL) {
-    char buf[128];
-    dvb_mux_nicename(buf, sizeof(buf), dm);
-    tvhlog(LOG_NOTICE, "dvb", "New mux \"%s\" created by %s", buf, source);
+    tvhlog(LOG_NOTICE, "dvb", "New mux \"%s\" created by %s",
+           dvb_mux_nicename(dm), source);
 
     dvb_mux_save(dm);
   }
@@ -276,7 +273,7 @@ dvb_mux_create(dvb_network_t *dn, const struct dvb_mux_conf *dmc,
 /**
  *
  */
-void
+static void
 dvb_tdmi_destroy(th_dvb_mux_instance_t *tdmi)
 {
   LIST_REMOVE(tdmi, tdmi_mux_link);
@@ -954,8 +951,7 @@ dvb_mux_build_msg(dvb_mux_t *dm)
   htsmsg_add_u32(m, "enabled",  dm->dm_enabled);
   htsmsg_add_str(m, "network", dm->dm_network_name ?: "");
 
-  dvb_mux_nicefreq(buf, sizeof(buf), dm);
-  htsmsg_add_str(m, "freq",  buf);
+  htsmsg_add_str(m, "freq",  dvb_mux_nicefreq(dm));
 
   dvb_mux_modulation(buf, sizeof(buf), dm);
   htsmsg_add_str(m, "mod",  buf);
@@ -1233,7 +1229,7 @@ dvb_subscription_create_from_tdmi(th_dvb_mux_instance_t *tdmi,
   s->ths_tdmi = tdmi;
   LIST_INSERT_HEAD(&tdmi->tdmi_subscriptions, s, ths_tdmi_link);
 
-  dvb_fe_tune(tdmi->tdmi_mux, "Full mux subscription", 99999);
+  dvb_mux_tune(tdmi->tdmi_mux, "Full mux subscription", 99999);
   abort();
   pthread_mutex_lock(&tda->tda_delivery_mutex);
   streaming_target_connect(&tda->tda_streaming_pad, &s->ths_input);
@@ -1254,11 +1250,7 @@ dvb_mux_serialize(struct idnode *self, int full)
   dvb_mux_t *dm = (dvb_mux_t *)self;
   htsmsg_t *m = htsmsg_create_map();
   htsmsg_add_str(m, "id", idnode_uuid_as_str(&dm->dm_id));
-
-  char buf[256];
-  dvb_mux_nicename(buf, sizeof(buf), dm);
-
-  htsmsg_add_str(m, "text", buf);
+  htsmsg_add_str(m, "text", dvb_mux_nicename(dm));
   return m;
 }
 
@@ -1295,3 +1287,164 @@ dvb_mux_get_childs(struct idnode *self)
   v[cnt] = NULL;
   return v;
 }
+
+
+
+/**
+ * These are created on the fly
+ */
+static void
+dvb_create_tdmis(dvb_mux_t *dm)
+{
+  th_dvb_mux_instance_t *tdmi;
+  dvb_network_t *dn = dm->dm_dn;
+  th_dvb_adapter_t *tda;
+
+  LIST_FOREACH(tda, &dn->dn_adapters, tda_network_link) {
+
+    LIST_FOREACH(tdmi, &dm->dm_tdmis, tdmi_mux_link) {
+      if(tdmi->tdmi_adapter != NULL)
+        break;
+    }
+
+    if(tdmi == NULL) {
+      tdmi = calloc(1, sizeof(th_dvb_mux_instance_t));
+      tdmi->tdmi_adapter = tda;
+      tdmi->tdmi_mux = dm;
+      LIST_INSERT_HEAD(&tda->tda_tdmis, tdmi, tdmi_adapter_link);
+      LIST_INSERT_HEAD(&dm->dm_tdmis,   tdmi, tdmi_mux_link);
+    }
+  }
+}
+
+
+
+/**
+ *
+ */
+static void
+dvb_mux_stop(th_dvb_mux_instance_t *tdmi)
+{
+  dvb_mux_t *dm = tdmi->tdmi_mux;
+  th_dvb_adapter_t *tda = tdmi->tdmi_adapter;
+  assert(dm->dm_current_tdmi == tdmi);
+  assert(tda->tda_current_tdmi == tdmi);
+
+  dvb_table_flush_all(dm);
+  epggrab_mux_stop(dm, 0);
+
+  assert(dm->dm_scan_status == DM_SCAN_DONE);
+
+  dm->dm_current_tdmi = NULL;
+  tda->tda_current_tdmi = NULL;
+
+  printf("NEED TO TAKE CARE OF SERVICES in dvb_mux_stop\n");
+}
+
+
+/**
+ *
+ */
+static int
+tdmi_compute_weight(const th_dvb_mux_instance_t *tdmi)
+{
+  const dvb_mux_t *dm = tdmi->tdmi_mux;
+  if(dm->dm_scan_status == DM_SCAN_CURRENT)
+    return 1;
+  return 0;
+}
+
+
+/**
+ *
+ */
+static void
+dvb_mux_initial_scan_timeout(void *aux)
+{
+  dvb_mux_t *dm = aux;
+  tvhlog(LOG_DEBUG, "dvb", "Initial scan timed out for \"%s\"",
+         dvb_mux_nicename(dm));
+
+  dvb_mux_initial_scan_done(dm);
+}
+
+
+/**
+ *
+ */
+int
+dvb_mux_tune(dvb_mux_t *dm, const char *reason, int weight)
+{
+  dvb_network_t *dn = dm->dm_dn;
+  th_dvb_mux_instance_t *tdmi;
+  int r;
+
+  assert(dm->dm_current_tdmi == NULL);
+
+  lock_assert(&global_lock);
+
+  dvb_create_tdmis(dm);
+
+  retry:
+  // Figure which adapter to use
+  LIST_FOREACH(tdmi, &dm->dm_tdmis, tdmi_mux_link)
+    if(!tdmi->tdmi_tune_failed && tdmi->tdmi_adapter->tda_current_tdmi == NULL)
+      break;
+
+  if(tdmi == NULL) {
+    // None available, need to strike one out
+    LIST_FOREACH(tdmi, &dm->dm_tdmis, tdmi_mux_link) {
+      if(tdmi->tdmi_tune_failed)
+        continue;
+
+      th_dvb_adapter_t *tda = tdmi->tdmi_adapter;
+      th_dvb_mux_instance_t *t2 = tda->tda_current_tdmi;
+      assert(t2 != NULL);
+      assert(t2 != tdmi);
+
+      if(tdmi_compute_weight(t2) < weight) {
+        dvb_mux_stop(t2);
+        break;
+      }
+    }
+
+    if(tdmi == NULL)
+      return SM_CODE_NO_FREE_ADAPTER;
+
+  }
+
+  tdmi->tdmi_weight = weight;
+
+  th_dvb_adapter_t *tda = tdmi->tdmi_adapter;
+
+  free(tda->tda_tune_reason);
+  tda->tda_tune_reason = strdup(reason);
+
+  r = dvb_fe_tune_tdmi(tdmi);
+
+  if(r != 0) {
+    tvhlog(LOG_ERR, "dvb", "\"%s\" tuning to \"%s\""
+           " -- Front configuration failed -- %s",
+           tda->tda_rootpath, dvb_mux_nicename(dm), strerror(errno));
+
+    /* Mark as bad */
+    tdmi->tdmi_tune_failed = 1;
+    goto retry;
+  }
+
+  tda->tda_current_tdmi = tdmi;
+  dm->dm_current_tdmi = tdmi;
+  if(dm->dm_scan_status == DM_SCAN_PENDING) {
+    TAILQ_REMOVE(&dn->dn_initial_scan_pending_queue, dm, dm_scan_link);
+    dm->dm_scan_status = DM_SCAN_CURRENT;
+    TAILQ_INSERT_TAIL(&dn->dn_initial_scan_current_queue, dm, dm_scan_link);
+
+    gtimer_arm(&dm->dm_initial_scan_timeout, dvb_mux_initial_scan_timeout, dm, 10);
+  }
+
+  dvb_table_add_default(dm);
+  epggrab_mux_start(dm);
+
+  dvb_adapter_notify(tda);
+  return 0;
+}
index 4bc6d4add9b340049d8889a2fa289082869a40d5..c0818446669f6ffe0d67561f16f62280d621a864 100644 (file)
@@ -235,7 +235,7 @@ dvb_network_initial_scan(void *aux)
 
   while((dm = TAILQ_FIRST(&dn->dn_initial_scan_pending_queue)) != NULL) {
     assert(dm->dm_scan_status == DM_SCAN_PENDING);
-    if(dvb_fe_tune(dm, "initial scan", 1))
+    if(dvb_mux_tune(dm, "initial scan", 1))
       break;
     assert(dm->dm_scan_status == DM_SCAN_CURRENT);
   }
index 109312e2c4b26dce067c3bb269aa4550f00ae7c9..98d14650fe096c450b703359e4dda5cdb11b001e 100644 (file)
@@ -276,7 +276,6 @@ static void
 dvb_service_setsourceinfo(service_t *t, struct source_info *si)
 {
   dvb_mux_t *dm = t->s_dvb_mux;
-  char buf[100];
 
   memset(si, 0, sizeof(struct source_info));
 
@@ -287,8 +286,7 @@ dvb_service_setsourceinfo(service_t *t, struct source_info *si)
   if(dm->dm_network_name != NULL)
     si->si_network = strdup(dm->dm_network_name);
 
-  dvb_mux_nicename(buf, sizeof(buf), dm);
-  si->si_mux = strdup(buf);
+  si->si_mux = strdup(dvb_mux_nicename(dm));
 
   if(t->s_provider != NULL)
     si->si_provider = strdup(t->s_provider);
@@ -364,7 +362,6 @@ dvb_service_find2(dvb_mux_t *dm, uint16_t sid, int pmt_pid,
                   const char *uuid, int *save)
 {
   service_t *t;
-  char buf[200];
 
   lock_assert(&global_lock);
 
@@ -376,8 +373,8 @@ dvb_service_find2(dvb_mux_t *dm, uint16_t sid, int pmt_pid,
   if(pmt_pid == 0)
     return NULL;
 
-  dvb_mux_nicename(buf, sizeof(buf), dm);
-  tvhlog(LOG_DEBUG, "dvb", "Add service \"0x%x\" on \"%s\"", sid, buf);
+  tvhlog(LOG_DEBUG, "dvb", "Add service \"0x%x\" on \"%s\"", sid,
+         dvb_mux_nicename(dm));
 
   t = service_create(uuid, S_MPEG_TS);
   if (save) *save = 1;
@@ -396,9 +393,9 @@ dvb_service_find2(dvb_mux_t *dm, uint16_t sid, int pmt_pid,
   t->s_dvb_mux = dm;
   LIST_INSERT_HEAD(&dm->dm_services, t, s_group_link);
 
-  pthread_mutex_lock(&t->s_stream_mutex); 
+  pthread_mutex_lock(&t->s_stream_mutex);
   service_make_nicename(t);
-  pthread_mutex_unlock(&t->s_stream_mutex); 
+  pthread_mutex_unlock(&t->s_stream_mutex);
   return t;
 }
 
@@ -434,8 +431,7 @@ dvb_service_serialize(service_t *s, int full)
 
   htsmsg_add_str(m, "network", dm->dm_network_name ?: "");
 
-  dvb_mux_nicefreq(buf, sizeof(buf), dm);
-  htsmsg_add_str(m, "mux", buf);
+  htsmsg_add_str(m, "mux", dvb_mux_nicefreq(dm));
 
   if(s->s_ch != NULL)
     htsmsg_add_str(m, "channelname", s->s_ch->ch_name);
index c40cc7555197a9e4d4ba6e4ec0478661c1f9f251..fe994229712d90cbdf8ef2ddd3c2539e0ee693e2 100644 (file)
@@ -444,61 +444,54 @@ dvb_adapter_find_by_identifier(const char *identifier)
 /**
  *
  */
-static const char *
-nicenum(char *x, size_t siz, unsigned int v)
+static void
+nicenum(char *x, size_t siz, unsigned int v, const char *postfix)
 {
   if(v < 1000)
-    snprintf(x, siz, "%d", v);
+    snprintf(x, siz, "%d%s", v, postfix);
   else if(v < 1000000)
-    snprintf(x, siz, "%d,%03d", v / 1000, v % 1000);
+    snprintf(x, siz, "%d,%03d%s", v / 1000, v % 1000, postfix);
   else if(v < 1000000000)
-    snprintf(x, siz, "%d,%03d,%03d", 
-            v / 1000000, (v % 1000000) / 1000, v % 1000);
-  else 
-    snprintf(x, siz, "%d,%03d,%03d,%03d", 
+    snprintf(x, siz, "%d,%03d,%03d%s",
+            v / 1000000, (v % 1000000) / 1000, v % 1000, postfix);
+  else
+    snprintf(x, siz, "%d,%03d,%03d,%03d%s",
             v / 1000000000, (v % 1000000000) / 1000000,
-            (v % 1000000) / 1000, v % 1000);
-  return x;
+            (v % 1000000) / 1000, v % 1000, postfix);
 }
 
 
 /**
- * 
+ *
  */
-void
-dvb_mux_nicefreq(char *buf, size_t size, const dvb_mux_t *dm)
+const char *
+dvb_mux_nicefreq(const dvb_mux_t *dm)
 {
-  char freq[50];
-
-  if(dm->dm_dn->dn_fe_type == FE_QPSK) {
-    nicenum(freq, sizeof(freq), dm->dm_conf.dmc_fe_params.frequency);
-    snprintf(buf, size, "%s kHz", freq);
-  } else {
-    nicenum(freq, sizeof(freq), 
-           dm->dm_conf.dmc_fe_params.frequency / 1000);
-    snprintf(buf, size, "%s kHz", freq);
-  }
+  static char ret[100];
+  int f = dm->dm_conf.dmc_fe_params.frequency;
+  nicenum(ret, sizeof(ret), dm->dm_dn->dn_fe_type == FE_QPSK ? f : f / 1000,
+          " kHz");
+  return ret;
 }
 
 
 /**
- * 
+ *
  */
-void
-dvb_mux_nicename(char *buf, size_t size, dvb_mux_t *dm)
+const char *
+dvb_mux_nicename(const dvb_mux_t *dm)
 {
-  char freq[50];
+  static char ret[100];
   const char *n = dm->dm_network_name;
 
-  if(dm->dm_dn->dn_fe_type == FE_QPSK) {
-    nicenum(freq, sizeof(freq), dm->dm_conf.dmc_fe_params.frequency);
-    snprintf(buf, size, "%s%s%s kHz %s",
-            n?:"", n ? ": ":"", freq,
-            dvb_polarisation_to_str_long(dm->dm_conf.dmc_polarisation));
-
-  } else {
-    nicenum(freq, sizeof(freq), dm->dm_conf.dmc_fe_params.frequency / 1000);
-    snprintf(buf, size, "%s%s%s kHz", n?:"", n ? ": ":"", freq);
-  }
+  snprintf(ret, sizeof(ret), "%s%s%s%s%s",
+           n ?: "",
+           n ? ": " : "",
+           dvb_mux_nicefreq(dm),
+           dm->dm_dn->dn_fe_type == FE_QPSK ? " " : "",
+           dm->dm_dn->dn_fe_type == FE_QPSK ?
+           dvb_polarisation_to_str_long(dm->dm_conf.dmc_polarisation) : 
+           "");
+  return ret;
 }
 
index ab5ece2873faf0fbf44e6cc32b496a4f63c4d824..762eaecb32616ce8e56b2df3a055fe2a5a7e3868 100644 (file)
@@ -79,10 +79,11 @@ const char *dvb_polarisation_to_str(int pol);
 const char *dvb_polarisation_to_str_long(int pol);
 th_dvb_adapter_t *dvb_adapter_find_by_identifier(const char *identifier);
 th_dvb_mux_instance_t *dvb_mux_find_by_identifier(const char *identifier);
-void dvb_mux_nicename(char *buf, size_t size, dvb_mux_t *tdmi);
 int dvb_mux_badness(th_dvb_mux_instance_t *tdmi);
 const char *dvb_mux_status(th_dvb_mux_instance_t *tdmi);
-void dvb_mux_nicefreq(char *buf, size_t size, const dvb_mux_t *dm);
+
+const char *dvb_mux_nicefreq(const dvb_mux_t *dm);
+const char *dvb_mux_nicename(const dvb_mux_t *dm);
 
 void atsc_utf16_to_utf8(uint8_t *src, int len, char *buf, int buflen);
 
index 9ad9a5c62c7f31197beb4140119f499f8bf671b3..6fae675011167070b0638e39865f2f1440642586 100644 (file)
--- a/src/v4l.c
+++ b/src/v4l.c
@@ -289,22 +289,12 @@ v4l_service_save(service_t *t)
   pthread_mutex_unlock(&t->s_stream_mutex);
   
   hts_settings_save(m, "v4lservices/%s/%s",
-                   va->va_identifier, t->s_uuid);
+                   va->va_identifier, idnode_uuid_as_str(&t->s_id));
 
   htsmsg_destroy(m);
 }
 
 
-/**
- *
- */
-static int
-v4l_service_quality(service_t *t)
-{
-  return 100;
-}
-
-
 /**
  *
  */
@@ -349,7 +339,7 @@ v4l_service_find(v4l_adapter_t *va, const char *id, int create)
       return NULL;
 
     LIST_FOREACH(t, &va->va_services, s_group_link)
-      if(!strcmp(t->s_uuid, id))
+      if(!strcmp(idnode_uuid_as_str(&t->s_id), id))
        return t;
   }
 
@@ -371,7 +361,6 @@ v4l_service_find(v4l_adapter_t *va, const char *id, int create)
   t->s_stop_feed     = v4l_service_stop;
   t->s_config_save   = v4l_service_save;
   t->s_setsourceinfo = v4l_service_setsourceinfo;
-  t->s_quality_index = v4l_service_quality;
   t->s_grace_period  = v4l_grace_period;
   t->s_iptv_fd = -1;
   t->s_v4l_adapter = va;
index f7e026304dc3ac6caccd4766befedfffe76974b8..ad1d4833f4b713b141ff98a11190481013565c34 100644 (file)
@@ -170,7 +170,7 @@ build_record_v4l(service_t *t)
 {
   htsmsg_t *r = htsmsg_create_map();
 
-  htsmsg_add_str(r, "id", t->s_identifier);
+  //  htsmsg_add_str(r, "id", t->s_identifier); // XXX(dvbreorg)
 
   htsmsg_add_str(r, "channelname", t->s_ch ? t->s_ch->ch_name : "");
   htsmsg_add_u32(r, "frequency", t->s_v4l_frequency);