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

Unified Diff: talk/media/webrtc/webrtcvideoengine2_unittest.cc

Issue 1345473002: Reset frame timestamp epoch for new capturers. (Closed) Base URL: https://chromium.googlesource.com/external/webrtc.git@master
Patch Set: uint32 cast Created 5 years, 3 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 | « talk/media/webrtc/webrtcvideoengine2.cc ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: talk/media/webrtc/webrtcvideoengine2_unittest.cc
diff --git a/talk/media/webrtc/webrtcvideoengine2_unittest.cc b/talk/media/webrtc/webrtcvideoengine2_unittest.cc
index 71581de2e3e85f80d19c1c0e6eadab6c3a8f37ae..52acec40826a50e19fe3ed535f9ff530a4cd678f 100644
--- a/talk/media/webrtc/webrtcvideoengine2_unittest.cc
+++ b/talk/media/webrtc/webrtcvideoengine2_unittest.cc
@@ -440,18 +440,14 @@ TEST_F(WebRtcVideoEngine2Test, PropagatesInputFrameTimestamp) {
cricket::FOURCC_I420));
channel->SetSend(true);
- FakeCall* call = factory.GetCall();
- std::vector<FakeVideoSendStream*> streams = call->GetVideoSendStreams();
- FakeVideoSendStream* stream = streams[0];
+ FakeVideoSendStream* stream = factory.GetCall()->GetVideoSendStreams()[0];
- int64_t timestamp;
- int64_t last_timestamp;
EXPECT_TRUE(capturer.CaptureFrame());
- last_timestamp = stream->GetLastTimestamp();
+ int64_t last_timestamp = stream->GetLastTimestamp();
for (int i = 0; i < 10; i++) {
EXPECT_TRUE(capturer.CaptureFrame());
- timestamp = stream->GetLastTimestamp();
+ int64_t timestamp = stream->GetLastTimestamp();
int64_t interval = timestamp - last_timestamp;
// Precision changes from nanosecond to millisecond.
@@ -469,7 +465,7 @@ TEST_F(WebRtcVideoEngine2Test, PropagatesInputFrameTimestamp) {
last_timestamp = stream->GetLastTimestamp();
for (int i = 0; i < 10; i++) {
EXPECT_TRUE(capturer.CaptureFrame());
- timestamp = stream->GetLastTimestamp();
+ int64_t timestamp = stream->GetLastTimestamp();
int64_t interval = timestamp - last_timestamp;
// Precision changes from nanosecond to millisecond.
@@ -483,6 +479,64 @@ TEST_F(WebRtcVideoEngine2Test, PropagatesInputFrameTimestamp) {
EXPECT_TRUE(channel->RemoveSendStream(kSsrc));
}
+TEST_F(WebRtcVideoEngine2Test,
+ ProducesIncreasingTimestampsWithResetInputSources) {
+ cricket::FakeWebRtcVideoEncoderFactory encoder_factory;
+ encoder_factory.AddSupportedVideoCodecType(webrtc::kVideoCodecVP8, "VP8");
+ std::vector<cricket::VideoCodec> codecs;
+ codecs.push_back(kVp8Codec);
+
+ FakeCallFactory factory;
+ engine_.SetCallFactory(&factory);
+ rtc::scoped_ptr<VideoMediaChannel> channel(
+ SetUpForExternalEncoderFactory(&encoder_factory, codecs));
+
+ EXPECT_TRUE(
+ channel->AddSendStream(cricket::StreamParams::CreateLegacy(kSsrc)));
+ channel->SetSend(true);
+ FakeVideoSendStream* stream = factory.GetCall()->GetVideoSendStreams()[0];
+
+ FakeVideoCapturer capturer1;
+ EXPECT_TRUE(channel->SetCapturer(kSsrc, &capturer1));
+
+ cricket::CapturedFrame frame;
+ frame.width = 1280;
+ frame.height = 720;
+ frame.fourcc = cricket::FOURCC_I420;
+ frame.data_size = static_cast<uint32>(
+ cricket::VideoFrame::SizeOf(frame.width, frame.height));
+ rtc::scoped_ptr<char[]> data(new char[frame.data_size]);
+ frame.data = data.get();
+ memset(frame.data, 1, frame.data_size);
+ frame.elapsed_time = 0;
+ const int kInitialTimestamp = 123456;
+ frame.time_stamp = kInitialTimestamp;
+
+ // Deliver initial frame.
+ capturer1.SignalCapturedFrame(&frame);
+ // Deliver next frame 1 second later.
+ frame.time_stamp += rtc::kNumNanosecsPerSec;
+ rtc::Thread::Current()->SleepMs(1000);
pthatcher1 2015/09/17 05:00:31 If you have to do a real sleep, can you at least m
pbos-webrtc 2015/09/17 06:36:20 It's a bit longer due to incoming frames being sta
+ capturer1.SignalCapturedFrame(&frame);
+
+ int64_t capturer1_last_timestamp = stream->GetLastTimestamp();
+ // Reset input source, should still be continuous even though input-frame
+ // timestamp is less than before.
+ FakeVideoCapturer capturer2;
+ EXPECT_TRUE(channel->SetCapturer(kSsrc, &capturer2));
+
+ rtc::Thread::Current()->SleepMs(1);
+ // Deliver with a timestamp (10 seconds) before the previous initial one,
+ // these should not be related at all anymore and it should still work fine.
+ frame.time_stamp = kInitialTimestamp - 10000;
+ capturer2.SignalCapturedFrame(&frame);
+
+ // New timestamp should be at least 1ms in the future and not old.
+ EXPECT_GT(stream->GetLastTimestamp(), capturer1_last_timestamp);
+
+ EXPECT_TRUE(channel->RemoveSendStream(kSsrc));
+}
+
VideoMediaChannel* WebRtcVideoEngine2Test::SetUpForExternalEncoderFactory(
cricket::WebRtcVideoEncoderFactory* encoder_factory,
const std::vector<VideoCodec>& codecs) {
« no previous file with comments | « talk/media/webrtc/webrtcvideoengine2.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698