try to handle reconfiguration fo sources properly

This commit is contained in:
John Törnblom 2012-10-24 15:44:42 +02:00
parent 0cbaa02441
commit 83a631e6d8
2 changed files with 31 additions and 21 deletions

View file

@ -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 ? "<disabled, no valid input>" : "");
}
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);

View file

@ -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;