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

Side by Side Diff: webrtc/media/base/videobroadcaster_unittest.cc

Issue 1779063003: Refactor VideoTracks to forward all sinks to its source (Closed) Base URL: https://chromium.googlesource.com/external/webrtc.git@master
Patch Set: Rebased Created 4 years, 9 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 unified diff | Download patch
« no previous file with comments | « webrtc/media/base/videobroadcaster.cc ('k') | webrtc/media/base/videosourcebase.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 /* 1 /*
2 * Copyright 2016 The WebRTC project authors. All Rights Reserved. 2 * Copyright 2016 The WebRTC project authors. All Rights Reserved.
3 * 3 *
4 * Use of this source code is governed by a BSD-style license 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 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 6 * tree. An additional intellectual property rights grant can be found
7 * in the file PATENTS. All contributing project authors may 7 * in the file PATENTS. All contributing project authors may
8 * be found in the AUTHORS file in the root of the source tree. 8 * be found in the AUTHORS file in the root of the source tree.
9 */ 9 */
10 10
11 #include "webrtc/base/gunit.h" 11 #include "webrtc/base/gunit.h"
12 #include "webrtc/media/base/fakevideorenderer.h"
12 #include "webrtc/media/base/videobroadcaster.h" 13 #include "webrtc/media/base/videobroadcaster.h"
13 #include "webrtc/media/engine/webrtcvideoframe.h" 14 #include "webrtc/media/engine/webrtcvideoframe.h"
14 15
15 using rtc::VideoBroadcaster; 16 using rtc::VideoBroadcaster;
16 using rtc::VideoSinkWants; 17 using rtc::VideoSinkWants;
18 using cricket::FakeVideoRenderer;
17 using cricket::WebRtcVideoFrame; 19 using cricket::WebRtcVideoFrame;
18 20
19 namespace {
20
21 class TestSink : public rtc::VideoSinkInterface<cricket::VideoFrame> {
22 public:
23 void OnFrame(const cricket::VideoFrame& frame) override {
24 ++number_of_rendered_frames_;
25 }
26
27 int number_of_rendered_frames_ = 0;
28 };
29
30 } // namespace
31 21
32 TEST(VideoBroadcasterTest, frame_wanted) { 22 TEST(VideoBroadcasterTest, frame_wanted) {
33 VideoBroadcaster broadcaster; 23 VideoBroadcaster broadcaster;
34 EXPECT_FALSE(broadcaster.frame_wanted()); 24 EXPECT_FALSE(broadcaster.frame_wanted());
35 25
36 TestSink sink; 26 FakeVideoRenderer sink;
37 broadcaster.AddOrUpdateSink(&sink, rtc::VideoSinkWants()); 27 broadcaster.AddOrUpdateSink(&sink, rtc::VideoSinkWants());
38 EXPECT_TRUE(broadcaster.frame_wanted()); 28 EXPECT_TRUE(broadcaster.frame_wanted());
39 29
40 broadcaster.RemoveSink(&sink); 30 broadcaster.RemoveSink(&sink);
41 EXPECT_FALSE(broadcaster.frame_wanted()); 31 EXPECT_FALSE(broadcaster.frame_wanted());
42 } 32 }
43 33
44 TEST(VideoBroadcasterTest, OnFrame) { 34 TEST(VideoBroadcasterTest, OnFrame) {
45 VideoBroadcaster broadcaster; 35 VideoBroadcaster broadcaster;
46 36
47 TestSink sink1; 37 FakeVideoRenderer sink1;
48 TestSink sink2; 38 FakeVideoRenderer sink2;
49 broadcaster.AddOrUpdateSink(&sink1, rtc::VideoSinkWants()); 39 broadcaster.AddOrUpdateSink(&sink1, rtc::VideoSinkWants());
50 broadcaster.AddOrUpdateSink(&sink2, rtc::VideoSinkWants()); 40 broadcaster.AddOrUpdateSink(&sink2, rtc::VideoSinkWants());
51 41
52 WebRtcVideoFrame frame; 42 WebRtcVideoFrame frame;
53 43
54 broadcaster.OnFrame(frame); 44 broadcaster.OnFrame(frame);
55 EXPECT_EQ(1, sink1.number_of_rendered_frames_); 45 EXPECT_EQ(1, sink1.num_rendered_frames());
56 EXPECT_EQ(1, sink2.number_of_rendered_frames_); 46 EXPECT_EQ(1, sink2.num_rendered_frames());
57 47
58 broadcaster.RemoveSink(&sink1); 48 broadcaster.RemoveSink(&sink1);
59 broadcaster.OnFrame(frame); 49 broadcaster.OnFrame(frame);
60 EXPECT_EQ(1, sink1.number_of_rendered_frames_); 50 EXPECT_EQ(1, sink1.num_rendered_frames());
61 EXPECT_EQ(2, sink2.number_of_rendered_frames_); 51 EXPECT_EQ(2, sink2.num_rendered_frames());
62 52
63 broadcaster.AddOrUpdateSink(&sink1, rtc::VideoSinkWants()); 53 broadcaster.AddOrUpdateSink(&sink1, rtc::VideoSinkWants());
64 broadcaster.OnFrame(frame); 54 broadcaster.OnFrame(frame);
65 EXPECT_EQ(2, sink1.number_of_rendered_frames_); 55 EXPECT_EQ(2, sink1.num_rendered_frames());
66 EXPECT_EQ(3, sink2.number_of_rendered_frames_); 56 EXPECT_EQ(3, sink2.num_rendered_frames());
67 } 57 }
68 58
69 TEST(VideoBroadcasterTest, AppliesRotationIfAnySinkWantsRotationApplied) { 59 TEST(VideoBroadcasterTest, AppliesRotationIfAnySinkWantsRotationApplied) {
70 VideoBroadcaster broadcaster; 60 VideoBroadcaster broadcaster;
71 EXPECT_TRUE(broadcaster.wants().rotation_applied); 61 EXPECT_TRUE(broadcaster.wants().rotation_applied);
72 62
73 TestSink sink1; 63 FakeVideoRenderer sink1;
74 VideoSinkWants wants1; 64 VideoSinkWants wants1;
75 wants1.rotation_applied = false; 65 wants1.rotation_applied = false;
76 66
77 broadcaster.AddOrUpdateSink(&sink1, wants1); 67 broadcaster.AddOrUpdateSink(&sink1, wants1);
78 EXPECT_FALSE(broadcaster.wants().rotation_applied); 68 EXPECT_FALSE(broadcaster.wants().rotation_applied);
79 69
80 TestSink sink2; 70 FakeVideoRenderer sink2;
81 VideoSinkWants wants2; 71 VideoSinkWants wants2;
82 wants2.rotation_applied = true; 72 wants2.rotation_applied = true;
83 73
84 broadcaster.AddOrUpdateSink(&sink2, wants2); 74 broadcaster.AddOrUpdateSink(&sink2, wants2);
85 EXPECT_TRUE(broadcaster.wants().rotation_applied); 75 EXPECT_TRUE(broadcaster.wants().rotation_applied);
86 76
87 broadcaster.RemoveSink(&sink2); 77 broadcaster.RemoveSink(&sink2);
88 EXPECT_FALSE(broadcaster.wants().rotation_applied); 78 EXPECT_FALSE(broadcaster.wants().rotation_applied);
89 } 79 }
90 80
91 TEST(VideoBroadcasterTest, AppliesMinOfSinkWantsMaxPixelCount) { 81 TEST(VideoBroadcasterTest, AppliesMinOfSinkWantsMaxPixelCount) {
92 VideoBroadcaster broadcaster; 82 VideoBroadcaster broadcaster;
93 EXPECT_TRUE(!broadcaster.wants().max_pixel_count); 83 EXPECT_TRUE(!broadcaster.wants().max_pixel_count);
94 84
95 TestSink sink1; 85 FakeVideoRenderer sink1;
96 VideoSinkWants wants1; 86 VideoSinkWants wants1;
97 wants1.max_pixel_count = rtc::Optional<int>(1280 * 720); 87 wants1.max_pixel_count = rtc::Optional<int>(1280 * 720);
98 88
99 broadcaster.AddOrUpdateSink(&sink1, wants1); 89 broadcaster.AddOrUpdateSink(&sink1, wants1);
100 EXPECT_EQ(1280 * 720, *broadcaster.wants().max_pixel_count); 90 EXPECT_EQ(1280 * 720, *broadcaster.wants().max_pixel_count);
101 91
102 TestSink sink2; 92 FakeVideoRenderer sink2;
103 VideoSinkWants wants2; 93 VideoSinkWants wants2;
104 wants2.max_pixel_count = rtc::Optional<int>(640 * 360); 94 wants2.max_pixel_count = rtc::Optional<int>(640 * 360);
105 broadcaster.AddOrUpdateSink(&sink2, wants2); 95 broadcaster.AddOrUpdateSink(&sink2, wants2);
106 EXPECT_EQ(640 * 360, *broadcaster.wants().max_pixel_count); 96 EXPECT_EQ(640 * 360, *broadcaster.wants().max_pixel_count);
107 97
108 broadcaster.RemoveSink(&sink2); 98 broadcaster.RemoveSink(&sink2);
109 EXPECT_EQ(1280 * 720, *broadcaster.wants().max_pixel_count); 99 EXPECT_EQ(1280 * 720, *broadcaster.wants().max_pixel_count);
110 } 100 }
111 101
112 TEST(VideoBroadcasterTest, AppliesMinOfSinkWantsMaxPixelCountStepUp) { 102 TEST(VideoBroadcasterTest, AppliesMinOfSinkWantsMaxPixelCountStepUp) {
113 VideoBroadcaster broadcaster; 103 VideoBroadcaster broadcaster;
114 EXPECT_TRUE(!broadcaster.wants().max_pixel_count_step_up); 104 EXPECT_TRUE(!broadcaster.wants().max_pixel_count_step_up);
115 105
116 TestSink sink1; 106 FakeVideoRenderer sink1;
117 VideoSinkWants wants1; 107 VideoSinkWants wants1;
118 wants1.max_pixel_count_step_up = rtc::Optional<int>(1280 * 720); 108 wants1.max_pixel_count_step_up = rtc::Optional<int>(1280 * 720);
119 109
120 broadcaster.AddOrUpdateSink(&sink1, wants1); 110 broadcaster.AddOrUpdateSink(&sink1, wants1);
121 EXPECT_EQ(1280 * 720, *broadcaster.wants().max_pixel_count_step_up); 111 EXPECT_EQ(1280 * 720, *broadcaster.wants().max_pixel_count_step_up);
122 112
123 TestSink sink2; 113 FakeVideoRenderer sink2;
124 VideoSinkWants wants2; 114 VideoSinkWants wants2;
125 wants2.max_pixel_count_step_up = rtc::Optional<int>(640 * 360); 115 wants2.max_pixel_count_step_up = rtc::Optional<int>(640 * 360);
126 broadcaster.AddOrUpdateSink(&sink2, wants2); 116 broadcaster.AddOrUpdateSink(&sink2, wants2);
127 EXPECT_EQ(640 * 360, *broadcaster.wants().max_pixel_count_step_up); 117 EXPECT_EQ(640 * 360, *broadcaster.wants().max_pixel_count_step_up);
128 118
129 broadcaster.RemoveSink(&sink2); 119 broadcaster.RemoveSink(&sink2);
130 EXPECT_EQ(1280 * 720, *broadcaster.wants().max_pixel_count_step_up); 120 EXPECT_EQ(1280 * 720, *broadcaster.wants().max_pixel_count_step_up);
131 } 121 }
122
123 TEST(VideoBroadcasterTest, SinkWantsBlackFrames) {
124 VideoBroadcaster broadcaster;
125 EXPECT_TRUE(!broadcaster.wants().black_frames);
126
127 FakeVideoRenderer sink1;
128 VideoSinkWants wants1;
129 wants1.black_frames = true;
130 broadcaster.AddOrUpdateSink(&sink1, wants1);
131
132 FakeVideoRenderer sink2;
133 VideoSinkWants wants2;
134 wants1.black_frames = false;
135 broadcaster.AddOrUpdateSink(&sink2, wants2);
136
137 cricket::WebRtcVideoFrame frame1;
138 frame1.InitToBlack(100, 200, 10 /*ts*/);
139 // Make it not all-black
140 frame1.GetUPlane()[0] = 0;
141 broadcaster.OnFrame(frame1);
142 EXPECT_TRUE(sink1.black_frame());
143 EXPECT_EQ(10, sink1.timestamp());
144 EXPECT_FALSE(sink2.black_frame());
145 EXPECT_EQ(10, sink2.timestamp());
146
147 // Switch the sink wants.
148 wants1.black_frames = false;
149 broadcaster.AddOrUpdateSink(&sink1, wants1);
150 wants2.black_frames = true;
151 broadcaster.AddOrUpdateSink(&sink2, wants2);
152
153 cricket::WebRtcVideoFrame frame2;
154 frame2.InitToBlack(100, 200, 30 /*ts*/);
155 // Make it not all-black
156 frame2.GetUPlane()[0] = 0;
157 broadcaster.OnFrame(frame2);
158 EXPECT_FALSE(sink1.black_frame());
159 EXPECT_EQ(30, sink1.timestamp());
160 EXPECT_TRUE(sink2.black_frame());
161 EXPECT_EQ(30, sink2.timestamp());
162 }
OLDNEW
« no previous file with comments | « webrtc/media/base/videobroadcaster.cc ('k') | webrtc/media/base/videosourcebase.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698