From: Jaroslav Kysela Date: Tue, 11 Dec 2018 09:02:20 +0000 (+0100) Subject: iptv: http - do not clear the input sbuf in the kick callback X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=9776f3044bbe021141dae1a3e956335aa395b966;p=thirdparty%2Ftvheadend.git iptv: http - do not clear the input sbuf in the kick callback --- diff --git a/src/input/mpegts/iptv/iptv.c b/src/input/mpegts/iptv/iptv.c index 2d07b282d..758d47647 100644 --- a/src/input/mpegts/iptv/iptv.c +++ b/src/input/mpegts/iptv/iptv.c @@ -682,10 +682,11 @@ iptv_input_fd_started ( iptv_input_t *mi, iptv_mux_t *im ) } void -iptv_input_mux_started ( iptv_input_t *mi, iptv_mux_t *im ) +iptv_input_mux_started ( iptv_input_t *mi, iptv_mux_t *im, int reset ) { /* Allocate input buffer */ - sbuf_reset_and_alloc(&im->mm_iptv_buffer, IPTV_BUF_SIZE); + if (reset) + sbuf_reset_and_alloc(&im->mm_iptv_buffer, IPTV_BUF_SIZE); im->im_pcr = PTS_UNSET; im->im_pcr_pid = MPEGTS_PID_NONE; diff --git a/src/input/mpegts/iptv/iptv_file.c b/src/input/mpegts/iptv/iptv_file.c index 99089b321..17d6b105a 100644 --- a/src/input/mpegts/iptv/iptv_file.c +++ b/src/input/mpegts/iptv/iptv_file.c @@ -108,7 +108,7 @@ iptv_file_start fp->fd = fd; tvh_cond_init(&fp->cond, 1); im->im_data = fp; - iptv_input_mux_started(mi, im); + iptv_input_mux_started(mi, im, 1); tvh_thread_create(&fp->tid, NULL, iptv_file_thread, im, "iptvfile"); return 0; } diff --git a/src/input/mpegts/iptv/iptv_http.c b/src/input/mpegts/iptv/iptv_http.c index 0f42ed6c6..04ee87892 100644 --- a/src/input/mpegts/iptv/iptv_http.c +++ b/src/input/mpegts/iptv/iptv_http.c @@ -197,7 +197,7 @@ iptv_http_kick_cb( void *aux ) hp->flush = 0; tvh_mutex_lock(&iptv_lock); if (!hp->started) { - iptv_input_mux_started(hp->mi, im); + iptv_input_mux_started(hp->mi, im, 0); } else { iptv_input_recv_flush(im); } @@ -516,6 +516,8 @@ iptv_http_start http_client_t *hc; int r; + sbuf_reset_and_alloc(&im->mm_iptv_buffer, IPTV_BUF_SIZE); + hp = calloc(1, sizeof(*hp)); hp->mi = mi; hp->im = im; diff --git a/src/input/mpegts/iptv/iptv_libav.c b/src/input/mpegts/iptv/iptv_libav.c index 300909060..eceeb2ee1 100644 --- a/src/input/mpegts/iptv/iptv_libav.c +++ b/src/input/mpegts/iptv/iptv_libav.c @@ -188,7 +188,7 @@ iptv_libav_start la->mux = im; tvh_pipe(O_NONBLOCK, &la->pipe); im->mm_iptv_fd = la->pipe.rd; - iptv_input_fd_started(mi, im); + iptv_input_fd_started(mi, im, 1); atomic_set(&la->running, 1); atomic_set(&la->pause, 0); sbuf_init(&la->sbuf); diff --git a/src/input/mpegts/iptv/iptv_pipe.c b/src/input/mpegts/iptv/iptv_pipe.c index a75cc4359..2a5e18790 100644 --- a/src/input/mpegts/iptv/iptv_pipe.c +++ b/src/input/mpegts/iptv/iptv_pipe.c @@ -68,7 +68,7 @@ iptv_pipe_start im->mm_iptv_respawn_last = mclk(); if (url) - iptv_input_mux_started(mi, im); + iptv_input_mux_started(mi, im, 1); return 0; err: diff --git a/src/input/mpegts/iptv/iptv_private.h b/src/input/mpegts/iptv/iptv_private.h index d73b0076b..e6f1d7174 100644 --- a/src/input/mpegts/iptv/iptv_private.h +++ b/src/input/mpegts/iptv/iptv_private.h @@ -61,7 +61,7 @@ struct iptv_input int iptv_input_fd_started ( iptv_input_t *mi, iptv_mux_t *im ); void iptv_input_close_fds ( iptv_input_t *mi, iptv_mux_t *im ); -void iptv_input_mux_started ( iptv_input_t *mi, iptv_mux_t *im ); +void iptv_input_mux_started ( iptv_input_t *mi, iptv_mux_t *im, int reset ); int iptv_input_recv_packets ( iptv_mux_t *im, ssize_t len ); void iptv_input_recv_flush ( iptv_mux_t *im ); void iptv_input_pause_handler ( iptv_input_t *mi, iptv_mux_t *im, int pause ); diff --git a/src/input/mpegts/iptv/iptv_rtsp.c b/src/input/mpegts/iptv/iptv_rtsp.c index 2e411c471..860e64f47 100644 --- a/src/input/mpegts/iptv/iptv_rtsp.c +++ b/src/input/mpegts/iptv/iptv_rtsp.c @@ -113,7 +113,7 @@ iptv_rtsp_header ( http_client_t *hc ) hc->hc_cmd = HTTP_CMD_NONE; tvh_mutex_lock(&global_lock); if (im->mm_active) - iptv_input_mux_started((iptv_input_t *)im->mm_active->mmi_input, im); + iptv_input_mux_started((iptv_input_t *)im->mm_active->mmi_input, im, 1); mtimer_arm_rel(&rp->alive_timer, iptv_rtsp_alive_cb, im, sec2mono(MAX(1, (hc->hc_rtp_timeout / 2) - 1))); tvh_mutex_unlock(&global_lock); diff --git a/src/input/mpegts/iptv/iptv_udp.c b/src/input/mpegts/iptv/iptv_udp.c index e086bda83..fbe0bb589 100644 --- a/src/input/mpegts/iptv/iptv_udp.c +++ b/src/input/mpegts/iptv/iptv_udp.c @@ -55,7 +55,7 @@ iptv_udp_start udp_multirecv_init(um, IPTV_PKTS, IPTV_PKT_PAYLOAD); im->im_data = um; - iptv_input_mux_started(mi, im); + iptv_input_mux_started(mi, im, 1); return 0; }