Skip to content

Commit

Permalink
Browse files Browse the repository at this point in the history
psi tables: moved base parsers outside mpegts.h
  • Loading branch information
perexg committed Mar 23, 2015
1 parent 6547bbe commit b520cbe
Show file tree
Hide file tree
Showing 8 changed files with 111 additions and 91 deletions.
7 changes: 4 additions & 3 deletions src/epggrab/module/eit.c
Expand Up @@ -565,7 +565,7 @@ _eit_callback
epggrab_ota_map_t *map = mt->mt_opaque;
epggrab_module_t *mod = (epggrab_module_t *)map->om_module;
epggrab_ota_mux_t *ota = NULL;
mpegts_table_state_t *st;
mpegts_psi_table_state_t *st;

/* Validate */
if(tableid < 0x4e || tableid > 0x6f || len < 11)
Expand All @@ -584,7 +584,8 @@ _eit_callback
ota = epggrab_ota_register((epggrab_module_ota_t*)mod, NULL, mm);

/* Begin */
r = dvb_table_begin(mt, ptr, len, tableid, extraid, 11, &st, &sect, &last, &ver);
r = dvb_table_begin((mpegts_psi_table_t *)mt, ptr, len,
tableid, extraid, 11, &st, &sect, &last, &ver);
if (r != 1) return r;
if (st) {
uint32_t mask;
Expand Down Expand Up @@ -657,7 +658,7 @@ _eit_callback
if (save) epg_updated();

done:
r = dvb_table_end(mt, st, sect);
r = dvb_table_end((mpegts_psi_table_t *)mt, st, sect);
if (ota && !r)
epggrab_ota_complete((epggrab_module_ota_t*)mod, ota);

Expand Down
7 changes: 4 additions & 3 deletions src/epggrab/module/opentv.c
Expand Up @@ -512,7 +512,7 @@ opentv_table_callback
{
int r = 1, cid, mjd;
int sect, last, ver;
mpegts_table_state_t *st;
mpegts_psi_table_state_t *st;
opentv_status_t *sta = mt->mt_opaque;
opentv_module_t *mod = sta->os_mod;
epggrab_ota_mux_t *ota = sta->os_ota;
Expand All @@ -526,15 +526,16 @@ opentv_table_callback
mjd = (mjd - 40587) * 86400;

/* Begin */
r = dvb_table_begin(mt, buf, len, tableid, (uint64_t)cid << 32 | mjd, 7,
r = dvb_table_begin((mpegts_psi_table_t *)mt, buf, len,
tableid, (uint64_t)cid << 32 | mjd, 7,
&st, &sect, &last, &ver);
if (r != 1) goto done;

/* Process */
r = opentv_parse_event_section(sta, cid, mjd, buf, len);

/* End */
r = dvb_table_end(mt, st, sect);
r = dvb_table_end((mpegts_psi_table_t *)mt, st, sect);

/* Complete */
done:
Expand Down
25 changes: 2 additions & 23 deletions src/input/mpegts.h
Expand Up @@ -125,17 +125,6 @@ struct mpegts_table_mux_cb
const uint8_t dtag, const uint8_t *dptr, int dlen );
};

typedef struct mpegts_table_state
{
int tableid;
uint64_t extraid;
int version;
int complete;
int working;
uint32_t sections[8];
RB_ENTRY(mpegts_table_state) link;
} mpegts_table_state_t;

typedef struct mpegts_pid_sub
{
RB_ENTRY(mpegts_pid_sub) mps_link;
Expand Down Expand Up @@ -165,6 +154,8 @@ typedef struct mpegts_pid

struct mpegts_table
{
mpegts_psi_table_t;

/**
* Flags, must never be changed after creation.
* We inspect it without holding global_lock
Expand Down Expand Up @@ -194,20 +185,13 @@ struct mpegts_table
* File descriptor for filter
*/

LIST_ENTRY(mpegts_table) mt_link;
TAILQ_ENTRY(mpegts_table) mt_defer_link;
mpegts_mux_t *mt_mux;

char *mt_name;

void *mt_opaque;
void *mt_bat;
mpegts_table_callback_t mt_callback;

RB_HEAD(,mpegts_table_state) mt_state;
int mt_complete;
int mt_incomplete;
uint8_t mt_finished;
uint8_t mt_subscribed;
uint8_t mt_defer_cmd;

Expand All @@ -218,13 +202,8 @@ struct mpegts_table

int mt_count;

int mt_pid;

int mt_id;

int mt_table; // SI table id (base)
int mt_mask; // mask

int mt_destroyed; // Refcounting
int mt_arefcount;

Expand Down
38 changes: 33 additions & 5 deletions src/input/mpegts/dvb.h
Expand Up @@ -215,6 +215,34 @@ typedef struct mpegts_psi_section
typedef void (*mpegts_psi_section_callback_t)
( const uint8_t *tsb, size_t len, void *opaque );

typedef struct mpegts_psi_table_state
{
int tableid;
uint64_t extraid;
int version;
int complete;
int working;
uint32_t sections[8];
RB_ENTRY(mpegts_psi_table_state) link;
} mpegts_psi_table_state_t;

typedef struct mpegts_psi_table
{
LIST_ENTRY(mpegts_table) mt_link;
RB_HEAD(,mpegts_psi_table_state) mt_state;

char *mt_name;

uint8_t mt_table; // SI table id (base)
uint8_t mt_mask; // mask

int mt_pid;

int mt_complete;
int mt_incomplete;
uint8_t mt_finished;
} mpegts_psi_table_t;

/*
* Assemble SI section
*/
Expand All @@ -225,13 +253,13 @@ void mpegts_psi_section_reassemble
/* PSI table callbacks */

int dvb_table_end
(struct mpegts_table *mt, struct mpegts_table_state *st, int sect );
(mpegts_psi_table_t *mt, mpegts_psi_table_state_t *st, int sect );
int dvb_table_begin
(struct mpegts_table *mt, const uint8_t *ptr, int len,
(mpegts_psi_table_t *mt, const uint8_t *ptr, int len,
int tableid, uint64_t extraid, int minlen,
struct mpegts_table_state **st, int *sect, int *last, int *ver);
void dvb_table_reset
(struct mpegts_table *mt);
mpegts_psi_table_state_t **st, int *sect, int *last, int *ver);
void dvb_table_reset (mpegts_psi_table_t *mt);
void dvb_table_release (mpegts_psi_table_t *mt);

extern htsmsg_t *satellites;

Expand Down
61 changes: 33 additions & 28 deletions src/input/mpegts/dvb_psi.c
Expand Up @@ -848,15 +848,15 @@ dvb_pat_callback
int r, sect, last, ver;
uint16_t sid, pid, tsid;
uint16_t nit_pid = 0;
mpegts_mux_t *mm = mt->mt_mux;
mpegts_table_state_t *st = NULL;
mpegts_mux_t *mm = mt->mt_mux;
mpegts_psi_table_state_t *st = NULL;
mpegts_service_t *s;

/* Begin */
if (tableid != 0) return -1;
tsid = (ptr[0] << 8) | ptr[1];
r = dvb_table_begin(mt, ptr, len, tableid, tsid, 5,
&st, &sect, &last, &ver);
r = dvb_table_begin((mpegts_psi_table_t *)mt, ptr, len,
tableid, tsid, 5, &st, &sect, &last, &ver);
if (r != 1) return r;

/* Multiplex */
Expand Down Expand Up @@ -907,7 +907,7 @@ dvb_pat_callback
NULL, "nit", MT_QUICKREQ | MT_CRC, nit_pid);

/* End */
return dvb_table_end(mt, st, sect);
return dvb_table_end((mpegts_psi_table_t *)mt, st, sect);
}

/*
Expand All @@ -921,11 +921,12 @@ dvb_cat_callback
uint8_t dtag, dlen;
uint16_t pid;
uintptr_t caid;
mpegts_mux_t *mm = mt->mt_mux;
mpegts_table_state_t *st = NULL;
mpegts_mux_t *mm = mt->mt_mux;
mpegts_psi_table_state_t *st = NULL;

/* Start */
r = dvb_table_begin(mt, ptr, len, tableid, 0, 5, &st, &sect, &last, &ver);
r = dvb_table_begin((mpegts_psi_table_t *)mt, ptr, len,
tableid, 0, 5, &st, &sect, &last, &ver);
if (r != 1) return r;
ptr += 5;
len -= 5;
Expand Down Expand Up @@ -956,7 +957,7 @@ dvb_cat_callback
}

