]> git.ipfire.org Git - thirdparty/tvheadend.git/commitdiff
dvb: add dvb_mux_conf_init() helper to move mux_conf initialization to one place
authorJaroslav Kysela <perex@perex.cz>
Wed, 4 Feb 2015 16:41:35 +0000 (17:41 +0100)
committerJaroslav Kysela <perex@perex.cz>
Wed, 4 Feb 2015 16:41:37 +0000 (17:41 +0100)
src/input/mpegts/dvb.h
src/input/mpegts/dvb_psi.c
src/input/mpegts/dvb_support.c
src/input/mpegts/mpegts_mux_dvb.c
src/input/mpegts/scanfile.c

index 555c31306837b422186dc2e90cfcfd842b0936a3..f1eb9dd17e6e8f3bb1e2f3a939194b697fbd2f7d 100644 (file)
@@ -511,6 +511,8 @@ static inline int dvb_bandwidth( dvb_fe_bandwidth_t bw )
 
 int dvb_delsys2type ( enum dvb_fe_delivery_system ds );
 
+void dvb_mux_conf_init ( dvb_mux_conf_t *dmc, dvb_fe_delivery_system_t delsys );
+
 int dvb_mux_conf_str ( dvb_mux_conf_t *conf, char *buf, size_t bufsize );
 
 int dvb_sat_position( const dvb_mux_conf_t *mc );
index 787a46a39ce3e773ea65ecedb7e0faf3ddadb920..1960eba520de0dd28b725e3abee477b49f9ee5e8 100644 (file)
@@ -177,10 +177,8 @@ dvb_desc_sat_del
     return NULL;
   }
 
-  memset(&dmc, 0, sizeof(dmc));
-  dmc.dmc_fe_type                = DVB_TYPE_S;
-  dmc.dmc_fe_pilot               = DVB_PILOT_AUTO;
-  dmc.dmc_fe_inversion           = DVB_INVERSION_AUTO;
+  dvb_mux_conf_init(&dmc, (ptr[6] & 0x4) ? DVB_SYS_DVBS2 : DVB_SYS_DVBS);
+
   dmc.dmc_fe_freq                = frequency;
   dmc.u.dmc_fe_qpsk.orbital_pos  = bcdtoint(ptr[4]) * 100 + bcdtoint(ptr[5]);
   dmc.u.dmc_fe_qpsk.orbital_dir  = (ptr[6] & 0x80) ? 'E' : 'W';
@@ -195,7 +193,6 @@ dvb_desc_sat_del
   static int rtab[4] = {
     DVB_ROLLOFF_35, DVB_ROLLOFF_25, DVB_ROLLOFF_20, DVB_ROLLOFF_AUTO
   };
-  dmc.dmc_fe_delsys     = (ptr[6] & 0x4) ? DVB_SYS_DVBS2 : DVB_SYS_DVBS;
   dmc.dmc_fe_modulation = mtab[ptr[6] & 0x3];
   if (dmc.dmc_fe_modulation != DVB_MOD_NONE &&
       dmc.dmc_fe_modulation != DVB_MOD_QPSK)
@@ -253,10 +250,8 @@ dvb_desc_cable_del
     return NULL;
   }
 
-  memset(&dmc, 0, sizeof(dmc));
-  dmc.dmc_fe_type            = DVB_TYPE_C;
-  dmc.dmc_fe_delsys          = DVB_SYS_DVBC_ANNEX_A;
-  dmc.dmc_fe_inversion       = DVB_INVERSION_AUTO;
+  dvb_mux_conf_init(&dmc, DVB_SYS_DVBC_ANNEX_A);
+
   dmc.dmc_fe_freq            = frequency * 100;
 
   dmc.u.dmc_fe_qam.symbol_rate  = symrate * 100;
@@ -320,12 +315,9 @@ dvb_desc_terr_del
     return NULL;
   }
 
