From 259bd2034c3d3ee7f2dc4d481e9bf896a3a4d6ef Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Peter=20Bostr=C3=B6m?= Date: Thu, 28 May 2015 13:39:50 +0200 Subject: [PATCH] Report ssrc_groups in GetStats(). This was already available in the stats struct, just not filled in. BUG=4720 R=stefan@webrtc.org Review URL: https://webrtc-codereview.appspot.com/47329004 Cr-Commit-Position: refs/heads/master@{#9308} --- talk/media/webrtc/webrtcvideoengine2.cc | 10 +++++-- talk/media/webrtc/webrtcvideoengine2.h | 6 ++-- .../webrtc/webrtcvideoengine2_unittest.cc | 29 +++++++++++++++++++ 3 files changed, 40 insertions(+), 5 deletions(-) diff --git a/talk/media/webrtc/webrtcvideoengine2.cc b/talk/media/webrtc/webrtcvideoengine2.cc index a29ce77a23..d68f9fb0b1 100644 --- a/talk/media/webrtc/webrtcvideoengine2.cc +++ b/talk/media/webrtc/webrtcvideoengine2.cc @@ -1165,7 +1165,7 @@ bool WebRtcVideoChannel2::AddRecvStream(const StreamParams& sp, } receive_streams_[ssrc] = new WebRtcVideoReceiveStream( - call_.get(), sp.ssrcs, external_decoder_factory_, default_stream, config, + call_.get(), sp, external_decoder_factory_, default_stream, config, recv_codecs_); return true; @@ -1644,6 +1644,7 @@ WebRtcVideoChannel2::WebRtcVideoSendStream::WebRtcVideoSendStream( const StreamParams& sp, const std::vector& rtp_extensions) : ssrcs_(sp.ssrcs), + ssrc_groups_(sp.ssrc_groups), call_(call), external_encoder_factory_(external_encoder_factory), stream_(NULL), @@ -2100,6 +2101,7 @@ WebRtcVideoChannel2::WebRtcVideoSendStream::GetVideoSenderInfo() { } } } + info.ssrc_groups = ssrc_groups_; info.framerate_input = stats.input_frame_rate; info.framerate_sent = stats.encode_frame_rate; info.avg_encode_ms = stats.avg_encode_time_ms; @@ -2202,13 +2204,14 @@ void WebRtcVideoChannel2::WebRtcVideoSendStream::RecreateWebRtcStream() { WebRtcVideoChannel2::WebRtcVideoReceiveStream::WebRtcVideoReceiveStream( webrtc::Call* call, - const std::vector& ssrcs, + const StreamParams& sp, WebRtcVideoDecoderFactory* external_decoder_factory, bool default_stream, const webrtc::VideoReceiveStream::Config& config, const std::vector& recv_codecs) : call_(call), - ssrcs_(ssrcs), + ssrcs_(sp.ssrcs), + ssrc_groups_(sp.ssrc_groups), stream_(NULL), default_stream_(default_stream), config_(config), @@ -2432,6 +2435,7 @@ void WebRtcVideoChannel2::WebRtcVideoReceiveStream::SetSize(int width, VideoReceiverInfo WebRtcVideoChannel2::WebRtcVideoReceiveStream::GetVideoReceiverInfo() { VideoReceiverInfo info; + info.ssrc_groups = ssrc_groups_; info.add_ssrc(config_.rtp.remote_ssrc); webrtc::VideoReceiveStream::Stats stats = stream_->GetStats(); info.bytes_rcvd = stats.rtp_stats.transmitted.payload_bytes + diff --git a/talk/media/webrtc/webrtcvideoengine2.h b/talk/media/webrtc/webrtcvideoengine2.h index 89d8f7f340..27f4b09688 100644 --- a/talk/media/webrtc/webrtcvideoengine2.h +++ b/talk/media/webrtc/webrtcvideoengine2.h @@ -376,6 +376,7 @@ class WebRtcVideoChannel2 : public rtc::MessageHandler, EXCLUSIVE_LOCKS_REQUIRED(lock_); const std::vector ssrcs_; + const std::vector ssrc_groups_; webrtc::Call* const call_; WebRtcVideoEncoderFactory* const external_encoder_factory_ GUARDED_BY(lock_); @@ -400,8 +401,8 @@ class WebRtcVideoChannel2 : public rtc::MessageHandler, class WebRtcVideoReceiveStream : public webrtc::VideoRenderer { public: WebRtcVideoReceiveStream( - webrtc::Call*, - const std::vector& ssrcs, + webrtc::Call* call, + const StreamParams& sp, WebRtcVideoDecoderFactory* external_decoder_factory, bool default_stream, const webrtc::VideoReceiveStream::Config& config, @@ -447,6 +448,7 @@ class WebRtcVideoChannel2 : public rtc::MessageHandler, webrtc::Call* const call_; const std::vector ssrcs_; + const std::vector ssrc_groups_; webrtc::VideoReceiveStream* stream_; const bool default_stream_; diff --git a/talk/media/webrtc/webrtcvideoengine2_unittest.cc b/talk/media/webrtc/webrtcvideoengine2_unittest.cc index 458e9d555b..f7269b1cc7 100644 --- a/talk/media/webrtc/webrtcvideoengine2_unittest.cc +++ b/talk/media/webrtc/webrtcvideoengine2_unittest.cc @@ -2547,6 +2547,35 @@ TEST_F(WebRtcVideoChannel2Test, EXPECT_TRUE(channel_->AddRecvStream(sp)); } +TEST_F(WebRtcVideoChannel2Test, ReportsSsrcGroupsInStats) { + EXPECT_TRUE(channel_->SetSendCodecs(engine_.codecs())); + + static const uint32_t kSenderSsrcs[] = {4, 7, 10}; + static const uint32_t kSenderRtxSsrcs[] = {5, 8, 11}; + + StreamParams sender_sp = cricket::CreateSimWithRtxStreamParams( + "cname", MAKE_VECTOR(kSenderSsrcs), MAKE_VECTOR(kSenderRtxSsrcs)); + + EXPECT_TRUE(channel_->AddSendStream(sender_sp)); + + static const uint32_t kReceiverSsrcs[] = {3}; + static const uint32_t kReceiverRtxSsrcs[] = {2}; + + StreamParams receiver_sp = cricket::CreateSimWithRtxStreamParams( + "cname", MAKE_VECTOR(kReceiverSsrcs), MAKE_VECTOR(kReceiverRtxSsrcs)); + EXPECT_TRUE(channel_->AddRecvStream(receiver_sp)); + + cricket::VideoMediaInfo info; + ASSERT_TRUE(channel_->GetStats(&info)); + + ASSERT_EQ(1u, info.senders.size()); + ASSERT_EQ(1u, info.receivers.size()); + + EXPECT_NE(sender_sp.ssrc_groups, receiver_sp.ssrc_groups); + EXPECT_EQ(sender_sp.ssrc_groups, info.senders[0].ssrc_groups); + EXPECT_EQ(receiver_sp.ssrc_groups, info.receivers[0].ssrc_groups); +} + void WebRtcVideoChannel2Test::TestReceiverLocalSsrcConfiguration( bool receiver_first) { EXPECT_TRUE(channel_->SetSendCodecs(engine_.codecs()));