]> git.ipfire.org Git - thirdparty/tvheadend.git/commitdiff
try to handle reconfiguration fo sources properly
authorJohn Törnblom <john.tornblom@gmail.com>
Wed, 24 Oct 2012 13:44:42 +0000 (15:44 +0200)
committerJohn Törnblom <john.tornblom@gmail.com>
Wed, 24 Oct 2012 13:44:42 +0000 (15:44 +0200)
src/dvr/dvr_rec.c
src/webui/webui.c

index ffe430113274f5c540a152376dd377298e3f5019..ba5c8cb96da7ef7723e2f5198d74fc0f011009d0 100755 (executable)
@@ -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);
 
index a4c084b3b5de7a34ee11feb523710bcb98927470..85936146493c38233bd77f4080357ee7f272bde0 100644 (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;