blob: b49a0b9aa136cb5674e181e3f56b502e16d9d3ce [file] [log] [blame]
mflodman@webrtc.org3be58632012-09-06 08:19:40 +00001/*
2 * Copyright (c) 2012 The WebRTC project authors. All Rights Reserved.
3 *
4 * Use of this source code is governed by a BSD-style license
5 * that can be found in the LICENSE file in the root of the source
6 * tree. An additional intellectual property rights grant can be found
7 * in the file PATENTS. All contributing project authors may
8 * be found in the AUTHORS file in the root of the source tree.
9 */
10
Elad Alon14d1c9d2019-04-08 14:16:17 +020011#include "video/encoder_rtcp_feedback.h"
mflodman@webrtc.org3be58632012-09-06 08:19:40 +000012
sprangfda496a2017-06-15 04:21:07 -070013#include <memory>
14
Mirko Bonadei92ea95e2017-09-15 06:47:31 +020015#include "test/gmock.h"
16#include "test/gtest.h"
Sebastian Jansson652dc912018-04-19 17:09:15 +020017#include "video/test/mock_video_stream_encoder.h"
mflodman@webrtc.org3be58632012-09-06 08:19:40 +000018
wuchengli@chromium.org637c55f2014-05-28 07:00:51 +000019namespace webrtc {
wuchengli@chromium.org89e8ffb2014-05-27 14:12:58 +000020
perkj600246e2016-05-04 11:26:51 -070021class VieKeyRequestTest : public ::testing::Test {
22 public:
23 VieKeyRequestTest()
perkj26091b12016-09-01 01:17:40 -070024 : simulated_clock_(123456789),
Sebastian Jansson652dc912018-04-19 17:09:15 +020025 encoder_(),
Elad Alon14d1c9d2019-04-08 14:16:17 +020026 encoder_rtcp_feedback_(
perkj600246e2016-05-04 11:26:51 -070027 &simulated_clock_,
28 std::vector<uint32_t>(1, VieKeyRequestTest::kSsrc),
29 &encoder_) {}
mflodman@webrtc.org3be58632012-09-06 08:19:40 +000030
perkj600246e2016-05-04 11:26:51 -070031 protected:
32 const uint32_t kSsrc = 1234;
sprang552c7c72017-02-13 04:41:45 -080033
perkj600246e2016-05-04 11:26:51 -070034 SimulatedClock simulated_clock_;
Mirko Bonadei6a489f22019-04-09 15:11:12 +020035 ::testing::StrictMock<MockVideoStreamEncoder> encoder_;
Elad Alon14d1c9d2019-04-08 14:16:17 +020036 EncoderRtcpFeedback encoder_rtcp_feedback_;
perkj600246e2016-05-04 11:26:51 -070037};
mflodman@webrtc.org3be58632012-09-06 08:19:40 +000038
perkj600246e2016-05-04 11:26:51 -070039TEST_F(VieKeyRequestTest, CreateAndTriggerRequests) {
Niels Möller1c9aa1e2018-02-16 10:27:23 +010040 EXPECT_CALL(encoder_, SendKeyFrame()).Times(1);
Elad Alon14d1c9d2019-04-08 14:16:17 +020041 encoder_rtcp_feedback_.OnReceivedIntraFrameRequest(kSsrc);
perkj600246e2016-05-04 11:26:51 -070042}
43
44TEST_F(VieKeyRequestTest, TooManyOnReceivedIntraFrameRequest) {
Niels Möller1c9aa1e2018-02-16 10:27:23 +010045 EXPECT_CALL(encoder_, SendKeyFrame()).Times(1);
Elad Alon14d1c9d2019-04-08 14:16:17 +020046 encoder_rtcp_feedback_.OnReceivedIntraFrameRequest(kSsrc);
47 encoder_rtcp_feedback_.OnReceivedIntraFrameRequest(kSsrc);
perkj600246e2016-05-04 11:26:51 -070048 simulated_clock_.AdvanceTimeMilliseconds(10);
Elad Alon14d1c9d2019-04-08 14:16:17 +020049 encoder_rtcp_feedback_.OnReceivedIntraFrameRequest(kSsrc);
perkj600246e2016-05-04 11:26:51 -070050
Niels Möller1c9aa1e2018-02-16 10:27:23 +010051 EXPECT_CALL(encoder_, SendKeyFrame()).Times(1);
perkj600246e2016-05-04 11:26:51 -070052 simulated_clock_.AdvanceTimeMilliseconds(300);
Elad Alon14d1c9d2019-04-08 14:16:17 +020053 encoder_rtcp_feedback_.OnReceivedIntraFrameRequest(kSsrc);
54 encoder_rtcp_feedback_.OnReceivedIntraFrameRequest(kSsrc);
55 encoder_rtcp_feedback_.OnReceivedIntraFrameRequest(kSsrc);
Niels Möllerfa89d842019-01-30 16:33:45 +010056}
57
58TEST_F(VieKeyRequestTest, TriggerRequestFromMediaTransport) {
59 EXPECT_CALL(encoder_, SendKeyFrame()).Times(1);
Elad Alon14d1c9d2019-04-08 14:16:17 +020060 encoder_rtcp_feedback_.OnKeyFrameRequested(kSsrc);
mflodman@webrtc.org3be58632012-09-06 08:19:40 +000061}
62
mflodman@webrtc.org3be58632012-09-06 08:19:40 +000063} // namespace webrtc