diff --git a/src/descrambler.h b/src/descrambler.h index f0423cfc..fbf9b73c 100755 --- a/src/descrambler.h +++ b/src/descrambler.h @@ -139,6 +139,7 @@ typedef enum { CARD_NDS, CARD_CRYPTOWORKS, CARD_BULCRYPT, + CARD_STREAMGUARD, CARD_UNKNOWN } card_type_t; diff --git a/src/descrambler/capmt.c b/src/descrambler/capmt.c old mode 100644 new mode 100755 index 6e88d0db..fc468d03 --- a/src/descrambler/capmt.c +++ b/src/descrambler/capmt.c @@ -644,9 +644,13 @@ capmt_queue_msg msg->cm_adapter = adapter; msg->cm_sid = sid; if (flags & CAPMT_MSG_FAST) + { TAILQ_INSERT_HEAD(&capmt->capmt_writeq, msg, cm_link); + } else - TAILQ_INSERT_TAIL(&capmt->capmt_writeq, msg, cm_link); + { + TAILQ_INSERT_TAIL(&capmt->capmt_writeq, msg, cm_link); + } tvh_write(capmt->capmt_pipe.wr, "c", 1); } @@ -1650,10 +1654,13 @@ capmt_send_request(capmt_service_t *ct, int lm) cad.cad_length = 0x07; cad.cad_data[5] = cce2->cce_providerid >> 8; cad.cad_data[6] = cce2->cce_providerid & 0xff; - } else if (cce2->cce_caid >> 8 == 0x4a) { - cad.cad_length = 0x05; - cad.cad_data[4] = cce2->cce_providerid & 0xff; - } else + } else if (cce2->cce_caid == 0x4ad2) { + cad.cad_length = 0x04; + cad.cad_data[3] = cce2->cce_providerid & 0xffffff; + }else if (cce2->cce_caid >> 8 == 0x4a && cce2->cce_caid!=0x4ad2) { + cad.cad_length = 0x05; + cad.cad_data[4] = cce2->cce_providerid & 0xff; + }else tvhlog(LOG_WARNING, "capmt", "Unknown CAID type, don't know where to put provider ID"); } memcpy(&buf[pos], &cad, cad.cad_length + 2); diff --git a/src/descrambler/cwc.c b/src/descrambler/cwc.c index 5b7138a5..d5641a0e 100755 --- a/src/descrambler/cwc.c +++ b/src/descrambler/cwc.c @@ -286,7 +286,7 @@ void cwc_emm_nagra(cwc_t *cwc, struct cs_card_data *pcard, const uint8_t *data, void cwc_emm_nds(cwc_t *cwc, struct cs_card_data *pcard, const uint8_t *data, int len); void cwc_emm_cryptoworks(cwc_t *cwc, struct cs_card_data *pcard, const uint8_t *data, int len); void cwc_emm_bulcrypt(cwc_t *cwc, struct cs_card_data *pcard, const uint8_t *data, int len); - +void cwc_emm_streamguard(cwc_t *cwc, struct cs_card_data *pcard,const uint8_t *data, int len);//add by sangood /** * @@ -1339,6 +1339,9 @@ cwc_emm(void *opaque, int pid, const uint8_t *data, int len) case CARD_BULCRYPT: cwc_emm_bulcrypt(cwc, pcard, data, len); break; + case CARD_STREAMGUARD: + cwc_emm_streamguard(cwc, pcard, data, len); + break; case CARD_UNKNOWN: break; } @@ -1847,6 +1850,18 @@ cwc_emm_nds(cwc_t *cwc, struct cs_card_data *pcard, const uint8_t *data, int len if (match) cwc_send_msg(cwc, data, len, 0, 1, 0, 0); } +/** + * streamguard emm handler + */ +void +cwc_emm_streamguard(cwc_t *cwc, struct cs_card_data *pcard, const uint8_t *data, int len) +{ + //sangood todo + int match = 1; + tvhlog(LOG_INFO, "cwc", "cwc_emm_streamguard streamguard card data emm get,here lots of works todo..."); + if (match) + cwc_send_msg(cwc, data, len, 0, 1, 0, 0); +} void cwc_emm_cryptoworks(cwc_t *cwc, struct cs_card_data *pcard, const uint8_t *data, int len) diff --git a/src/descrambler/descrambler.c b/src/descrambler/descrambler.c index ed790daa..483c2378 100755 --- a/src/descrambler/descrambler.c +++ b/src/descrambler/descrambler.c @@ -771,6 +771,8 @@ detect_card_type(const uint16_t caid) uint8_t c_sys = caid >> 8; switch(caid) { + case 0x4ad2: + return CARD_STREAMGUARD; case 0x5581: case 0x4aee: return CARD_BULCRYPT; diff --git a/src/input/mpegts/dvb_psi.c b/src/input/mpegts/dvb_psi.c old mode 100644 new mode 100755 index cbedbd33..b9ac9a55 --- a/src/input/mpegts/dvb_psi.c +++ b/src/input/mpegts/dvb_psi.c @@ -1204,11 +1204,14 @@ psi_desc_ca(mpegts_service_t *t, const uint8_t *buffer, int size) i += nanolen; } break; - case 0x4a00://DRECrypt - if (caid != 0x4aee) { // Bulcrypt + case 0x4a00://DRECrypt or streamguard + if (caid==0x4ad2) { + provid=0; + } + if (caid != 0x4aee && caid!=0x4ad2) { // Bulcrypt provid = size < 4 ? 0 : buffer[4]; - break; - } + } + break; default: provid = 0; break; @@ -1369,11 +1372,11 @@ psi_parse_pmt case 0x04: hts_stream_type = SCT_MPEG2AUDIO; break; - + case 0x81: hts_stream_type = SCT_AC3; break; - + case 0x0f: hts_stream_type = SCT_MP4A; break;