]> git.ipfire.org Git - thirdparty/tvheadend.git/commitdiff
esstream: remove problematic runnig flag from elementary_stream_create()
authorJaroslav Kysela <perex@perex.cz>
Tue, 13 Mar 2018 13:13:02 +0000 (14:13 +0100)
committerJaroslav Kysela <perex@perex.cz>
Fri, 23 Mar 2018 17:05:29 +0000 (18:05 +0100)
src/esstream.c
src/esstream.h
src/input/mpegts/dvb_psi_pmt.c
src/input/mpegts/dvb_psi_pmt.h
src/input/mpegts/mpegts_input.c
src/service.c

index c8346565d77e6ced066378fb94283c899fa23ee7..c13d39ff1d31109d67cbf20b0ba288a10d3b5a49 100644 (file)
@@ -456,9 +456,9 @@ ignore:
  */
 elementary_stream_t *
 elementary_stream_create
-  (elementary_set_t *set, int pid, streaming_component_type_t type, int running)
+  (elementary_set_t *set, int pid, streaming_component_type_t type)
 {
-  elementary_stream_t *st, *st2;
+  elementary_stream_t *st;
   int i = 0;
   int idx = 0;
 
@@ -474,6 +474,7 @@ elementary_stream_create
   st->es_index = idx + 1;
 
   st->es_type = type;
+  st->es_cc = -1;
 
   TAILQ_INSERT_TAIL(&set->set_all, st, es_link);
   st->es_service = set->set_service;
@@ -482,15 +483,6 @@ elementary_stream_create
 
   elementary_stream_make_nicename(st, set->set_nicename);
 
-  if (running) {
-    elementary_set_filter_build(set);
-    TAILQ_FOREACH(st2, &set->set_filter, es_filter_link)
-      if (st2 == st) {
-        elementary_stream_init(st);
-        break;
-      }
-  }
-
   return st;
 }
 
@@ -532,12 +524,11 @@ elementary_stream_type_find
  */
 elementary_stream_t *
 elementary_stream_type_modify(elementary_set_t *set, int pid,
-                              streaming_component_type_t type,
-                              int running)
+                              streaming_component_type_t type)
 {
   elementary_stream_t *es = elementary_stream_type_find(set, type);
   if (!es)
-    return elementary_stream_create(set, pid, type, running);
+    return elementary_stream_create(set, pid, type);
   if (es->es_pid != pid)
     es->es_pid = pid;
   return es;
index 3e22eb627216bcd5e30fede75f3998a4a27ee4a3..ec1b49f4231b7f05be8655be741dab41747dace4 100644 (file)
@@ -170,7 +170,7 @@ void elementary_set_stream_destroy(elementary_set_t *set, elementary_stream_t *e
 void elementary_set_init_filter_streams(elementary_set_t *set);
 void elementary_set_filter_build(elementary_set_t *set);
 elementary_stream_t *elementary_stream_create
-  (elementary_set_t *set, int pid, streaming_component_type_t type, int running);
+  (elementary_set_t *set, int pid, streaming_component_type_t type);
 elementary_stream_t *elementary_stream_find_(elementary_set_t *set, int pid);
 elementary_stream_t *elementary_stream_type_find
   (elementary_set_t *set, streaming_component_type_t type);
@@ -183,7 +183,7 @@ static inline elementary_stream_t *elementary_stream_find
       return set->set_last_es;
   }
 elementary_stream_t *elementary_stream_type_modify
-  (elementary_set_t *set, int pid, streaming_component_type_t type, int running);
+  (elementary_set_t *set, int pid, streaming_component_type_t type);
 void elementary_stream_type_destroy
   (elementary_set_t *set, streaming_component_type_t type);
 int elementary_stream_has_audio_or_video(elementary_set_t *set);
index e498f6323887588d3d26cc1a79a9e97e06a22f5f..4800a18de20faa9b867667f264704f5c6702b11c 100644 (file)
@@ -52,7 +52,7 @@ extract_svcid(const uint8_t *ptr)
 static int
 psi_desc_add_ca
   (mpegts_table_t *mt, elementary_set_t *set,
-   uint16_t caid, uint32_t provid, uint16_t pid, int running)
+   uint16_t caid, uint32_t provid, uint16_t pid)
 {
   elementary_stream_t *st;
   caid_t *c;
@@ -63,7 +63,7 @@ psi_desc_add_ca
 
   st = elementary_stream_find(set, pid);
   if (st == NULL || st->es_type != SCT_CA) {
-    st = elementary_stream_create(set, pid, SCT_CA, running);
+    st = elementary_stream_create(set, pid, SCT_CA);
     r |= PMT_UPDATE_NEW_CA_STREAM;
   }
 
@@ -104,8 +104,7 @@ psi_desc_add_ca
  */
 static int 
 psi_desc_ca
-  (mpegts_table_t *mt, elementary_set_t *set, const uint8_t *buffer,
-   int size, int running)
+  (mpegts_table_t *mt, elementary_set_t *set, const uint8_t *buffer, int size)
 {
   int r = 0;
   int i;
@@ -129,7 +128,7 @@ psi_desc_ca
       uint16_t xpid = extract_pid(buffer + i);
       uint16_t xprovid = extract_2byte(buffer + i + 2);
 
-      r |= psi_desc_add_ca(mt, set, caid, xprovid, xpid, running);
+      r |= psi_desc_add_ca(mt, set, caid, xprovid, xpid);
     }
     break;
   case 0x0500:// Viaccess
@@ -163,7 +162,7 @@ psi_desc_ca
     break;
   }
 
