Index: media/cast/sender/video_sender_unittest.cc |
diff --git a/media/cast/sender/video_sender_unittest.cc b/media/cast/sender/video_sender_unittest.cc |
index 3d315ea2199d91c8cfc671391b4c4187cae9cb4c..3cedc6cb8e39f721f7e35a5dbab11a81df139bb1 100644 |
--- a/media/cast/sender/video_sender_unittest.cc |
+++ b/media/cast/sender/video_sender_unittest.cc |
@@ -124,6 +124,7 @@ class PeerVideoSender : public VideoSender { |
transport_sender, |
base::Bind(&IgnorePlayoutDelayChanges)) {} |
using VideoSender::OnReceivedCastFeedback; |
+ using VideoSender::OnReceivedPli; |
}; |
class TransportClient : public CastTransportSender::Client { |
@@ -602,5 +603,41 @@ TEST_F(VideoSenderTest, PopulatesResourceUtilizationInFrameMetadata) { |
} |
} |
+TEST_F(VideoSenderTest, CancelSendingOnReceivingPli) { |
+ InitEncoder(false, true); |
+ ASSERT_EQ(STATUS_INITIALIZED, operational_status_); |
+ |
+ // Send a frame and ACK it. |
+ scoped_refptr<media::VideoFrame> video_frame = GetNewVideoFrame(); |
+ video_sender_->InsertRawVideoFrame(video_frame, testing_clock_->NowTicks()); |
+ RunTasks(33); |
+ |
+ RtcpCastMessage cast_feedback(1); |
+ cast_feedback.media_ssrc = 2; |
+ cast_feedback.ack_frame_id = 0; |
+ video_sender_->OnReceivedCastFeedback(cast_feedback); |
+ EXPECT_EQ(1, transport_->number_of_rtp_packets()); |
+ |
+ transport_->SetPause(true); |
+ // Send three more frames. |
+ for (int i = 0; i < 3; i++) { |
+ video_frame = GetNewVideoFrame(); |
+ video_sender_->InsertRawVideoFrame(video_frame, testing_clock_->NowTicks()); |
+ RunTasks(33); |
+ } |
+ |
+ // Frames should be in buffer, waiting. |
+ // Received PLI from receiver. |
+ video_sender_->OnReceivedPli(); |
+ video_frame = GetNewVideoFrame(); |
+ video_sender_->InsertRawVideoFrame( |
+ video_frame, |
+ testing_clock_->NowTicks() + base::TimeDelta::FromMilliseconds(500)); |
+ RunTasks(33); |
+ transport_->SetPause(false); |
+ RunTasks(33); |
+ EXPECT_EQ(2, transport_->number_of_rtp_packets()); |
+} |
+ |
} // namespace cast |
} // namespace media |