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

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

Issue 1225153002: Let WebRtcVideoChannel2::WebRtcVideoSendStream::InputFrame carry the input frame's timestamp to out… (Closed) Base URL: https://chromium.googlesource.com/external/webrtc.git@master
Patch Set: Remove SendStream after unit test Created 5 years, 5 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
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) {
« talk/media/webrtc/webrtcvideoengine2.cc ('K') | « talk/media/webrtc/webrtcvideoengine2.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698