mirror of
https://github.com/VDR4Arch/vdr.git
synced 2023-10-10 13:36:52 +02:00
Now making sure that spawned timers with reduced start/stop margins actually record with the full margins
This commit is contained in:
parent
b2fb654bb3
commit
3d13eb002f
4
HISTORY
4
HISTORY
@ -9641,7 +9641,7 @@ Video Disk Recorder Revision History
|
|||||||
- No longer switching devices for pattern timers (thanks to Helmut Binder).
|
- No longer switching devices for pattern timers (thanks to Helmut Binder).
|
||||||
- cTimer::TriggerRespawn() now only acts on local timers.
|
- cTimer::TriggerRespawn() now only acts on local timers.
|
||||||
|
|
||||||
2021-04-13:
|
2021-04-16:
|
||||||
|
|
||||||
- When spawning pattern timers, the new function cTimers::GetTimerForEvent() is now used
|
- When spawning pattern timers, the new function cTimers::GetTimerForEvent() is now used
|
||||||
to check whether a matching event already has a local spawned timer. Reason: creating a timer
|
to check whether a matching event already has a local spawned timer. Reason: creating a timer
|
||||||
@ -9654,3 +9654,5 @@ Video Disk Recorder Revision History
|
|||||||
- Fixed dropping outdated events.
|
- Fixed dropping outdated events.
|
||||||
- To avoid problems with very short events, non-VPS pattern timers now spawn timers for all
|
- To avoid problems with very short events, non-VPS pattern timers now spawn timers for all
|
||||||
matching events that would start while the first one is still recording.
|
matching events that would start while the first one is still recording.
|
||||||
|
- Now making sure that spawned timers with reduced start/stop margins actually record with
|
||||||
|
the full margins.
|
||||||
|
3
MANUAL
3
MANUAL
@ -556,6 +556,9 @@ The following rules apply to pattern timers:
|
|||||||
- Recording is done according to the event's begin/end times, either
|
- Recording is done according to the event's begin/end times, either
|
||||||
by adding the start/stop margins (for non-VPS timers) or by using the
|
by adding the start/stop margins (for non-VPS timers) or by using the
|
||||||
event's running status (for VPS timers).
|
event's running status (for VPS timers).
|
||||||
|
- If the start/stop margins of a spawned timer are reduced because the event
|
||||||
|
before and/or after that timer's event is shorter than the respective margin,
|
||||||
|
the actual recording still uses the full margins.
|
||||||
- If the times of the event change, a non-VPS pattern timer automatically adjusts
|
- If the times of the event change, a non-VPS pattern timer automatically adjusts
|
||||||
itself to the new times. This also happens if the start/stop margins are changed
|
itself to the new times. This also happens if the start/stop margins are changed
|
||||||
in the setup.
|
in the setup.
|
||||||
|
31
timers.c
31
timers.c
@ -4,7 +4,7 @@
|
|||||||
* See the main source file 'vdr.c' for copyright information and
|
* See the main source file 'vdr.c' for copyright information and
|
||||||
* how to reach the author.
|
* how to reach the author.
|
||||||
*
|
*
|
||||||
* $Id: timers.c 5.12 2021/04/13 13:54:00 kls Exp $
|
* $Id: timers.c 5.13 2021/04/16 16:26:47 kls Exp $
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "timers.h"
|
#include "timers.h"
|
||||||
@ -604,14 +604,27 @@ bool cTimer::Matches(time_t t, bool Directly, int Margin) const
|
|||||||
deferred = 0;
|
deferred = 0;
|
||||||
|
|
||||||
if (HasFlags(tfActive)) {
|
if (HasFlags(tfActive)) {
|
||||||
if (HasFlags(tfVps) && event && event->Vps()) {
|
if (event) {
|
||||||
if (Margin || !Directly) {
|
if (HasFlags(tfVps)) {
|
||||||
startTime = event->StartTime();
|
if (event->Vps()) {
|
||||||
stopTime = event->EndTime();
|
if (Margin || !Directly) {
|
||||||
if (!Margin) { // this is an actual check
|
startTime = event->StartTime();
|
||||||
if (event->Schedule()->PresentSeenWithin(EITPRESENTFOLLOWINGRATE)) // VPS control can only work with up-to-date events...
|
stopTime = event->EndTime();
|
||||||
return event->IsRunning(true);
|
if (!Margin) { // this is an actual check
|
||||||
return startTime <= t && t < stopTime; // ...otherwise we fall back to normal timer handling
|
if (event->Schedule()->PresentSeenWithin(EITPRESENTFOLLOWINGRATE)) // VPS control can only work with up-to-date events...
|
||||||
|
return event->IsRunning(true);
|
||||||
|
// ...otherwise we fall back to normal timer handling below (note: Margin == 0!)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if (HasFlags(tfSpawned)) {
|
||||||
|
if (!Margin && !Directly) { // this is an actual check
|
||||||
|
// The spawned timer's start-/stopTimes are adjusted to the event's times in AdjustSpawnedTimer().
|
||||||
|
// However, in order to make sure the timer is set to the correct event, the margins at begin
|
||||||
|
// end end are limited by the durations of the events before and after this timer's event.
|
||||||
|
// The recording, though, shall always use the full start/stop margins, hence this calculation:
|
||||||
|
return event->StartTime() - Setup.MarginStart * 60 <= t && t < event->EndTime() + Setup.MarginStop * 60;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user