From: Jaroslav Kysela Date: Fri, 3 Nov 2017 14:27:14 +0000 (+0100) Subject: service: introduce streaming_service_deliver() X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=0af41afa4f88d8c805277ff5160d9bc7e3f17f18;p=thirdparty%2Ftvheadend.git service: introduce streaming_service_deliver() --- diff --git a/src/descrambler/descrambler.c b/src/descrambler/descrambler.c index 000a0a914..bcceb95ec 100644 --- a/src/descrambler/descrambler.c +++ b/src/descrambler/descrambler.c @@ -465,7 +465,7 @@ descrambler_notify_deliver( mpegts_service_t *t, descramble_info_t *di ) sm = streaming_msg_create(SMT_DESCRAMBLE_INFO); sm->sm_data = di; - streaming_pad_deliver(&t->s_streaming_pad, sm); + streaming_service_deliver((service_t *)t, sm); } static void diff --git a/src/input/mpegts/linuxdvb/linuxdvb_frontend.c b/src/input/mpegts/linuxdvb/linuxdvb_frontend.c index 1ad2e05a7..0504cbffd 100644 --- a/src/input/mpegts/linuxdvb/linuxdvb_frontend.c +++ b/src/input/mpegts/linuxdvb/linuxdvb_frontend.c @@ -1220,7 +1220,7 @@ linuxdvb_frontend_monitor ( void *aux ) LIST_FOREACH(s, &mmi->mmi_mux->mm_transports, s_active_link) { pthread_mutex_lock(&s->s_stream_mutex); - streaming_pad_deliver(&s->s_streaming_pad, streaming_msg_clone(&sm)); + streaming_service_deliver(s, streaming_msg_clone(&sm)); pthread_mutex_unlock(&s->s_stream_mutex); } } diff --git a/src/input/mpegts/satip/satip_frontend.c b/src/input/mpegts/satip/satip_frontend.c index 21dfa9841..a842670d2 100644 --- a/src/input/mpegts/satip/satip_frontend.c +++ b/src/input/mpegts/satip/satip_frontend.c @@ -153,7 +153,7 @@ satip_frontend_signal_cb( void *aux ) sm.sm_data = &sigstat; LIST_FOREACH(svc, &mmi->mmi_mux->mm_transports, s_active_link) { pthread_mutex_lock(&svc->s_stream_mutex); - streaming_pad_deliver(&svc->s_streaming_pad, streaming_msg_clone(&sm)); + streaming_service_deliver(svc, streaming_msg_clone(&sm)); pthread_mutex_unlock(&svc->s_stream_mutex); } mtimer_arm_rel(&lfe->sf_monitor_timer, satip_frontend_signal_cb, diff --git a/src/input/mpegts/tsdemux.c b/src/input/mpegts/tsdemux.c index d1f39f848..e8f4a9744 100644 --- a/src/input/mpegts/tsdemux.c +++ b/src/input/mpegts/tsdemux.c @@ -438,11 +438,11 @@ ts_flush(mpegts_service_t *t, sbuf_t *sb) sm.sm_type = SMT_MPEGTS; sm.sm_data = pb; - streaming_pad_deliver(&t->s_streaming_pad, streaming_msg_clone(&sm)); + streaming_service_deliver((service_t *)t, streaming_msg_clone(&sm)); pktbuf_ref_dec(pb); - service_set_streaming_status_flags((service_t*)t, TSS_PACKETS); + service_set_streaming_status_flags((service_t *)t, TSS_PACKETS); t->s_streaming_live |= TSS_LIVE; sbuf_reset(sb, 2*TS_REMUX_BUFSIZE); diff --git a/src/input/mpegts/tvhdhomerun/tvhdhomerun_frontend.c b/src/input/mpegts/tvhdhomerun/tvhdhomerun_frontend.c index 20ca3492c..4b39fad38 100644 --- a/src/input/mpegts/tvhdhomerun/tvhdhomerun_frontend.c +++ b/src/input/mpegts/tvhdhomerun/tvhdhomerun_frontend.c @@ -298,7 +298,7 @@ tvhdhomerun_frontend_monitor_cb( void *aux ) LIST_FOREACH(svc, &mmi->mmi_mux->mm_transports, s_active_link) { pthread_mutex_lock(&svc->s_stream_mutex); - streaming_pad_deliver(&svc->s_streaming_pad, streaming_msg_clone(&sm)); + streaming_service_deliver(svc, streaming_msg_clone(&sm)); pthread_mutex_unlock(&svc->s_stream_mutex); } } diff --git a/src/parsers/parser_teletext.c b/src/parsers/parser_teletext.c index 14ba05e14..bfebb4066 100644 --- a/src/parsers/parser_teletext.c +++ b/src/parsers/parser_teletext.c @@ -796,7 +796,7 @@ extract_subtitle(mpegts_service_t *t, elementary_stream_t *st, th_pkt_t *pkt = pkt_alloc(st->es_type, sub, off, pts, pts, pts); pkt->pkt_componentindex = st->es_index; - streaming_pad_deliver(&t->s_streaming_pad, streaming_msg_create_pkt(pkt)); + streaming_service_deliver((service_t *)t, streaming_msg_create_pkt(pkt)); /* Decrease our own reference to the packet */ pkt_ref_dec(pkt); diff --git a/src/parsers/parsers.c b/src/parsers/parsers.c index eac5a5712..5eac1ad6c 100644 --- a/src/parsers/parsers.c +++ b/src/parsers/parsers.c @@ -1893,7 +1893,7 @@ deliver: } /* Forward packet */ - streaming_pad_deliver(&t->s_streaming_pad, streaming_msg_create_pkt(pkt)); + streaming_service_deliver(t, streaming_msg_create_pkt(pkt)); /* Decrease our own reference to the packet */ pkt_ref_dec(pkt); diff --git a/src/service.c b/src/service.c index 3fc7b26c2..7e38a9599 100644 --- a/src/service.c +++ b/src/service.c @@ -1423,11 +1423,11 @@ service_servicetype_txt ( service_t *s ) void service_send_streaming_status(service_t *t) { + streaming_message_t *sm; lock_assert(&t->s_stream_mutex); - streaming_pad_deliver(&t->s_streaming_pad, - streaming_msg_create_code(SMT_SERVICE_STATUS, - t->s_streaming_status)); + sm = streaming_msg_create_code(SMT_SERVICE_STATUS, t->s_streaming_status); + streaming_service_deliver(t, sm); } /** @@ -1467,6 +1467,7 @@ service_set_streaming_status_flags_(service_t *t, int set) void service_restart(service_t *t) { + streaming_message_t *sm; int had_components; if(t->s_type != STYPE_STD) @@ -1480,19 +1481,16 @@ service_restart(service_t *t) service_build_filter(t); if(TAILQ_FIRST(&t->s_filt_components) != NULL) { - if (had_components) - streaming_pad_deliver(&t->s_streaming_pad, - streaming_msg_create_code(SMT_STOP, - SM_CODE_SOURCE_RECONFIGURED)); - - streaming_pad_deliver(&t->s_streaming_pad, - streaming_msg_create_data(SMT_START, - service_build_stream_start(t))); + if (had_components) { + sm = streaming_msg_create_code(SMT_STOP, SM_CODE_SOURCE_RECONFIGURED); + streaming_service_deliver(t, sm); + } + sm = streaming_msg_create_data(SMT_START, service_build_stream_start(t)); + streaming_pad_deliver(&t->s_streaming_pad, sm); t->s_running = 1; } else { - streaming_pad_deliver(&t->s_streaming_pad, - streaming_msg_create_code(SMT_STOP, - SM_CODE_NO_SERVICE)); + sm = streaming_msg_create_code(SMT_STOP, SM_CODE_NO_SERVICE); + streaming_service_deliver(t, sm); t->s_running = 0; } diff --git a/src/streaming.c b/src/streaming.c index 7dc547488..c134abe68 100644 --- a/src/streaming.c +++ b/src/streaming.c @@ -420,6 +420,15 @@ streaming_pad_deliver(streaming_pad_t *sp, streaming_message_t *sm) streaming_msg_free(sm); } +/** + * + */ +void +streaming_service_deliver(service_t *t, streaming_message_t *sm) +{ + streaming_pad_deliver(&t->s_streaming_pad, sm); +} + /** * */ diff --git a/src/streaming.h b/src/streaming.h index 832055c5d..549e7ca1d 100644 --- a/src/streaming.h +++ b/src/streaming.h @@ -91,6 +91,8 @@ void streaming_target_disconnect(streaming_pad_t *sp, streaming_target_t *st); void streaming_pad_deliver(streaming_pad_t *sp, streaming_message_t *sm); +void streaming_service_deliver(service_t *t, streaming_message_t *sm); + void streaming_msg_free(streaming_message_t *sm); streaming_message_t *streaming_msg_clone(streaming_message_t *src); diff --git a/src/subscriptions.c b/src/subscriptions.c index 1360e1376..22ffd8893 100644 --- a/src/subscriptions.c +++ b/src/subscriptions.c @@ -108,10 +108,8 @@ subscription_link_service(th_subscription_t *s, service_t *t) // Link to service output streaming_target_connect(&t->s_streaming_pad, &s->ths_input); - streaming_pad_deliver(&t->s_streaming_pad, - streaming_msg_create_code(SMT_GRACE, - s->ths_postpone + - t->s_grace_delay)); + sm = streaming_msg_create_code(SMT_GRACE, s->ths_postpone + t->s_grace_delay); + streaming_service_deliver(t, sm); if(s->ths_start_message != NULL && t->s_streaming_status & TSS_PACKETS) {