Skip to content

Commit 9d69939

Browse files
committed
fixed bug where record duration settings in seconds was not correctly applying time start offset.
1 parent e6f2c7f commit 9d69939

File tree

5 files changed

+23
-6
lines changed

5 files changed

+23
-6
lines changed

source/FrameRecorder/Core/Engine/Recorder.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -96,7 +96,7 @@ public virtual void PrepareNewFrame(RecordingSession ctx)
9696

9797
public virtual bool SkipFrame(RecordingSession ctx)
9898
{
99-
return !recording || (ctx.m_FrameIndex % settings.m_CaptureEveryNthFrame) != 0;
99+
return !recording || (ctx.m_FrameIndex % settings.m_CaptureEveryNthFrame) != 0 || ctx.m_CurrentFrameStartTS < settings.m_StartTime;
100100
}
101101

102102
public bool recording { get; protected set; }

source/FrameRecorder/Core/Engine/RecorderComponent.cs

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ public void Update()
1919
{
2020
if (session != null && session.recording)
2121
{
22-
session.m_CurrentFrameStartTS = (Time.time / Time.timeScale) - session.m_RecordingStartTS;
22+
session.m_CurrentFrameStartTS = Time.unscaledTime - session.m_RecordingStartTS;
2323
session.m_FrameIndex++;
2424

2525
session.PrepareNewFrame();
@@ -45,9 +45,20 @@ IEnumerator RecordFrame()
4545
enabled = false;
4646
break;
4747
case DurationMode.TimeInterval:
48+
{
49+
if (session.settings.m_FrameRateMode == FrameRateMode.Variable)
50+
{
4851
if (session.m_CurrentFrameStartTS >= session.settings.m_EndTime)
4952
enabled = false;
53+
}
54+
else
55+
{
56+
var expectedFrames = (session.settings.m_EndTime - session.settings.m_StartTime) * session.settings.m_FrameRate;
57+
if (session.RecordedFrameSpan >= expectedFrames)
58+
enabled = false;
59+
}
5060
break;
61+
}
5162
}
5263
}
5364
}

source/FrameRecorder/Core/Engine/RecordingSession.cs

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,18 +15,24 @@ public class RecordingSession : IDisposable
1515
public int m_FrameIndex; // count starts at 0.
1616
public double m_CurrentFrameStartTS;
1717
public double m_RecordingStartTS;
18-
1918
int m_InitialFrame = 0;
19+
int m_FirstRecordedFrameCount = -1;
2020
float m_FPSTimeStart;
21-
2221
float m_FPSNextTimeStart;
2322
int m_FPSNextFrameCount;
2423

2524
public RecorderSettings settings { get { return m_Recorder.settings; } }
2625
public bool recording { get { return m_Recorder.recording; } }
2726

27+
public int RecordedFrameSpan
28+
{
29+
get { return m_FirstRecordedFrameCount == -1 ? 0 : Time.renderedFrameCount - m_FirstRecordedFrameCount; }
30+
}
31+
2832
public bool BeginRecording()
2933
{
34+
m_RecordingStartTS = Time.unscaledTime;
35+
3036
if (!m_Recorder.BeginRecording(this))
3137
return false;
3238
m_InitialFrame = Time.renderedFrameCount;
@@ -49,6 +55,8 @@ public void RecordFrame()
4955
{
5056
m_Recorder.RecordFrame(this);
5157
m_Recorder.recordedFramesCount++;
58+
if (m_Recorder.recordedFramesCount == 1)
59+
m_FirstRecordedFrameCount = Time.renderedFrameCount;
5260
}
5361
m_Recorder.SignalSourcesOfStage(ERecordingSessionStage.FrameDone, this);
5462

source/FrameRecorder/Core/Engine/Timeline/FrameRecorderClip.cs

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,6 @@ public override Playable CreatePlayable(PlayableGraph graph, GameObject owner)
3535
{
3636
m_Recorder = RecordersInventory.GenerateNewRecorder(recorderType, m_Settings),
3737
m_RecorderGO = FrameRecorderGOControler.HookupRecorder(),
38-
m_RecordingStartTS = Time.unscaledTime,
3938
m_FrameIndex = 0
4039
};
4140
}

source/FrameRecorder/Core/Engine/Timeline/RecorderPlayableBehaviour.cs

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -65,7 +65,6 @@ public override void OnBehaviourPlay(Playable playable, FrameData info)
6565
return;
6666

6767
// Assumption: OnPlayStateChanged( PlayState.Playing ) ONLY EVER CALLED ONCE for this type of playable.
68-
session.m_RecordingStartTS = Time.unscaledTime;
6968
m_PlayState = PlayState.Playing;
7069
}
7170

0 commit comments

Comments
 (0)