Chromium Code Reviews| Index: talk/media/webrtc/webrtcvideoengine2_unittest.cc |
| diff --git a/talk/media/webrtc/webrtcvideoengine2_unittest.cc b/talk/media/webrtc/webrtcvideoengine2_unittest.cc |
| index 230ca3b2b06af48f51cbecdb28d4a1c4fc7b00de..41bc39ba499873276f418b9cfd8fdd1603324069 100644 |
| --- a/talk/media/webrtc/webrtcvideoengine2_unittest.cc |
| +++ b/talk/media/webrtc/webrtcvideoengine2_unittest.cc |
| @@ -456,6 +456,69 @@ TEST_F(WebRtcVideoEngine2Test, CanConstructDecoderForVp9EncoderFactory) { |
| channel->AddRecvStream(cricket::StreamParams::CreateLegacy(kSsrc))); |
| } |
| +TEST_F(WebRtcVideoEngine2Test, SendStreamTimestampCarryOver) { |
|
pbos-webrtc
2015/07/12 15:30:22
PropagatesInputFrameTimestamp
qiangchen
2015/07/13 17:48:02
Done.
|
| + 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))); |
| + |
| + FakeVideoCapturer capturer; |
| + EXPECT_TRUE(channel->SetCapturer(kSsrc, &capturer)); |
| + capturer.Start(cricket::VideoFormat(1280, 720, |
| + cricket::VideoFormat::FpsToInterval(60), |
| + cricket::FOURCC_I420)); |
| + channel->SetSend(true); |
| + |
| + FakeCall* call = factory.GetCall(); |
| + std::vector<FakeVideoSendStream*> streams = call->GetVideoSendStreams(); |
| + FakeVideoSendStream* stream = streams[0]; |
| + |
| + int64_t timestamp; |
| + int64_t last_timestamp; |
| + |
| + EXPECT_TRUE(capturer.CaptureFrame()); |
| + last_timestamp = stream->GetLastTimestamp(); |
| + for (int i = 0; i < 10; i++) { |
| + EXPECT_TRUE(capturer.CaptureFrame()); |
| + timestamp = stream->GetLastTimestamp(); |
| + int64_t interval = timestamp - last_timestamp; |
| + |
| + // Precision changes from nanosecond to millisecond. |
| + // Allow error to be no more than 1. |
| + EXPECT_LE(cricket::VideoFormat::FpsToInterval(60) / 1000000, interval); |
|
pbos-webrtc
2015/07/12 15:30:22
Is EXPECT_NEAR applicable here?
qiangchen
2015/07/13 17:48:02
Done.
|
| + EXPECT_GE(cricket::VideoFormat::FpsToInterval(60) / 1000000 + 1, interval); |
| + |
| + last_timestamp = timestamp; |
| + } |
| + |
| + capturer.Start(cricket::VideoFormat(1280, 720, |
| + cricket::VideoFormat::FpsToInterval(30), |
| + cricket::FOURCC_I420)); |
| + |
| + EXPECT_TRUE(capturer.CaptureFrame()); |
| + last_timestamp = stream->GetLastTimestamp(); |
| + for (int i = 0; i < 10; i++) { |
| + EXPECT_TRUE(capturer.CaptureFrame()); |
| + timestamp = stream->GetLastTimestamp(); |
| + int64_t interval = timestamp - last_timestamp; |
| + |
| + // Precision changes from nanosecond to millisecond. |
| + // Allow error to be no more than 1. |
| + EXPECT_LE(cricket::VideoFormat::FpsToInterval(30) / 1000000, interval); |
| + EXPECT_GE(cricket::VideoFormat::FpsToInterval(30) / 1000000 + 1, interval); |
| + |
| + last_timestamp = timestamp; |
| + } |
| +} |
| + |
| VideoMediaChannel* WebRtcVideoEngine2Test::SetUpForExternalEncoderFactory( |
| cricket::WebRtcVideoEncoderFactory* encoder_factory, |
| const std::vector<VideoCodec>& codecs) { |