-  r |= psi_desc_add_ca(mt, set, caid, provid, pid, running);
+  r |= psi_desc_add_ca(mt, set, caid, provid, pid);
 
   return r;
 }
@@ -173,7 +172,7 @@ psi_desc_ca
  */
 static int
 psi_desc_teletext(elementary_set_t *set, const uint8_t *ptr, int size,
-                  int parent_pid, int *position, int running)
+                  int parent_pid, int *position)
 {
   int r = 0;
   const char *lang;
@@ -193,7 +192,7 @@ psi_desc_teletext(elementary_set_t *set, const uint8_t *ptr, int size,
       st = elementary_stream_find(set, pid);
       if (st == NULL || st->es_type != SCT_TEXTSUB) {
         r |= PMT_UPDATE_NEW_STREAM;
-        st = elementary_stream_create(set, pid, SCT_TEXTSUB, running);
+        st = elementary_stream_create(set, pid, SCT_TEXTSUB);
       }
 
       lang = lang_code_get2((const char*)ptr, 3);
@@ -227,7 +226,7 @@ psi_desc_teletext(elementary_set_t *set, const uint8_t *ptr, int size,
 uint32_t
 dvb_psi_parse_pmt
   (mpegts_table_t *mt, const char *nicename, elementary_set_t *set,
-   const uint8_t *ptr, int len, int running)
+   const uint8_t *ptr, int len)
 {
   uint16_t pcr_pid, pid;
   uint8_t estype;
@@ -281,7 +280,7 @@ dvb_psi_parse_pmt
 
     switch(dtag) {
     case DVB_DESC_CA:
-      update |= psi_desc_ca(mt, set, ptr, dlen, running);
+      update |= psi_desc_ca(mt, set, ptr, dlen);
       break;
 
     default:
@@ -369,7 +368,7 @@ dvb_psi_parse_pmt
 
       switch(dtag) {
       case DVB_DESC_CA:
-        update |= psi_desc_ca(mt, set, ptr, dlen, running);
+        update |= psi_desc_ca(mt, set, ptr, dlen);
         break;
 
       case DVB_DESC_VIDEO_STREAM:
@@ -393,7 +392,7 @@ dvb_psi_parse_pmt
         if(estype == 0x06)
           hts_stream_type = SCT_TELETEXT;
   
-        update |= psi_desc_teletext(set, ptr, dlen, pid, &tt_position, running);
+        update |= psi_desc_teletext(set, ptr, dlen, pid, &tt_position);
         break;
 
       case DVB_DESC_AC3:
@@ -434,7 +433,7 @@ dvb_psi_parse_pmt
       st = elementary_stream_find(set, pid);
       if (st == NULL || st->es_type != hts_stream_type) {
         update |= PMT_UPDATE_NEW_STREAM;
-        st = elementary_stream_create(set, pid, hts_stream_type, running);
+        st = elementary_stream_create(set, pid, hts_stream_type);
       }
 
       if (st->es_type != hts_stream_type) {
@@ -496,7 +495,7 @@ dvb_psi_parse_pmt
 
   /* Handle PCR 'elementary stream' */
   if (!pcr_shared) {
-    st = elementary_stream_type_modify(set, set->set_pcr_pid, SCT_PCR, running);
+    st = elementary_stream_type_modify(set, set->set_pcr_pid, SCT_PCR);
     st->es_delete_me = 0;
   }
 
@@ -579,10 +578,12 @@ dvb_pmt_callback
   update = 0;
   pthread_mutex_lock(&s->s_stream_mutex);
   update = dvb_psi_parse_pmt(mt, service_nicename((service_t *)s),
-                             &s->s_components, ptr, len,
-                             s->s_status == SERVICE_RUNNING);
-  if (update)
+                             &s->s_components, ptr, len);
+  if (update) {
+    if (s->s_status == SERVICE_RUNNING)
+      elementary_set_filter_build(&s->s_components);
     service_request_save((service_t*)s);
+  }
   /* Only restart if something that our clients worry about did change */
   restart = 0;
   if (update) {
index 3651c7925d1486be546ad4a425f56921cf4c2ac5..10be68cda517ecccf9e599c3c4ad3c0fc82f2417 100644 (file)
@@ -44,6 +44,6 @@
 
 uint32_t dvb_psi_parse_pmt
   (mpegts_table_t *mt, const char *nicename, elementary_set_t *set,
-   const uint8_t *ptr, int len, int running);
+   const uint8_t *ptr, int len);
 
 #endif
index b5986c3557c6b96463f8cfe006e8c7707160b9a0..501baef0a8ca327a9a4b68ffa862b5a3196e0113 100644 (file)
@@ -671,8 +671,7 @@ mpegts_input_open_service_pid
   if (elementary_stream_find(&s->s_components, pid) == NULL) {
     if (!create)
       return NULL;
-    es = elementary_stream_create(&s->s_components, pid, stype,
-                                  s->s_status == SERVICE_RUNNING);
+    es = elementary_stream_create(&s->s_components, pid, stype);
     es->es_pid_opened = 1;
   }
   if (es && mm->mm_active) {
index 9a742f68f788cb8e9b9cfcb901bf313a81aa7f01..19c6fe9982c9a2f32a3b0b33fab1833fad4a6e18 100644 (file)
@@ -1705,7 +1705,7 @@ void service_load ( service_t *t, htsmsg_t *c )
       if(pid > 0 && pid2 > 0 && pid == pid2)
         shared_pcr = 1;
 
-      st = elementary_stream_create(&t->s_components, pid, type, 0);
+      st = elementary_stream_create(&t->s_components, pid, type);
 
       if((v = htsmsg_get_str(c, "language")) != NULL)
         strncpy(st->es_lang, lang_code_get(v), 3);
@@ -1750,7 +1750,7 @@ void service_load ( service_t *t, htsmsg_t *c )
   }
   if (!shared_pcr)
     elementary_stream_type_modify(&t->s_components,
-                                   t->s_components.set_pcr_pid, SCT_PCR, 0);
+                                   t->s_components.set_pcr_pid, SCT_PCR);
   else
     elementary_stream_type_destroy(&t->s_components, SCT_PCR);
   elementary_set_sort_streams(&t->s_components);