2727#include " testing/base/public/mock-log.h"
2828#include " absl/base/log_severity.h"
2929#include " native_with_state/api/media_api_client_interface.h"
30- #include " webrtc/api/rtp_headers.h"
3130#include " webrtc/api/rtp_packet_info.h"
3231#include " webrtc/api/rtp_packet_infos.h"
3332#include " webrtc/api/scoped_refptr.h"
@@ -41,7 +40,6 @@ namespace meet {
4140namespace {
4241
4342using ::base_logging::ERROR;
44- using ::base_logging::INFO;
4543using ::testing::_;
4644using ::testing::kDoNotCaptureLogsYet ;
4745using ::testing::MockFunction;
@@ -50,23 +48,71 @@ using ::testing::ScopedMockLog;
5048using ::testing::SizeIs;
5149using ::testing::UnorderedElementsAre;
5250
53- TEST (ConferenceAudioTrackTest, CallsObserverWithAudioFrame ) {
54- auto mock_receiver = rtc::scoped_refptr<webrtc::MockRtpReceiver>(
51+ TEST (ConferenceAudioTrackTest, CallsObserverWithAudioFrameFromLoudestSpeaker ) {
52+ rtc::scoped_refptr<webrtc::MockRtpReceiver> mock_receiver (
5553 new webrtc::MockRtpReceiver ());
5654 webrtc::RtpSource csrc_rtp_source (
5755 webrtc::Timestamp::Micros (1234567890 ),
5856 /* source_id=*/ 123 , webrtc::RtpSourceType::CSRC,
5957 /* rtp_timestamp=*/ 1111111 ,
60- {.audio_level = 100 ,
61- .absolute_capture_time =
62- webrtc::AbsoluteCaptureTime (1234567890 , 1000000000 )});
58+ {.audio_level = 100 , .absolute_capture_time = std::nullopt });
59+ webrtc::RtpSource loudest_speaker_csrc_rtp_source (
60+ webrtc::Timestamp::Micros (1234567890 ),
61+ /* source_id=*/ kLoudestSpeakerCsrc , webrtc::RtpSourceType::CSRC,
62+ /* rtp_timestamp=*/ 1111111 ,
63+ {.audio_level = 100 , .absolute_capture_time = std::nullopt });
6364 webrtc::RtpSource ssrc_rtp_source (
6465 webrtc::Timestamp::Micros (1234567890 ),
6566 /* source_id=*/ 456 , webrtc::RtpSourceType::SSRC,
6667 /* rtp_timestamp=*/ 2222222 ,
67- {.audio_level = 100 ,
68- .absolute_capture_time =
69- webrtc::AbsoluteCaptureTime (1234567890 , 1000000000 )});
68+ {.audio_level = 100 , .absolute_capture_time = std::nullopt });
69+ EXPECT_CALL (*mock_receiver, GetSources)
70+ .WillOnce (Return (std::vector<webrtc::RtpSource>{
71+ std::move (csrc_rtp_source),
72+ std::move (loudest_speaker_csrc_rtp_source),
73+ std::move (ssrc_rtp_source)}));
74+ MockFunction<void (AudioFrame)> mock_function;
75+ std::optional<AudioFrame> received_frame;
76+ EXPECT_CALL (mock_function, Call)
77+ .WillOnce ([&received_frame](AudioFrame frame) {
78+ received_frame = std::move (frame);
79+ });
80+ ConferenceAudioTrack audio_track (" mid" , mock_receiver,
81+ mock_function.AsStdFunction ());
82+ int16_t pcm_data[2 * 100 ];
83+
84+ audio_track.OnData (pcm_data,
85+ /* bits_per_sample=*/ 16 ,
86+ /* sample_rate=*/ 48000 ,
87+ /* number_of_channels=*/ 2 ,
88+ /* number_of_frames=*/ 100 ,
89+ /* absolute_capture_timestamp_ms=*/ std::nullopt );
90+
91+ ASSERT_TRUE (received_frame.has_value ());
92+ EXPECT_THAT (received_frame->pcm16 , SizeIs (100 * 2 ));
93+ EXPECT_EQ (received_frame->bits_per_sample , 16 );
94+ EXPECT_EQ (received_frame->sample_rate , 48000 );
95+ EXPECT_EQ (received_frame->number_of_channels , 2 );
96+ EXPECT_EQ (received_frame->number_of_frames , 100 );
97+ EXPECT_TRUE (received_frame->is_from_loudest_speaker );
98+ EXPECT_EQ (received_frame->contributing_source , 123 );
99+ EXPECT_EQ (received_frame->synchronization_source , 456 );
100+ }
101+
102+ TEST (ConferenceAudioTrackTest,
103+ CallsObserverWithAudioFrameFromNonLoudestSpeaker) {
104+ rtc::scoped_refptr<webrtc::MockRtpReceiver> mock_receiver (
105+ new webrtc::MockRtpReceiver ());
106+ webrtc::RtpSource csrc_rtp_source (
107+ webrtc::Timestamp::Micros (1234567890 ),
108+ /* source_id=*/ 123 , webrtc::RtpSourceType::CSRC,
109+ /* rtp_timestamp=*/ 1111111 ,
110+ {.audio_level = 100 , .absolute_capture_time = std::nullopt });
111+ webrtc::RtpSource ssrc_rtp_source (
112+ webrtc::Timestamp::Micros (1234567890 ),
113+ /* source_id=*/ 456 , webrtc::RtpSourceType::SSRC,
114+ /* rtp_timestamp=*/ 2222222 ,
115+ {.audio_level = 100 , .absolute_capture_time = std::nullopt });
70116 EXPECT_CALL (*mock_receiver, GetSources)
71117 .WillOnce (Return (std::vector<webrtc::RtpSource>{
72118 std::move (csrc_rtp_source), std::move (ssrc_rtp_source)}));
@@ -93,6 +139,7 @@ TEST(ConferenceAudioTrackTest, CallsObserverWithAudioFrame) {
93139 EXPECT_EQ (received_frame->sample_rate , 48000 );
94140 EXPECT_EQ (received_frame->number_of_channels , 2 );
95141 EXPECT_EQ (received_frame->number_of_frames , 100 );
142+ EXPECT_FALSE (received_frame->is_from_loudest_speaker );
96143 EXPECT_EQ (received_frame->contributing_source , 123 );
97144 EXPECT_EQ (received_frame->synchronization_source , 456 );
98145}
@@ -119,15 +166,13 @@ TEST(ConferenceAudioTrackTest, LogsErrorWithUnsupportedBitsPerSample) {
119166}
120167
121168TEST (ConferenceAudioTrackTest, LogsErrorWithMissingCsrc) {
122- auto mock_receiver = rtc::scoped_refptr<webrtc::MockRtpReceiver>(
169+ rtc::scoped_refptr<webrtc::MockRtpReceiver> mock_receiver (
123170 new webrtc::MockRtpReceiver ());
124171 webrtc::RtpSource ssrc_rtp_source (
125172 webrtc::Timestamp::Micros (1234567890 ),
126173 /* source_id=*/ 456 , webrtc::RtpSourceType::SSRC,
127174 /* rtp_timestamp=*/ 2222222 ,
128- {.audio_level = 100 ,
129- .absolute_capture_time =
130- webrtc::AbsoluteCaptureTime (1234567890 , 1000000000 )});
175+ {.audio_level = 0 , .absolute_capture_time = std::nullopt });
131176 EXPECT_CALL (*mock_receiver, GetSources)
132177 .WillOnce (
133178 Return (std::vector<webrtc::RtpSource>{std::move (ssrc_rtp_source)}));
@@ -153,15 +198,13 @@ TEST(ConferenceAudioTrackTest, LogsErrorWithMissingCsrc) {
153198}
154199
155200TEST (ConferenceAudioTrackTest, LogsErrorWithMissingSsrc) {
156- auto mock_receiver = rtc::scoped_refptr<webrtc::MockRtpReceiver>(
201+ rtc::scoped_refptr<webrtc::MockRtpReceiver> mock_receiver (
157202 new webrtc::MockRtpReceiver ());
158203 webrtc::RtpSource csrc_rtp_source (
159204 webrtc::Timestamp::Micros (1234567890 ),
160205 /* source_id=*/ 123 , webrtc::RtpSourceType::CSRC,
161206 /* rtp_timestamp=*/ 1111111 ,
162- {.audio_level = 100 ,
163- .absolute_capture_time =
164- webrtc::AbsoluteCaptureTime (1234567890 , 1000000000 )});
207+ {.audio_level = 100 , .absolute_capture_time = std::nullopt });
165208 EXPECT_CALL (*mock_receiver, GetSources)
166209 .WillOnce (
167210 Return (std::vector<webrtc::RtpSource>{std::move (csrc_rtp_source)}));
@@ -186,7 +229,7 @@ TEST(ConferenceAudioTrackTest, LogsErrorWithMissingSsrc) {
186229 EXPECT_EQ (message, " AudioFrame is missing SSRC for mid: mid" );
187230}
188231TEST (ConferenceAudioTrackTest, LogsErrorWithMissingCsrcAndSsrc) {
189- auto mock_receiver = rtc::scoped_refptr<webrtc::MockRtpReceiver>(
232+ rtc::scoped_refptr<webrtc::MockRtpReceiver> mock_receiver (
190233 new webrtc::MockRtpReceiver ());
191234 EXPECT_CALL (*mock_receiver, GetSources)
192235 .WillOnce (Return (std::vector<webrtc::RtpSource>()));
@@ -215,31 +258,27 @@ TEST(ConferenceAudioTrackTest, LogsErrorWithMissingCsrcAndSsrc) {
215258 " AudioFrame is missing SSRC for mid: mid" ));
216259}
217260
218- TEST (ConferenceAudioTrackTest, LogsIgnoringLoudestParticipantIndicator ) {
219- auto mock_receiver = rtc::scoped_refptr<webrtc::MockRtpReceiver>(
261+ TEST (ConferenceAudioTrackTest, LogsErrorWithOnlyLoudestSpeakerCsrc ) {
262+ rtc::scoped_refptr<webrtc::MockRtpReceiver> mock_receiver (
220263 new webrtc::MockRtpReceiver ());
221264 webrtc::RtpSource csrc_rtp_source (
222265 webrtc::Timestamp::Micros (1234567890 ),
223266 /* source_id=*/ kLoudestSpeakerCsrc , webrtc::RtpSourceType::CSRC,
224267 /* rtp_timestamp=*/ 1111111 ,
225- {.audio_level = 100 ,
226- .absolute_capture_time =
227- webrtc::AbsoluteCaptureTime (1234567890 , 1000000000 )});
268+ {.audio_level = 100 , .absolute_capture_time = std::nullopt });
228269 webrtc::RtpSource ssrc_rtp_source (
229270 webrtc::Timestamp::Micros (1234567890 ),
230271 /* source_id=*/ 456 , webrtc::RtpSourceType::SSRC,
231272 /* rtp_timestamp=*/ 2222222 ,
232- {.audio_level = 100 ,
233- .absolute_capture_time =
234- webrtc::AbsoluteCaptureTime (1234567890 , 1000000000 )});
273+ {.audio_level = 100 , .absolute_capture_time = std::nullopt });
235274 EXPECT_CALL (*mock_receiver, GetSources)
236275 .WillOnce (Return (std::vector<webrtc::RtpSource>{
237276 std::move (csrc_rtp_source), std::move (ssrc_rtp_source)}));
238277 ConferenceAudioTrack audio_track (" mid" , mock_receiver,
239278 [](AudioFrame /* frame*/ ) {});
240279 ScopedMockLog log (kDoNotCaptureLogsYet );
241280 std::string message;
242- EXPECT_CALL (log, Log (INFO , _, _))
281+ EXPECT_CALL (log, Log (ERROR , _, _))
243282 .WillOnce ([&message](int , const std::string &, const std::string &msg) {
244283 message = msg;
245284 });
@@ -253,7 +292,7 @@ TEST(ConferenceAudioTrackTest, LogsIgnoringLoudestParticipantIndicator) {
253292 /* number_of_frames=*/ 100 ,
254293 /* absolute_capture_timestamp_ms=*/ std::nullopt );
255294
256- EXPECT_EQ (message, " Ignoring loudest speaker indicator for mid: mid" );
295+ EXPECT_EQ (message, " AudioFrame is missing CSRC for mid: mid" );
257296}
258297
259298TEST (ConferenceVideoTrackTest, CallsObserverWithVideoFrame) {
0 commit comments