From: George Kharrat Date: Wed, 9 Dec 2020 09:33:25 +0000 (-0500) Subject: Added ISDB-T SATIP Support X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=f0dfae1bcfa7e26a07422a42b05c6e261a098579;p=thirdparty%2Ftvheadend.git Added ISDB-T SATIP Support --- diff --git a/src/input/mpegts/satip/satip.c b/src/input/mpegts/satip/satip.c index cd6a8c074..0d3ba18ac 100644 --- a/src/input/mpegts/satip/satip.c +++ b/src/input/mpegts/satip/satip.c @@ -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); diff --git a/src/input/mpegts/satip/satip_frontend.c b/src/input/mpegts/satip/satip_frontend.c index e880170a0..1c414da68 100644 --- a/src/input/mpegts/satip/satip_frontend.c +++ b/src/input/mpegts/satip/satip_frontend.c @@ -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; diff --git a/src/input/mpegts/satip/satip_private.h b/src/input/mpegts/satip/satip_private.h index f150bb396..af123ca86 100644 --- a/src/input/mpegts/satip/satip_private.h +++ b/src/input/mpegts/satip/satip_private.h @@ -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; diff --git a/src/input/mpegts/satip/satip_rtsp.c b/src/input/mpegts/satip/satip_rtsp.c index d19aab94e..e0f675e48 100644 --- a/src/input/mpegts/satip/satip_rtsp.c +++ b/src/input/mpegts/satip/satip_rtsp.c @@ -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); diff --git a/src/satip/rtsp.c b/src/satip/rtsp.c index ff54a24d3..ca3ca5252 100644 --- a/src/satip/rtsp.c +++ b/src/satip/rtsp.c @@ -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; diff --git a/src/satip/server.c b/src/satip/server.c index 72c31493b..401fd6b63 100644 --- a/src/satip/server.c +++ b/src/satip/server.c @@ -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", diff --git a/src/satip/server.h b/src/satip/server.h index 0fa590928..03a286289 100644 --- a/src/satip/server.h +++ b/src/satip/server.h @@ -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;