]> 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>
Thu, 11 Oct 2018 19:05:05 +0000 (21:05 +0200)
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 7e59d85ba00baf9d160c9165037f2dcd2953f239..149cec4e37350fbb7ff889a63d5a939de037d427 100644 (file)
@@ -633,6 +633,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 ca516ee249720a11153661e6880325200f479cb3..c51c43d2edd77306ba46067d1712fe7810c7b6ab 100644 (file)
@@ -1044,12 +1044,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 b2f0cd54e95d60107c2832fbe7aebc85bc3d1eb8..af1d93ce9a6bed09aea87b24e4829877505c9297 100644 (file)
@@ -1859,6 +1859,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 c948b21a8886d9a7d30104ac3738ebb5c520277b..c003ec61f6a7ce3de305d65f4ca343c08126ddbd 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
+    },
     {}
   }
 };
@@ -838,6 +856,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 868c5887504d66c132050615d407dbeab2e2b1ee..65be449ce3088c165354aaafb5b0aa8d71e2d529 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' */