···121121 {
122122 // if at the end of the stream but our playback enters a valid time region again, a seek operation is required to get the decoder back on track.
123123 if (PlaybackPosition < decoder.Duration)
124124- {
125125- decoder.Seek(PlaybackPosition);
126126- availableFrames.Clear();
127127- }
124124+ seekIntoSync();
128125 }
129126130127 var nextFrame = availableFrames.Count > 0 ? availableFrames.Peek() : null;
···141138 if (tooFarBehind && decoder.CanSeek)
142139 {
143140 Logger.Log($"Video too far out of sync ({nextFrame.Time}), seeking to {PlaybackPosition}");
144144- decoder.Seek(PlaybackPosition);
145145- decoder.ReturnFrames(availableFrames);
146146- availableFrames.Clear();
141141+ seekIntoSync();
147142 }
148143 }
149144···174169175170 if (frameTime != CurrentFrameTime)
176171 FramesProcessed++;
172172+173173+ void seekIntoSync()
174174+ {
175175+ decoder.Seek(PlaybackPosition);
176176+ decoder.ReturnFrames(availableFrames);
177177+ availableFrames.Clear();
178178+ }
177179 }
178180179181 private bool checkNextFrameValid(DecodedFrame frame)