From: Jaroslav Kysela Date: Tue, 13 Mar 2018 13:13:02 +0000 (+0100) Subject: esstream: remove problematic runnig flag from elementary_stream_create() X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=bc1b3e8110b8679de86d04b5ace8902ec8cfc872;p=thirdparty%2Ftvheadend.git esstream: remove problematic runnig flag from elementary_stream_create() --- diff --git a/src/esstream.c b/src/esstream.c index c8346565d..c13d39ff1 100644 --- a/src/esstream.c +++ b/src/esstream.c @@ -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; diff --git a/src/esstream.h b/src/esstream.h index 3e22eb627..ec1b49f42 100644 --- a/src/esstream.h +++ b/src/esstream.h @@ -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); diff --git a/src/input/mpegts/dvb_psi_pmt.c b/src/input/mpegts/dvb_psi_pmt.c index e498f6323..4800a18de 100644 --- a/src/input/mpegts/dvb_psi_pmt.c +++ b/src/input/mpegts/dvb_psi_pmt.c @@ -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) { diff --git a/src/input/mpegts/dvb_psi_pmt.h b/src/input/mpegts/dvb_psi_pmt.h index 3651c7925..10be68cda 100644 --- a/src/input/mpegts/dvb_psi_pmt.h +++ b/src/input/mpegts/dvb_psi_pmt.h @@ -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 diff --git a/src/input/mpegts/mpegts_input.c b/src/input/mpegts/mpegts_input.c index b5986c355..501baef0a 100644 --- a/src/input/mpegts/mpegts_input.c +++ b/src/input/mpegts/mpegts_input.c @@ -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) { diff --git a/src/service.c b/src/service.c index 9a742f68f..19c6fe998 100644 --- a/src/service.c +++ b/src/service.c @@ -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);