]> git.ipfire.org Git - thirdparty/tvheadend.git/commitdiff
dvb-c2: add support for data slice and plp
authorJaroslav Kysela <perex@perex.cz>
Thu, 11 Oct 2018 19:05:05 +0000 (21:05 +0200)
committerJaroslav Kysela <perex@perex.cz>
Tue, 20 Nov 2018 13:08:35 +0000 (14:08 +0100)
src/input/mpegts/dvb.h
src/input/mpegts/dvb_support.c
src/input/mpegts/linuxdvb/linuxdvb_frontend.c
src/input/mpegts/mpegts_mux_dvb.c
src/input/mpegts/satip/satip_rtsp.c

index 7eabd9c8a6dfb653eaded6e56226cdf2daa4ba86..bb87a806c008f53843d925fb080448211714d862 100644 (file)
@@ -611,6 +611,7 @@ typedef struct dvb_mux_conf
   int32_t                     dmc_fe_stream_id;
   dvb_fe_pls_mode_t           dmc_fe_pls_mode;
   uint32_t                    dmc_fe_pls_code;
+  uint32_t                    dmc_fe_data_slice;
   union {
     dvb_qpsk_config_t         dmc_fe_qpsk;
     dvb_qam_config_t          dmc_fe_qam;
index 8f1e0e86991c58e3e988de88637bb66ea9a4115d..507d539ce580fd820dda8f944c5be6b4858e80b0 100644 (file)
@@ -1034,12 +1034,14 @@ dvb_mux_conf_str_dvbc ( dvb_mux_conf_t *dmc, char *buf, size_t bufsize )
     delsys = dvb_delsys2str(dmc->dmc_fe_delsys);
   return
   snprintf(buf, bufsize,
-           "%s freq %d sym %d mod %s fec %s",
+           "%s freq %d sym %d mod %s fec %s ds %d plp %d",
            delsys,
            dmc->dmc_fe_freq,
            dmc->u.dmc_fe_qam.symbol_rate,
            dvb_qam2str(dmc->dmc_fe_modulation),
-           dvb_fec2str(dmc->u.dmc_fe_qam.fec_inner));
+           dvb_fec2str(dmc->u.dmc_fe_qam.fec_inner),
+           dmc->dmc_fe_data_slice,
+           dmc->dmc_fe_stream_id);
 }
 
 static int
index 2d20a0955d2df0b2a1b27826d97211944e08f406..f6d149e6acc1bfa53d3225251f96375a21a1949b 100644 (file)
@@ -1819,6 +1819,11 @@ linuxdvb_frontend_tune0
     S2CMD(DTV_SYMBOL_RATE,       p.u.qam.symbol_rate);
     S2CMD(DTV_MODULATION,        p.u.qam.modulation);
     S2CMD(DTV_INNER_FEC,         p.u.qam.fec_inner);
+    r = dmc->dmc_fe_stream_id != DVB_NO_STREAM_ID_FILTER ? (dmc->dmc_fe_stream_id & 0xFF) |
+          ((dmc->dmc_fe_data_slice & 0xFF)<<8) : DVB_NO_STREAM_ID_FILTER;
+#if DVB_VER_ATLEAST(5,9)
+    S2CMD(DTV_STREAM_ID,         r);
+#endif
 
   /* DVB-S */
   } else if (lfe->lfe_type == DVB_TYPE_S) {
index 134098fc8d7e36cd27c877aca318f3ef004b85ce..45e4e4629e727840c1dc051fd342d4f82307f5d4 100644 (file)
@@ -332,6 +332,24 @@ const idclass_t dvb_mux_dvbc_class =
       MUX_PROP_STR("fec", N_("FEC"), dvbc, fec, N_("AUTO")),
       .desc     = N_("The forward error correction used on the mux."),
     },
+    {
+      .type     = PT_INT,
+      .id       = "plp_id",
+      .name     = N_("PLP ID"),
+      .desc     = N_("The physical layer pipe ID. "
+                     "Most people will not need to change this setting."),
+      .off      = offsetof(dvb_mux_t, lm_tuning.dmc_fe_stream_id),
+      .def.i   = DVB_NO_STREAM_ID_FILTER,
+    },
+    {
+      .type     = PT_U32,
+      .id       = "data_slice",
+      .name     = N_("Data slice"),
+      .desc     = N_("Data slice code."),
+      .off      = offsetof(dvb_mux_t, lm_tuning.dmc_fe_data_slice),
+      .def.u32 = 0,
+      .opts     = PO_EXPERT
+    },
     {}
   }
 };
@@ -802,6 +820,24 @@ const idclass_t dvb_mux_isdb_c_class =
       MUX_PROP_STR("fec", N_("FEC"), dvbc, fec, N_("AUTO")),
       .desc     = N_("The forward error correction used on the mux."),
     },
+    {
+      .type     = PT_INT,
+      .id       = "plp_id",
+      .name     = N_("PLP ID"),
+      .desc     = N_("The physical layer pipe ID. "
+                     "Most people will not need to change this setting."),
+      .off      = offsetof(dvb_mux_t, lm_tuning.dmc_fe_stream_id),
+      .def.i   = DVB_NO_STREAM_ID_FILTER,
+    },
+    {
+      .type     = PT_U32,
+      .id       = "data_slice",
+      .name     = N_("Data slice"),
+      .desc     = N_("Data slice code."),
+      .off      = offsetof(dvb_mux_t, lm_tuning.dmc_fe_data_slice),
+      .def.u32 = 0,
+      .opts     = PO_EXPERT
+    },
     {}
   }
 };
index c79645fe1b9a7023242bf8576c93d7a1febaedb9..446a4c41136e0acbf9c568e3f652610b7358c26f 100644 (file)
@@ -194,7 +194,10 @@ satip_rtsp_setup( http_client_t *hc, int src, int fe,
         dmc->dmc_fe_modulation != DVB_MOD_NONE &&
         dmc->dmc_fe_modulation != DVB_MOD_QAM_AUTO)
       ADD(dmc_fe_modulation,          mtype, "64qam");
-    /* missing plp */
+    if (dmc->dmc_fe_stream_id != DVB_NO_STREAM_ID_FILTER) {
+      satip_rtsp_add_val("ds", buf, dmc->dmc_fe_data_slice & 0xff);
+      satip_rtsp_add_val("plp", buf, dmc->dmc_fe_stream_id & 0xff);
+    }
     if (dmc->u.dmc_fe_qam.fec_inner != DVB_FEC_NONE &&
         dmc->u.dmc_fe_qam.fec_inner != DVB_FEC_AUTO)
       /* note: OctopusNet device does not handle 'fec=auto' */