From 83a631e6d85833d35f3d7c1b358ac5b252a2257e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?John=20T=C3=B6rnblom?= Date: Wed, 24 Oct 2012 15:44:42 +0200 Subject: [PATCH] try to handle reconfiguration fo sources properly --- src/dvr/dvr_rec.c | 35 +++++++++++++++++++++-------------- src/webui/webui.c | 17 ++++++++++------- 2 files changed, 31 insertions(+), 21 deletions(-) diff --git a/src/dvr/dvr_rec.c b/src/dvr/dvr_rec.c index ffe43011..ba5c8cb9 100755 --- a/src/dvr/dvr_rec.c +++ b/src/dvr/dvr_rec.c @@ -319,7 +319,7 @@ dvr_rec_set_state(dvr_entry_t *de, dvr_rs_state_t newstate, int error) /** * */ -static void +static int dvr_rec_start(dvr_entry_t *de, const streaming_start_t *ss) { const source_info_t *si = &ss->ss_si; @@ -330,28 +330,28 @@ dvr_rec_start(dvr_entry_t *de, const streaming_start_t *ss) de->de_mux = muxer_create(de->de_mc); if(!de->de_mux) { dvr_rec_fatal_error(de, "Unable to create muxer"); - return; + return -1; } if(pvr_generate_filename(de, ss) != 0) { dvr_rec_fatal_error(de, "Unable to create directories"); - return; + return -1; } if(muxer_open_file(de->de_mux, de->de_filename)) { dvr_rec_fatal_error(de, "Unable to open file"); - return; + return -1; } if(muxer_init(de->de_mux, ss, lang_str_get(de->de_title, NULL))) { dvr_rec_fatal_error(de, "Unable to init file"); - return; + return -1; } if(cfg->dvr_flags & DVR_TAG_FILES) { if(muxer_write_meta(de->de_mux, de->de_bcast)) { dvr_rec_fatal_error(de, "Unable to write meta data"); - return; + return -1; } } @@ -412,6 +412,8 @@ dvr_rec_start(dvr_entry_t *de, const streaming_start_t *ss) ch, ssc->ssc_disabled ? "" : ""); } + + return 0; } @@ -425,6 +427,7 @@ dvr_thread(void *aux) streaming_queue_t *sq = &de->de_sq; streaming_message_t *sm; int run = 1; + int started = 0; pthread_mutex_lock(&sq->sq_mutex); @@ -451,10 +454,17 @@ dvr_thread(void *aux) break; case SMT_START: - pthread_mutex_lock(&global_lock); - dvr_rec_set_state(de, DVR_RS_WAIT_PROGRAM_START, 0); - dvr_rec_start(de, sm->sm_data); - pthread_mutex_unlock(&global_lock); + if(!started) { + pthread_mutex_lock(&global_lock); + dvr_rec_set_state(de, DVR_RS_WAIT_PROGRAM_START, 0); + if(dvr_rec_start(de, sm->sm_data) == 0) + started = 1; + pthread_mutex_unlock(&global_lock); + } else if(muxer_reconfigure(de->de_mux, sm->sm_data) < 0) { + tvhlog(LOG_WARNING, + "dvr", "Unable to reconfigure the recording \"%s\"", + de->de_filename ?: lang_str_get(de->de_title, NULL)); + } break; case SMT_STOP: @@ -468,10 +478,7 @@ dvr_thread(void *aux) "dvr", "Recording completed: \"%s\"", de->de_filename ?: lang_str_get(de->de_title, NULL)); - } else if(sm->sm_code == SM_CODE_SOURCE_RECONFIGURED) { - muxer_reconfigure(de->de_mux, sm->sm_data); - } else { - + } else if(sm->sm_code != SM_CODE_SOURCE_RECONFIGURED) { if(de->de_last_error != sm->sm_code) { dvr_rec_set_state(de, DVR_RS_ERROR, sm->sm_code); diff --git a/src/webui/webui.c b/src/webui/webui.c index a4c084b3..85936146 100644 --- a/src/webui/webui.c +++ b/src/webui/webui.c @@ -204,18 +204,21 @@ http_stream_run(http_connection_t *hc, streaming_queue_t *sq, break; case SMT_START: - tvhlog(LOG_DEBUG, "webui", "Start streaming %s", hc->hc_url_orig); + if(!started) { + tvhlog(LOG_DEBUG, "webui", "Start streaming %s", hc->hc_url_orig); + http_output_content(hc, muxer_mime(mux, sm->sm_data)); - http_output_content(hc, muxer_mime(mux, sm->sm_data)); - muxer_init(mux, sm->sm_data, name); + if(muxer_init(mux, sm->sm_data, name) < 0) + run = 0; - started = 1; + started = 1; + } else if(muxer_reconfigure(mux, sm->sm_data) < 0) { + tvhlog(LOG_WARNING, "webui", "Unable to reconfigure stream %s", hc->hc_url_orig); + } break; case SMT_STOP: - if(sm->sm_code == SM_CODE_SOURCE_RECONFIGURED) { - muxer_reconfigure(mux, sm->sm_data); - } else { + if(sm->sm_code != SM_CODE_SOURCE_RECONFIGURED) { tvhlog(LOG_WARNING, "webui", "Stop streaming %s, %s", hc->hc_url_orig, streaming_code2txt(sm->sm_code)); run = 0;