-  memset(&dmc, 0, sizeof(dmc));
-  dmc.dmc_fe_type             = DVB_TYPE_T;
-  dmc.dmc_fe_delsys           = DVB_SYS_DVBT;
-  dmc.dmc_fe_inversion        = DVB_INVERSION_AUTO;
-  dmc.dmc_fe_freq             = frequency * 10;
+  dvb_mux_conf_init(&dmc, DVB_SYS_DVBT);
 
+  dmc.dmc_fe_freq                         = frequency * 10;
   dmc.u.dmc_fe_ofdm.bandwidth             = btab[(ptr[4] >> 5) & 0x7];
   dmc.dmc_fe_modulation                   = ctab[(ptr[5] >> 6) & 0x3];
   dmc.u.dmc_fe_ofdm.hierarchy_information = htab[(ptr[5] >> 3) & 0x3];
index 912a90252fb3d54332c6303313fb3cf65a93d8ce..7e88b43757c77a027be2404a81afff761c9754f2 100644 (file)
@@ -768,6 +768,17 @@ dvb_str2val(plsmode);
 #undef dvb_str2val
 
 
+void
+dvb_mux_conf_init ( dvb_mux_conf_t *dmc, dvb_fe_delivery_system_t delsys )
+{
+  memset(dmc, 0, sizeof(*dmc));
+  dmc->dmc_fe_type      = dvb_delsys2type(delsys);
+  dmc->dmc_fe_delsys    = delsys;
+  dmc->dmc_fe_inversion = DVB_INVERSION_AUTO;
+  dmc->dmc_fe_pilot     = DVB_PILOT_AUTO;
+  dmc->dmc_fe_stream_id = DVB_NO_STREAM_ID_FILTER;
+}
+
 
 static int
 dvb_mux_conf_str_dvbt ( dvb_mux_conf_t *dmc, char *buf, size_t bufsize )
index a5eb09e1300478899cf25764661c104a5e5664a6..d7e66319b32d813cf007e07bcdbf80653328a310 100644 (file)
@@ -710,9 +710,7 @@ dvb_mux_create0
   lm = (dvb_mux_t*)mm;
 
   /* Defaults */
