struct mpegts_table;
struct mpegts_table_state;
+struct mpegts_network;
struct mpegts_mux;
struct lang_str;
return bw < 1000 ? 0 : bw * 1000;
}
-int dvb_delsys2type ( enum dvb_fe_delivery_system ds );
+int dvb_delsys2type ( struct mpegts_network *ln, enum dvb_fe_delivery_system ds );
-void dvb_mux_conf_init ( dvb_mux_conf_t *dmc, dvb_fe_delivery_system_t delsys );
+void dvb_mux_conf_init ( struct mpegts_network *ln, 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 );
polarisation = (ptr[6] >> 5) & 0x03;
- dvb_mux_conf_init(&dmc, (ptr[6] & 0x4) ? DVB_SYS_DVBS2 : DVB_SYS_DVBS);
+ dvb_mux_conf_init((mpegts_network_t *)mm->mm_network, &dmc,
+ (ptr[6] & 0x4) ? DVB_SYS_DVBS2 : DVB_SYS_DVBS);
dmc.dmc_fe_freq = frequency;
dmc.u.dmc_fe_qpsk.orbital_pos = orbitalpos;
return NULL;
}
- dvb_mux_conf_init(&dmc, ((dvb_mux_t *)mm)->lm_tuning.dmc_fe_delsys);
+ dvb_mux_conf_init((mpegts_network_t *)mm->mm_network, &dmc,
+ ((dvb_mux_t *)mm)->lm_tuning.dmc_fe_delsys);
dmc.dmc_fe_freq = frequency * 100;
return NULL;
}
- dvb_mux_conf_init(&dmc, DVB_SYS_DVBT);
+ dvb_mux_conf_init((mpegts_network_t *)mm->mm_network, &dmc, DVB_SYS_DVBT);
dmc.dmc_fe_freq = frequency * 10;
dmc.u.dmc_fe_ofdm.bandwidth = btab[(ptr[4] >> 5) & 0x7];
psi_tables_atsc_t(mm);
break;
case DVB_SYS_DVBC_ANNEX_B:
- psi_tables_atsc_c(mm);
+ if (idnode_is_instance(&mm->mm_id, &dvb_mux_dvbc_class))
+ psi_tables_dvb(mm);
+ else
+ psi_tables_atsc_c(mm);
break;
case DVB_SYS_NONE:
case DVB_SYS_DVBH:
dvb_str2val(delsys);
int
-dvb_delsys2type ( dvb_fe_delivery_system_t delsys )
+dvb_delsys2type ( mpegts_network_t *ln, dvb_fe_delivery_system_t delsys )
{
switch (delsys) {
case DVB_SYS_DVBC_ANNEX_A:
case DVB_SYS_ATSCMH:
return DVB_TYPE_ATSC_T;
case DVB_SYS_DVBC_ANNEX_B:
- return DVB_TYPE_ATSC_C;
+ if (ln && idnode_is_instance(&ln->mn_id, &dvb_network_dvbc_class))
+ return DVB_TYPE_C;
+ else
+ return DVB_TYPE_ATSC_C;
case DVB_SYS_ISDBT:
return DVB_TYPE_ISDB_T;
case DVB_SYS_ISDBC:
void
-dvb_mux_conf_init ( dvb_mux_conf_t *dmc, dvb_fe_delivery_system_t delsys )
+dvb_mux_conf_init ( mpegts_network_t *ln,
+ 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_type = dvb_delsys2type(ln, delsys);
dmc->dmc_fe_delsys = delsys;
dmc->dmc_fe_inversion = DVB_INVERSION_AUTO;
dmc->dmc_fe_pilot = DVB_PILOT_AUTO;
static int
dvb_mux_conf_str_dvbc ( dvb_mux_conf_t *dmc, char *buf, size_t bufsize )
{
+ const char *delsys;
+ if (dmc->dmc_fe_type == DVB_TYPE_C &&
+ dmc->dmc_fe_delsys == DVB_SYS_DVBC_ANNEX_B)
+ delsys = "DVB-C/ANNEX_B";
+ else
+ delsys = dvb_delsys2str(dmc->dmc_fe_delsys);
return
snprintf(buf, bufsize,
"%s freq %d sym %d mod %s fec %s",
- dvb_delsys2str(dmc->dmc_fe_delsys),
+ delsys,
dmc->dmc_fe_freq,
dmc->u.dmc_fe_qam.symbol_rate,
dvb_qam2str(dmc->dmc_fe_modulation),
delsys = DVB_SYS_DVBS;
/* Invalid */
- if ((type5 = dvb_delsys2type(delsys)) == DVB_TYPE_NONE)
+ if ((type5 = dvb_delsys2type(NULL, delsys)) == DVB_TYPE_NONE)
continue;
/* Couldn't find */
{
htsmsg_t *list = htsmsg_create_list();
htsmsg_add_str(list, NULL, dvb_delsys2str(DVB_SYS_DVBC_ANNEX_A));
+ htsmsg_add_str(list, NULL, dvb_delsys2str(DVB_SYS_DVBC_ANNEX_B));
htsmsg_add_str(list, NULL, dvb_delsys2str(DVB_SYS_DVBC_ANNEX_C));
return list;
}
lm = (dvb_mux_t*)mm;
/* Defaults */
- dvb_mux_conf_init(&lm->lm_tuning, delsys);
+ dvb_mux_conf_init((mpegts_network_t*)ln, &lm->lm_tuning, delsys);
/* Parent init and load config */
if (!(mm = mpegts_mux_create0(mm, idc, uuid,
mpegts_mux_t *mm = NULL;
mux = malloc(sizeof(dvb_mux_conf_t));
- dvb_mux_conf_init(mux, dvbs2 ? DVB_SYS_DVBS2 : DVB_SYS_DVBS);
+ dvb_mux_conf_init(mn, mux, dvbs2 ? DVB_SYS_DVBS2 : DVB_SYS_DVBS);
mux->dmc_fe_freq = freq;
mux->u.dmc_fe_qpsk.symbol_rate = symbol;
mux->u.dmc_fe_qpsk.polarisation = dvb_str2pol(pol);
r = sscanf(line, "%u %s", &mux->dmc_fe_freq, qam);
if (r != 2) return 1;
- dvb_mux_conf_init(mux, DVB_SYS_ATSC);
+ dvb_mux_conf_init(NULL, mux, DVB_SYS_ATSC);
if ((mux->dmc_fe_modulation = dvb_str2qam(qam)) == -1) return 1;
return 0;
if (*line == '2') {
unsigned int system_id;
- dvb_mux_conf_init(mux, DVB_SYS_DVBT2);
+ dvb_mux_conf_init(NULL, 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",
if(r != 9) return 1;
}
} else {
- dvb_mux_conf_init(mux, DVB_SYS_DVBT);
+ dvb_mux_conf_init(NULL, 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;
line++;
}
- dvb_mux_conf_init(mux, v2 ? DVB_SYS_DVBS2 : DVB_SYS_DVBS);
+ dvb_mux_conf_init(NULL, 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,
&mux->dmc_fe_freq, &mux->u.dmc_fe_qam.symbol_rate, fec, qam);
if(r != 4) return 1;
- dvb_mux_conf_init(mux, DVB_SYS_DVBC_ANNEX_A);
+ dvb_mux_conf_init(NULL, 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;
if (!x || (int)mux->dmc_fe_delsys < 0)
mux_fail(r, "wrong system '%s'", x);
- dvb_mux_conf_init(mux, mux->dmc_fe_delsys);
+ dvb_mux_conf_init(NULL, mux, mux->dmc_fe_delsys);
if (mux->dmc_fe_delsys == DVB_SYS_DVBT ||
mux->dmc_fe_delsys == DVB_SYS_DVBT2) {
}
}
- dvb_mux_conf_init(dmc = &rs->dmc, msys);
+ dvb_mux_conf_init(NULL, dmc = &rs->dmc, msys);
mtype = mtype_to_tvh(hc);
if (mtype == DVB_MOD_NONE) goto end;