| Index: webrtc/media/engine/webrtcvideoengine_unittest.cc
|
| diff --git a/webrtc/media/engine/webrtcvideoengine_unittest.cc b/webrtc/media/engine/webrtcvideoengine_unittest.cc
|
| index c6adfd3976fa6b89d95223ec0c1eac001364c0b6..1306082abf8715b2733109ce4c3f2ad4c1f884cd 100644
|
| --- a/webrtc/media/engine/webrtcvideoengine_unittest.cc
|
| +++ b/webrtc/media/engine/webrtcvideoengine_unittest.cc
|
| @@ -83,6 +83,32 @@ bool HasRtxCodec(const std::vector<cricket::VideoCodec>& codecs,
|
| return false;
|
| }
|
|
|
| +// TODO(nisse): Duplicated in call.cc.
|
| +const int* FindKeyByValue(const std::map<int, int>& m, int v) {
|
| + for (const auto& kv : m) {
|
| + if (kv.second == v)
|
| + return &kv.first;
|
| + }
|
| + return nullptr;
|
| +}
|
| +
|
| +bool HasRtxReceiveAssociation(
|
| + const webrtc::VideoReceiveStream::Config& config,
|
| + int payload_type) {
|
| + return FindKeyByValue(config.rtp.rtx_associated_payload_types,
|
| + payload_type) != nullptr;
|
| +}
|
| +
|
| +// Check that there's an Rtx payload type for each decoder.
|
| +bool VerifyRtxReceiveAssociations(
|
| + const webrtc::VideoReceiveStream::Config& config) {
|
| + for (const auto& decoder : config.decoders) {
|
| + if (!HasRtxReceiveAssociation(config, decoder.payload_type))
|
| + return false;
|
| + }
|
| + return true;
|
| +}
|
| +
|
| rtc::scoped_refptr<webrtc::VideoFrameBuffer> CreateBlackFrameBuffer(
|
| int width,
|
| int height) {
|
| @@ -112,15 +138,6 @@ cricket::MediaConfig GetMediaConfig() {
|
| return media_config;
|
| }
|
|
|
| -// TODO(nisse): Duplicated in call.cc.
|
| -const int* FindKeyByValue(const std::map<int, int>& m, int v) {
|
| - for (const auto& kv : m) {
|
| - if (kv.second == v)
|
| - return &kv.first;
|
| - }
|
| - return nullptr;
|
| -}
|
| -
|
| } // namespace
|
|
|
| namespace cricket {
|
| @@ -1316,9 +1333,12 @@ TEST_F(WebRtcVideoChannelTest, RecvStreamWithSimAndRtx) {
|
| cricket::CreateSimWithRtxStreamParams("cname", ssrcs, rtx_ssrcs));
|
| EXPECT_FALSE(
|
| recv_stream->GetConfig().rtp.rtx_associated_payload_types.empty());
|
| - EXPECT_EQ(recv_stream->GetConfig().decoders.size(),
|
| - recv_stream->GetConfig().rtp.rtx_associated_payload_types.size())
|
| + EXPECT_TRUE(VerifyRtxReceiveAssociations(recv_stream->GetConfig()))
|
| << "RTX should be mapped for all decoders/payload types.";
|
| + EXPECT_TRUE(HasRtxReceiveAssociation(recv_stream->GetConfig(),
|
| + GetEngineCodec("red").id))
|
| + << "RTX should be mapped for the RED payload type";
|
| +
|
| EXPECT_EQ(rtx_ssrcs[0], recv_stream->GetConfig().rtp.rtx_ssrc);
|
| }
|
|
|
| @@ -1329,6 +1349,12 @@ TEST_F(WebRtcVideoChannelTest, RecvStreamWithRtx) {
|
| params.AddFidSsrc(kSsrcs1[0], kRtxSsrcs1[0]);
|
| FakeVideoReceiveStream* recv_stream = AddRecvStream(params);
|
| EXPECT_EQ(kRtxSsrcs1[0], recv_stream->GetConfig().rtp.rtx_ssrc);
|
| +
|
| + EXPECT_TRUE(VerifyRtxReceiveAssociations(recv_stream->GetConfig()))
|
| + << "RTX should be mapped for all decoders/payload types.";
|
| + EXPECT_TRUE(HasRtxReceiveAssociation(recv_stream->GetConfig(),
|
| + GetEngineCodec("red").id))
|
| + << "RTX should be mapped for the RED payload type";
|
| }
|
|
|
| TEST_F(WebRtcVideoChannelTest, RecvStreamNoRtx) {
|
| @@ -3796,9 +3822,11 @@ TEST_F(WebRtcVideoChannelTest, DefaultReceiveStreamReconfiguresToUseRtx) {
|
| recv_stream = fake_call_->GetVideoReceiveStreams()[0];
|
| EXPECT_FALSE(
|
| recv_stream->GetConfig().rtp.rtx_associated_payload_types.empty());
|
| - EXPECT_EQ(recv_stream->GetConfig().decoders.size(),
|
| - recv_stream->GetConfig().rtp.rtx_associated_payload_types.size())
|
| + EXPECT_TRUE(VerifyRtxReceiveAssociations(recv_stream->GetConfig()))
|
| << "RTX should be mapped for all decoders/payload types.";
|
| + EXPECT_TRUE(HasRtxReceiveAssociation(recv_stream->GetConfig(),
|
| + GetEngineCodec("red").id))
|
| + << "RTX should be mapped also for the RED payload type";
|
| EXPECT_EQ(rtx_ssrcs[0], recv_stream->GetConfig().rtp.rtx_ssrc);
|
| }
|
|
|
|
|