/* Finish */
return dvb_table_end(mt, st, sect);
return dvb_table_end((mpegts_psi_table_t *)mt, st, sect);
}

/*
Expand All @@ -971,11 +972,12 @@ dvb_pmt_callback
uint16_t sid;
mpegts_mux_t *mm = mt->mt_mux;
mpegts_service_t *s;
mpegts_table_state_t *st = NULL;
mpegts_psi_table_state_t *st = NULL;

/* Start */
sid = ptr[0] << 8 | ptr[1];
r = dvb_table_begin(mt, ptr, len, tableid, sid, 9, &st, &sect, &last, &ver);
r = dvb_table_begin((mpegts_psi_table_t *)mt, ptr, len,
tableid, sid, 9, &st, &sect, &last, &ver);
if (r != 1) return r;

/* Find service */
Expand All @@ -992,7 +994,7 @@ dvb_pmt_callback
service_restart((service_t*)s);

/* Finish */
return dvb_table_end(mt, st, sect);
return dvb_table_end((mpegts_psi_table_t *)mt, st, sect);
}

/*
Expand Down Expand Up @@ -1267,7 +1269,7 @@ dvb_nit_callback
mpegts_mux_t *mm = mt->mt_mux, *mux;
mpegts_network_t *mn = mm->mm_network;
char name[256];
mpegts_table_state_t *st = NULL;
mpegts_psi_table_state_t *st = NULL;
const char *charset;
bouquet_t *bq = NULL;
dvb_bat_t *b = NULL;
Expand All @@ -1281,7 +1283,8 @@ dvb_nit_callback
tableid != DVB_FASTSCAN_NIT_BASE)
return -1;

r = dvb_table_begin(mt, ptr, len, tableid, nbid, 7, &st, &sect, &last, &ver);
r = dvb_table_begin((mpegts_psi_table_t *)mt, ptr, len,
tableid, nbid, 7, &st, &sect, &last, &ver);
if (r == 0) {
if (tableid == 0x4A || tableid == DVB_FASTSCAN_NIT_BASE) {
if ((b = mt->mt_bat) != NULL) {
Expand All @@ -1304,12 +1307,12 @@ dvb_nit_callback
/* Specific NID */
if (mn->mn_nid) {
if (mn->mn_nid != nbid) {
return dvb_table_end(mt, st, sect);
return dvb_table_end((mpegts_psi_table_t *)mt, st, sect);
}

/* Only use "this" network */
} else if (tableid != 0x40) {
return dvb_table_end(mt, st, sect);
return dvb_table_end((mpegts_psi_table_t *)mt, st, sect);
}
}

