From 668ddf1a31b55eded87aaa714e57bc2072f9b5cc Mon Sep 17 00:00:00 2001 From: Jaroslav Kysela Date: Mon, 16 Oct 2017 09:35:23 +0200 Subject: [PATCH] descrambler: add dr_descramble() callback --- src/descrambler.h | 2 ++ src/descrambler/descrambler.c | 13 +++++++++++-- 2 files changed, 13 insertions(+), 2 deletions(-) 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) { -- 2.47.3