Bug 1332619 - Fix missed duration when skipping a frame in VP8TrackEncoder. r?jesup
MozReview-Commit-ID: GpXUHfUj5v2
--- a/dom/media/encoder/VP8TrackEncoder.cpp
+++ b/dom/media/encoder/VP8TrackEncoder.cpp
@@ -548,21 +548,25 @@ VP8TrackEncoder::GetEncodedTrack(Encoded
VPX_DL_REALTIME)) {
return NS_ERROR_FAILURE;
}
// Get the encoded data from VP8 encoder.
GetEncodedPartitions(aData);
} else {
// SKIP_FRAME
// Extend the duration of the last encoded data in aData
- // because this frame will be skip.
+ // because this frame will be skipped.
VP8LOG(LogLevel::Warning, "MediaRecorder lagging behind. Skipping a frame.");
RefPtr<EncodedFrame> last = aData.GetEncodedFrames().LastElement();
if (last) {
- last->SetDuration(last->GetDuration() + chunk.GetDuration());
+ CheckedInt64 skippedDuration = FramesToUsecs(chunk.mDuration, mTrackRate);
+ if (skippedDuration.isValid() && skippedDuration.value() > 0) {
+ last->SetDuration(last->GetDuration() +
+ (static_cast<uint64_t>(skippedDuration.value())));
+ }
}
}
// Move forward the mEncodedTimestamp.
mEncodedTimestamp += chunk.GetDuration();
totalProcessedDuration += chunk.GetDuration();
// Check what to do next.