Expand Down Expand Up @@ -1426,7 +1429,7 @@ dvb_nit_callback
}

/* End */
return dvb_table_end(mt, st, sect);
return dvb_table_end((mpegts_psi_table_t *)mt, st, sect);
}

/**
Expand Down Expand Up @@ -1579,14 +1582,15 @@ dvb_sdt_callback
uint16_t onid, tsid;
mpegts_mux_t *mm = mt->mt_mux, *mm_orig = mm;
mpegts_network_t *mn = mm->mm_network;
mpegts_table_state_t *st = NULL;
mpegts_psi_table_state_t *st = NULL;

/* Begin */
tsid = ptr[0] << 8 | ptr[1];
onid = ptr[5] << 8 | ptr[6];
extraid = ((int)onid) << 16 | tsid;
if (tableid != 0x42 && tableid != 0x46) return -1;
r = dvb_table_begin(mt, ptr, len, tableid, extraid, 8, &st, &sect, &last, &ver);
r = dvb_table_begin((mpegts_psi_table_t *)mt, ptr, len,
tableid, extraid, 8, &st, &sect, &last, &ver);
if (r != 1) return r;

/* ID */
Expand Down Expand Up @@ -1614,7 +1618,7 @@ dvb_sdt_callback
}

/* Done */
return dvb_table_end(mt, st, sect);
return dvb_table_end((mpegts_psi_table_t *)mt, st, sect);
}

