summaryrefslogtreecommitdiff
path: root/media/webrtc/webrtcvideoengine2_unittest.cc
diff options
context:
space:
mode:
Diffstat (limited to 'media/webrtc/webrtcvideoengine2_unittest.cc')
-rw-r--r--media/webrtc/webrtcvideoengine2_unittest.cc81
1 files changed, 61 insertions, 20 deletions
diff --git a/media/webrtc/webrtcvideoengine2_unittest.cc b/media/webrtc/webrtcvideoengine2_unittest.cc
index 7c8da13..e45ad6d 100644
--- a/media/webrtc/webrtcvideoengine2_unittest.cc
+++ b/media/webrtc/webrtcvideoengine2_unittest.cc
@@ -349,6 +349,10 @@ class WebRtcVideoEngine2Test : public ::testing::Test {
cricket::WebRtcVideoEncoderFactory* encoder_factory,
const std::vector<VideoCodec>& codecs);
+ VideoMediaChannel* SetUpForExternalDecoderFactory(
+ cricket::WebRtcVideoDecoderFactory* decoder_factory,
+ const std::vector<VideoCodec>& codecs);
+
void TestStartBitrate(bool override_start_bitrate, int start_bitrate_bps);
WebRtcVideoEngine2 engine_;
@@ -579,6 +583,19 @@ VideoMediaChannel* WebRtcVideoEngine2Test::SetUpForExternalEncoderFactory(
return channel;
}
+VideoMediaChannel* WebRtcVideoEngine2Test::SetUpForExternalDecoderFactory(
+ cricket::WebRtcVideoDecoderFactory* decoder_factory,
+ const std::vector<VideoCodec>& codecs) {
+ engine_.SetExternalDecoderFactory(decoder_factory);
+ engine_.Init(rtc::Thread::Current());
+
+ VideoMediaChannel* channel =
+ engine_.CreateChannel(cricket::VideoOptions(), NULL);
+ EXPECT_TRUE(channel->SetRecvCodecs(codecs));
+
+ return channel;
+}
+
TEST_F(WebRtcVideoEngine2Test, ChannelWithExternalH264CanChangeToInternalVp8) {
cricket::FakeWebRtcVideoEncoderFactory encoder_factory;
encoder_factory.AddSupportedVideoCodecType(webrtc::kVideoCodecH264, "H264");
@@ -632,6 +649,50 @@ TEST_F(WebRtcVideoEngine2Test, ReportSupportedExternalCodecs) {
EXPECT_EQ("H264", external_codec.name);
}
+TEST_F(WebRtcVideoEngine2Test, RegisterExternalDecodersIfSupported) {
+ cricket::FakeWebRtcVideoDecoderFactory decoder_factory;
+ decoder_factory.AddSupportedVideoCodecType(webrtc::kVideoCodecVP8);
+ std::vector<cricket::VideoCodec> codecs;
+ codecs.push_back(kVp8Codec);
+
+ rtc::scoped_ptr<VideoMediaChannel> channel(
+ SetUpForExternalDecoderFactory(&decoder_factory, codecs));
+
+ EXPECT_TRUE(
+ channel->AddRecvStream(cricket::StreamParams::CreateLegacy(kSsrc)));
+ ASSERT_EQ(1u, decoder_factory.decoders().size());
+
+ // Setting codecs of the same type should not reallocate the decoder.
+ EXPECT_TRUE(channel->SetRecvCodecs(codecs));
+ EXPECT_EQ(1, decoder_factory.GetNumCreatedDecoders());
+
+ // Remove stream previously added to free the external decoder instance.
+ EXPECT_TRUE(channel->RemoveRecvStream(kSsrc));
+ EXPECT_EQ(0u, decoder_factory.decoders().size());
+}
+
+// Verifies that we can set up decoders that are not internally supported.
+TEST_F(WebRtcVideoEngine2Test, RegisterExternalH264DecoderIfSupported) {
+ // TODO(pbos): Do not assume that encoder/decoder support is symmetric. We
+ // can't even query the WebRtcVideoDecoderFactory for supported codecs.
+ // For now we add a FakeWebRtcVideoEncoderFactory to add H264 to supported
+ // codecs.
+ cricket::FakeWebRtcVideoEncoderFactory encoder_factory;
+ encoder_factory.AddSupportedVideoCodecType(webrtc::kVideoCodecH264, "H264");
+ engine_.SetExternalEncoderFactory(&encoder_factory);
+ cricket::FakeWebRtcVideoDecoderFactory decoder_factory;
+ decoder_factory.AddSupportedVideoCodecType(webrtc::kVideoCodecH264);
+ std::vector<cricket::VideoCodec> codecs;
+ codecs.push_back(kH264Codec);
+
+ rtc::scoped_ptr<VideoMediaChannel> channel(
+ SetUpForExternalDecoderFactory(&decoder_factory, codecs));
+
+ EXPECT_TRUE(
+ channel->AddRecvStream(cricket::StreamParams::CreateLegacy(kSsrc)));
+ ASSERT_EQ(1u, decoder_factory.decoders().size());
+}
+
class WebRtcVideoEngine2BaseTest
: public VideoEngineTest<cricket::WebRtcVideoEngine2> {
protected:
@@ -1800,26 +1861,6 @@ TEST_F(WebRtcVideoChannel2Test, DISABLED_SetOptionsWithMaxBitrate) {
FAIL() << "Not implemented."; // TODO(pbos): Implement.
}
-TEST_F(WebRtcVideoChannel2Test, DISABLED_ResetCodecOnScreencast) {
- FAIL() << "Not implemented."; // TODO(pbos): Implement.
-}
-
-TEST_F(WebRtcVideoChannel2Test, DISABLED_RegisterDecoderIfFactoryIsGiven) {
- FAIL() << "Not implemented."; // TODO(pbos): Implement.
-}
-
-TEST_F(WebRtcVideoChannel2Test, DISABLED_DontRegisterDecoderMultipleTimes) {
- FAIL() << "Not implemented."; // TODO(pbos): Implement.
-}
-
-TEST_F(WebRtcVideoChannel2Test, DISABLED_DontRegisterDecoderForNonVP8) {
- FAIL() << "Not implemented."; // TODO(pbos): Implement.
-}
-
-TEST_F(WebRtcVideoChannel2Test, DISABLED_ExternalCodecIgnored) {
- FAIL() << "Not implemented."; // TODO(pbos): Implement.
-}
-
TEST_F(WebRtcVideoChannel2Test, OnReadyToSendSignalsNetworkState) {
EXPECT_EQ(webrtc::Call::kNetworkUp, fake_call_->GetNetworkState());