]> git.ipfire.org Git - thirdparty/tvheadend.git/commitdiff
mpegts service: add verified flag to not bother with inactive streams
authorJaroslav Kysela <perex@perex.cz>
Mon, 22 May 2017 13:59:34 +0000 (15:59 +0200)
committerJaroslav Kysela <perex@perex.cz>
Mon, 22 May 2017 13:59:34 +0000 (15:59 +0200)
src/api/api_mpegts.c
src/input/mpegts/dvb_psi.c
src/input/mpegts/mpegts_service.c
src/service.c
src/service.h

index 6e3241f50248ff5245e9068c0b21aa81dfbe339a..848f9ff98b55e4498b818577835c91d5f90f22db 100644 (file)
@@ -276,6 +276,7 @@ api_mpegts_service_grid
     LIST_FOREACH(mm, &mn->mn_muxes, mm_network_link) {
       if (hide && !mm->mm_is_enabled(mm)) continue;
       LIST_FOREACH(ms, &mm->mm_services, s_dvb_mux_link) {
+        if (hide && !ms->s_verified) continue;
         if (hide == 2 && !ms->s_is_enabled((service_t*)ms, 0)) continue;
         idnode_set_add(ins, (idnode_t*)ms, &conf->filter, perm->aa_lang_ui);
       }
index 3ea309b3b5cc59efc38702eaf917ea66b4adf09b..5fff47b9cc1461e4109f215149dce88fee249c43 100644 (file)
@@ -2574,8 +2574,10 @@ psi_parse_pmt
     }
   }
 
-  if (service_has_audio_or_video((service_t *)t))
+  if (service_has_audio_or_video((service_t *)t)) {
     dvb_service_autoenable(t, "PAT and PMT");
+    t->s_verified = 1;
+  }
 
   /* FIXME: Move pending_restart handling to another place? */
   if (atomic_set(&t->s_pending_restart, 0) && !ret)
index 5f85327323c8c0d141cfa70c22f9a2065c8e49ad..9e09caf0d245b3338e232b33070ae9bd6e9ef49a 100644 (file)
@@ -274,6 +274,7 @@ mpegts_service_is_enabled(service_t *t, int flags)
 {
   mpegts_service_t *s = (mpegts_service_t*)t;
   mpegts_mux_t *mm    = s->s_dvb_mux;
+  if (!s->s_verified) return 0;
   return mm->mm_is_enabled(mm) ? s->s_enabled : 0;
 }
 
index b34e2502b27fa9673591d886b19620e358d7951f..15ad00dff751ce0922d1e679d079720870d701d7 100644 (file)
@@ -2018,6 +2018,7 @@ void service_save ( service_t *t, htsmsg_t *m )
 
   idnode_save(&t->s_id, m);
 
+  htsmsg_add_s32(m, "verified", t->s_verified);
   htsmsg_add_u32(m, "pcr", t->s_pcr_pid);
   htsmsg_add_u32(m, "pmt", t->s_pmt_pid);
 
@@ -2210,6 +2211,7 @@ void service_load ( service_t *t, htsmsg_t *c )
 {
   htsmsg_t *m, *hbbtv;
   htsmsg_field_t *f;
+  int32_t s32;
   uint32_t u32, pid;
   elementary_stream_t *st;
   streaming_component_type_t type;
@@ -2217,6 +2219,10 @@ void service_load ( service_t *t, htsmsg_t *c )
 
   idnode_load(&t->s_id, c);
 
+  if(!htsmsg_get_s32(c, "verified", &s32))
+    t->s_verified = s32;
+  else
+    t->s_verified = 1;
   if(!htsmsg_get_u32(c, "pcr", &u32))
     t->s_pcr_pid = u32;
   if(!htsmsg_get_u32(c, "pmt", &u32))
index fcbf2e077d3197664e66dde5490c14110a57e817..0f012c8ae77ef93a6071d45331d984fd508f39da 100644 (file)
@@ -312,6 +312,7 @@ typedef struct service {
    * subscription scheduling.
    */
   int s_enabled;
+  int s_verified;  // In PMT and valid streams
   int s_auto;
   int s_prio;
   int s_type_user;