]> git.ipfire.org Git - thirdparty/tvheadend.git/commitdiff
esstream: add elementary_stream_create_from_start()
authorJaroslav Kysela <perex@perex.cz>
Thu, 8 Mar 2018 17:43:24 +0000 (18:43 +0100)
committerJaroslav Kysela <perex@perex.cz>
Fri, 23 Mar 2018 17:05:29 +0000 (18:05 +0100)
src/esstream.c
src/esstream.h

index c3269616b334da6df5fd60db6da1629c331b62df..5b27a619a20a417ef96b09fac73ed16ed39af9b8 100644 (file)
@@ -625,8 +625,8 @@ streaming_start_t *
 elementary_stream_build_start(elementary_set_t *set)
 {
   elementary_stream_t *st;
-  int n = 0;
   streaming_start_t *ss;
+  int n = 0;
 
   TAILQ_FOREACH(st, &set->set_filter, es_filter_link)
     n++;
@@ -649,3 +649,33 @@ elementary_stream_build_start(elementary_set_t *set)
   ss->ss_refcount = 1;
   return ss;
 }
+
+/**
+ * Create back elementary streams from the start message.
+ */
+elementary_set_t *
+elementary_stream_create_from_start
+  (elementary_set_t *set, streaming_start_t *ss)
+{
+  elementary_stream_t *st;
+  int n;
+
+  /* we expect the empty set */
+  assert(TAILQ_FIRST(&set->set_all) == NULL);
+  assert(TAILQ_FIRST(&set->set_filter) == NULL);
+
+  for (n = 0; n < ss->ss_num_components; n++) {
+    streaming_start_component_t *ssc = &ss->ss_components[n];
+    st = calloc(1, sizeof(*st));
+    *(elementary_info_t *)st = *(elementary_info_t *)ssc;
+    st->es_service = set->set_service;
+    elementary_stream_make_nicename(st, set->set_nicename);
+    TAILQ_INSERT_TAIL(&set->set_all, st, es_link);
+  }
+
+  set->set_pcr_pid = ss->ss_pcr_pid;
+  set->set_pmt_pid = ss->ss_pmt_pid;
+  set->set_service_id = ss->ss_service_id;
+
+  return set;
+}
index a344ce934e953d2842ec8503c8d62d09928b9b74..9c8cf0f9ebc70c9531a777f1ae8dba66348d5c8f 100644 (file)
@@ -191,5 +191,8 @@ int elementary_stream_has_no_audio(elementary_set_t *set, int filtered);
 int elementary_set_has_streams(elementary_set_t *set, int filtered);
 void elementary_set_sort_streams(elementary_set_t *set);
 streaming_start_t *elementary_stream_build_start(elementary_set_t *set);
+elementary_set_t *elementary_stream_create_from_start
+  (elementary_set_t *set, streaming_start_t *ss);
+
 
 #endif // ESSTREAM_H__