]> git.ipfire.org Git - thirdparty/tvheadend.git/commitdiff
Added ISDB-T SATIP Support
authorGeorge Kharrat <dkgeorge@gmail.com>
Wed, 9 Dec 2020 09:33:25 +0000 (04:33 -0500)
committerFlole998 <Flole998@users.noreply.github.com>
Tue, 29 Dec 2020 18:02:52 +0000 (19:02 +0100)
src/input/mpegts/satip/satip.c
src/input/mpegts/satip/satip_frontend.c
src/input/mpegts/satip/satip_private.h
src/input/mpegts/satip/satip_rtsp.c
src/satip/rtsp.c
src/satip/server.c
src/satip/server.h

index cd6a8c074abc8a9e9ac9e2daa367550420719d8b..0d3ba18ac8c3c496bcd9ab5b40b7c54ef2002c64 100644 (file)
@@ -204,6 +204,7 @@ static const char *satip_tunercfg_tab[] = {
   "DVBS2-4,DVBC-2",
   "DVBS2-4,DVBT-2,DVBC-2",
   "DVBS2-8,DVBT-4,DVBC-4",
+  "ISDB-T",
   NULL
 };
 
@@ -748,6 +749,9 @@ satip_device_create( satip_device_info_t *info )
     } else if (strncmp(argv[i], "ATSCC-", 6) == 0) {
       type = DVB_TYPE_ATSC_C;
       m = atoi(argv[i] + 6);
+    } else if (strncmp(argv[i], "ISDBT-", 6) == 0) {
+      type = DVB_TYPE_ISDB_T;
+      m = atoi(argv[i] + 6);
     }
     if (type == DVB_TYPE_NONE) {
       tvherror(LS_SATIP, "%s: bad tuner type [%s]",
@@ -1375,6 +1379,7 @@ void satip_init ( int nosatip, str_list_t *clients )
   idclass_register(&satip_frontend_dvbs_slave_class);
   idclass_register(&satip_frontend_atsc_t_class);
   idclass_register(&satip_frontend_atsc_c_class);
+  idclass_register(&satip_frontend_isdb_t_class);
 
   idclass_register(&satip_satconf_class);
 
index e880170a0e631e955435950663960febdbcf44fe..1c414da688f0e60e52ad15d62dfec2750c44b1bb 100644 (file)
@@ -614,6 +614,16 @@ const idclass_t satip_frontend_atsc_c_class =
   }
 };
 
+const idclass_t satip_frontend_isdb_t_class =
+{
+  .ic_super      = &satip_frontend_class,
+  .ic_class      = "satip_frontend_isdb_t",
+  .ic_caption    = N_("SAT>IP ISDB-T Frontend"),
+  .ic_properties = (const property_t[]){
+    {}
+  }
+};
+
 /* **************************************************************************
  * Class methods
  * *************************************************************************/
@@ -2310,6 +2320,8 @@ satip_frontend_create
     idc = &satip_frontend_atsc_t_class;
   else if (type == DVB_TYPE_ATSC_C)
     idc = &satip_frontend_atsc_c_class;
+  else if (type == DVB_TYPE_ISDB_T)
+    idc = &satip_frontend_isdb_t_class;
   else {
     tvherror(LS_SATIP, "unknown FE type %d", type);
     return NULL;
index f150bb396938d64ba8a1b22680c58e2ea0822726..af123ca86d46e30572adbe942caf2eb77dbfec9c 100644 (file)
@@ -231,6 +231,7 @@ extern const idclass_t satip_frontend_dvbs_class;
 extern const idclass_t satip_frontend_dvbs_slave_class;
 extern const idclass_t satip_frontend_atsc_t_class;
 extern const idclass_t satip_frontend_atsc_c_class;
+extern const idclass_t satip_frontend_isdb_t_class;
 
 extern const idclass_t satip_satconf_class;
 
index d19aab94e0ff8b7d8f625ed4058441f6ccfc974a..e0f675e48815b738fddaa473c706eb6d9c8b7ff7 100644 (file)
@@ -85,6 +85,7 @@ satip_rtsp_setup( http_client_t *hc, int src, int fe,
     { .t = DVB_SYS_DVBC_ANNEX_A,              "dvbc"  },
     { .t = DVB_SYS_DVBC_ANNEX_C,              "dvbc2" },
     { .t = DVB_SYS_ATSC,                      "atsc"  },
+    { .t = DVB_SYS_ISDBT,                     "isdbt" },
     { .t = DVB_SYS_DVBC_ANNEX_B,              "dvbcb" },
     { .t = TABLE_EOD }
   };
@@ -270,6 +271,13 @@ satip_rtsp_setup( http_client_t *hc, int src, int fe,
         dmc->dmc_fe_modulation != DVB_MOD_QAM_AUTO)
       ADD(dmc_fe_modulation, mtype,
           dmc->dmc_fe_delsys == DVB_SYS_ATSC ? "8vsb" : "64qam");
+  } else if (dmc->dmc_fe_delsys == DVB_SYS_ISDBT) {
+    satip_rtsp_add_val("freq", buf, dmc->dmc_fe_freq / 1000);
+    ADD(dmc_fe_delsys, msys, "isdbt");
+    if (dmc->dmc_fe_modulation != DVB_MOD_AUTO &&
+        dmc->dmc_fe_modulation != DVB_MOD_NONE &&
+        dmc->dmc_fe_modulation != DVB_MOD_QAM_AUTO)
+      ADD(dmc_fe_modulation, mtype, "64qam");
   }
   if (weight > 0)
     satip_rtsp_add_val("tvhweight", buf, (uint32_t)weight * 1000);
