| 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..13ce0961f55352773d52c436404969caab5ce367 100644
|
| --- a/talk/media/webrtc/webrtcvideoengine2_unittest.cc
|
| +++ b/talk/media/webrtc/webrtcvideoengine2_unittest.cc
|
| @@ -456,6 +456,70 @@ TEST_F(WebRtcVideoEngine2Test, CanConstructDecoderForVp9EncoderFactory) {
|
| channel->AddRecvStream(cricket::StreamParams::CreateLegacy(kSsrc)));
|
| }
|
|
|
| +TEST_F(WebRtcVideoEngine2Test, PropagatesInputFrameTimestamp) {
|
| + 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_NEAR(cricket::VideoFormat::FpsToInterval(60) / 1E6, interval, 1);
|
| +
|
| + 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_NEAR(cricket::VideoFormat::FpsToInterval(30) / 1E6, interval, 1);
|
| +
|
| + last_timestamp = timestamp;
|
| + }
|
| +
|
| + // Remove stream previously added to free the external encoder instance.
|
| + EXPECT_TRUE(channel->RemoveSendStream(kSsrc));
|
| +}
|
| +
|
| VideoMediaChannel* WebRtcVideoEngine2Test::SetUpForExternalEncoderFactory(
|
| cricket::WebRtcVideoEncoderFactory* encoder_factory,
|
| const std::vector<VideoCodec>& codecs) {
|
|
|