Skip to content

Commit

Permalink
Browse files Browse the repository at this point in the history
scanfile: add isdb-t parser
  • Loading branch information
perexg committed Jan 7, 2016
1 parent 909fef4 commit 95eb29a
Show file tree
Hide file tree
Showing 4 changed files with 68 additions and 4 deletions.
2 changes: 2 additions & 0 deletions src/api/api_mpegts.c
Expand Up @@ -391,6 +391,8 @@ api_dvb_scanfile_list
list = &scanfile_regions_ATSC_T;
else if (!strcasecmp(type, "atsc-c"))
list = &scanfile_regions_ATSC_C;
else if (!strcasecmp(type, "isdb-t"))
list = &scanfile_regions_ISDB_T;
else
return -EINVAL;

Expand Down
4 changes: 2 additions & 2 deletions src/input/mpegts/dvb.h
Expand Up @@ -568,8 +568,8 @@ typedef struct dvb_isdbt_config {
struct {
dvb_fe_code_rate_t fec;
dvb_fe_modulation_t modulation;
int segment_count;
int time_interleaving;
uint32_t segment_count;
uint32_t time_interleaving;
} layers[3];
} dvb_isdbt_config_t;

Expand Down
65 changes: 63 additions & 2 deletions src/input/mpegts/scanfile.c
Expand Up @@ -39,6 +39,7 @@ scanfile_region_list_t scanfile_regions_DVBT;
scanfile_region_list_t scanfile_regions_DVBS;
scanfile_region_list_t scanfile_regions_ATSC_T;
scanfile_region_list_t scanfile_regions_ATSC_C;
scanfile_region_list_t scanfile_regions_ISDB_T;

/* **************************************************************************
* Country codes
Expand Down Expand Up @@ -285,6 +286,7 @@ scanfile_region_create
else if (!strcmp(type, "dvb-c")) list = &scanfile_regions_DVBC;
else if (!strcmp(type, "atsc-t")) list = &scanfile_regions_ATSC_T;
else if (!strcmp(type, "atsc-c")) list = &scanfile_regions_ATSC_C;
else if (!strcmp(type, "isdb-t")) list = &scanfile_regions_ISDB_T;
if (!list) return NULL;

LIST_FOREACH(reg, list, sfr_link) {
Expand Down Expand Up @@ -433,7 +435,7 @@ scanfile_load_dvbv5
( scanfile_network_t **net, const char *type, const char *name,
char *line, fb_file *fp )
{
int res = 1, r = 1;
int res = 1, r = 1, i;
char buf[256];
char *s, *t;
const char *x;
Expand Down Expand Up @@ -468,8 +470,9 @@ scanfile_load_dvbv5
htsmsg_add_str(l, s, t);
}

mux = malloc(sizeof(dvb_mux_conf_t));
mux = calloc(1, sizeof(dvb_mux_conf_t));
mux->dmc_fe_delsys = -1;
mux->dmc_fe_inversion = DVB_INVERSION_AUTO;

x = htsmsg_get_str(l, "DELIVERY_SYSTEM");

Expand Down Expand Up @@ -602,6 +605,60 @@ scanfile_load_dvbv5
if ((mux->dmc_fe_inversion = dvb_str2inver(x)) == -1)
mux_fail(r, "wrong inversion '%s'", x);

} else if (mux->dmc_fe_delsys == DVB_SYS_ISDBT) {

if ((x = htsmsg_get_str(l, "BANDWIDTH_HZ"))) {
if (isdigit(x[0])) {
/* convert to kHz */
int64_t ll = strtoll(x, NULL, 0);
ll /= 1000;
snprintf(buf, sizeof(buf), "%llu", (long long unsigned)ll);
x = buf;
}
if ((mux->u.dmc_fe_ofdm.bandwidth = dvb_str2bw(x)) == -1)
mux_fail(r, "wrong bandwidth '%s'", x);
}

if ((x = htsmsg_get_str(l, "INVERSION")))
if ((mux->dmc_fe_inversion = dvb_str2inver(x)) == -1)
mux_fail(r, "wrong inversion '%s'", x);
if ((x = htsmsg_get_str(l, "GUARD_INTERVAL")))
if ((mux->u.dmc_fe_isdbt.guard_interval = dvb_str2guard(x)) == -1)
mux_fail(r, "wrong guard interval '%s'", x);

for (i = 0; i < 3; i++) {
mux->u.dmc_fe_isdbt.layers[i].fec = DVB_FEC_AUTO;
mux->u.dmc_fe_isdbt.layers[i].modulation = DVB_MOD_AUTO;
}

