diff --git a/src/modules/video_capture/main/source/video_capture_impl.cc b/src/modules/video_capture/main/source/video_capture_impl.cc index 6530245cc0..d034fac363 100644 --- a/src/modules/video_capture/main/source/video_capture_impl.cc +++ b/src/modules/video_capture/main/source/video_capture_impl.cc @@ -168,7 +168,8 @@ VideoCaptureImpl::VideoCaptureImpl(const WebRtc_Word32 id) _lastFrameRateCallbackTime(TickTime::Now()), _frameRateCallBack(false), _noPictureAlarmCallBack(false), _captureAlarm(Cleared), _setCaptureDelay(0), _dataCallBack(NULL), _captureCallBack(NULL), _startImageFrameIntervall(0), - _lastProcessFrameCount(TickTime::Now()), _rotateFrame(kRotateNone) + _lastProcessFrameCount(TickTime::Now()), _rotateFrame(kRotateNone), + last_capture_time_(TickTime::MillisecondTimestamp()) { _requestedCapability.width = kDefaultWidth; @@ -266,6 +267,12 @@ WebRtc_Word32 VideoCaptureImpl::DeliverCapturedFrame(VideoFrame& captureFrame, captureFrame.SetRenderTime(TickTime::MillisecondTimestamp()); } + if (captureFrame.RenderTimeMs() == last_capture_time_) { + // We don't allow the same capture time for two frames, drop this one. + return -1; + } + last_capture_time_ = captureFrame.RenderTimeMs(); + captureFrame.SetHeight(height); captureFrame.SetWidth(width); diff --git a/src/modules/video_capture/main/source/video_capture_impl.h b/src/modules/video_capture/main/source/video_capture_impl.h index 7057f1d0d6..6bd7b2d74c 100644 --- a/src/modules/video_capture/main/source/video_capture_impl.h +++ b/src/modules/video_capture/main/source/video_capture_impl.h @@ -144,6 +144,9 @@ private: VideoRotationMode _rotateFrame; //Set if the frame should be rotated by the capture module. VideoFrame _captureFrame; + + // Used to make sure incoming timestamp is increasing for every frame. + WebRtc_Word64 last_capture_time_; }; } // namespace videocapturemodule } //namespace webrtc