From d2f2ebb46f134f383902858ca628a8bbddded1f5 Mon Sep 17 00:00:00 2001 From: Jaroslav Kysela Date: Thu, 8 Mar 2018 18:43:24 +0100 Subject: [PATCH] esstream: add elementary_stream_create_from_start() --- src/esstream.c | 32 +++++++++++++++++++++++++++++++- src/esstream.h | 3 +++ 2 files changed, 34 insertions(+), 1 deletion(-) diff --git a/src/esstream.c b/src/esstream.c index c3269616b..5b27a619a 100644 --- a/src/esstream.c +++ b/src/esstream.c @@ -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; +} diff --git a/src/esstream.h b/src/esstream.h index a344ce934..9c8cf0f9e 100644 --- a/src/esstream.h +++ b/src/esstream.h @@ -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__ -- 2.47.3