/*
Expand All @@ -1632,7 +1636,7 @@ atsc_vct_callback
mpegts_mux_t *mm = mt->mt_mux, *mm_orig = mm;
mpegts_network_t *mn = mm->mm_network;
mpegts_service_t *s;
mpegts_table_state_t *st = NULL;
mpegts_psi_table_state_t *st = NULL;

/* Validate */
if (tableid != 0xc8 && tableid != 0xc9) return -1;
Expand All @@ -1642,8 +1646,8 @@ atsc_vct_callback
extraid = tsid;

/* Begin */
r = dvb_table_begin(mt, ptr, len, tableid, extraid, 7,
&st, &sect, &last, &ver);
r = dvb_table_begin((mpegts_psi_table_t *)mt, ptr, len,
tableid, extraid, 7, &st, &sect, &last, &ver);
if (r != 1) return r;
tvhdebug("vct", "tsid %04X (%d)", tsid, tsid);

Expand Down Expand Up @@ -1701,7 +1705,7 @@ atsc_vct_callback
len -= dlen + 32;
}

return dvb_table_end(mt, st, sect);
return dvb_table_end((mpegts_psi_table_t *)mt, st, sect);
}


Expand All @@ -1718,7 +1722,7 @@ dvb_bat_callback
#if ENABLE_MPEGTS_DVB
static int
dvb_fs_sdt_mux
( mpegts_table_t *mt, mpegts_mux_t *mm, mpegts_table_state_t *st,
( mpegts_table_t *mt, mpegts_mux_t *mm, mpegts_psi_table_state_t *st,
const uint8_t *ptr, int len, int discovery )
{
uint16_t onid, tsid, service_id;
Expand Down Expand Up @@ -1857,15 +1861,16 @@ dvb_fs_sdt_callback
int r, sect, last, ver;
uint16_t nbid;
mpegts_mux_t *mm = mt->mt_mux;
mpegts_table_state_t *st = NULL;
mpegts_psi_table_state_t *st = NULL;

/* Fastscan ID */
nbid = (ptr[0] << 8) | ptr[1];

/* Begin */
if (tableid != 0xBD)
return -1;
r = dvb_table_begin(mt, ptr, len, tableid, nbid, 7, &st, &sect, &last, &ver);
r = dvb_table_begin((mpegts_psi_table_t *)mt, ptr, len,
tableid, nbid, 7, &st, &sect, &last, &ver);
if (r == 0) {
mt->mt_working -= st->working;
st->working = 0;
Expand All @@ -1879,7 +1884,7 @@ dvb_fs_sdt_callback
dvb_fs_sdt_mux(mt, mm, st, ptr, len, 0);

/* End */
return dvb_table_end(mt, st, sect);
return dvb_table_end((mpegts_psi_table_t *)mt, st, sect);
}
#endif

Expand Down

0 comments on commit b520cbe

Please sign in to comment.