Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(50)

Unified Diff: content/renderer/media/video_track_adapter.cc

Issue 516783002: Drop back to back frames in VideoFrameResolutionAdapter::MaybeDropFrame. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Addressed nits Created 6 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « no previous file | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: content/renderer/media/video_track_adapter.cc
diff --git a/content/renderer/media/video_track_adapter.cc b/content/renderer/media/video_track_adapter.cc
index ebb47ba9f86b3f0fd4c3d70329706f435ddeff80..3f61a429c46968697e095d9d91b227ac2cdb25ea 100644
--- a/content/renderer/media/video_track_adapter.cc
+++ b/content/renderer/media/video_track_adapter.cc
@@ -24,6 +24,10 @@ namespace {
const float kFirstFrameTimeoutInFrameIntervals = 100.0f;
const float kNormalFrameTimeoutInFrameIntervals = 25.0f;
+// Min delta time between two frames allowed without being dropped if a max
+// frame rate is specified.
+const int kMinTimeInMsBetweenFrames = 5;
+
// Empty method used for keeping a reference to the original media::VideoFrame
// in VideoFrameResolutionAdapter::DeliverFrame if cropping is needed.
// The reference to |frame| is kept in the closure that calls this method.
@@ -225,11 +229,24 @@ bool VideoTrackAdapter::VideoFrameResolutionAdapter::MaybeDropFrame(
return false;
base::TimeDelta delta = frame->timestamp() - last_time_stamp_;
+ if (delta.InMilliseconds() < kMinTimeInMsBetweenFrames) {
+ // We have seen video frames being delivered from camera devices back to
+ // back. The simple AR filter for frame rate calculation is too short to
+ // handle that. http://crbug/394315
+ // TODO(perkj): Can we come up with a way to fix the times stamps and the
+ // timing when frames are delivered so all frames can be used?
+ // The time stamps are generated by Chrome and not the actual device.
+ // Most likely the back to back problem is caused by software and not the
+ // actual camera.
+ DVLOG(3) << "Drop frame since delta time since previous frame is "
+ << delta.InMilliseconds() << "ms.";
+ return true;
+ }
last_time_stamp_ = frame->timestamp();
- if (delta.ToInternalValue() == 0 || delta == last_time_stamp_)
+ if (delta == last_time_stamp_) // First received frame.
return false;
- // Calculate the moving average frame rate. Use a simple filter with 0.1
- // weight of the current sample.
+ // Calculate the frame rate using a simple AR filter.
+ // Use a simple filter with 0.1 weight of the current sample.
frame_rate_ = 100 / delta.InMillisecondsF() + 0.9 * frame_rate_;
// Prefer to not drop frames.
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698