Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1514)

Unified Diff: webrtc/modules/video_coding/video_sender_unittest.cc

Issue 1600553003: Move keyframe requests outside encoder mutex. (Closed) Base URL: https://chromium.googlesource.com/external/webrtc.git@master
Patch Set: stefan@ feedback round 2 Created 4 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « webrtc/modules/video_coding/video_sender.cc ('k') | webrtc/video/vie_encoder.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: webrtc/modules/video_coding/video_sender_unittest.cc
diff --git a/webrtc/modules/video_coding/video_sender_unittest.cc b/webrtc/modules/video_coding/video_sender_unittest.cc
index 741c7b7a607071c9e224db713a2da8bf2cce2650..f766b862eb2a9ef2989ba5083bbd1e74f73c1aca 100644
--- a/webrtc/modules/video_coding/video_sender_unittest.cc
+++ b/webrtc/modules/video_coding/video_sender_unittest.cc
@@ -40,7 +40,12 @@ using webrtc::test::FrameGenerator;
namespace webrtc {
namespace vcm {
namespace {
-enum { kMaxNumberOfTemporalLayers = 3 };
+static const int kDefaultHeight = 720;
+static const int kDefaultWidth = 1280;
+static const int kMaxNumberOfTemporalLayers = 3;
+static const int kNumberOfLayers = 3;
+static const int kNumberOfStreams = 3;
+static const int kUnusedPayloadType = 10;
struct Vp8StreamInfo {
float framerate_fps[kMaxNumberOfTemporalLayers];
@@ -196,12 +201,6 @@ class TestVideoSender : public ::testing::Test {
class TestVideoSenderWithMockEncoder : public TestVideoSender {
protected:
- static const int kDefaultWidth = 1280;
- static const int kDefaultHeight = 720;
- static const int kNumberOfStreams = 3;
- static const int kNumberOfLayers = 3;
- static const int kUnusedPayloadType = 10;
-
void SetUp() override {
TestVideoSender::SetUp();
sender_->RegisterExternalEncoder(&encoder_, kUnusedPayloadType, false);
@@ -222,20 +221,29 @@ class TestVideoSenderWithMockEncoder : public TestVideoSender {
void TearDown() override { sender_.reset(); }
void ExpectIntraRequest(int stream) {
- if (stream == -1) {
- // No intra request expected.
- EXPECT_CALL(
- encoder_,
- Encode(_, _, Pointee(ElementsAre(kVideoFrameDelta, kVideoFrameDelta,
- kVideoFrameDelta))))
+ ExpectEncodeWithFrameTypes(stream, false);
+ }
+
+ void ExpectInitialKeyFrames() {
+ ExpectEncodeWithFrameTypes(-1, true);
+ }
+
+ void ExpectEncodeWithFrameTypes(int intra_request_stream, bool first_frame) {
+ if (intra_request_stream == -1) {
+ // No intra request expected, keyframes on first frame.
+ FrameType frame_type = first_frame ? kVideoFrameKey : kVideoFrameDelta;
+ EXPECT_CALL(encoder_,
+ Encode(_, _, Pointee(ElementsAre(frame_type, frame_type,
+ frame_type))))
.Times(1)
.WillRepeatedly(Return(0));
return;
}
- assert(stream >= 0);
- assert(stream < kNumberOfStreams);
+ ASSERT_FALSE(first_frame);
+ ASSERT_GE(intra_request_stream, 0);
+ ASSERT_LT(intra_request_stream, kNumberOfStreams);
std::vector<FrameType> frame_types(kNumberOfStreams, kVideoFrameDelta);
- frame_types[stream] = kVideoFrameKey;
+ frame_types[intra_request_stream] = kVideoFrameKey;
EXPECT_CALL(encoder_,
Encode(_, _, Pointee(ElementsAreArray(&frame_types[0],
frame_types.size()))))
@@ -260,6 +268,9 @@ class TestVideoSenderWithMockEncoder : public TestVideoSender {
};
TEST_F(TestVideoSenderWithMockEncoder, TestIntraRequests) {
+ // Initial request should be all keyframes.
+ ExpectInitialKeyFrames();
+ AddFrame();
EXPECT_EQ(0, sender_->IntraFrameRequest(0));
ExpectIntraRequest(0);
AddFrame();
@@ -293,6 +304,9 @@ TEST_F(TestVideoSenderWithMockEncoder, TestIntraRequestsInternalCapture) {
// Register encoder with internal capture.
sender_->RegisterExternalEncoder(&encoder_, kUnusedPayloadType, true);
EXPECT_EQ(0, sender_->RegisterSendCodec(&settings_, 1, 1200));
+ // Initial request should be all keyframes.
+ ExpectInitialKeyFrames();
+ AddFrame();
ExpectIntraRequest(0);
EXPECT_EQ(0, sender_->IntraFrameRequest(0));
ExpectIntraRequest(1);
« no previous file with comments | « webrtc/modules/video_coding/video_sender.cc ('k') | webrtc/video/vie_encoder.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698