OLD | NEW |
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 // Build a default one packet frame - populate webrtc header. | |
19 rtp_header_.is_key_frame = false; | |
20 rtp_header_.frame_id = 0; | |
21 rtp_header_.packet_id = 0; | |
22 rtp_header_.max_packet_id = 0; | |
23 rtp_header_.is_reference = false; | |
24 rtp_header_.reference_frame_id = 0; | |
25 payload_.assign(kMaxIpPacketSize, 0); | 18 payload_.assign(kMaxIpPacketSize, 0); |
26 | 19 |
27 EXPECT_CALL(mock_rtp_payload_feedback_, CastFeedback(testing::_)) | 20 EXPECT_CALL(mock_rtp_payload_feedback_, CastFeedback(testing::_)) |
28 .WillRepeatedly(testing::Return()); | 21 .WillRepeatedly(testing::Return()); |
29 } | 22 } |
30 | 23 |
31 virtual ~FramerTest() {} | 24 virtual ~FramerTest() {} |
32 | 25 |
33 std::vector<uint8> payload_; | 26 std::vector<uint8> payload_; |
34 RtpCastHeader rtp_header_; | 27 RtpCastHeader rtp_header_; |
(...skipping 15 matching lines...) Expand all Loading... |
50 bool next_frame = false; | 43 bool next_frame = false; |
51 bool complete = false; | 44 bool complete = false; |
52 bool duplicate = false; | 45 bool duplicate = false; |
53 | 46 |
54 // Insert non key first frame. | 47 // Insert non key first frame. |
55 complete = framer_.InsertPacket( | 48 complete = framer_.InsertPacket( |
56 payload_.data(), payload_.size(), rtp_header_, &duplicate); | 49 payload_.data(), payload_.size(), rtp_header_, &duplicate); |
57 EXPECT_TRUE(complete); | 50 EXPECT_TRUE(complete); |
58 EXPECT_FALSE(framer_.GetEncodedVideoFrame(&frame, &next_frame)); | 51 EXPECT_FALSE(framer_.GetEncodedVideoFrame(&frame, &next_frame)); |
59 rtp_header_.frame_id = 1; | 52 rtp_header_.frame_id = 1; |
| 53 rtp_header_.reference_frame_id = 1; |
60 rtp_header_.is_key_frame = true; | 54 rtp_header_.is_key_frame = true; |
61 complete = framer_.InsertPacket( | 55 complete = framer_.InsertPacket( |
62 payload_.data(), payload_.size(), rtp_header_, &duplicate); | 56 payload_.data(), payload_.size(), rtp_header_, &duplicate); |
63 EXPECT_TRUE(complete); | 57 EXPECT_TRUE(complete); |
64 EXPECT_TRUE(framer_.GetEncodedVideoFrame(&frame, &next_frame)); | 58 EXPECT_TRUE(framer_.GetEncodedVideoFrame(&frame, &next_frame)); |
65 EXPECT_TRUE(next_frame); | 59 EXPECT_TRUE(next_frame); |
66 EXPECT_EQ(1u, frame.frame_id); | 60 EXPECT_EQ(1u, frame.frame_id); |
67 EXPECT_TRUE(frame.key_frame); | 61 EXPECT_TRUE(frame.key_frame); |
68 framer_.ReleaseFrame(frame.frame_id); | 62 framer_.ReleaseFrame(frame.frame_id); |
69 } | 63 } |
(...skipping 10 matching lines...) Expand all Loading... |
80 payload_.data(), payload_.size(), rtp_header_, &duplicate); | 74 payload_.data(), payload_.size(), rtp_header_, &duplicate); |
81 EXPECT_TRUE(complete); | 75 EXPECT_TRUE(complete); |
82 EXPECT_TRUE(framer_.GetEncodedVideoFrame(&frame, &next_frame)); | 76 EXPECT_TRUE(framer_.GetEncodedVideoFrame(&frame, &next_frame)); |
83 EXPECT_TRUE(next_frame); | 77 EXPECT_TRUE(next_frame); |
84 EXPECT_EQ(0u, frame.frame_id); | 78 EXPECT_EQ(0u, frame.frame_id); |
85 EXPECT_TRUE(frame.key_frame); | 79 EXPECT_TRUE(frame.key_frame); |
86 framer_.ReleaseFrame(frame.frame_id); | 80 framer_.ReleaseFrame(frame.frame_id); |
87 | 81 |
88 // Incomplete delta. | 82 // Incomplete delta. |
89 ++rtp_header_.frame_id; | 83 ++rtp_header_.frame_id; |
| 84 rtp_header_.reference_frame_id = rtp_header_.frame_id - 1; |
90 rtp_header_.is_key_frame = false; | 85 rtp_header_.is_key_frame = false; |
91 rtp_header_.max_packet_id = 2; | 86 rtp_header_.max_packet_id = 2; |
92 complete = framer_.InsertPacket( | 87 complete = framer_.InsertPacket( |
93 payload_.data(), payload_.size(), rtp_header_, &duplicate); | 88 payload_.data(), payload_.size(), rtp_header_, &duplicate); |
94 EXPECT_FALSE(complete); | 89 EXPECT_FALSE(complete); |
95 EXPECT_FALSE(framer_.GetEncodedVideoFrame(&frame, &next_frame)); | 90 EXPECT_FALSE(framer_.GetEncodedVideoFrame(&frame, &next_frame)); |
96 | 91 |
97 // Complete delta - can't skip, as incomplete sequence. | 92 // Complete delta - can't skip, as incomplete sequence. |
98 ++rtp_header_.frame_id; | 93 ++rtp_header_.frame_id; |
| 94 rtp_header_.reference_frame_id = rtp_header_.frame_id - 1; |
99 rtp_header_.max_packet_id = 0; | 95 rtp_header_.max_packet_id = 0; |
100 complete = framer_.InsertPacket( | 96 complete = framer_.InsertPacket( |
101 payload_.data(), payload_.size(), rtp_header_, &duplicate); | 97 payload_.data(), payload_.size(), rtp_header_, &duplicate); |
102 EXPECT_TRUE(complete); | 98 EXPECT_TRUE(complete); |
103 EXPECT_FALSE(framer_.GetEncodedVideoFrame(&frame, &next_frame)); | 99 EXPECT_FALSE(framer_.GetEncodedVideoFrame(&frame, &next_frame)); |
104 } | 100 } |
105 | 101 |
106 TEST_F(FramerTest, DuplicatePackets) { | 102 TEST_F(FramerTest, DuplicatePackets) { |
107 transport::EncodedVideoFrame frame; | 103 transport::EncodedVideoFrame frame; |
108 bool next_frame = false; | 104 bool next_frame = false; |
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
142 complete = framer_.InsertPacket( | 138 complete = framer_.InsertPacket( |
143 payload_.data(), payload_.size(), rtp_header_, &duplicate); | 139 payload_.data(), payload_.size(), rtp_header_, &duplicate); |
144 EXPECT_FALSE(complete); | 140 EXPECT_FALSE(complete); |
145 EXPECT_TRUE(duplicate); | 141 EXPECT_TRUE(duplicate); |
146 EXPECT_TRUE(framer_.GetEncodedVideoFrame(&frame, &next_frame)); | 142 EXPECT_TRUE(framer_.GetEncodedVideoFrame(&frame, &next_frame)); |
147 EXPECT_EQ(0u, frame.frame_id); | 143 EXPECT_EQ(0u, frame.frame_id); |
148 framer_.ReleaseFrame(frame.frame_id); | 144 framer_.ReleaseFrame(frame.frame_id); |
149 | 145 |
150 // Incomplete delta frame. | 146 // Incomplete delta frame. |
151 ++rtp_header_.frame_id; | 147 ++rtp_header_.frame_id; |
| 148 rtp_header_.reference_frame_id = rtp_header_.frame_id - 1; |
152 rtp_header_.packet_id = 0; | 149 rtp_header_.packet_id = 0; |
153 rtp_header_.is_key_frame = false; | 150 rtp_header_.is_key_frame = false; |
154 duplicate = true; | 151 duplicate = true; |
155 complete = framer_.InsertPacket( | 152 complete = framer_.InsertPacket( |
156 payload_.data(), payload_.size(), rtp_header_, &duplicate); | 153 payload_.data(), payload_.size(), rtp_header_, &duplicate); |
157 EXPECT_FALSE(complete); | 154 EXPECT_FALSE(complete); |
158 EXPECT_FALSE(duplicate); | 155 EXPECT_FALSE(duplicate); |
159 EXPECT_FALSE(framer_.GetEncodedVideoFrame(&frame, &next_frame)); | 156 EXPECT_FALSE(framer_.GetEncodedVideoFrame(&frame, &next_frame)); |
160 | 157 |
161 // Add same packet again in incomplete delta frame. | 158 // Add same packet again in incomplete delta frame. |
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
198 payload_.data(), payload_.size(), rtp_header_, &duplicate); | 195 payload_.data(), payload_.size(), rtp_header_, &duplicate); |
199 EXPECT_TRUE(complete); | 196 EXPECT_TRUE(complete); |
200 EXPECT_TRUE(framer_.GetEncodedVideoFrame(&frame, &next_frame)); | 197 EXPECT_TRUE(framer_.GetEncodedVideoFrame(&frame, &next_frame)); |
201 EXPECT_TRUE(next_frame); | 198 EXPECT_TRUE(next_frame); |
202 EXPECT_EQ(0u, frame.frame_id); | 199 EXPECT_EQ(0u, frame.frame_id); |
203 EXPECT_TRUE(frame.key_frame); | 200 EXPECT_TRUE(frame.key_frame); |
204 framer_.ReleaseFrame(frame.frame_id); | 201 framer_.ReleaseFrame(frame.frame_id); |
205 | 202 |
206 // Complete - not continuous. | 203 // Complete - not continuous. |
207 rtp_header_.frame_id = 2; | 204 rtp_header_.frame_id = 2; |
| 205 rtp_header_.reference_frame_id = rtp_header_.frame_id - 1; |
208 rtp_header_.is_key_frame = false; | 206 rtp_header_.is_key_frame = false; |
209 complete = framer_.InsertPacket( | 207 complete = framer_.InsertPacket( |
210 payload_.data(), payload_.size(), rtp_header_, &duplicate); | 208 payload_.data(), payload_.size(), rtp_header_, &duplicate); |
211 EXPECT_TRUE(complete); | 209 EXPECT_TRUE(complete); |
212 EXPECT_FALSE(framer_.GetEncodedVideoFrame(&frame, &next_frame)); | 210 EXPECT_FALSE(framer_.GetEncodedVideoFrame(&frame, &next_frame)); |
213 } | 211 } |
214 | 212 |
215 TEST_F(FramerTest, Wrap) { | 213 TEST_F(FramerTest, Wrap) { |
216 // Insert key frame, frame_id = 255 (will jump to that) | 214 // Insert key frame, frame_id = 255 (will jump to that) |
217 transport::EncodedVideoFrame frame; | 215 transport::EncodedVideoFrame frame; |
218 bool next_frame = false; | 216 bool next_frame = false; |
219 bool duplicate = false; | 217 bool duplicate = false; |
220 | 218 |
221 // Start with a complete key frame. | 219 // Start with a complete key frame. |
222 rtp_header_.is_key_frame = true; | 220 rtp_header_.is_key_frame = true; |
223 rtp_header_.frame_id = 255u; | 221 rtp_header_.frame_id = 255; |
| 222 rtp_header_.reference_frame_id = 255; |
224 framer_.InsertPacket( | 223 framer_.InsertPacket( |
225 payload_.data(), payload_.size(), rtp_header_, &duplicate); | 224 payload_.data(), payload_.size(), rtp_header_, &duplicate); |
226 EXPECT_TRUE(framer_.GetEncodedVideoFrame(&frame, &next_frame)); | 225 EXPECT_TRUE(framer_.GetEncodedVideoFrame(&frame, &next_frame)); |
227 EXPECT_TRUE(next_frame); | 226 EXPECT_TRUE(next_frame); |
228 EXPECT_EQ(255u, frame.frame_id); | 227 EXPECT_EQ(255u, frame.frame_id); |
229 framer_.ReleaseFrame(frame.frame_id); | 228 framer_.ReleaseFrame(frame.frame_id); |
230 | 229 |
231 // Insert wrapped delta frame - should be continuous. | 230 // Insert wrapped delta frame - should be continuous. |
232 rtp_header_.is_key_frame = false; | 231 rtp_header_.is_key_frame = false; |
233 rtp_header_.frame_id = 256; | 232 rtp_header_.frame_id = 256; |
(...skipping 22 matching lines...) Expand all Loading... |
256 | 255 |
257 TEST_F(FramerTest, RequireKeyAfterReset) { | 256 TEST_F(FramerTest, RequireKeyAfterReset) { |
258 transport::EncodedVideoFrame frame; | 257 transport::EncodedVideoFrame frame; |
259 bool next_frame = false; | 258 bool next_frame = false; |
260 bool duplicate = false; | 259 bool duplicate = false; |
261 | 260 |
262 framer_.Reset(); | 261 framer_.Reset(); |
263 | 262 |
264 // Start with a complete key frame. | 263 // Start with a complete key frame. |
265 rtp_header_.is_key_frame = false; | 264 rtp_header_.is_key_frame = false; |
266 rtp_header_.frame_id = 0u; | 265 rtp_header_.frame_id = 0; |
267 framer_.InsertPacket( | 266 framer_.InsertPacket( |
268 payload_.data(), payload_.size(), rtp_header_, &duplicate); | 267 payload_.data(), payload_.size(), rtp_header_, &duplicate); |
269 EXPECT_FALSE(framer_.GetEncodedVideoFrame(&frame, &next_frame)); | 268 EXPECT_FALSE(framer_.GetEncodedVideoFrame(&frame, &next_frame)); |
270 rtp_header_.frame_id = 1; | 269 rtp_header_.frame_id = 1; |
| 270 rtp_header_.reference_frame_id = 1; |
271 rtp_header_.is_key_frame = true; | 271 rtp_header_.is_key_frame = true; |
272 framer_.InsertPacket( | 272 framer_.InsertPacket( |
273 payload_.data(), payload_.size(), rtp_header_, &duplicate); | 273 payload_.data(), payload_.size(), rtp_header_, &duplicate); |
274 EXPECT_TRUE(framer_.GetEncodedVideoFrame(&frame, &next_frame)); | 274 EXPECT_TRUE(framer_.GetEncodedVideoFrame(&frame, &next_frame)); |
275 EXPECT_TRUE(next_frame); | 275 EXPECT_TRUE(next_frame); |
276 } | 276 } |
277 | 277 |
278 TEST_F(FramerTest, BasicNonLastReferenceId) { | 278 TEST_F(FramerTest, BasicNonLastReferenceId) { |
279 transport::EncodedVideoFrame frame; | 279 transport::EncodedVideoFrame frame; |
280 bool next_frame = false; | 280 bool next_frame = false; |
281 bool duplicate = false; | 281 bool duplicate = false; |
282 | 282 |
283 rtp_header_.is_key_frame = true; | 283 rtp_header_.is_key_frame = true; |
284 rtp_header_.frame_id = 0; | 284 rtp_header_.frame_id = 0; |
285 framer_.InsertPacket( | 285 framer_.InsertPacket( |
286 payload_.data(), payload_.size(), rtp_header_, &duplicate); | 286 payload_.data(), payload_.size(), rtp_header_, &duplicate); |
287 | 287 |
288 EXPECT_TRUE(framer_.GetEncodedVideoFrame(&frame, &next_frame)); | 288 EXPECT_TRUE(framer_.GetEncodedVideoFrame(&frame, &next_frame)); |
289 framer_.ReleaseFrame(frame.frame_id); | 289 framer_.ReleaseFrame(frame.frame_id); |
290 | 290 |
291 rtp_header_.is_key_frame = false; | 291 rtp_header_.is_key_frame = false; |
292 rtp_header_.is_reference = true; | |
293 rtp_header_.reference_frame_id = 0; | 292 rtp_header_.reference_frame_id = 0; |
294 rtp_header_.frame_id = 5u; | 293 rtp_header_.frame_id = 5; |
295 framer_.InsertPacket( | 294 framer_.InsertPacket( |
296 payload_.data(), payload_.size(), rtp_header_, &duplicate); | 295 payload_.data(), payload_.size(), rtp_header_, &duplicate); |
297 | 296 |
298 EXPECT_TRUE(framer_.GetEncodedVideoFrame(&frame, &next_frame)); | 297 EXPECT_TRUE(framer_.GetEncodedVideoFrame(&frame, &next_frame)); |
299 EXPECT_FALSE(next_frame); | 298 EXPECT_FALSE(next_frame); |
300 } | 299 } |
301 | 300 |
302 TEST_F(FramerTest, InOrderReferenceFrameSelection) { | 301 TEST_F(FramerTest, InOrderReferenceFrameSelection) { |
303 // Create pattern: 0, 1, 4, 5. | 302 // Create pattern: 0, 1, 4, 5. |
304 transport::EncodedVideoFrame frame; | 303 transport::EncodedVideoFrame frame; |
305 bool next_frame = false; | 304 bool next_frame = false; |
306 bool duplicate = false; | 305 bool duplicate = false; |
307 | 306 |
308 rtp_header_.is_key_frame = true; | 307 rtp_header_.is_key_frame = true; |
309 rtp_header_.frame_id = 0; | 308 rtp_header_.frame_id = 0; |
310 framer_.InsertPacket( | 309 framer_.InsertPacket( |
311 payload_.data(), payload_.size(), rtp_header_, &duplicate); | 310 payload_.data(), payload_.size(), rtp_header_, &duplicate); |
312 rtp_header_.is_key_frame = false; | 311 rtp_header_.is_key_frame = false; |
313 rtp_header_.frame_id = 1; | 312 rtp_header_.frame_id = 1; |
314 framer_.InsertPacket( | 313 framer_.InsertPacket( |
315 payload_.data(), payload_.size(), rtp_header_, &duplicate); | 314 payload_.data(), payload_.size(), rtp_header_, &duplicate); |
316 | 315 |
317 // Insert frame #2 partially. | 316 // Insert frame #2 partially. |
318 rtp_header_.frame_id = 2; | 317 rtp_header_.frame_id = 2; |
319 rtp_header_.max_packet_id = 1; | 318 rtp_header_.max_packet_id = 1; |
320 framer_.InsertPacket( | 319 framer_.InsertPacket( |
321 payload_.data(), payload_.size(), rtp_header_, &duplicate); | 320 payload_.data(), payload_.size(), rtp_header_, &duplicate); |
322 rtp_header_.frame_id = 4; | 321 rtp_header_.frame_id = 4; |
323 rtp_header_.max_packet_id = 0; | 322 rtp_header_.max_packet_id = 0; |
324 rtp_header_.is_reference = true; | |
325 rtp_header_.reference_frame_id = 0; | 323 rtp_header_.reference_frame_id = 0; |
326 framer_.InsertPacket( | 324 framer_.InsertPacket( |
327 payload_.data(), payload_.size(), rtp_header_, &duplicate); | 325 payload_.data(), payload_.size(), rtp_header_, &duplicate); |
328 EXPECT_TRUE(framer_.GetEncodedVideoFrame(&frame, &next_frame)); | 326 EXPECT_TRUE(framer_.GetEncodedVideoFrame(&frame, &next_frame)); |
329 EXPECT_EQ(0u, frame.frame_id); | 327 EXPECT_EQ(0u, frame.frame_id); |
330 framer_.ReleaseFrame(frame.frame_id); | 328 framer_.ReleaseFrame(frame.frame_id); |
331 EXPECT_TRUE(framer_.GetEncodedVideoFrame(&frame, &next_frame)); | 329 EXPECT_TRUE(framer_.GetEncodedVideoFrame(&frame, &next_frame)); |
332 EXPECT_TRUE(next_frame); | 330 EXPECT_TRUE(next_frame); |
333 EXPECT_EQ(1u, frame.frame_id); | 331 EXPECT_EQ(1u, frame.frame_id); |
334 framer_.ReleaseFrame(frame.frame_id); | 332 framer_.ReleaseFrame(frame.frame_id); |
335 EXPECT_TRUE(framer_.GetEncodedVideoFrame(&frame, &next_frame)); | 333 EXPECT_TRUE(framer_.GetEncodedVideoFrame(&frame, &next_frame)); |
336 EXPECT_FALSE(next_frame); | 334 EXPECT_FALSE(next_frame); |
337 EXPECT_EQ(4u, frame.frame_id); | 335 EXPECT_EQ(4u, frame.frame_id); |
338 framer_.ReleaseFrame(frame.frame_id); | 336 framer_.ReleaseFrame(frame.frame_id); |
339 // Insert remaining packet of frame #2 - should no be continuous. | 337 // Insert remaining packet of frame #2 - should no be continuous. |
340 rtp_header_.frame_id = 2; | 338 rtp_header_.frame_id = 2; |
341 rtp_header_.packet_id = 1; | 339 rtp_header_.packet_id = 1; |
342 framer_.InsertPacket( | 340 framer_.InsertPacket( |
343 payload_.data(), payload_.size(), rtp_header_, &duplicate); | 341 payload_.data(), payload_.size(), rtp_header_, &duplicate); |
344 EXPECT_FALSE(framer_.GetEncodedVideoFrame(&frame, &next_frame)); | 342 EXPECT_FALSE(framer_.GetEncodedVideoFrame(&frame, &next_frame)); |
345 rtp_header_.is_reference = false; | |
346 rtp_header_.frame_id = 5; | 343 rtp_header_.frame_id = 5; |
| 344 rtp_header_.reference_frame_id = rtp_header_.frame_id - 1; |
347 rtp_header_.packet_id = 0; | 345 rtp_header_.packet_id = 0; |
348 rtp_header_.max_packet_id = 0; | 346 rtp_header_.max_packet_id = 0; |
349 framer_.InsertPacket( | 347 framer_.InsertPacket( |
350 payload_.data(), payload_.size(), rtp_header_, &duplicate); | 348 payload_.data(), payload_.size(), rtp_header_, &duplicate); |
351 EXPECT_TRUE(framer_.GetEncodedVideoFrame(&frame, &next_frame)); | 349 EXPECT_TRUE(framer_.GetEncodedVideoFrame(&frame, &next_frame)); |
352 EXPECT_TRUE(next_frame); | 350 EXPECT_TRUE(next_frame); |
353 EXPECT_EQ(5u, frame.frame_id); | 351 EXPECT_EQ(5u, frame.frame_id); |
354 } | 352 } |
355 | 353 |
356 TEST_F(FramerTest, AudioWrap) { | 354 TEST_F(FramerTest, AudioWrap) { |
357 // All audio frames are marked as key frames. | 355 // All audio frames are marked as key frames. |
358 transport::EncodedAudioFrame frame; | 356 transport::EncodedAudioFrame frame; |
359 bool next_frame = false; | 357 bool next_frame = false; |
360 bool duplicate = false; | 358 bool duplicate = false; |
361 | 359 |
362 rtp_header_.is_key_frame = true; | 360 rtp_header_.is_key_frame = true; |
363 rtp_header_.frame_id = 254; | 361 rtp_header_.frame_id = 254; |
| 362 rtp_header_.reference_frame_id = 254; |
364 | 363 |
365 framer_.InsertPacket( | 364 framer_.InsertPacket( |
366 payload_.data(), payload_.size(), rtp_header_, &duplicate); | 365 payload_.data(), payload_.size(), rtp_header_, &duplicate); |
367 EXPECT_TRUE(framer_.GetEncodedAudioFrame(&frame, &next_frame)); | 366 EXPECT_TRUE(framer_.GetEncodedAudioFrame(&frame, &next_frame)); |
368 EXPECT_TRUE(next_frame); | 367 EXPECT_TRUE(next_frame); |
369 EXPECT_EQ(254u, frame.frame_id); | 368 EXPECT_EQ(254u, frame.frame_id); |
370 framer_.ReleaseFrame(frame.frame_id); | 369 framer_.ReleaseFrame(frame.frame_id); |
371 | 370 |
372 rtp_header_.frame_id = 255; | 371 rtp_header_.frame_id = 255; |
| 372 rtp_header_.reference_frame_id = 255; |
373 framer_.InsertPacket( | 373 framer_.InsertPacket( |
374 payload_.data(), payload_.size(), rtp_header_, &duplicate); | 374 payload_.data(), payload_.size(), rtp_header_, &duplicate); |
375 | 375 |
376 // Insert wrapped frame - should be continuous. | 376 // Insert wrapped frame - should be continuous. |
377 rtp_header_.frame_id = 256; | 377 rtp_header_.frame_id = 256; |
| 378 rtp_header_.reference_frame_id = 256; |
378 framer_.InsertPacket( | 379 framer_.InsertPacket( |
379 payload_.data(), payload_.size(), rtp_header_, &duplicate); | 380 payload_.data(), payload_.size(), rtp_header_, &duplicate); |
380 | 381 |
381 EXPECT_TRUE(framer_.GetEncodedAudioFrame(&frame, &next_frame)); | 382 EXPECT_TRUE(framer_.GetEncodedAudioFrame(&frame, &next_frame)); |
382 EXPECT_TRUE(next_frame); | 383 EXPECT_TRUE(next_frame); |
383 EXPECT_EQ(255u, frame.frame_id); | 384 EXPECT_EQ(255u, frame.frame_id); |
384 framer_.ReleaseFrame(frame.frame_id); | 385 framer_.ReleaseFrame(frame.frame_id); |
385 | 386 |
386 EXPECT_TRUE(framer_.GetEncodedAudioFrame(&frame, &next_frame)); | 387 EXPECT_TRUE(framer_.GetEncodedAudioFrame(&frame, &next_frame)); |
387 EXPECT_TRUE(next_frame); | 388 EXPECT_TRUE(next_frame); |
388 EXPECT_EQ(256u, frame.frame_id); | 389 EXPECT_EQ(256u, frame.frame_id); |
389 framer_.ReleaseFrame(frame.frame_id); | 390 framer_.ReleaseFrame(frame.frame_id); |
390 } | 391 } |
391 | 392 |
392 TEST_F(FramerTest, AudioWrapWithMissingFrame) { | 393 TEST_F(FramerTest, AudioWrapWithMissingFrame) { |
393 // All audio frames are marked as key frames. | 394 // All audio frames are marked as key frames. |
394 transport::EncodedAudioFrame frame; | 395 transport::EncodedAudioFrame frame; |
395 bool next_frame = false; | 396 bool next_frame = false; |
396 bool duplicate = false; | 397 bool duplicate = false; |
397 | 398 |
398 // Insert and get first packet. | 399 // Insert and get first packet. |
399 rtp_header_.is_key_frame = true; | 400 rtp_header_.is_key_frame = true; |
400 rtp_header_.frame_id = 253; | 401 rtp_header_.frame_id = 253; |
| 402 rtp_header_.reference_frame_id = 253; |
401 framer_.InsertPacket( | 403 framer_.InsertPacket( |
402 payload_.data(), payload_.size(), rtp_header_, &duplicate); | 404 payload_.data(), payload_.size(), rtp_header_, &duplicate); |
403 EXPECT_TRUE(framer_.GetEncodedAudioFrame(&frame, &next_frame)); | 405 EXPECT_TRUE(framer_.GetEncodedAudioFrame(&frame, &next_frame)); |
404 EXPECT_TRUE(next_frame); | 406 EXPECT_TRUE(next_frame); |
405 EXPECT_EQ(253u, frame.frame_id); | 407 EXPECT_EQ(253u, frame.frame_id); |
406 framer_.ReleaseFrame(frame.frame_id); | 408 framer_.ReleaseFrame(frame.frame_id); |
407 | 409 |
408 // Insert third and fourth packets. | 410 // Insert third and fourth packets. |
409 rtp_header_.frame_id = 255; | 411 rtp_header_.frame_id = 255; |
| 412 rtp_header_.reference_frame_id = 255; |
410 framer_.InsertPacket( | 413 framer_.InsertPacket( |
411 payload_.data(), payload_.size(), rtp_header_, &duplicate); | 414 payload_.data(), payload_.size(), rtp_header_, &duplicate); |
412 rtp_header_.frame_id = 256; | 415 rtp_header_.frame_id = 256; |
| 416 rtp_header_.reference_frame_id = 256; |
413 framer_.InsertPacket( | 417 framer_.InsertPacket( |
414 payload_.data(), payload_.size(), rtp_header_, &duplicate); | 418 payload_.data(), payload_.size(), rtp_header_, &duplicate); |
415 | 419 |
416 // Get third and fourth packets. | 420 // Get third and fourth packets. |
417 EXPECT_TRUE(framer_.GetEncodedAudioFrame(&frame, &next_frame)); | 421 EXPECT_TRUE(framer_.GetEncodedAudioFrame(&frame, &next_frame)); |
418 EXPECT_FALSE(next_frame); | 422 EXPECT_FALSE(next_frame); |
419 EXPECT_EQ(255u, frame.frame_id); | 423 EXPECT_EQ(255u, frame.frame_id); |
420 framer_.ReleaseFrame(frame.frame_id); | 424 framer_.ReleaseFrame(frame.frame_id); |
421 EXPECT_TRUE(framer_.GetEncodedAudioFrame(&frame, &next_frame)); | 425 EXPECT_TRUE(framer_.GetEncodedAudioFrame(&frame, &next_frame)); |
422 EXPECT_TRUE(next_frame); | 426 EXPECT_TRUE(next_frame); |
423 EXPECT_EQ(256u, frame.frame_id); | 427 EXPECT_EQ(256u, frame.frame_id); |
424 framer_.ReleaseFrame(frame.frame_id); | 428 framer_.ReleaseFrame(frame.frame_id); |
425 } | 429 } |
426 | 430 |
427 } // namespace cast | 431 } // namespace cast |
428 } // namespace media | 432 } // namespace media |
OLD | NEW |