} 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;
-
-
/**
*
*/
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
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;
-
/**
*
*/
uint8_t sa[8];
} cwc_provider_t;
+struct cwc;
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;
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);
}
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) {
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;
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++)
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;
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);
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);
}
}
}