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 );
}
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
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;
}
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;
}
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) {
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;
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",
{
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;
}
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;
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;
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);
}
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))
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);
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);
} else {
if (TAILQ_FIRST(&backlog))
streaming_queue_clear(&backlog);
- epg_running = 1;
+ epg_running = real_start <= dispatch_clock;
}
} else {
epg_running = 0;
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;
}
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));
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) {