diff --git a/src/dvb/dvb_transport.c b/src/dvb/dvb_transport.c index ecd1c6d2..d11725fd 100644 --- a/src/dvb/dvb_transport.c +++ b/src/dvb/dvb_transport.c @@ -101,8 +101,7 @@ dvb_transport_open_demuxers(th_dvb_adapter_t *tda, th_transport_t *t) * transports that is subscribing to the adapter */ static int -dvb_transport_start(th_transport_t *t, unsigned int weight, int status, - int force_start) +dvb_transport_start(th_transport_t *t, unsigned int weight, int force_start) { int w; th_dvb_adapter_t *tda = t->tht_dvb_mux_instance->tdmi_adapter; @@ -132,7 +131,6 @@ dvb_transport_start(th_transport_t *t, unsigned int weight, int status, pthread_mutex_lock(&tda->tda_delivery_mutex); LIST_INSERT_HEAD(&tda->tda_transports, t, tht_active_link); - t->tht_status = status; dvb_fe_tune(t->tht_dvb_mux_instance, "Transport start"); pthread_mutex_unlock(&tda->tda_delivery_mutex); diff --git a/src/iptv_input.c b/src/iptv_input.c index be94f686..ccce9fa5 100644 --- a/src/iptv_input.c +++ b/src/iptv_input.c @@ -166,8 +166,7 @@ iptv_thread(void *aux) * */ static int -iptv_transport_start(th_transport_t *t, unsigned int weight, int status, - int force_start) +iptv_transport_start(th_transport_t *t, unsigned int weight, int force_start) { pthread_t tid; int fd; @@ -242,7 +241,6 @@ iptv_transport_start(th_transport_t *t, unsigned int weight, int status, } t->tht_iptv_fd = fd; - t->tht_status = status; pthread_mutex_lock(&iptv_recvmutex); LIST_INSERT_HEAD(&iptv_active_transports, t, tht_active_link); @@ -267,7 +265,6 @@ iptv_transport_refresh(th_transport_t *t) static void iptv_transport_stop(th_transport_t *t) { - t->tht_status = TRANSPORT_IDLE; pthread_mutex_lock(&iptv_recvmutex); LIST_REMOVE(t, tht_active_link); pthread_mutex_unlock(&iptv_recvmutex); diff --git a/src/rawtsinput.c b/src/rawtsinput.c index 4b1b15e5..f7119992 100644 --- a/src/rawtsinput.c +++ b/src/rawtsinput.c @@ -47,10 +47,8 @@ typedef struct rawts { * */ static int -rawts_transport_start(th_transport_t *t, unsigned int weight, int status, - int force_start) +rawts_transport_start(th_transport_t *t, unsigned int weight, int force_start) { - t->tht_status = TRANSPORT_RUNNING; return 0; // Always ok } @@ -60,7 +58,6 @@ rawts_transport_start(th_transport_t *t, unsigned int weight, int status, static void rawts_transport_stop(th_transport_t *t) { - t->tht_status = TRANSPORT_IDLE; } /** diff --git a/src/transports.c b/src/transports.c index 5f9c6013..e2fe5363 100644 --- a/src/transports.c +++ b/src/transports.c @@ -204,6 +204,8 @@ transport_stop(th_transport_t *t) LIST_FOREACH(st, &t->tht_components, st_link) stream_clean(st); + t->tht_status = TRANSPORT_IDLE; + pthread_mutex_unlock(&t->tht_stream_mutex); } @@ -245,24 +247,30 @@ transport_start(th_transport_t *t, unsigned int weight, int force_start) assert(t->tht_status != TRANSPORT_RUNNING); - if(t->tht_start_feed(t, weight, TRANSPORT_RUNNING, force_start)) - return -1; - + t->tht_feed_status = TRANSPORT_FEED_UNKNOWN; + t->tht_input_status = TRANSPORT_FEED_NO_INPUT; t->tht_dts_start = AV_NOPTS_VALUE; t->tht_pcr_drift = 0; + if(t->tht_start_feed(t, weight, force_start)) + return -1; + + pthread_mutex_lock(&t->tht_stream_mutex); + + t->tht_status = TRANSPORT_RUNNING; + /** * Initialize stream */ LIST_FOREACH(st, &t->tht_components, st_link) stream_init(st); + pthread_mutex_unlock(&t->tht_stream_mutex); + cwc_transport_start(t); capmt_transport_start(t); gtimer_arm(&t->tht_receive_timer, transport_data_timeout, t, 10); - t->tht_feed_status = TRANSPORT_FEED_UNKNOWN; - t->tht_input_status = TRANSPORT_FEED_NO_INPUT; return 0; } diff --git a/src/tvhead.h b/src/tvhead.h index d7e1a0b7..bff99fd4 100644 --- a/src/tvhead.h +++ b/src/tvhead.h @@ -470,7 +470,7 @@ typedef struct th_transport { LIST_HEAD(, th_subscription) tht_subscriptions; int (*tht_start_feed)(struct th_transport *t, unsigned int weight, - int status, int force_start); + int force_start); void (*tht_refresh_feed)(struct th_transport *t); diff --git a/src/v4l.c b/src/v4l.c index 041c68d2..29e3f9bf 100644 --- a/src/v4l.c +++ b/src/v4l.c @@ -164,8 +164,7 @@ v4l_thread(void *aux) * */ static int -v4l_transport_start(th_transport_t *t, unsigned int weight, int status, - int force_start) +v4l_transport_start(th_transport_t *t, unsigned int weight, int force_start) { v4l_adapter_t *va = t->tht_v4l_adapter; int frequency = t->tht_v4l_frequency; @@ -219,7 +218,6 @@ v4l_transport_start(th_transport_t *t, unsigned int weight, int status, va->va_fd = fd; va->va_current_transport = t; - t->tht_status = status; pthread_create(&va->va_thread, NULL, v4l_thread, va); v4l_adapter_notify(va); return 0; @@ -257,7 +255,6 @@ v4l_transport_stop(th_transport_t *t) close(va->va_fd); va->va_current_transport = NULL; - t->tht_status = TRANSPORT_IDLE; v4l_adapter_notify(va); }