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

Side by Side Diff: media/cast/framer/framer_unittest.cc

Issue 148663003: Cast: Refactor framer to Clang format (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 6 years, 10 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 | Annotate | Revision Log
« no previous file with comments | « media/cast/framer/framer.cc ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2013 The Chromium Authors. All rights reserved. 1 // Copyright 2013 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "base/test/simple_test_tick_clock.h" 5 #include "base/test/simple_test_tick_clock.h"
6 #include "media/cast/framer/framer.h" 6 #include "media/cast/framer/framer.h"
7 #include "media/cast/rtp_receiver/mock_rtp_payload_feedback.h" 7 #include "media/cast/rtp_receiver/mock_rtp_payload_feedback.h"
8 #include "testing/gtest/include/gtest/gtest.h" 8 #include "testing/gtest/include/gtest/gtest.h"
9 9
10 namespace media { 10 namespace media {
11 namespace cast { 11 namespace cast {
12 12
13 class FramerTest : public ::testing::Test { 13 class FramerTest : public ::testing::Test {
14 protected: 14 protected:
15 FramerTest() 15 FramerTest()
16 : mock_rtp_payload_feedback_(), 16 : mock_rtp_payload_feedback_(),
17 framer_(&testing_clock_, &mock_rtp_payload_feedback_, 0, true, 0) { 17 framer_(&testing_clock_, &mock_rtp_payload_feedback_, 0, true, 0) {
18 }
19
20 virtual ~FramerTest() {}
21
22 virtual void SetUp() OVERRIDE {
23 // Build a default one packet frame - populate webrtc header. 18 // Build a default one packet frame - populate webrtc header.
24 rtp_header_.is_key_frame = false; 19 rtp_header_.is_key_frame = false;
25 rtp_header_.frame_id = 0; 20 rtp_header_.frame_id = 0;
26 rtp_header_.packet_id = 0; 21 rtp_header_.packet_id = 0;
27 rtp_header_.max_packet_id = 0; 22 rtp_header_.max_packet_id = 0;
28 rtp_header_.is_reference = false; 23 rtp_header_.is_reference = false;
29 rtp_header_.reference_frame_id = 0; 24 rtp_header_.reference_frame_id = 0;
30 payload_.assign(kMaxIpPacketSize, 0); 25 payload_.assign(kMaxIpPacketSize, 0);
31 26
32 EXPECT_CALL(mock_rtp_payload_feedback_, 27 EXPECT_CALL(mock_rtp_payload_feedback_, CastFeedback(testing::_))
33 CastFeedback(testing::_)).WillRepeatedly(testing::Return()); 28 .WillRepeatedly(testing::Return());
34 } 29 }
35 30
31 virtual ~FramerTest() {}
32
36 std::vector<uint8> payload_; 33 std::vector<uint8> payload_;
37 RtpCastHeader rtp_header_; 34 RtpCastHeader rtp_header_;
38 MockRtpPayloadFeedback mock_rtp_payload_feedback_; 35 MockRtpPayloadFeedback mock_rtp_payload_feedback_;
39 Framer framer_; 36 Framer framer_;
40 base::SimpleTestTickClock testing_clock_; 37 base::SimpleTestTickClock testing_clock_;
38
39 DISALLOW_COPY_AND_ASSIGN(FramerTest);
41 }; 40 };
42 41
43
44 TEST_F(FramerTest, EmptyState) { 42 TEST_F(FramerTest, EmptyState) {
45 transport::EncodedVideoFrame frame; 43 transport::EncodedVideoFrame frame;
46 uint32 rtp_timestamp; 44 uint32 rtp_timestamp;
47 bool next_frame = false; 45 bool next_frame = false;
48 EXPECT_FALSE(framer_.GetEncodedVideoFrame(&frame, &rtp_timestamp, 46 EXPECT_FALSE(
49 &next_frame)); 47 framer_.GetEncodedVideoFrame(&frame, &rtp_timestamp, &next_frame));
50 } 48 }
51 49
52 TEST_F(FramerTest, AlwaysStartWithKey) { 50 TEST_F(FramerTest, AlwaysStartWithKey) {
53 transport::EncodedVideoFrame frame; 51 transport::EncodedVideoFrame frame;
54 uint32 rtp_timestamp; 52 uint32 rtp_timestamp;
55 bool next_frame = false; 53 bool next_frame = false;
56 bool complete = false; 54 bool complete = false;
57 bool duplicate = false; 55 bool duplicate = false;
58 56
59 // Insert non key first frame. 57 // Insert non key first frame.
60 complete = framer_.InsertPacket(payload_.data(), payload_.size(), rtp_header_, 58 complete = framer_.InsertPacket(
61 &duplicate); 59 payload_.data(), payload_.size(), rtp_header_, &duplicate);
62 EXPECT_TRUE(complete); 60 EXPECT_TRUE(complete);
63 EXPECT_FALSE(framer_.GetEncodedVideoFrame(&frame, &rtp_timestamp, 61 EXPECT_FALSE(
64 &next_frame)); 62 framer_.GetEncodedVideoFrame(&frame, &rtp_timestamp, &next_frame));
65 rtp_header_.frame_id = 1; 63 rtp_header_.frame_id = 1;
66 rtp_header_.is_key_frame = true; 64 rtp_header_.is_key_frame = true;
67 complete = framer_.InsertPacket(payload_.data(), payload_.size(), rtp_header_, 65 complete = framer_.InsertPacket(
68 &duplicate); 66 payload_.data(), payload_.size(), rtp_header_, &duplicate);
69 EXPECT_TRUE(complete); 67 EXPECT_TRUE(complete);
70 EXPECT_TRUE(framer_.GetEncodedVideoFrame(&frame, &rtp_timestamp, 68 EXPECT_TRUE(
71 &next_frame)); 69 framer_.GetEncodedVideoFrame(&frame, &rtp_timestamp, &next_frame));
72 EXPECT_TRUE(next_frame); 70 EXPECT_TRUE(next_frame);
73 EXPECT_EQ(1u, frame.frame_id); 71 EXPECT_EQ(1u, frame.frame_id);
74 EXPECT_TRUE(frame.key_frame); 72 EXPECT_TRUE(frame.key_frame);
75 framer_.ReleaseFrame(frame.frame_id); 73 framer_.ReleaseFrame(frame.frame_id);
76 } 74 }
77 75
78 TEST_F(FramerTest, CompleteFrame) { 76 TEST_F(FramerTest, CompleteFrame) {
79 transport::EncodedVideoFrame frame; 77 transport::EncodedVideoFrame frame;
80 uint32 rtp_timestamp; 78 uint32 rtp_timestamp;
81 bool next_frame = false; 79 bool next_frame = false;
82 bool complete = false; 80 bool complete = false;
83 bool duplicate = false; 81 bool duplicate = false;
84 82
85 // Start with a complete key frame. 83 // Start with a complete key frame.
86 rtp_header_.is_key_frame = true; 84 rtp_header_.is_key_frame = true;
87 complete = framer_.InsertPacket(payload_.data(), payload_.size(), rtp_header_, 85 complete = framer_.InsertPacket(
88 &duplicate); 86 payload_.data(), payload_.size(), rtp_header_, &duplicate);
89 EXPECT_TRUE(complete); 87 EXPECT_TRUE(complete);
90 EXPECT_TRUE(framer_.GetEncodedVideoFrame(&frame, &rtp_timestamp, 88 EXPECT_TRUE(
91 &next_frame)); 89 framer_.GetEncodedVideoFrame(&frame, &rtp_timestamp, &next_frame));
92 EXPECT_TRUE(next_frame); 90 EXPECT_TRUE(next_frame);
93 EXPECT_EQ(0u, frame.frame_id); 91 EXPECT_EQ(0u, frame.frame_id);
94 EXPECT_TRUE(frame.key_frame); 92 EXPECT_TRUE(frame.key_frame);
95 framer_.ReleaseFrame(frame.frame_id); 93 framer_.ReleaseFrame(frame.frame_id);
96 94
97 // Incomplete delta. 95 // Incomplete delta.
98 ++rtp_header_.frame_id; 96 ++rtp_header_.frame_id;
99 rtp_header_.is_key_frame = false; 97 rtp_header_.is_key_frame = false;
100 rtp_header_.max_packet_id = 2; 98 rtp_header_.max_packet_id = 2;
101 complete = framer_.InsertPacket(payload_.data(), payload_.size(), rtp_header_, 99 complete = framer_.InsertPacket(
102 &duplicate); 100 payload_.data(), payload_.size(), rtp_header_, &duplicate);
103 EXPECT_FALSE(complete); 101 EXPECT_FALSE(complete);
104 EXPECT_FALSE(framer_.GetEncodedVideoFrame(&frame, &rtp_timestamp, 102 EXPECT_FALSE(
105 &next_frame)); 103 framer_.GetEncodedVideoFrame(&frame, &rtp_timestamp, &next_frame));
106 104
107 // Complete delta - can't skip, as incomplete sequence. 105 // Complete delta - can't skip, as incomplete sequence.
108 ++rtp_header_.frame_id; 106 ++rtp_header_.frame_id;
109 rtp_header_.max_packet_id = 0; 107 rtp_header_.max_packet_id = 0;
110 complete = framer_.InsertPacket(payload_.data(), payload_.size(), rtp_header_, 108 complete = framer_.InsertPacket(
111 &duplicate); 109 payload_.data(), payload_.size(), rtp_header_, &duplicate);
112 EXPECT_TRUE(complete); 110 EXPECT_TRUE(complete);
113 EXPECT_FALSE(framer_.GetEncodedVideoFrame(&frame, &rtp_timestamp, 111 EXPECT_FALSE(
114 &next_frame)); 112 framer_.GetEncodedVideoFrame(&frame, &rtp_timestamp, &next_frame));
115 } 113 }
116 114
117 TEST_F(FramerTest, DuplicatePackets) { 115 TEST_F(FramerTest, DuplicatePackets) {
118 transport::EncodedVideoFrame frame; 116 transport::EncodedVideoFrame frame;
119 uint32 rtp_timestamp; 117 uint32 rtp_timestamp;
120 bool next_frame = false; 118 bool next_frame = false;
121 bool complete = false; 119 bool complete = false;
122 bool duplicate = false; 120 bool duplicate = false;
123 121
124 // Start with an incomplete key frame. 122 // Start with an incomplete key frame.
125 rtp_header_.is_key_frame = true; 123 rtp_header_.is_key_frame = true;
126 rtp_header_.max_packet_id = 1; 124 rtp_header_.max_packet_id = 1;
127 duplicate = true; 125 duplicate = true;
128 complete = framer_.InsertPacket(payload_.data(), payload_.size(), rtp_header_, 126 complete = framer_.InsertPacket(
129 &duplicate); 127 payload_.data(), payload_.size(), rtp_header_, &duplicate);
130 EXPECT_FALSE(complete); 128 EXPECT_FALSE(complete);
131 EXPECT_FALSE(duplicate); 129 EXPECT_FALSE(duplicate);
132 EXPECT_FALSE(framer_.GetEncodedVideoFrame(&frame, &rtp_timestamp, 130 EXPECT_FALSE(
133 &next_frame)); 131 framer_.GetEncodedVideoFrame(&frame, &rtp_timestamp, &next_frame));
134 132
135 // Add same packet again in incomplete key frame. 133 // Add same packet again in incomplete key frame.
136 duplicate = false; 134 duplicate = false;
137 complete = framer_.InsertPacket(payload_.data(), payload_.size(), rtp_header_, 135 complete = framer_.InsertPacket(
138 &duplicate); 136 payload_.data(), payload_.size(), rtp_header_, &duplicate);
139 EXPECT_FALSE(complete); 137 EXPECT_FALSE(complete);
140 EXPECT_TRUE(duplicate); 138 EXPECT_TRUE(duplicate);
141 EXPECT_FALSE(framer_.GetEncodedVideoFrame(&frame, &rtp_timestamp, 139 EXPECT_FALSE(
142 &next_frame)); 140 framer_.GetEncodedVideoFrame(&frame, &rtp_timestamp, &next_frame));
143 141
144 // Complete key frame. 142 // Complete key frame.
145 rtp_header_.packet_id = 1; 143 rtp_header_.packet_id = 1;
146 duplicate = true; 144 duplicate = true;
147 complete = framer_.InsertPacket(payload_.data(), payload_.size(), rtp_header_, 145 complete = framer_.InsertPacket(
148 &duplicate); 146 payload_.data(), payload_.size(), rtp_header_, &duplicate);
149 EXPECT_TRUE(complete); 147 EXPECT_TRUE(complete);
150 EXPECT_FALSE(duplicate); 148 EXPECT_FALSE(duplicate);
151 EXPECT_TRUE(framer_.GetEncodedVideoFrame(&frame, &rtp_timestamp, 149 EXPECT_TRUE(
152 &next_frame)); 150 framer_.GetEncodedVideoFrame(&frame, &rtp_timestamp, &next_frame));
153 EXPECT_EQ(0u, frame.frame_id); 151 EXPECT_EQ(0u, frame.frame_id);
154 152
155 // Add same packet again in complete key frame. 153 // Add same packet again in complete key frame.
156 duplicate = false; 154 duplicate = false;
157 complete = framer_.InsertPacket(payload_.data(), payload_.size(), rtp_header_, 155 complete = framer_.InsertPacket(
158 &duplicate); 156 payload_.data(), payload_.size(), rtp_header_, &duplicate);
159 EXPECT_FALSE(complete); 157 EXPECT_FALSE(complete);
160 EXPECT_TRUE(duplicate); 158 EXPECT_TRUE(duplicate);
161 EXPECT_TRUE(framer_.GetEncodedVideoFrame(&frame, &rtp_timestamp, 159 EXPECT_TRUE(
162 &next_frame)); 160 framer_.GetEncodedVideoFrame(&frame, &rtp_timestamp, &next_frame));
163 EXPECT_EQ(0u, frame.frame_id); 161 EXPECT_EQ(0u, frame.frame_id);
164 framer_.ReleaseFrame(frame.frame_id); 162 framer_.ReleaseFrame(frame.frame_id);
165 163
166 // Incomplete delta frame. 164 // Incomplete delta frame.
167 ++rtp_header_.frame_id; 165 ++rtp_header_.frame_id;
168 rtp_header_.packet_id = 0; 166 rtp_header_.packet_id = 0;
169 rtp_header_.is_key_frame = false; 167 rtp_header_.is_key_frame = false;
170 duplicate = true; 168 duplicate = true;
171 complete = framer_.InsertPacket(payload_.data(), payload_.size(), rtp_header_, 169 complete = framer_.InsertPacket(
172 &duplicate); 170 payload_.data(), payload_.size(), rtp_header_, &duplicate);
173 EXPECT_FALSE(complete); 171 EXPECT_FALSE(complete);
174 EXPECT_FALSE(duplicate); 172 EXPECT_FALSE(duplicate);
175 EXPECT_FALSE(framer_.GetEncodedVideoFrame(&frame, &rtp_timestamp, 173 EXPECT_FALSE(
176 &next_frame)); 174 framer_.GetEncodedVideoFrame(&frame, &rtp_timestamp, &next_frame));
177 175
178 // Add same packet again in incomplete delta frame. 176 // Add same packet again in incomplete delta frame.
179 duplicate = false; 177 duplicate = false;
180 complete = framer_.InsertPacket(payload_.data(), payload_.size(), rtp_header_, 178 complete = framer_.InsertPacket(
181 &duplicate); 179 payload_.data(), payload_.size(), rtp_header_, &duplicate);
182 EXPECT_FALSE(complete); 180 EXPECT_FALSE(complete);
183 EXPECT_TRUE(duplicate); 181 EXPECT_TRUE(duplicate);
184 EXPECT_FALSE(framer_.GetEncodedVideoFrame(&frame, &rtp_timestamp, 182 EXPECT_FALSE(
185 &next_frame)); 183 framer_.GetEncodedVideoFrame(&frame, &rtp_timestamp, &next_frame));
186 184
187 // Complete delta frame. 185 // Complete delta frame.
188 rtp_header_.packet_id = 1; 186 rtp_header_.packet_id = 1;
189 duplicate = true; 187 duplicate = true;
190 complete = framer_.InsertPacket(payload_.data(), payload_.size(), rtp_header_, 188 complete = framer_.InsertPacket(
191 &duplicate); 189 payload_.data(), payload_.size(), rtp_header_, &duplicate);
192 EXPECT_TRUE(complete); 190 EXPECT_TRUE(complete);
193 EXPECT_FALSE(duplicate); 191 EXPECT_FALSE(duplicate);
194 EXPECT_TRUE(framer_.GetEncodedVideoFrame(&frame, &rtp_timestamp, 192 EXPECT_TRUE(
195 &next_frame)); 193 framer_.GetEncodedVideoFrame(&frame, &rtp_timestamp, &next_frame));
196 EXPECT_EQ(1u, frame.frame_id); 194 EXPECT_EQ(1u, frame.frame_id);
197 195
198 // Add same packet again in complete delta frame. 196 // Add same packet again in complete delta frame.
199 duplicate = false; 197 duplicate = false;
200 complete = framer_.InsertPacket(payload_.data(), payload_.size(), rtp_header_, 198 complete = framer_.InsertPacket(
201 &duplicate); 199 payload_.data(), payload_.size(), rtp_header_, &duplicate);
202 EXPECT_FALSE(complete); 200 EXPECT_FALSE(complete);
203 EXPECT_TRUE(duplicate); 201 EXPECT_TRUE(duplicate);
204 EXPECT_TRUE(framer_.GetEncodedVideoFrame(&frame, &rtp_timestamp, 202 EXPECT_TRUE(
205 &next_frame)); 203 framer_.GetEncodedVideoFrame(&frame, &rtp_timestamp, &next_frame));
206 EXPECT_EQ(1u, frame.frame_id); 204 EXPECT_EQ(1u, frame.frame_id);
207 } 205 }
208 206
209 TEST_F(FramerTest, ContinuousSequence) { 207 TEST_F(FramerTest, ContinuousSequence) {
210 transport::EncodedVideoFrame frame; 208 transport::EncodedVideoFrame frame;
211 uint32 rtp_timestamp; 209 uint32 rtp_timestamp;
212 bool next_frame = false; 210 bool next_frame = false;
213 bool complete = false; 211 bool complete = false;
214 bool duplicate = false; 212 bool duplicate = false;
215 213
216 // Start with a complete key frame. 214 // Start with a complete key frame.
217 rtp_header_.is_key_frame = true; 215 rtp_header_.is_key_frame = true;
218 complete = framer_.InsertPacket(payload_.data(), payload_.size(), rtp_header_, 216 complete = framer_.InsertPacket(
219 &duplicate); 217 payload_.data(), payload_.size(), rtp_header_, &duplicate);
220 EXPECT_TRUE(complete); 218 EXPECT_TRUE(complete);
221 EXPECT_TRUE(framer_.GetEncodedVideoFrame(&frame, &rtp_timestamp, 219 EXPECT_TRUE(
222 &next_frame)); 220 framer_.GetEncodedVideoFrame(&frame, &rtp_timestamp, &next_frame));
223 EXPECT_TRUE(next_frame); 221 EXPECT_TRUE(next_frame);
224 EXPECT_EQ(0u, frame.frame_id); 222 EXPECT_EQ(0u, frame.frame_id);
225 EXPECT_TRUE(frame.key_frame); 223 EXPECT_TRUE(frame.key_frame);
226 framer_.ReleaseFrame(frame.frame_id); 224 framer_.ReleaseFrame(frame.frame_id);
227 225
228 // Complete - not continuous. 226 // Complete - not continuous.
229 rtp_header_.frame_id = 2; 227 rtp_header_.frame_id = 2;
230 rtp_header_.is_key_frame = false; 228 rtp_header_.is_key_frame = false;
231 complete = framer_.InsertPacket(payload_.data(), payload_.size(), rtp_header_, 229 complete = framer_.InsertPacket(
232 &duplicate); 230 payload_.data(), payload_.size(), rtp_header_, &duplicate);
233 EXPECT_TRUE(complete); 231 EXPECT_TRUE(complete);
234 EXPECT_FALSE(framer_.GetEncodedVideoFrame(&frame, &rtp_timestamp, 232 EXPECT_FALSE(
235 &next_frame)); 233 framer_.GetEncodedVideoFrame(&frame, &rtp_timestamp, &next_frame));
236 } 234 }
237 235
238 TEST_F(FramerTest, Wrap) { 236 TEST_F(FramerTest, Wrap) {
239 // Insert key frame, frame_id = 255 (will jump to that) 237 // Insert key frame, frame_id = 255 (will jump to that)
240 transport::EncodedVideoFrame frame; 238 transport::EncodedVideoFrame frame;
241 uint32 rtp_timestamp; 239 uint32 rtp_timestamp;
242 bool next_frame = false; 240 bool next_frame = false;
243 bool duplicate = false; 241 bool duplicate = false;
244 242
245 // Start with a complete key frame. 243 // Start with a complete key frame.
246 rtp_header_.is_key_frame = true; 244 rtp_header_.is_key_frame = true;
247 rtp_header_.frame_id = 255u; 245 rtp_header_.frame_id = 255u;
248 framer_.InsertPacket(payload_.data(), payload_.size(), rtp_header_, 246 framer_.InsertPacket(
249 &duplicate); 247 payload_.data(), payload_.size(), rtp_header_, &duplicate);
250 EXPECT_TRUE(framer_.GetEncodedVideoFrame(&frame, &rtp_timestamp, 248 EXPECT_TRUE(
251 &next_frame)); 249 framer_.GetEncodedVideoFrame(&frame, &rtp_timestamp, &next_frame));
252 EXPECT_TRUE(next_frame); 250 EXPECT_TRUE(next_frame);
253 EXPECT_EQ(255u, frame.frame_id); 251 EXPECT_EQ(255u, frame.frame_id);
254 framer_.ReleaseFrame(frame.frame_id); 252 framer_.ReleaseFrame(frame.frame_id);
255 253
256 // Insert wrapped delta frame - should be continuous. 254 // Insert wrapped delta frame - should be continuous.
257 rtp_header_.is_key_frame = false; 255 rtp_header_.is_key_frame = false;
258 rtp_header_.frame_id = 256; 256 rtp_header_.frame_id = 256;
259 framer_.InsertPacket(payload_.data(), payload_.size(), rtp_header_, 257 framer_.InsertPacket(
260 &duplicate); 258 payload_.data(), payload_.size(), rtp_header_, &duplicate);
261 EXPECT_TRUE(framer_.GetEncodedVideoFrame(&frame, &rtp_timestamp, 259 EXPECT_TRUE(
262 &next_frame)); 260 framer_.GetEncodedVideoFrame(&frame, &rtp_timestamp, &next_frame));
263 EXPECT_TRUE(next_frame); 261 EXPECT_TRUE(next_frame);
264 EXPECT_EQ(256u, frame.frame_id); 262 EXPECT_EQ(256u, frame.frame_id);
265 framer_.ReleaseFrame(frame.frame_id); 263 framer_.ReleaseFrame(frame.frame_id);
266 } 264 }
267 265
268 TEST_F(FramerTest, Reset) { 266 TEST_F(FramerTest, Reset) {
269 transport::EncodedVideoFrame frame; 267 transport::EncodedVideoFrame frame;
270 uint32 rtp_timestamp; 268 uint32 rtp_timestamp;
271 bool next_frame = false; 269 bool next_frame = false;
272 bool complete = false; 270 bool complete = false;
273 bool duplicate = false; 271 bool duplicate = false;
274 272
275 // Start with a complete key frame. 273 // Start with a complete key frame.
276 rtp_header_.is_key_frame = true; 274 rtp_header_.is_key_frame = true;
277 complete = framer_.InsertPacket(payload_.data(), payload_.size(), rtp_header_, 275 complete = framer_.InsertPacket(
278 &duplicate); 276 payload_.data(), payload_.size(), rtp_header_, &duplicate);
279 EXPECT_TRUE(complete); 277 EXPECT_TRUE(complete);
280 framer_.Reset(); 278 framer_.Reset();
281 EXPECT_FALSE(framer_.GetEncodedVideoFrame(&frame, &rtp_timestamp, 279 EXPECT_FALSE(
282 &next_frame)); 280 framer_.GetEncodedVideoFrame(&frame, &rtp_timestamp, &next_frame));
283 } 281 }
284 282
285 TEST_F(FramerTest, RequireKeyAfterReset) { 283 TEST_F(FramerTest, RequireKeyAfterReset) {
286 transport::EncodedVideoFrame frame; 284 transport::EncodedVideoFrame frame;
287 uint32 rtp_timestamp; 285 uint32 rtp_timestamp;
288 bool next_frame = false; 286 bool next_frame = false;
289 bool duplicate = false; 287 bool duplicate = false;
290 288
291 framer_.Reset(); 289 framer_.Reset();
292 290
293 // Start with a complete key frame. 291 // Start with a complete key frame.
294 rtp_header_.is_key_frame = false; 292 rtp_header_.is_key_frame = false;
295 rtp_header_.frame_id = 0u; 293 rtp_header_.frame_id = 0u;
296 framer_.InsertPacket(payload_.data(), payload_.size(), rtp_header_, 294 framer_.InsertPacket(
297 &duplicate); 295 payload_.data(), payload_.size(), rtp_header_, &duplicate);
298 EXPECT_FALSE(framer_.GetEncodedVideoFrame(&frame, &rtp_timestamp, 296 EXPECT_FALSE(
299 &next_frame)); 297 framer_.GetEncodedVideoFrame(&frame, &rtp_timestamp, &next_frame));
300 rtp_header_.frame_id = 1; 298 rtp_header_.frame_id = 1;
301 rtp_header_.is_key_frame = true; 299 rtp_header_.is_key_frame = true;
302 framer_.InsertPacket(payload_.data(), payload_.size(), rtp_header_, 300 framer_.InsertPacket(
303 &duplicate); 301 payload_.data(), payload_.size(), rtp_header_, &duplicate);
304 EXPECT_TRUE(framer_.GetEncodedVideoFrame(&frame, &rtp_timestamp, 302 EXPECT_TRUE(
305 &next_frame)); 303 framer_.GetEncodedVideoFrame(&frame, &rtp_timestamp, &next_frame));
306 EXPECT_TRUE(next_frame); 304 EXPECT_TRUE(next_frame);
307 } 305 }
308 306
309 TEST_F(FramerTest, BasicNonLastReferenceId) { 307 TEST_F(FramerTest, BasicNonLastReferenceId) {
310 transport::EncodedVideoFrame frame; 308 transport::EncodedVideoFrame frame;
311 uint32 rtp_timestamp; 309 uint32 rtp_timestamp;
312 bool next_frame = false; 310 bool next_frame = false;
313 bool duplicate = false; 311 bool duplicate = false;
314 312
315 rtp_header_.is_key_frame = true; 313 rtp_header_.is_key_frame = true;
316 rtp_header_.frame_id = 0; 314 rtp_header_.frame_id = 0;
317 framer_.InsertPacket(payload_.data(), payload_.size(), rtp_header_, 315 framer_.InsertPacket(
318 &duplicate); 316 payload_.data(), payload_.size(), rtp_header_, &duplicate);
319 317
320 EXPECT_TRUE(framer_.GetEncodedVideoFrame(&frame, &rtp_timestamp, 318 EXPECT_TRUE(
321 &next_frame)); 319 framer_.GetEncodedVideoFrame(&frame, &rtp_timestamp, &next_frame));
322 framer_.ReleaseFrame(frame.frame_id); 320 framer_.ReleaseFrame(frame.frame_id);
323 321
324 rtp_header_.is_key_frame = false; 322 rtp_header_.is_key_frame = false;
325 rtp_header_.is_reference = true; 323 rtp_header_.is_reference = true;
326 rtp_header_.reference_frame_id = 0; 324 rtp_header_.reference_frame_id = 0;
327 rtp_header_.frame_id = 5u; 325 rtp_header_.frame_id = 5u;
328 framer_.InsertPacket(payload_.data(), payload_.size(), rtp_header_, 326 framer_.InsertPacket(
329 &duplicate); 327 payload_.data(), payload_.size(), rtp_header_, &duplicate);
330 328
331 EXPECT_TRUE(framer_.GetEncodedVideoFrame(&frame, &rtp_timestamp, 329 EXPECT_TRUE(
332 &next_frame)); 330 framer_.GetEncodedVideoFrame(&frame, &rtp_timestamp, &next_frame));
333 EXPECT_FALSE(next_frame); 331 EXPECT_FALSE(next_frame);
334 } 332 }
335 333
336 TEST_F(FramerTest, InOrderReferenceFrameSelection) { 334 TEST_F(FramerTest, InOrderReferenceFrameSelection) {
337 // Create pattern: 0, 1, 4, 5. 335 // Create pattern: 0, 1, 4, 5.
338 transport::EncodedVideoFrame frame; 336 transport::EncodedVideoFrame frame;
339 uint32 rtp_timestamp; 337 uint32 rtp_timestamp;
340 bool next_frame = false; 338 bool next_frame = false;
341 bool duplicate = false; 339 bool duplicate = false;
342 340
343 rtp_header_.is_key_frame = true; 341 rtp_header_.is_key_frame = true;
344 rtp_header_.frame_id = 0; 342 rtp_header_.frame_id = 0;
345 framer_.InsertPacket(payload_.data(), payload_.size(), rtp_header_, 343 framer_.InsertPacket(
346 &duplicate); 344 payload_.data(), payload_.size(), rtp_header_, &duplicate);
347 rtp_header_.is_key_frame = false; 345 rtp_header_.is_key_frame = false;
348 rtp_header_.frame_id = 1; 346 rtp_header_.frame_id = 1;
349 framer_.InsertPacket(payload_.data(), payload_.size(), rtp_header_, 347 framer_.InsertPacket(
350 &duplicate); 348 payload_.data(), payload_.size(), rtp_header_, &duplicate);
351 349
352 // Insert frame #2 partially. 350 // Insert frame #2 partially.
353 rtp_header_.frame_id = 2; 351 rtp_header_.frame_id = 2;
354 rtp_header_.max_packet_id = 1; 352 rtp_header_.max_packet_id = 1;
355 framer_.InsertPacket(payload_.data(), payload_.size(), rtp_header_, 353 framer_.InsertPacket(
356 &duplicate); 354 payload_.data(), payload_.size(), rtp_header_, &duplicate);
357 rtp_header_.frame_id = 4; 355 rtp_header_.frame_id = 4;
358 rtp_header_.max_packet_id = 0; 356 rtp_header_.max_packet_id = 0;
359 rtp_header_.is_reference = true; 357 rtp_header_.is_reference = true;
360 rtp_header_.reference_frame_id = 0; 358 rtp_header_.reference_frame_id = 0;
361 framer_.InsertPacket(payload_.data(), payload_.size(), rtp_header_, 359 framer_.InsertPacket(
362 &duplicate); 360 payload_.data(), payload_.size(), rtp_header_, &duplicate);
363 EXPECT_TRUE(framer_.GetEncodedVideoFrame(&frame, &rtp_timestamp, 361 EXPECT_TRUE(
364 &next_frame)); 362 framer_.GetEncodedVideoFrame(&frame, &rtp_timestamp, &next_frame));
365 EXPECT_EQ(0u, frame.frame_id); 363 EXPECT_EQ(0u, frame.frame_id);
366 framer_.ReleaseFrame(frame.frame_id); 364 framer_.ReleaseFrame(frame.frame_id);
367 EXPECT_TRUE(framer_.GetEncodedVideoFrame(&frame, &rtp_timestamp, 365 EXPECT_TRUE(
368 &next_frame)); 366 framer_.GetEncodedVideoFrame(&frame, &rtp_timestamp, &next_frame));
369 EXPECT_TRUE(next_frame); 367 EXPECT_TRUE(next_frame);
370 EXPECT_EQ(1u, frame.frame_id); 368 EXPECT_EQ(1u, frame.frame_id);
371 framer_.ReleaseFrame(frame.frame_id); 369 framer_.ReleaseFrame(frame.frame_id);
372 EXPECT_TRUE(framer_.GetEncodedVideoFrame(&frame, &rtp_timestamp, 370 EXPECT_TRUE(
373 &next_frame)); 371 framer_.GetEncodedVideoFrame(&frame, &rtp_timestamp, &next_frame));
374 EXPECT_FALSE(next_frame); 372 EXPECT_FALSE(next_frame);
375 EXPECT_EQ(4u, frame.frame_id); 373 EXPECT_EQ(4u, frame.frame_id);
376 framer_.ReleaseFrame(frame.frame_id); 374 framer_.ReleaseFrame(frame.frame_id);
377 // Insert remaining packet of frame #2 - should no be continuous. 375 // Insert remaining packet of frame #2 - should no be continuous.
378 rtp_header_.frame_id = 2; 376 rtp_header_.frame_id = 2;
379 rtp_header_.packet_id = 1; 377 rtp_header_.packet_id = 1;
380 framer_.InsertPacket(payload_.data(), payload_.size(), rtp_header_, 378 framer_.InsertPacket(
381 &duplicate); 379 payload_.data(), payload_.size(), rtp_header_, &duplicate);
382 EXPECT_FALSE(framer_.GetEncodedVideoFrame(&frame, &rtp_timestamp, 380 EXPECT_FALSE(
383 &next_frame)); 381 framer_.GetEncodedVideoFrame(&frame, &rtp_timestamp, &next_frame));
384 rtp_header_.is_reference = false; 382 rtp_header_.is_reference = false;
385 rtp_header_.frame_id = 5; 383 rtp_header_.frame_id = 5;
386 rtp_header_.packet_id = 0; 384 rtp_header_.packet_id = 0;
387 rtp_header_.max_packet_id = 0; 385 rtp_header_.max_packet_id = 0;
388 framer_.InsertPacket(payload_.data(), payload_.size(), rtp_header_, 386 framer_.InsertPacket(
389 &duplicate); 387 payload_.data(), payload_.size(), rtp_header_, &duplicate);
390 EXPECT_TRUE(framer_.GetEncodedVideoFrame(&frame, &rtp_timestamp, 388 EXPECT_TRUE(
391 &next_frame)); 389 framer_.GetEncodedVideoFrame(&frame, &rtp_timestamp, &next_frame));
392 EXPECT_TRUE(next_frame); 390 EXPECT_TRUE(next_frame);
393 EXPECT_EQ(5u, frame.frame_id); 391 EXPECT_EQ(5u, frame.frame_id);
394 } 392 }
395 393
396 TEST_F(FramerTest, AudioWrap) { 394 TEST_F(FramerTest, AudioWrap) {
397 // All audio frames are marked as key frames. 395 // All audio frames are marked as key frames.
398 transport::EncodedAudioFrame frame; 396 transport::EncodedAudioFrame frame;
399 uint32 rtp_timestamp; 397 uint32 rtp_timestamp;
400 bool next_frame = false; 398 bool next_frame = false;
401 bool duplicate = false; 399 bool duplicate = false;
402 400
403 rtp_header_.is_key_frame = true; 401 rtp_header_.is_key_frame = true;
404 rtp_header_.frame_id = 254; 402 rtp_header_.frame_id = 254;
405 403
406 framer_.InsertPacket(payload_.data(), payload_.size(), rtp_header_, 404 framer_.InsertPacket(
407 &duplicate); 405 payload_.data(), payload_.size(), rtp_header_, &duplicate);
408 EXPECT_TRUE(framer_.GetEncodedAudioFrame(&frame, &rtp_timestamp, 406 EXPECT_TRUE(
409 &next_frame)); 407 framer_.GetEncodedAudioFrame(&frame, &rtp_timestamp, &next_frame));
410 EXPECT_TRUE(next_frame); 408 EXPECT_TRUE(next_frame);
411 EXPECT_EQ(254u, frame.frame_id); 409 EXPECT_EQ(254u, frame.frame_id);
412 framer_.ReleaseFrame(frame.frame_id); 410 framer_.ReleaseFrame(frame.frame_id);
413 411
414 rtp_header_.frame_id = 255; 412 rtp_header_.frame_id = 255;
415 framer_.InsertPacket(payload_.data(), payload_.size(), rtp_header_, 413 framer_.InsertPacket(
416 &duplicate); 414 payload_.data(), payload_.size(), rtp_header_, &duplicate);
417 415
418 // Insert wrapped frame - should be continuous. 416 // Insert wrapped frame - should be continuous.
419 rtp_header_.frame_id = 256; 417 rtp_header_.frame_id = 256;
420 framer_.InsertPacket(payload_.data(), payload_.size(), rtp_header_, 418 framer_.InsertPacket(
421 &duplicate); 419 payload_.data(), payload_.size(), rtp_header_, &duplicate);
422 420
423 EXPECT_TRUE(framer_.GetEncodedAudioFrame(&frame, &rtp_timestamp, 421 EXPECT_TRUE(
424 &next_frame)); 422 framer_.GetEncodedAudioFrame(&frame, &rtp_timestamp, &next_frame));
425 EXPECT_TRUE(next_frame); 423 EXPECT_TRUE(next_frame);
426 EXPECT_EQ(255u, frame.frame_id); 424 EXPECT_EQ(255u, frame.frame_id);
427 framer_.ReleaseFrame(frame.frame_id); 425 framer_.ReleaseFrame(frame.frame_id);
428 426
429 EXPECT_TRUE(framer_.GetEncodedAudioFrame(&frame, &rtp_timestamp, 427 EXPECT_TRUE(
430 &next_frame)); 428 framer_.GetEncodedAudioFrame(&frame, &rtp_timestamp, &next_frame));
431 EXPECT_TRUE(next_frame); 429 EXPECT_TRUE(next_frame);
432 EXPECT_EQ(256u, frame.frame_id); 430 EXPECT_EQ(256u, frame.frame_id);
433 framer_.ReleaseFrame(frame.frame_id); 431 framer_.ReleaseFrame(frame.frame_id);
434 } 432 }
435 433
436 TEST_F(FramerTest, AudioWrapWithMissingFrame) { 434 TEST_F(FramerTest, AudioWrapWithMissingFrame) {
437 // All audio frames are marked as key frames. 435 // All audio frames are marked as key frames.
438 transport::EncodedAudioFrame frame; 436 transport::EncodedAudioFrame frame;
439 uint32 rtp_timestamp; 437 uint32 rtp_timestamp;
440 bool next_frame = false; 438 bool next_frame = false;
441 bool duplicate = false; 439 bool duplicate = false;
442 440
443 // Insert and get first packet. 441 // Insert and get first packet.
444 rtp_header_.is_key_frame = true; 442 rtp_header_.is_key_frame = true;
445 rtp_header_.frame_id = 253; 443 rtp_header_.frame_id = 253;
446 framer_.InsertPacket(payload_.data(), payload_.size(), rtp_header_, 444 framer_.InsertPacket(
447 &duplicate); 445 payload_.data(), payload_.size(), rtp_header_, &duplicate);
448 EXPECT_TRUE(framer_.GetEncodedAudioFrame(&frame, &rtp_timestamp, 446 EXPECT_TRUE(
449 &next_frame)); 447 framer_.GetEncodedAudioFrame(&frame, &rtp_timestamp, &next_frame));
450 EXPECT_TRUE(next_frame); 448 EXPECT_TRUE(next_frame);
451 EXPECT_EQ(253u, frame.frame_id); 449 EXPECT_EQ(253u, frame.frame_id);
452 framer_.ReleaseFrame(frame.frame_id); 450 framer_.ReleaseFrame(frame.frame_id);
453 451
454 // Insert third and fourth packets. 452 // Insert third and fourth packets.
455 rtp_header_.frame_id = 255; 453 rtp_header_.frame_id = 255;
456 framer_.InsertPacket(payload_.data(), payload_.size(), rtp_header_, 454 framer_.InsertPacket(
457 &duplicate); 455 payload_.data(), payload_.size(), rtp_header_, &duplicate);
458 rtp_header_.frame_id = 256; 456 rtp_header_.frame_id = 256;
459 framer_.InsertPacket(payload_.data(), payload_.size(), rtp_header_, 457 framer_.InsertPacket(
460 &duplicate); 458 payload_.data(), payload_.size(), rtp_header_, &duplicate);
461 459
462 // Get third and fourth packets. 460 // Get third and fourth packets.
463 EXPECT_TRUE(framer_.GetEncodedAudioFrame(&frame, &rtp_timestamp, 461 EXPECT_TRUE(
464 &next_frame)); 462 framer_.GetEncodedAudioFrame(&frame, &rtp_timestamp, &next_frame));
465 EXPECT_FALSE(next_frame); 463 EXPECT_FALSE(next_frame);
466 EXPECT_EQ(255u, frame.frame_id); 464 EXPECT_EQ(255u, frame.frame_id);
467 framer_.ReleaseFrame(frame.frame_id); 465 framer_.ReleaseFrame(frame.frame_id);
468 EXPECT_TRUE(framer_.GetEncodedAudioFrame(&frame, &rtp_timestamp, 466 EXPECT_TRUE(
469 &next_frame)); 467 framer_.GetEncodedAudioFrame(&frame, &rtp_timestamp, &next_frame));
470 EXPECT_TRUE(next_frame); 468 EXPECT_TRUE(next_frame);
471 EXPECT_EQ(256u, frame.frame_id); 469 EXPECT_EQ(256u, frame.frame_id);
472 framer_.ReleaseFrame(frame.frame_id); 470 framer_.ReleaseFrame(frame.frame_id);
473 } 471 }
474 472
475 } // namespace cast 473 } // namespace cast
476 } // namespace media 474 } // namespace media
OLDNEW
« no previous file with comments | « media/cast/framer/framer.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698