cwc: remove opaque structures

This commit is contained in:
Jaroslav Kysela 2014-06-07 11:19:38 +02:00
parent 16e86616cc
commit 795ccefce4

View file

@ -120,17 +120,6 @@ typedef struct ecm_pid {
} ecm_pid_t;
/**
*
*/
struct cwc_service;
typedef struct cwc_opaque {
struct cwc_service *service;
elementary_stream_t *estream;
mpegts_mux_t *mux;
} cwc_opaque_t;
/**
*
*/
@ -142,8 +131,8 @@ typedef struct cwc_service {
LIST_ENTRY(cwc_service) cs_link;
int cs_channel;
int cs_pid;
cwc_opaque_t cs_opaque;
elementary_stream_t *cs_estream;
mpegts_mux_t *cs_mux;
/**
* ECM Status
@ -170,18 +159,6 @@ typedef struct cwc_message {
uint8_t cm_data[CWS_NETMSGSIZE];
} cwc_message_t;
/**
*
*/
struct cwc;
struct cs_card_data;
typedef struct cwc_opaque_emm {
struct cs_card_data *pcard;
struct cwc *cwc;
mpegts_mux_t *mux;
} cwc_opaque_emm_t;
/**
*
*/
@ -190,6 +167,7 @@ typedef struct cwc_provider {
uint8_t sa[8];
} cwc_provider_t;
struct cwc;
typedef struct cs_card_data {
@ -209,7 +187,8 @@ typedef struct cs_card_data {
uint8_t cwc_ua[8];
cwc_opaque_emm_t cwc_opaque;
struct cwc *cwc;
mpegts_mux_t *cwc_mux;
} cs_card_data_t;
@ -1237,7 +1216,7 @@ cwc_thread(void *aux)
while((cd = LIST_FIRST(&cwc->cwc_cards)) != NULL) {
LIST_REMOVE(cd, cs_card);
descrambler_close_emm(cd->cwc_opaque.mux, &cd->cwc_opaque, cd->cwc_caid);
descrambler_close_emm(cd->cwc_mux, cd, cd->cwc_caid);
free(cd->cwc_providers);
free(cd);
}
@ -1302,21 +1281,19 @@ cwc_emm_cache_lookup(cwc_t *cwc, uint32_t crc)
static void
cwc_emm(void *opaque, int pid, const uint8_t *data, int len)
{
cwc_opaque_emm_t *o = opaque;
struct cs_card_data *pcard;
struct cs_card_data *pcard = opaque;
cwc_t *cwc;
void *ca_update_id;
if (data == NULL) { /* end-of-data */
o->mux = NULL;
pcard->cwc_mux = NULL;
return;
}
if (o->mux == NULL)
if (pcard->cwc_mux == NULL)
return;
pthread_mutex_lock(&cwc_mutex);
pcard = o->pcard;
cwc = o->cwc;
ca_update_id = o->mux;
cwc = pcard->cwc;
ca_update_id = pcard->cwc_mux;
if (cwc->cwc_forward_emm && cwc->cwc_writer_running) {
if (cwc->cwc_emmex) {
if (cwc->cwc_update_id != ca_update_id) {
@ -1629,9 +1606,8 @@ cwc_emm_viaccess(cwc_t *cwc, struct cs_card_data *pcard, const uint8_t *data, in
static void
cwc_table_input(void *opaque, int pid, const uint8_t *data, int len)
{
cwc_opaque_t *o = opaque;
elementary_stream_t *st = o->estream;
cwc_service_t *ct = o->service;
cwc_service_t *ct = opaque;
elementary_stream_t *st = ct->cs_estream;
mpegts_service_t *t = (mpegts_service_t*)ct->td_service;
uint16_t sid = t->s_dvb_service_id;
cwc_t *cwc = ct->cs_cwc;
@ -1940,7 +1916,7 @@ cwc_service_destroy(th_descrambler_t *td)
ecm_pid_t *ep;
int i;
descrambler_close_pid(ct->cs_opaque.mux, &ct->cs_opaque, ct->cs_pid);
descrambler_close_pid(ct->cs_mux, ct, ct->cs_estream->es_pid);
while((ep = LIST_FIRST(&ct->cs_pids)) != NULL) {
for(i = 0; i < 256; i++)
@ -2003,10 +1979,8 @@ cwc_service_start(service_t *t)
ct = calloc(1, sizeof(cwc_service_t));
ct->cs_cwc = cwc;
ct->cs_channel = -1;
ct->cs_pid = st->es_pid;
ct->cs_opaque.service = ct;
ct->cs_opaque.estream = st;
ct->cs_opaque.mux = ((mpegts_service_t *)t)->s_dvb_mux;
ct->cs_estream = st;
ct->cs_mux = ((mpegts_service_t *)t)->s_dvb_mux;
ct->ecm_state = ECM_INIT;
td = (th_descrambler_t *)ct;
@ -2017,8 +1991,8 @@ cwc_service_start(service_t *t)
LIST_INSERT_HEAD(&cwc->cwc_services, ct, cs_link);
descrambler_open_pid(ct->cs_opaque.mux, &ct->cs_opaque,
ct->cs_pid, cwc_table_input);
descrambler_open_pid(ct->cs_mux, ct, ct->cs_estream->es_pid,
cwc_table_input);
tvhlog(LOG_DEBUG, "cwc", "%s using CWC %s:%d",
service_nicename(t), cwc->cwc_hostname, cwc->cwc_port);
@ -2056,15 +2030,14 @@ cwc_caid_update(mpegts_mux_t *mux, uint16_t caid, uint16_t pid, int valid)
if (cwc->cwc_running) {
LIST_FOREACH(pcard, &cwc->cwc_cards, cs_card) {
if (pcard->cwc_caid == caid) {
if (pcard->cwc_opaque.mux != mux) continue;
if (pcard->cwc_mux != mux) continue;
if (valid) {
pcard->cwc_opaque.cwc = cwc;
pcard->cwc_opaque.pcard = pcard;
pcard->cwc_opaque.mux = mux;
descrambler_open_emm(mux, &pcard->cwc_opaque, caid, cwc_emm);
pcard->cwc = cwc;
pcard->cwc_mux = mux;
descrambler_open_emm(mux, pcard, caid, cwc_emm);
} else {
pcard->cwc_opaque.mux = NULL;
descrambler_close_emm(mux, &pcard->cwc_opaque, caid);
pcard->cwc_mux = NULL;
descrambler_close_emm(mux, pcard, caid);
}
}
}