psi tables: moved base parsers outside mpegts.h
This commit is contained in:
parent
6547bbe2e0
commit
b520cbeb34
8 changed files with 111 additions and 91 deletions
|
@ -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)
|
||||
|
@ -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, §, &last, &ver);
|
||||
r = dvb_table_begin((mpegts_psi_table_t *)mt, ptr, len,
|
||||
tableid, extraid, 11, &st, §, &last, &ver);
|
||||
if (r != 1) return r;
|
||||
if (st) {
|
||||
uint32_t mask;
|
||||
|
@ -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);
|
||||
|
||||
|
|
|
@ -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;
|
||||
|
@ -526,7 +526,8 @@ 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, §, &last, &ver);
|
||||
if (r != 1) goto done;
|
||||
|
||||
|
@ -534,7 +535,7 @@ opentv_table_callback
|
|||
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:
|
||||
|
|
|
@ -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;
|
||||
|
@ -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
|
||||
|
@ -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;
|
||||
|
||||
|
@ -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;
|
||||
|
||||
|
|
|
@ -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
|
||||
*/
|
||||
|
@ -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;
|
||||
|
||||
|
|
|
@ -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, §, &last, &ver);
|
||||
r = dvb_table_begin((mpegts_psi_table_t *)mt, ptr, len,
|
||||
tableid, tsid, 5, &st, §, &last, &ver);
|
||||
if (r != 1) return r;
|
||||
|
||||
/* Multiplex */
|
||||
|
@ -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);
|
||||
}
|
||||
|
||||
/*
|
||||
|
@ -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, §, &last, &ver);
|
||||
r = dvb_table_begin((mpegts_psi_table_t *)mt, ptr, len,
|
||||
tableid, 0, 5, &st, §, &last, &ver);
|
||||
if (r != 1) return r;
|
||||
ptr += 5;
|
||||
len -= 5;
|
||||
|
@ -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);
|
||||
}
|
||||
|
||||
/*
|
||||
|
@ -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, §, &last, &ver);
|
||||
r = dvb_table_begin((mpegts_psi_table_t *)mt, ptr, len,
|
||||
tableid, sid, 9, &st, §, &last, &ver);
|
||||
if (r != 1) return r;
|
||||
|
||||
/* Find service */
|
||||
|
@ -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);
|
||||
}
|
||||
|
||||
/*
|
||||
|
@ -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;
|
||||
|
@ -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, §, &last, &ver);
|
||||
r = dvb_table_begin((mpegts_psi_table_t *)mt, ptr, len,
|
||||
tableid, nbid, 7, &st, §, &last, &ver);
|
||||
if (r == 0) {
|
||||
if (tableid == 0x4A || tableid == DVB_FASTSCAN_NIT_BASE) {
|
||||
if ((b = mt->mt_bat) != NULL) {
|
||||
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -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);
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -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, §, &last, &ver);
|
||||
r = dvb_table_begin((mpegts_psi_table_t *)mt, ptr, len,
|
||||
tableid, extraid, 8, &st, §, &last, &ver);
|
||||
if (r != 1) return r;
|
||||
|
||||
/* ID */
|
||||
|
@ -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);
|
||||
}
|
||||
|
||||
/*
|
||||
|
@ -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;
|
||||
|
@ -1642,8 +1646,8 @@ atsc_vct_callback
|
|||
extraid = tsid;
|
||||
|
||||
/* Begin */
|
||||
r = dvb_table_begin(mt, ptr, len, tableid, extraid, 7,
|
||||
&st, §, &last, &ver);
|
||||
r = dvb_table_begin((mpegts_psi_table_t *)mt, ptr, len,
|
||||
tableid, extraid, 7, &st, §, &last, &ver);
|
||||
if (r != 1) return r;
|
||||
tvhdebug("vct", "tsid %04X (%d)", tsid, tsid);
|
||||
|
||||
|
@ -1701,7 +1705,7 @@ next:
|
|||
len -= dlen + 32;
|
||||
}
|
||||
|
||||
return dvb_table_end(mt, st, sect);
|
||||
return dvb_table_end((mpegts_psi_table_t *)mt, st, sect);
|
||||
}
|
||||
|
||||
|
||||
|
@ -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;
|
||||
|
@ -1857,7 +1861,7 @@ 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];
|
||||
|
@ -1865,7 +1869,8 @@ dvb_fs_sdt_callback
|
|||
/* Begin */
|
||||
if (tableid != 0xBD)
|
||||
return -1;
|
||||
r = dvb_table_begin(mt, ptr, len, tableid, nbid, 7, &st, §, &last, &ver);
|
||||
r = dvb_table_begin((mpegts_psi_table_t *)mt, ptr, len,
|
||||
tableid, nbid, 7, &st, §, &last, &ver);
|
||||
if (r == 0) {
|
||||
mt->mt_working -= st->working;
|
||||
st->working = 0;
|
||||
|
@ -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
|
||||
|
||||
|
|
|
@ -21,7 +21,7 @@
|
|||
#include "input.h"
|
||||
#include "dvb.h"
|
||||
|
||||
SKEL_DECLARE(mpegts_table_state_skel, struct mpegts_table_state);
|
||||
SKEL_DECLARE(mpegts_psi_table_state_skel, struct mpegts_psi_table_state);
|
||||
|
||||
/* **************************************************************************
|
||||
* Lookup tables
|
||||
|
@ -151,7 +151,7 @@ mpegts_psi_section_reassemble
|
|||
*/
|
||||
|
||||
static int sect_cmp
|
||||
( struct mpegts_table_state *a, struct mpegts_table_state *b )
|
||||
( mpegts_psi_table_state_t *a, mpegts_psi_table_state_t *b )
|
||||
{
|
||||
if (a->tableid != b->tableid)
|
||||
return a->tableid - b->tableid;
|
||||
|
@ -164,7 +164,7 @@ static int sect_cmp
|
|||
|
||||
static void
|
||||
mpegts_table_state_reset
|
||||
( mpegts_table_t *mt, mpegts_table_state_t *st, int last )
|
||||
( mpegts_psi_table_t *mt, mpegts_psi_table_state_t *st, int last )
|
||||
{
|
||||
int i;
|
||||
mt->mt_finished = 0;
|
||||
|
@ -176,20 +176,20 @@ mpegts_table_state_reset
|
|||
st->sections[last / 32] = 0xFFFFFFFF << (31 - (last % 32));
|
||||
}
|
||||
|
||||
static struct mpegts_table_state *
|
||||
static mpegts_psi_table_state_t *
|
||||
mpegts_table_state_find
|
||||
( mpegts_table_t *mt, int tableid, uint64_t extraid, int last )
|
||||
( mpegts_psi_table_t *mt, int tableid, uint64_t extraid, int last )
|
||||
{
|
||||
struct mpegts_table_state *st;
|
||||
mpegts_psi_table_state_t *st;
|
||||
|
||||
/* Find state */
|
||||
SKEL_ALLOC(mpegts_table_state_skel);
|
||||
mpegts_table_state_skel->tableid = tableid;
|
||||
mpegts_table_state_skel->extraid = extraid;
|
||||
st = RB_INSERT_SORTED(&mt->mt_state, mpegts_table_state_skel, link, sect_cmp);
|
||||
SKEL_ALLOC(mpegts_psi_table_state_skel);
|
||||
mpegts_psi_table_state_skel->tableid = tableid;
|
||||
mpegts_psi_table_state_skel->extraid = extraid;
|
||||
st = RB_INSERT_SORTED(&mt->mt_state, mpegts_psi_table_state_skel, link, sect_cmp);
|
||||
if (!st) {
|
||||
st = mpegts_table_state_skel;
|
||||
SKEL_USED(mpegts_table_state_skel);
|
||||
st = mpegts_psi_table_state_skel;
|
||||
SKEL_USED(mpegts_psi_table_state_skel);
|
||||
mt->mt_incomplete++;
|
||||
mpegts_table_state_reset(mt, st, last);
|
||||
}
|
||||
|
@ -201,11 +201,11 @@ mpegts_table_state_find
|
|||
*/
|
||||
static int
|
||||
dvb_table_complete
|
||||
(mpegts_table_t *mt)
|
||||
(mpegts_psi_table_t *mt)
|
||||
{
|
||||
if (mt->mt_incomplete || !mt->mt_complete) {
|
||||
int total = 0;
|
||||
mpegts_table_state_t *st;
|
||||
mpegts_psi_table_state_t *st;
|
||||
RB_FOREACH(st, &mt->mt_state, link)
|
||||
total++;
|
||||
tvhtrace(mt->mt_name, "incomplete %d complete %d total %d",
|
||||
|
@ -220,7 +220,7 @@ dvb_table_complete
|
|||
|
||||
int
|
||||
dvb_table_end
|
||||
(mpegts_table_t *mt, mpegts_table_state_t *st, int sect)
|
||||
(mpegts_psi_table_t *mt, mpegts_psi_table_state_t *st, int sect)
|
||||
{
|
||||
int sa, sb;
|
||||
uint32_t rem;
|
||||
|
@ -250,11 +250,11 @@ dvb_table_end
|
|||
*/
|
||||
int
|
||||
dvb_table_begin
|
||||
(mpegts_table_t *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,
|
||||
mpegts_table_state_t **ret, int *sect, int *last, int *ver)
|
||||
mpegts_psi_table_state_t **ret, int *sect, int *last, int *ver)
|
||||
{
|
||||
mpegts_table_state_t *st;
|
||||
mpegts_psi_table_state_t *st;
|
||||
uint32_t sa, sb;
|
||||
|
||||
/* Not long enough */
|
||||
|
@ -326,9 +326,9 @@ dvb_table_begin
|
|||
}
|
||||
|
||||
void
|
||||
dvb_table_reset(mpegts_table_t *mt)
|
||||
dvb_table_reset(mpegts_psi_table_t *mt)
|
||||
{
|
||||
mpegts_table_state_t *st;
|
||||
mpegts_psi_table_state_t *st;
|
||||
|
||||
tvhtrace(mt->mt_name, "pid %02X complete reset", mt->mt_pid);
|
||||
mt->mt_incomplete = 0;
|
||||
|
@ -338,3 +338,14 @@ dvb_table_reset(mpegts_table_t *mt)
|
|||
free(st);
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
dvb_table_release(mpegts_psi_table_t *mt)
|
||||
{
|
||||
mpegts_psi_table_state_t *st;
|
||||
|
||||
while ((st = RB_FIRST(&mt->mt_state))) {
|
||||
RB_REMOVE(&mt->mt_state, st, link);
|
||||
free(st);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -933,9 +933,9 @@ void dvb_init( void )
|
|||
|
||||
void dvb_done( void )
|
||||
{
|
||||
extern SKEL_DECLARE(mpegts_table_state_skel, struct mpegts_table_state);
|
||||
extern SKEL_DECLARE(mpegts_psi_table_state_skel, mpegts_psi_table_state_t);
|
||||
|
||||
SKEL_FREE(mpegts_table_state_skel);
|
||||
SKEL_FREE(mpegts_psi_table_state_skel);
|
||||
#if ENABLE_MPEGTS_DVB
|
||||
htsmsg_destroy(satellites);
|
||||
#endif
|
||||
|
|
|
@ -88,7 +88,7 @@ mpegts_table_dispatch
|
|||
"(len %i, total %zi, errors %zi)",
|
||||
len, r, mt->mt_err_log.count);
|
||||
}
|
||||
dvb_table_reset(mt);
|
||||
dvb_table_reset((mpegts_psi_table_t *)mt);
|
||||
return;
|
||||
}
|
||||
|
||||
|
@ -134,12 +134,7 @@ mpegts_table_dispatch
|
|||
void
|
||||
mpegts_table_release_ ( mpegts_table_t *mt )
|
||||
{
|
||||
struct mpegts_table_state *st;
|
||||
|
||||
while ((st = RB_FIRST(&mt->mt_state))) {
|
||||
RB_REMOVE(&mt->mt_state, st, link);
|
||||
free(st);
|
||||
}
|
||||
dvb_table_release((mpegts_psi_table_t *)mt);
|
||||
tvhtrace("mpegts", "table: mux %p free %s %02X/%02X (%d) pid %04X (%d)",
|
||||
mt->mt_mux, mt->mt_name, mt->mt_table, mt->mt_mask, mt->mt_table,
|
||||
mt->mt_pid, mt->mt_pid);
|
||||
|
|
Loading…
Add table
Reference in a new issue