Add some assertions to debug a crash in video playback.

This commit is contained in:
John Preston 2021-08-20 18:41:48 +03:00
parent b4eb9a0827
commit 3d36e501a1

View file

@ -275,6 +275,7 @@ void VideoTrackObject::readFrames() {
return; return;
} }
auto time = trackTime().trackTime; auto time = trackTime().trackTime;
Assert(1 && time >= kTimeUnknown / 2); // Debugging a crash.
while (true) { while (true) {
const auto result = readEnoughFrames(time); const auto result = readEnoughFrames(time);
v::match(result, [&](FrameResult result) { v::match(result, [&](FrameResult result) {
@ -285,6 +286,7 @@ void VideoTrackObject::readFrames() {
const auto duration = computeDuration(); const auto duration = computeDuration();
Assert(duration != kDurationUnavailable); Assert(duration != kDurationUnavailable);
time -= duration; time -= duration;
Assert(2 && time >= kTimeUnknown / 2); // Debugging a crash.
} }
}, [&](Shared::PrepareNextCheck delay) { }, [&](Shared::PrepareNextCheck delay) {
Expects(delay == kTimeUnknown || delay > 0); Expects(delay == kTimeUnknown || delay > 0);
@ -531,6 +533,8 @@ void VideoTrackObject::setSpeed(float64 speed) {
} }
if (_syncTimePoint.valid()) { if (_syncTimePoint.valid()) {
_syncTimePoint = trackTime(); _syncTimePoint = trackTime();
// Debugging a crash.
Assert(3 && _syncTimePoint.trackTime >= kTimeUnknown / 2);
} }
_options.speed = speed; _options.speed = speed;
} }
@ -618,6 +622,8 @@ bool VideoTrackObject::processFirstFrame() {
if (frame.isNull()) { if (frame.isNull()) {
return false; return false;
} }
// Debugging a crash.
Assert(4 && _syncTimePoint.trackTime >= kTimeUnknown / 2);
_shared->init(std::move(frame), _syncTimePoint.trackTime); _shared->init(std::move(frame), _syncTimePoint.trackTime);
callReady(); callReady();
queueReadFrames(); queueReadFrames();
@ -641,6 +647,8 @@ bool VideoTrackObject::fillStateFromFrame() {
return false; return false;
} }
_syncTimePoint.trackTime = position; _syncTimePoint.trackTime = position;
// Debugging a crash.
Assert(5 && _syncTimePoint.trackTime >= kTimeUnknown / 2);
return true; return true;
} }
@ -667,6 +675,9 @@ void VideoTrackObject::callReady() {
} }
TimePoint VideoTrackObject::trackTime() const { TimePoint VideoTrackObject::trackTime() const {
// Debugging a crash.
Assert(7 && _syncTimePoint.trackTime >= kTimeUnknown / 2);
auto result = TimePoint(); auto result = TimePoint();
result.worldTime = (_pausedTime != kTimeUnknown) result.worldTime = (_pausedTime != kTimeUnknown)
? _pausedTime ? _pausedTime
@ -682,6 +693,8 @@ TimePoint VideoTrackObject::trackTime() const {
const auto point = mixer->getExternalSyncTimePoint(_audioId); const auto point = mixer->getExternalSyncTimePoint(_audioId);
if (point && point.worldTime > _resumedTime) { if (point && point.worldTime > _resumedTime) {
_syncTimePoint = point; _syncTimePoint = point;
// Debugging a crash.
Assert(6 && _syncTimePoint.trackTime >= kTimeUnknown / 2);
} }
} }
const auto adjust = (result.worldTime - _syncTimePoint.worldTime); const auto adjust = (result.worldTime - _syncTimePoint.worldTime);