-  lm->lm_tuning.dmc_fe_inversion = DVB_INVERSION_AUTO;
-  lm->lm_tuning.dmc_fe_pilot     = DVB_PILOT_AUTO;
-  lm->lm_tuning.dmc_fe_stream_id = DVB_NO_STREAM_ID_FILTER;
+  dvb_mux_conf_init(&lm->lm_tuning, DVB_SYS_NONE);
 
   /* Parent init and load config */
   if (!(mm = mpegts_mux_create0(mm, idc, uuid,
index f285d6ae72b263e329a58b30986666f2b3fd702f..2ac8284231212748709f126f33cc1baaa9688069 100644 (file)
@@ -117,8 +117,7 @@ scanfile_load_atsc ( dvb_mux_conf_t *mux, const char *line )
 
   r = sscanf(line, "%u %s", &mux->dmc_fe_freq, qam);
   if (r != 2) return 1;
-  mux->dmc_fe_type = DVB_TYPE_ATSC;
-  mux->dmc_fe_delsys = DVB_SYS_ATSC;
+  dvb_mux_conf_init(mux, DVB_SYS_ATSC);
   if ((mux->dmc_fe_modulation = dvb_str2qam(qam)) == -1) return 1;
 
   return 0;
@@ -132,6 +131,7 @@ scanfile_load_dvbt ( dvb_mux_conf_t *mux, const char *line )
 
   if (*line == '2') {
     unsigned int system_id;
+    dvb_mux_conf_init(mux, DVB_SYS_DVBT2);
     r = sscanf(line+1, "%u %s", &mux->dmc_fe_stream_id, bw);
     if (r == 2 && mux->dmc_fe_stream_id < 1000 && strstr(bw, "MHz") == 0) {
       r = sscanf(line+1, "%u %u %u %10s %10s %10s %10s %10s %10s %10s",
@@ -145,15 +145,13 @@ scanfile_load_dvbt ( dvb_mux_conf_t *mux, const char *line )
       if(r == 8) mux->dmc_fe_stream_id = DVB_NO_STREAM_ID_FILTER; else
       if(r != 9) return 1;
     }
-    mux->dmc_fe_delsys = DVB_SYS_DVBT2;
   } else {
+    dvb_mux_conf_init(mux, DVB_SYS_DVBT);
     r = sscanf(line, "%u %10s %10s %10s %10s %10s %10s %10s",
                     &mux->dmc_fe_freq, bw, fec, fec2, qam, mode, guard, hier);
     if(r != 8) return 1;
-    mux->dmc_fe_delsys = DVB_SYS_DVBT;
   }
 
-  mux->dmc_fe_type = DVB_TYPE_T;
   if ((mux->u.dmc_fe_ofdm.bandwidth             = dvb_str2bw(bw))       == -1) return 1;
   if ((mux->dmc_fe_modulation                   = dvb_str2qam(qam))     == -1) return 1;
   if ((mux->u.dmc_fe_ofdm.code_rate_HP          = dvb_str2fec(fec))     == -1) return 1;
@@ -176,23 +174,22 @@ scanfile_load_dvbs ( dvb_mux_conf_t *mux, const char *line )
     line++;
   }
 
+  dvb_mux_conf_init(mux, v2 ? DVB_SYS_DVBS2 : DVB_SYS_DVBS);
+
   r = sscanf(line, "%u %s %u %s %s %s %d %d %d",
                   &mux->dmc_fe_freq, pol, &mux->u.dmc_fe_qpsk.symbol_rate,
              fec, rolloff, qam, &mux->dmc_fe_stream_id, &mux->dmc_fe_pls_code, (int*)&mux->dmc_fe_pls_mode);
   if (r < (4+v2)) return 1;
 
-  mux->dmc_fe_type = DVB_TYPE_S;
   if ((mux->u.dmc_fe_qpsk.polarisation  = dvb_str2pol(pol)) == -1) return 1;
   if ((mux->u.dmc_fe_qpsk.fec_inner     = dvb_str2fec(fec)) == -1) return 1;
   if (v2) {
-    mux->dmc_fe_delsys     = DVB_SYS_DVBS2;
     if ((mux->dmc_fe_rolloff    = dvb_str2rolloff(rolloff)) == -1) return 1;
     if ((mux->dmc_fe_modulation = dvb_str2qam(qam))         == -1) return 1;
     if (r < (4+v2+1)) mux->dmc_fe_stream_id = DVB_NO_STREAM_ID_FILTER;
     if (r < (4+v2+2)) mux->dmc_fe_pls_code = 1;
     if (r < (4+v2+3)) mux->dmc_fe_pls_mode = 0;
   } else {
-    mux->dmc_fe_delsys     = DVB_SYS_DVBS;
     mux->dmc_fe_rolloff    = DVB_ROLLOFF_35;
     mux->dmc_fe_modulation = DVB_MOD_QPSK;
   }
@@ -210,8 +207,7 @@ scanfile_load_dvbc ( dvb_mux_conf_t *mux, const char *line )
                   &mux->dmc_fe_freq, &mux->u.dmc_fe_qam.symbol_rate, fec, qam);
   if(r != 4) return 1;
 
-  mux->dmc_fe_type = DVB_TYPE_C;
-  mux->dmc_fe_delsys = DVB_SYS_DVBC_ANNEX_A;
+  dvb_mux_conf_init(mux, DVB_SYS_DVBC_ANNEX_A);
   if ((mux->u.dmc_fe_qam.fec_inner  = dvb_str2fec(fec)) == -1) return 1;
   if ((mux->dmc_fe_modulation       = dvb_str2qam(qam)) == -1) return 1;
 
@@ -309,7 +305,7 @@ static void
 scanfile_load_one ( scanfile_network_t *net, const char *line )
 {
   int r = 1;
-  dvb_mux_conf_t *mux = calloc(1, sizeof(dvb_mux_conf_t));
+  dvb_mux_conf_t *mux = malloc(sizeof(dvb_mux_conf_t));
   
   switch (line[0]) {
     case 'A':
@@ -402,7 +398,7 @@ scanfile_load_dvbv5 ( scanfile_network_t *net, char *line, fb_file *fp )
     htsmsg_add_str(l, s, t);
   }
 
-  mux = calloc(1, sizeof(dvb_mux_conf_t));
+  mux = malloc(sizeof(dvb_mux_conf_t));
 
   x = htsmsg_get_str(l, "DELIVERY_SYSTEM");
 
@@ -413,17 +409,17 @@ scanfile_load_dvbv5 ( scanfile_network_t *net, char *line, fb_file *fp )
   if (!x || (int)mux->dmc_fe_delsys < 0)
     mux_fail(r, "wrong system '%s'", x);
 
+  dvb_mux_conf_init(mux, mux->dmc_fe_delsys);
+
   if (mux->dmc_fe_delsys == DVB_SYS_DVBT ||
       mux->dmc_fe_delsys == DVB_SYS_DVBT2) {
 
-    mux->dmc_fe_type = DVB_TYPE_T;
     mux->u.dmc_fe_ofdm.bandwidth = DVB_BANDWIDTH_AUTO;
     mux->u.dmc_fe_ofdm.code_rate_HP = DVB_FEC_AUTO;
     mux->u.dmc_fe_ofdm.code_rate_LP = DVB_FEC_NONE;
     mux->dmc_fe_modulation = DVB_MOD_QAM_64;
     mux->u.dmc_fe_ofdm.transmission_mode = DVB_TRANSMISSION_MODE_8K;
     mux->u.dmc_fe_ofdm.hierarchy_information = DVB_HIERARCHY_NONE;
-    mux->dmc_fe_inversion  = DVB_INVERSION_AUTO;
 
     if ((x = htsmsg_get_str(l, "BANDWIDTH_HZ"))) {
       if (isdigit(x[0])) {
@@ -463,13 +459,10 @@ scanfile_load_dvbv5 ( scanfile_network_t *net, char *line, fb_file *fp )
   } else if (mux->dmc_fe_delsys == DVB_SYS_DVBS ||
              mux->dmc_fe_delsys == DVB_SYS_DVBS2) {
 
-    mux->dmc_fe_type = DVB_TYPE_S;
     mux->dmc_fe_modulation =
       mux->dmc_fe_delsys == DVB_SYS_DVBS2 ? DVB_MOD_PSK_8 : DVB_MOD_QPSK;
     mux->u.dmc_fe_qpsk.fec_inner = DVB_FEC_AUTO;
-    mux->dmc_fe_inversion  = DVB_INVERSION_AUTO;
     mux->dmc_fe_rolloff    = DVB_ROLLOFF_35;
-    mux->dmc_fe_pilot      = DVB_PILOT_AUTO;
 
     if ((x = htsmsg_get_str(l, "MODULATION")))
       if ((mux->dmc_fe_modulation = dvb_str2qam(x)) == -1)
@@ -512,10 +505,8 @@ scanfile_load_dvbv5 ( scanfile_network_t *net, char *line, fb_file *fp )
              mux->dmc_fe_delsys == DVB_SYS_DVBC_ANNEX_B ||
              mux->dmc_fe_delsys == DVB_SYS_DVBC_ANNEX_C) {
 
-    mux->dmc_fe_type = DVB_TYPE_C;
     mux->dmc_fe_modulation = DVB_MOD_QAM_128;
     mux->u.dmc_fe_qam.fec_inner = DVB_FEC_NONE;
-    mux->dmc_fe_inversion  = DVB_INVERSION_AUTO;
 
     if ((x = htsmsg_get_str(l, "MODULATION")))
       if ((mux->dmc_fe_modulation = dvb_str2qam(x)) == -1)
@@ -533,7 +524,6 @@ scanfile_load_dvbv5 ( scanfile_network_t *net, char *line, fb_file *fp )
 
     mux->dmc_fe_type = DVB_TYPE_ATSC;
     mux->dmc_fe_modulation = DVB_MOD_VSB_8;
-    mux->dmc_fe_inversion  = DVB_INVERSION_AUTO;
 
     if ((x = htsmsg_get_str(l, "MODULATION")))
       if ((mux->dmc_fe_modulation = dvb_str2qam(x)) == -1)