index ff54a24d3443fd22857775150dd7a8f4e291af65..ca3ca525233ead1e8194f6389aa63b9d4c143d5f 100644 (file)
@@ -168,6 +168,13 @@ satip_rtsp_delsys(int fe, int *findex, const char **ftype)
     t = "ATSC-C";
     goto result;
   }
+  fe -= i;
+  i = satip_server_conf.satip_isdb_t;
+  if (fe <= i) {
+    res = DVB_SYS_ISDBT;
+    t = "ISDB-T";
+    goto result;
+  }
   tvh_mutex_unlock(&global_lock);
   return DVB_SYS_NONE;
 result:
@@ -760,6 +767,7 @@ msys_to_tvh(http_connection_t *hc)
     { "dvbc",  DVB_SYS_DVBC_ANNEX_A },
     { "dvbc2", DVB_SYS_DVBC_ANNEX_C },
     { "atsc",  DVB_SYS_ATSC },
+    { "isdbt",  DVB_SYS_ISDBT },
     { "dvbcb", DVB_SYS_DVBC_ANNEX_B }
   };
   const char *s = http_arg_get_remove(&hc->hc_req_args, "msys");
@@ -1223,7 +1231,7 @@ rtsp_parse_cmd
     dmc->dmc_fe_stream_id = plp;
     dmc->dmc_fe_pls_code = ds; /* check */
 
-  } else if (msys == DVB_SYS_ATSC || msys == DVB_SYS_DVBC_ANNEX_B) {
+  } else if (msys == DVB_SYS_ISDBT || msys == DVB_SYS_ATSC || msys == DVB_SYS_DVBC_ANNEX_B) {
 
     freq *= 1000;
     if (freq < 0) goto end;
index 72c31493bc06ef46bc40f26b0106424dee041aed..401fd6b63ab386ed8f6814f25ffa754349c28e02 100644 (file)
@@ -117,7 +117,7 @@ satip_server_http_xml(http_connection_t *hc)
   char *devicelist = NULL;
   htsbuf_queue_t q;
   mpegts_network_t *mn;
-  int dvbt = 0, dvbs = 0, dvbc = 0, atsc = 0;
+  int dvbt = 0, dvbs = 0, dvbc = 0, atsc = 0, isdbt = 0;
   int srcs = 0, delim = 0, tuners = 0, i, satipm3u = 0;
   struct xml_type_xtab *p;
   http_arg_list_t args;
@@ -131,6 +131,7 @@ satip_server_http_xml(http_connection_t *hc)
     { "DVBC2", &satip_server_conf.satip_dvbc2,  &dvbc },
     { "ATSCT", &satip_server_conf.satip_atsc_t, &atsc },
     { "ATSCC", &satip_server_conf.satip_atsc_c, &atsc },
+    { "ISDBT", &satip_server_conf.satip_isdb_t, &isdbt },
     {}
   };
 
@@ -153,6 +154,8 @@ satip_server_http_xml(http_connection_t *hc)
       dvbc++;
     else if (idnode_is_instance(&mn->mn_id, &dvb_network_atsc_t_class))
       atsc++;
+    else if (idnode_is_instance(&mn->mn_id, &dvb_network_isdb_t_class))
+      isdbt++;
 #if ENABLE_IPTV
     else if (idnode_is_instance(&mn->mn_id, &iptv_network_class)) {
       mpegts_mux_t *mm;
@@ -175,6 +178,7 @@ satip_server_http_xml(http_connection_t *hc)
   if (dvbc > 9) dvbc = 9;
   if (dvbs > 9) dvbs = 9;
   if (atsc > 9) atsc = 9;
+  if (isdbt > 9) isdbt = 9;
   for (p = xtab; p->id; p++) {
     i = *p->cptr;
     if (i > 0) {
@@ -888,6 +892,14 @@ const idclass_t satip_server_class = {
       .off    = offsetof(struct satip_server_conf, satip_atsc_c),
       .group  = 4,
     },
+    {
+      .type   = PT_INT,
+      .id     = "satip_isdbt",
+      .name   = N_("ISDB-T"),
+      .desc   = N_("The number of ISDB-T (Terresterial) tuners to export."),
+      .off    = offsetof(struct satip_server_conf, satip_isdb_t),
+      .group  = 4,
+    },
     {
       .type   = PT_INT,
       .id     = "satip_max_sessions",
index 0fa5909280e4d69067d0f3459b27dde98aea25d7..03a286289c7690160586d082953f2a624fc35937 100644 (file)
@@ -63,6 +63,7 @@ struct satip_server_conf {
   int satip_dvbc2;
   int satip_atsc_t;
   int satip_atsc_c;
+  int satip_isdb_t;
   int satip_max_sessions;
   int satip_max_user_connections;
   char *satip_nat_ip;