if ((x = htsmsg_get_str(l, "ISDBT_LAYERA_FEC")))
if ((mux->u.dmc_fe_isdbt.layers[0].fec = dvb_str2fec(x)) == -1)
mux_fail(r, "wrong inner FEC-A '%s'", x);
if ((x = htsmsg_get_str(l, "ISDBT_LAYERB_FEC")))
if ((mux->u.dmc_fe_isdbt.layers[1].fec = dvb_str2fec(x)) == -1)
mux_fail(r, "wrong inner FEC-B '%s'", x);
if ((x = htsmsg_get_str(l, "ISDBT_LAYERC_FEC")))
if ((mux->u.dmc_fe_isdbt.layers[2].fec = dvb_str2fec(x)) == -1)
mux_fail(r, "wrong inner FEC-C '%s'", x);

if ((x = htsmsg_get_str(l, "ISDBT_LAYERA_MODULATION")))
if ((mux->u.dmc_fe_isdbt.layers[0].modulation = dvb_str2qam(x)) == -1)
mux_fail(r, "wrong modulation '%s'", x);
if ((x = htsmsg_get_str(l, "ISDBT_LAYERB_MODULATION")))
if ((mux->u.dmc_fe_isdbt.layers[1].modulation = dvb_str2qam(x)) == -1)
mux_fail(r, "wrong modulation '%s'", x);
if ((x = htsmsg_get_str(l, "ISDBT_LAYERC_MODULATION")))
if ((mux->u.dmc_fe_isdbt.layers[2].modulation = dvb_str2qam(x)) == -1)
mux_fail(r, "wrong modulation '%s'", x);

mux->u.dmc_fe_isdbt.layers[0].segment_count = htsmsg_get_u32_or_default(l, "ISDBT_LAYERA_SEGMENT_COUNT", 0);
mux->u.dmc_fe_isdbt.layers[1].segment_count = htsmsg_get_u32_or_default(l, "ISDBT_LAYERB_SEGMENT_COUNT", 0);
mux->u.dmc_fe_isdbt.layers[2].segment_count = htsmsg_get_u32_or_default(l, "ISDBT_LAYERC_SEGMENT_COUNT", 0);

mux->u.dmc_fe_isdbt.layers[0].time_interleaving = htsmsg_get_u32_or_default(l, "ISDBT_LAYERA_TIME_INTERLEAVING", 0);
mux->u.dmc_fe_isdbt.layers[1].time_interleaving = htsmsg_get_u32_or_default(l, "ISDBT_LAYERB_TIME_INTERLEAVING", 0);
mux->u.dmc_fe_isdbt.layers[2].time_interleaving = htsmsg_get_u32_or_default(l, "ISDBT_LAYERC_TIME_INTERLEAVING", 0);

} else {

mux_fail(r, "wrong delivery system '%s'", x);
Expand Down Expand Up @@ -754,6 +811,7 @@ scanfile_init ( void )
r += scanfile_stats("DVB-C", &scanfile_regions_DVBC);
r += scanfile_stats("ATSC-T", &scanfile_regions_ATSC_T);
r += scanfile_stats("ATSC-C", &scanfile_regions_ATSC_C);
r += scanfile_stats("ISDB-T", &scanfile_regions_ISDB_T);
if (!r) {
tvhwarn("scanfile", "no predefined muxes found, check path '%s%s'",
path[0] == '/' ? path : TVHEADEND_DATADIR "/",
Expand Down Expand Up @@ -798,6 +856,7 @@ scanfile_done ( void )
scanfile_done_region(&scanfile_regions_DVBC);
scanfile_done_region(&scanfile_regions_ATSC_T);
scanfile_done_region(&scanfile_regions_ATSC_C);
scanfile_done_region(&scanfile_regions_ISDB_T);
}

/*
Expand Down Expand Up @@ -825,6 +884,8 @@ scanfile_find ( const char *id )
l = &scanfile_regions_ATSC_T;
else if (!strcasecmp(tok, "atsc-c"))
l = &scanfile_regions_ATSC_C;
else if (!strcasecmp(tok, "isdb-t"))
l = &scanfile_regions_ISDB_T;
else
goto fail;

Expand Down
1 change: 1 addition & 0 deletions src/input/mpegts/scanfile.h
Expand Up @@ -40,6 +40,7 @@ extern scanfile_region_list_t scanfile_regions_DVBT;
extern scanfile_region_list_t scanfile_regions_DVBS;
extern scanfile_region_list_t scanfile_regions_ATSC_T;
extern scanfile_region_list_t scanfile_regions_ATSC_C;
extern scanfile_region_list_t scanfile_regions_ISDB_T;

void scanfile_init ( void );
void scanfile_done ( void );
Expand Down

0 comments on commit 95eb29a

Please sign in to comment.