From: Jaroslav Kysela Date: Mon, 16 Oct 2017 07:35:23 +0000 (+0200) Subject: descrambler: add dr_descramble() callback X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=668ddf1a31b55eded87aaa714e57bc2072f9b5cc;p=thirdparty%2Ftvheadend.git descrambler: add dr_descramble() callback --- diff --git a/src/descrambler.h b/src/descrambler.h index 61de6007c..631b74c29 100644 --- a/src/descrambler.h +++ b/src/descrambler.h @@ -85,7 +85,9 @@ typedef struct th_descrambler_key { } th_descrambler_key_t; typedef struct th_descrambler_runtime { + th_descrambler_t *dr_descrambler; struct service *dr_service; + int (*dr_descramble)(struct th_descrambler *d, const uint8_t *tsb, int len); int dr_ca_count; int dr_ca_resolved; int dr_ca_failed; diff --git a/src/descrambler/descrambler.c b/src/descrambler/descrambler.c index 72d58766a..c8309705c 100644 --- a/src/descrambler/descrambler.c +++ b/src/descrambler/descrambler.c @@ -1011,12 +1011,21 @@ descrambler_descramble ( service_t *t, lock_assert(&t->s_stream_mutex); - if (dr == NULL || dr->dr_external) { + if (dr == NULL) { if ((tsb[3] & 0x80) == 0) { ts_recv_packet0((mpegts_service_t *)t, st, tsb, len); return 1; } - return dr && dr->dr_external ? 1 : -1; + return -1; + } + + if (dr->dr_descramble) + return dr->dr_descramble(dr->dr_descrambler, tsb, len); + + if (dr->dr_external) { + if ((tsb[3] & 0x80) == 0) + ts_recv_packet0((mpegts_service_t *)t, st, tsb, len); + return 1; } if (!dr->dr_key_multipid) {