static void
mpegts_mux_sched_set_timer ( mpegts_mux_sched_t *mms )
{
- /* Upate timer */
+ /* Update timer */
if (!mms->mms_enabled) {
if (mms->mms_sub)
subscription_unsubscribe(mms->mms_sub, UNSUBSCRIBE_FINAL);
mms->mms_timeout);
}
} else {
- time_t now, nxt;
- time(&now);
- if (!cron_next(&mms->mms_cronjob, now, &nxt)) {
+ time_t nxt;
+ if (!cron_next(&mms->mms_cronjob, gclk(), &nxt)) {
+ mms->mms_start = nxt;
gtimer_arm_absn(&mms->mms_timer, mpegts_mux_sched_timer, mms, nxt);
}
}
.type = PT_STR,
.id = "cron",
.name = N_("Cron"),
- .desc = N_("Schedule frequency (in Cron format)."),
+ .desc = N_("Schedule frequency (in cron format)."),
.doc = prop_doc_cron,
.off = offsetof(mpegts_mux_sched_t, mms_cronstr),
.set = mpegts_mux_sched_class_cron_set,
{
.type = PT_INT,
.id = "timeout",
- .name = N_("Timout (secs)"),
+ .name = N_("Timeout (secs)"),
.desc = N_("The length of time (in seconds) to play the mux "
- "for. 1 hour = 3600."),
+ "(1 hour = 3600)."),
.off = offsetof(mpegts_mux_sched_t, mms_timeout),
},
+ {
+ .type = PT_BOOL,
+ .id = "restart",
+ .name = N_("Restart"),
+ .desc = N_("Restart when the subscription is overriden (in then timeout time window)."),
+ .off = offsetof(mpegts_mux_sched_t, mms_restart),
+ },
{
},
}
{
mpegts_mux_t *mm;
mpegts_mux_sched_t *mms = p;
- time_t now, nxt;
+ time_t nxt;
/* Not enabled (shouldn't be running) */
if (!mms->mms_enabled)
return;
}
- /* Current time */
- time(&now);
-
/* Start sub */
if (!mms->mms_active) {
assert(mms->mms_sub == NULL);
}
mms->mms_active = 0;
+ if (mms->mms_restart &&
+ (mms->mms_timeout <= 0 ||
+ mms->mms_start + mms->mms_timeout < gclk() - 60)) {
+ gtimer_arm_rel(&mms->mms_timer, mpegts_mux_sched_timer, mms, 15);
+ return;
+ }
+
/* Find next */
- if (cron_next(&mms->mms_cronjob, now, &nxt)) {
+ if (cron_next(&mms->mms_cronjob, gclk(), &nxt)) {
tvherror(LS_MUXSCHED, "failed to find next event");
return;
}
/* Timer */
+ mms->mms_start = nxt;
gtimer_arm_absn(&mms->mms_timer, mpegts_mux_sched_timer, mms, nxt);
}
}
char *mms_mux; ///< Mux UUID
char *mms_creator; ///< Creator of entry
int mms_timeout; ///< Timeout (in seconds)
+ int mms_restart; ///< Restart subscription when overriden
int mms_weight; ///< Weighting
/*
* Cron handling
*/
int mms_active; ///< Subscription is active
+ time_t mms_start; ///< Start time
gtimer_t mms_timer; ///< Timer for start/end
cron_t mms_cronjob; ///< Cron spec