]> git.ipfire.org Git - thirdparty/tvheadend.git/commitdiff
DVR: change 'warming up' behaviour - do not save anything before real time (start...
authorJaroslav Kysela <perex@perex.cz>
Tue, 24 Nov 2015 17:02:25 +0000 (18:02 +0100)
committerJaroslav Kysela <perex@perex.cz>
Tue, 24 Nov 2015 17:04:20 +0000 (18:04 +0100)
src/dvr/dvr.h
src/dvr/dvr_db.c
src/dvr/dvr_rec.c
src/webui/simpleui.c
src/webui/webui.c

index b3b86b01fe880d79d5ae77db282150256e35b9ba..af97401a75740d9b62c2794278afbb81d764c8eb 100644 (file)
@@ -439,7 +439,7 @@ uint32_t dvr_entry_get_rerecord_errors( dvr_entry_t *de );
 
 int dvr_entry_get_epg_running( dvr_entry_t *de );
 
-time_t dvr_entry_get_start_time( dvr_entry_t *de );
+time_t dvr_entry_get_start_time( dvr_entry_t *de, int warm );
 
 time_t dvr_entry_get_stop_time( dvr_entry_t *de );
 
index 311ff71522e3f31eef9a31ddacac156e7e1dcf1b..729dfdc0002da6532c5d962138324da962acd414 100644 (file)
@@ -212,10 +212,10 @@ dvr_entry_warm_time( dvr_entry_t *de )
 }
 
 time_t
-dvr_entry_get_start_time( dvr_entry_t *de )
+dvr_entry_get_start_time( dvr_entry_t *de, int warm )
 {
   return de->de_start - (60 * dvr_entry_get_extra_time_pre(de)) -
-         dvr_entry_warm_time(de);
+         (warm ? dvr_entry_warm_time(de) : 0);
 }
 
 time_t
@@ -313,7 +313,7 @@ dvr_dbus_timer_cb( void *aux )
   LIST_FOREACH(de, &dvrentries, de_global_link) {
     if (de->de_sched_state != DVR_SCHEDULED)
       continue;
-    start = dvr_entry_get_start_time(de);
+    start = dvr_entry_get_start_time(de, 1);
     if (dispatch_clock < start && start > max)
       max = start;
   }
@@ -322,7 +322,7 @@ dvr_dbus_timer_cb( void *aux )
   LIST_FOREACH(de, &dvrentries, de_global_link) {
     if (de->de_sched_state != DVR_SCHEDULED)
       continue;
-    start = dvr_entry_get_start_time(de);
+    start = dvr_entry_get_start_time(de, 1);
     if (dispatch_clock < start && start < result)
       result = start;
   }
@@ -544,7 +544,7 @@ dvr_entry_set_timer(dvr_entry_t *de)
 
   time(&now);
 
