]> git.ipfire.org Git - thirdparty/tvheadend.git/commitdiff
mpegts cwc: re-add configuration for prefcapid (fixes #2001)
authorAdam Sutton <dev@adamsutton.me.uk>
Mon, 21 Apr 2014 20:22:50 +0000 (21:22 +0100)
committerAdam Sutton <dev@adamsutton.me.uk>
Mon, 21 Apr 2014 20:22:50 +0000 (21:22 +0100)
src/descrambler/cwc.c
src/input/mpegts.h
src/input/mpegts/mpegts_service.c
src/service.c
src/service.h

index 72ef301fd3f3b1d625f6e624b6e83b33b3353ff3..2d838f3b97c3a7ed1aeb03901ad0df3f3bc00bfa 100755 (executable)
@@ -771,9 +771,9 @@ forbid:
     ct->cs_channel = es->es_channel;
     ct->ecm_state = ECM_VALID;
 
-    if(t->s_prefcapid == 0 || t->s_prefcapid != ct->cs_channel) {
-      t->s_prefcapid = ct->cs_channel;
-      tvhlog(LOG_DEBUG, "cwc", "Saving prefered PID %d", t->s_prefcapid);
+    if(t->s_dvb_prefcapid == 0 || t->s_dvb_prefcapid != ct->cs_channel) {
+      t->s_dvb_prefcapid = ct->cs_channel;
+      tvhlog(LOG_DEBUG, "cwc", "Saving prefered PID %d", t->s_dvb_prefcapid);
       service_request_save((service_t*)t, 0);
     }
 
@@ -1638,28 +1638,28 @@ cwc_table_input(struct th_descrambler *td, service_t *s,
     if (ct->ecm_state == ECM_RESET) {
       ct->ecm_state = ECM_INIT;
       ct->cs_channel = -1;
-      t->s_prefcapid = 0;
+      t->s_dvb_prefcapid = 0;
       tvhlog(LOG_DEBUG, "cwc", "Reset after unexpected or no reply for service \"%s\"", t->s_dvb_svcname);
     }
 
     if (ct->ecm_state == ECM_INIT) {
       // Validate prefered ECM PID
-      if(t->s_prefcapid != 0) {
+      if(t->s_dvb_prefcapid != 0) {
         struct elementary_stream *prefca
-          = service_stream_find((service_t*)t, t->s_prefcapid);
+          = service_stream_find((service_t*)t, t->s_dvb_prefcapid);
         if (!prefca || prefca->es_type != SCT_CA) {
-          tvhlog(LOG_DEBUG, "cwc", "Invalid prefered ECM (PID %d) found for service \"%s\"", t->s_prefcapid, t->s_dvb_svcname);
-          t->s_prefcapid = 0;
+          tvhlog(LOG_DEBUG, "cwc", "Invalid prefered ECM (PID %d) found for service \"%s\"", t->s_dvb_prefcapid, t->s_dvb_svcname);
+          t->s_dvb_prefcapid = 0;
         }
       }
 
-      if(t->s_prefcapid == st->es_pid) {
+      if(t->s_dvb_prefcapid == st->es_pid) {
         ep = calloc(1, sizeof(ecm_pid_t));
-        ep->ep_pid = t->s_prefcapid;
+        ep->ep_pid = t->s_dvb_prefcapid;
         LIST_INSERT_HEAD(&ct->cs_pids, ep, ep_link);
-        tvhlog(LOG_DEBUG, "cwc", "Insert prefered ECM (PID %d) for service \"%s\"", t->s_prefcapid, t->s_dvb_svcname);
+        tvhlog(LOG_DEBUG, "cwc", "Insert prefered ECM (PID %d) for service \"%s\"", t->s_dvb_prefcapid, t->s_dvb_svcname);
       }
-      else if(t->s_prefcapid == 0) {
+      else if(t->s_dvb_prefcapid == 0) {
           ep = calloc(1, sizeof(ecm_pid_t));
           ep->ep_pid = st->es_pid;
           LIST_INSERT_HEAD(&ct->cs_pids, ep, ep_link);
index 26d7cecb31c6af1d4b68e0e0dc2d4dfd64035e57..3ac69db94990208f5ab1f4f2c71d53d4553f9897 100644 (file)
@@ -360,6 +360,7 @@ struct mpegts_service
   char    *s_dvb_cridauth;
   uint16_t s_dvb_servicetype;
   char    *s_dvb_charset;
+  uint16_t s_dvb_prefcapid;
 
   /*
    * EIT/EPG control
index da85130554c327d3caa9e48ade148c85782ee222..7a7dd8804412831bef973b146451db454ba3c347 100644 (file)
@@ -126,6 +126,13 @@ const idclass_t mpegts_service_class =
       .list   = dvb_charset_enum,
       .opts   = PO_ADVANCED,
     },
+    {
+      .type     = PT_U16,
+      .id       = "prefcapid",
+      .name     = "Pref. CA PID",
+      .off      = offsetof(mpegts_service_t, s_dvb_prefcapid),
+      .opts     = PO_ADVANCED,
+    },
     {},
   }
 };
index abbfddb8b0a5ecfa7fda575f8a986739d3f11b39..fd765e794180c33b884bbc8f85019b5827c564ae 100644 (file)
@@ -911,26 +911,6 @@ service_build_stream_start(service_t *t)
 /**
  *
  */
-void
-service_set_enable(service_t *t, int enabled)
-{
-  if(t->s_enabled == enabled)
-    return;
-
-  t->s_enabled = enabled;
-  t->s_config_save(t);
-  subscription_reschedule();
-}
-
-void
-service_set_prefcapid(service_t *t, uint32_t prefcapid)
-{
-  if(t->s_prefcapid == prefcapid)
-    return;
-
-  t->s_prefcapid = prefcapid;
-  t->s_config_save(t);
-}
 
 static pthread_mutex_t pending_save_mutex;
 static pthread_cond_t pending_save_cond;
index 2caab0a18add310bf15bf1cb3400979ffdf24418..ab53082b62f6989eb34220ed02c17e5a54934bb8 100644 (file)
@@ -398,7 +398,6 @@ typedef struct service {
   struct th_descrambler_list s_descramblers;
   int s_scrambled_seen;
   int s_caid;
-  uint16_t s_prefcapid;
 
   /**
    * List of all components.
@@ -462,8 +461,6 @@ service_stream_find(service_t *t, int pid)
 elementary_stream_t *service_stream_create(service_t *t, int pid,
                                     streaming_component_type_t type);
 
-void service_set_priority(service_t *t, int prio);
-
 void service_settings_write(service_t *t);
 
 const char *service_servicetype_txt(service_t *t);
@@ -493,8 +490,6 @@ service_set_streaming_status_flags(service_t *t, int flag)
 struct streaming_start;
 struct streaming_start *service_build_stream_start(service_t *t);
 
-void service_set_enable(service_t *t, int enabled);
-
 void service_restart(service_t *t, int had_components);
 
 void service_stream_destroy(service_t *t, elementary_stream_t *st);
@@ -526,14 +521,6 @@ int tss2errcode(int tss);
 
 uint16_t service_get_encryption(service_t *t);
 
-void service_set_dvb_charset(service_t *t, const char *dvb_charset);
-
-void service_set_dvb_eit_enable(service_t *t, int dvb_eit_enable);
-
-void service_set_prefcapid(service_t *t, uint32_t prefcapid);
-
-int service_is_primary_epg (service_t *t);
-
 htsmsg_t *servicetype_list (void);
 
 void service_load ( service_t *s, htsmsg_t *c );