Keep track of transport-id for each mux so we can do cross-transport EPG updates
This commit is contained in:
parent
eabbc204be
commit
2eb2cf2a1f
6 changed files with 35 additions and 9 deletions
|
@ -498,6 +498,7 @@ ajax_adaptercreatemux(http_connection_t *hc, http_reply_t *hr,
|
|||
return HTTP_STATUS_NOT_FOUND;
|
||||
|
||||
v = dvb_mux_create_str(tda,
|
||||
"65535",
|
||||
http_arg_get(&hc->hc_req_args, "freq"),
|
||||
http_arg_get(&hc->hc_req_args, "symrate"),
|
||||
http_arg_get(&hc->hc_req_args, "const"),
|
||||
|
|
BIN
dvb.c
BIN
dvb.c
Binary file not shown.
4
dvb.h
4
dvb.h
|
@ -53,8 +53,10 @@ th_transport_t *dvb_find_transport(th_dvb_mux_instance_t *tdmi,
|
|||
th_dvb_mux_instance_t *dvb_mux_create(th_dvb_adapter_t *tda,
|
||||
struct dvb_frontend_parameters *fe_param,
|
||||
int polarisation, int switchport,
|
||||
int save);
|
||||
int save, uint16_t tsid);
|
||||
|
||||
void dvb_tdmi_save(th_dvb_mux_instance_t *tdmi);
|
||||
|
||||
void dvb_tda_save(th_dvb_adapter_t *tda);
|
||||
|
||||
#endif /* DVB_H_ */
|
||||
|
|
|
@ -98,6 +98,8 @@ dvb_mux_store(FILE *fp, th_dvb_mux_instance_t *tdmi)
|
|||
{
|
||||
struct dvb_frontend_parameters *f = tdmi->tdmi_fe_params;
|
||||
|
||||
fprintf(fp, "\ttransportstreamid = %d\n", tdmi->tdmi_transport_stream_id);
|
||||
|
||||
fprintf(fp, "\tfrequency = %d\n", f->frequency);
|
||||
|
||||
switch(tdmi->tdmi_adapter->tda_fe_info->type) {
|
||||
|
@ -156,6 +158,7 @@ dvb_mux_store(FILE *fp, th_dvb_mux_instance_t *tdmi)
|
|||
*/
|
||||
const char *
|
||||
dvb_mux_create_str(th_dvb_adapter_t *tda,
|
||||
const char *tsidstr,
|
||||
const char *freqstr,
|
||||
const char *symratestr,
|
||||
const char *qamstr,
|
||||
|
@ -173,7 +176,7 @@ dvb_mux_create_str(th_dvb_adapter_t *tda,
|
|||
struct dvb_frontend_parameters f;
|
||||
int r;
|
||||
int polarisation = 0, switchport = 0;
|
||||
|
||||
|
||||
memset(&f, 0, sizeof(f));
|
||||
|
||||
f.inversion = INVERSION_AUTO;
|
||||
|
@ -247,7 +250,7 @@ dvb_mux_create_str(th_dvb_adapter_t *tda,
|
|||
break;
|
||||
}
|
||||
|
||||
dvb_mux_create(tda, &f, polarisation, switchport, save);
|
||||
dvb_mux_create(tda, &f, polarisation, switchport, save, atoi(tsidstr));
|
||||
|
||||
return NULL;
|
||||
}
|
||||
|
|
|
@ -22,6 +22,7 @@
|
|||
void dvb_mux_store(FILE *fp, th_dvb_mux_instance_t *tdmi);
|
||||
|
||||
const char *dvb_mux_create_str(th_dvb_adapter_t *tda,
|
||||
const char *tsidstr,
|
||||
const char *freqstr,
|
||||
const char *symratestr,
|
||||
const char *qamstr,
|
||||
|
|
31
dvb_tables.c
31
dvb_tables.c
|
@ -202,6 +202,7 @@ dvb_eit_callback(th_dvb_mux_instance_t *tdmi, uint8_t *ptr, int len,
|
|||
{
|
||||
th_transport_t *t;
|
||||
th_channel_t *ch;
|
||||
th_dvb_adapter_t *tda = tdmi->tdmi_adapter;
|
||||
|
||||
uint16_t serviceid;
|
||||
int version;
|
||||
|
@ -224,6 +225,8 @@ dvb_eit_callback(th_dvb_mux_instance_t *tdmi, uint8_t *ptr, int len,
|
|||
char desc[5000];
|
||||
epg_content_type_t *ect;
|
||||
|
||||
// printf("EIT!, tid = %x\n", tableid);
|
||||
|
||||
if(tableid < 0x4e || tableid > 0x6f || len < 11)
|
||||
return;
|
||||
|
||||
|
@ -240,6 +243,14 @@ dvb_eit_callback(th_dvb_mux_instance_t *tdmi, uint8_t *ptr, int len,
|
|||
len -= 11;
|
||||
ptr += 11;
|
||||
|
||||
/* Search all muxes on adapter */
|
||||
LIST_FOREACH(tdmi, &tda->tda_muxes, tdmi_adapter_link)
|
||||
if(tdmi->tdmi_transport_stream_id == transport_stream_id)
|
||||
break;
|
||||
|
||||
if(tdmi == NULL)
|
||||
return;
|
||||
|
||||
t = dvb_find_transport(tdmi, serviceid, 0, NULL);
|
||||
if(t == NULL)
|
||||
return;
|
||||
|
@ -445,6 +456,11 @@ dvb_pat_callback(th_dvb_mux_instance_t *tdmi, uint8_t *ptr, int len,
|
|||
|
||||
tid = (ptr[0] << 8) | ptr[1];
|
||||
|
||||
if(tdmi->tdmi_transport_stream_id != tid) {
|
||||
tdmi->tdmi_transport_stream_id = tid;
|
||||
dvb_tda_save(tdmi->tdmi_adapter);
|
||||
}
|
||||
|
||||
ptr += 5;
|
||||
len -= 5;
|
||||
|
||||
|
@ -514,7 +530,8 @@ static const fe_modulation_t qam_tab [6] = {
|
|||
* Cable delivery descriptor
|
||||
*/
|
||||
static void
|
||||
dvb_table_cable_delivery(th_dvb_mux_instance_t *tdmi, uint8_t *ptr, int len)
|
||||
dvb_table_cable_delivery(th_dvb_mux_instance_t *tdmi, uint8_t *ptr, int len,
|
||||
uint16_t tsid)
|
||||
{
|
||||
int freq, symrate;
|
||||
struct dvb_frontend_parameters fe_param;
|
||||
|
@ -546,14 +563,15 @@ dvb_table_cable_delivery(th_dvb_mux_instance_t *tdmi, uint8_t *ptr, int len)
|
|||
|
||||
fe_param.u.qam.fec_inner = fec_tab[ptr[10] & 0x07];
|
||||
|
||||
dvb_mux_create(tdmi->tdmi_adapter, &fe_param, 0, 0, 1);
|
||||
dvb_mux_create(tdmi->tdmi_adapter, &fe_param, 0, 0, 1, tsid);
|
||||
}
|
||||
|
||||
/**
|
||||
* Satellite delivery descriptor
|
||||
*/
|
||||
static void
|
||||
dvb_table_sat_delivery(th_dvb_mux_instance_t *tdmi, uint8_t *ptr, int len)
|
||||
dvb_table_sat_delivery(th_dvb_mux_instance_t *tdmi, uint8_t *ptr, int len,
|
||||
uint16_t tsid)
|
||||
{
|
||||
int freq, symrate, pol;
|
||||
struct dvb_frontend_parameters fe_param;
|
||||
|
@ -578,7 +596,8 @@ dvb_table_sat_delivery(th_dvb_mux_instance_t *tdmi, uint8_t *ptr, int len)
|
|||
|
||||
pol = (ptr[6] >> 5) & 0x03;
|
||||
|
||||
dvb_mux_create(tdmi->tdmi_adapter, &fe_param, pol, tdmi->tdmi_switchport, 1);
|
||||
dvb_mux_create(tdmi->tdmi_adapter, &fe_param, pol, tdmi->tdmi_switchport, 1,
|
||||
tsid);
|
||||
}
|
||||
|
||||
|
||||
|
@ -658,10 +677,10 @@ dvb_nit_callback(th_dvb_mux_instance_t *tdmi, uint8_t *ptr, int len,
|
|||
|
||||
switch(tag) {
|
||||
case DVB_DESC_SAT:
|
||||
dvb_table_sat_delivery(tdmi, ptr, tlen);
|
||||
dvb_table_sat_delivery(tdmi, ptr, tlen, tsid);
|
||||
break;
|
||||
case DVB_DESC_CABLE:
|
||||
dvb_table_cable_delivery(tdmi, ptr, tlen);
|
||||
dvb_table_cable_delivery(tdmi, ptr, tlen, tsid);
|
||||
break;
|
||||
}
|
||||
|
||||
|
|
Loading…
Add table
Reference in a new issue