-  start = dvr_entry_get_start_time(de);
+  start = dvr_entry_get_start_time(de, 1);
   stop  = dvr_entry_get_stop_time(de);
 
   if (now >= stop || de->de_dont_reschedule) {
@@ -809,7 +809,7 @@ dvr_entry_create_(int enabled, const char *config_uuid, epg_broadcast_t *e,
   if (de == NULL)
     return NULL;
 
-  t = dvr_entry_get_start_time(de);
+  t = dvr_entry_get_start_time(de, 1);
   localtime_r(&t, &tm);
   if (strftime(tbuf, sizeof(tbuf), "%F %T", &tm) <= 0)
     *tbuf = 0;
@@ -1652,7 +1652,7 @@ void dvr_event_running(epg_broadcast_t *e, epg_source_t esrc, epg_running_t runn
                  channel_get_name(e->channel));
         atomic_exchange_time_t(&de->de_running_start, dispatch_clock);
       }
-      if (dvr_entry_get_start_time(de) > dispatch_clock) {
+      if (dvr_entry_get_start_time(de, 1) > dispatch_clock) {
         atomic_exchange_time_t(&de->de_start, dispatch_clock);
         dvr_entry_set_timer(de);
         tvhdebug("dvr", "dvr entry %s event %s on %s - EPG start",
@@ -2465,7 +2465,7 @@ dvr_entry_class_start_real_get(void *o)
 {
   static time_t tm;
   dvr_entry_t *de = (dvr_entry_t *)o;
-  tm = dvr_entry_get_start_time(de);
+  tm = dvr_entry_get_start_time(de, 1);
   return &tm;
 }
 
@@ -2484,7 +2484,7 @@ dvr_entry_class_duration_get(void *o)
   static time_t tm;
   time_t start, stop;
   dvr_entry_t *de = (dvr_entry_t *)o;
-  start = dvr_entry_get_start_time(de);
+  start = dvr_entry_get_start_time(de, 0);
   stop  = dvr_entry_get_stop_time(de);
   if (stop > start)
     tm = stop - start;
@@ -3051,7 +3051,7 @@ dvr_entry_delete(dvr_entry_t *de, int no_missed_time_resched)
   char tbuf[64], *rdir, *postcmd;
   int r;
 
-  t = dvr_entry_get_start_time(de);
+  t = dvr_entry_get_start_time(de, 1);
   localtime_r(&t, &tm);
   if (strftime(tbuf, sizeof(tbuf), "%F %T", &tm) <= 0)
     *tbuf = 0;
index 136e6e55506f70af8d9e1b2c93b3f288413eae94..ce0449c19d30a403965d727d7b38b7a44f0df832 100644 (file)
@@ -361,7 +361,7 @@ static const char *
 dvr_sub_start(const char *id, const void *aux, char *tmp, size_t tmplen)
 {
   char buf[16];
-  snprintf(buf, sizeof(buf), "%"PRItime_t, (time_t)dvr_entry_get_start_time((dvr_entry_t *)aux));
+  snprintf(buf, sizeof(buf), "%"PRItime_t, (time_t)dvr_entry_get_start_time((dvr_entry_t *)aux, 0));
   return dvr_do_prefix(id, buf, tmp, tmplen);
 }
 
@@ -1212,7 +1212,7 @@ dvr_thread(void *aux)
   int commercial = COMMERCIAL_UNKNOWN;
   int running_disabled;
   int64_t packets = 0, dts_offset = PTS_UNSET;
-  time_t start_time = 0, running_start = 0, running_stop = 0;
+  time_t real_start, start_time = 0, running_start = 0, running_stop = 0;
   char *postproc;
 
   if (!dvr_thread_global_lock(de, &run))
@@ -1220,6 +1220,7 @@ dvr_thread(void *aux)
   comm_skip = de->de_config->dvr_skip_commercials;
   postproc  = de->de_config->dvr_postproc ? strdup(de->de_config->dvr_postproc) : NULL;
   running_disabled = dvr_entry_get_epg_running(de) <= 0;
+  real_start = dvr_entry_get_start_time(de, 0);
   dvr_thread_global_unlock(de);
 
   TAILQ_INIT(&backlog);
@@ -1234,7 +1235,7 @@ dvr_thread(void *aux)
     streaming_queue_remove(sq, sm);
 
     if (running_disabled) {
-      epg_running = 1;
+      epg_running = real_start <= dispatch_clock;
     } else if (sm->sm_type == SMT_PACKET || sm->sm_type == SMT_MPEGTS) {
       running_start = atomic_add_time_t(&de->de_running_start, 0);
       running_stop  = atomic_add_time_t(&de->de_running_stop,  0);
@@ -1249,7 +1250,7 @@ dvr_thread(void *aux)
         } else {
           if (TAILQ_FIRST(&backlog))
             streaming_queue_clear(&backlog);
-          epg_running = 1;
+          epg_running = real_start <= dispatch_clock;
         }
       } else {
         epg_running = 0;
index 14ad9e605a5a6e2a7a4febefdd8ffd8294de1209..2134dd81ad384d198c639243c1a19edb891a656a 100644 (file)
@@ -531,7 +531,7 @@ page_status(http_connection_t *hc,
 
     if (DVR_SCHEDULED == de->de_sched_state)
     {
-      timelefttemp = (int) ((dvr_entry_get_start_time(de) - now) / 60); // output minutes
+      timelefttemp = (int) ((dvr_entry_get_start_time(de, 0) - now) / 60); // output minutes
       if (timelefttemp < timeleft)
         timeleft = timelefttemp;
     }
index f9630b096b180294e458ac47202215825fa7bc90..63a34daef6b4c425cf945feb213a152fd380385f 100644 (file)
@@ -853,7 +853,7 @@ http_dvr_list_playlist(http_connection_t *hc, int pltype)
         http_access_verify_channel(hc, ACCESS_RECORDER, de->de_channel))
       continue;
 
-    durration  = dvr_entry_get_stop_time(de) - dvr_entry_get_start_time(de);
+    durration  = dvr_entry_get_stop_time(de) - dvr_entry_get_start_time(de, 0);
     bandwidth = ((8*fsize) / (durration*1024.0));
     strftime(buf, sizeof(buf), "%FT%T%z", localtime_r(&(de->de_start), &tm));
 
@@ -898,7 +898,7 @@ http_dvr_playlist(http_connection_t *hc, int pltype, dvr_entry_t *de)
     return HTTP_STATUS_NOT_FOUND;
 
   hostpath  = http_get_hostpath(hc);
-  durration  = dvr_entry_get_stop_time(de) - dvr_entry_get_start_time(de);
+  durration  = dvr_entry_get_stop_time(de) - dvr_entry_get_start_time(de, 0);
   fsize = dvr_get_filesize(de);
 
   if(fsize) {