| 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 } | 18 } |
| 19 | 19 |
| 20 virtual ~FramerTest() {} | 20 virtual ~FramerTest() {} |
| 21 | 21 |
| 22 virtual void SetUp() OVERRIDE { | 22 virtual void SetUp() OVERRIDE { |
| 23 // Build a default one packet frame - populate webrtc header. | 23 // Build a default one packet frame - populate webrtc header. |
| 24 rtp_header_.is_key_frame = false; | 24 rtp_header_.is_key_frame = false; |
| 25 rtp_header_.frame_id = 0; | 25 rtp_header_.frame_id = 0; |
| 26 rtp_header_.packet_id = 0; | 26 rtp_header_.packet_id = 0; |
| 27 rtp_header_.max_packet_id = 0; | 27 rtp_header_.max_packet_id = 0; |
| 28 rtp_header_.is_reference = false; | 28 rtp_header_.is_reference = false; |
| 29 rtp_header_.reference_frame_id = 0; | 29 rtp_header_.reference_frame_id = 0; |
| 30 payload_.assign(kMaxIpPacketSize, 0); | 30 payload_.assign(kIpPacketSize, 0); |
| 31 | 31 |
| 32 EXPECT_CALL(mock_rtp_payload_feedback_, | 32 EXPECT_CALL(mock_rtp_payload_feedback_, |
| 33 CastFeedback(testing::_)).WillRepeatedly(testing::Return()); | 33 CastFeedback(testing::_)).WillRepeatedly(testing::Return()); |
| 34 } | 34 } |
| 35 | 35 |
| 36 std::vector<uint8> payload_; | 36 std::vector<uint8> payload_; |
| 37 RtpCastHeader rtp_header_; | 37 RtpCastHeader rtp_header_; |
| 38 MockRtpPayloadFeedback mock_rtp_payload_feedback_; | 38 MockRtpPayloadFeedback mock_rtp_payload_feedback_; |
| 39 Framer framer_; | 39 Framer framer_; |
| 40 base::SimpleTestTickClock testing_clock_; | 40 base::SimpleTestTickClock testing_clock_; |
| 41 }; | 41 }; |
| 42 | 42 |
| 43 | 43 |
| 44 TEST_F(FramerTest, EmptyState) { | 44 TEST_F(FramerTest, EmptyState) { |
| 45 transport::EncodedVideoFrame frame; | 45 EncodedVideoFrame frame; |
| 46 uint32 rtp_timestamp; | 46 uint32 rtp_timestamp; |
| 47 bool next_frame = false; | 47 bool next_frame = false; |
| 48 EXPECT_FALSE(framer_.GetEncodedVideoFrame(&frame, &rtp_timestamp, | 48 EXPECT_FALSE(framer_.GetEncodedVideoFrame(&frame, &rtp_timestamp, |
| 49 &next_frame)); | 49 &next_frame)); |
| 50 } | 50 } |
| 51 | 51 |
| 52 TEST_F(FramerTest, AlwaysStartWithKey) { | 52 TEST_F(FramerTest, AlwaysStartWithKey) { |
| 53 transport::EncodedVideoFrame frame; | 53 EncodedVideoFrame frame; |
| 54 uint32 rtp_timestamp; | 54 uint32 rtp_timestamp; |
| 55 bool next_frame = false; | 55 bool next_frame = false; |
| 56 bool complete = false; | 56 bool complete = false; |
| 57 bool duplicate = false; | 57 bool duplicate = false; |
| 58 | 58 |
| 59 // Insert non key first frame. | 59 // Insert non key first frame. |
| 60 complete = framer_.InsertPacket(payload_.data(), payload_.size(), rtp_header_, | 60 complete = framer_.InsertPacket(payload_.data(), payload_.size(), rtp_header_, |
| 61 &duplicate); | 61 &duplicate); |
| 62 EXPECT_TRUE(complete); | 62 EXPECT_TRUE(complete); |
| 63 EXPECT_FALSE(framer_.GetEncodedVideoFrame(&frame, &rtp_timestamp, | 63 EXPECT_FALSE(framer_.GetEncodedVideoFrame(&frame, &rtp_timestamp, |
| 64 &next_frame)); | 64 &next_frame)); |
| 65 rtp_header_.frame_id = 1; | 65 rtp_header_.frame_id = 1; |
| 66 rtp_header_.is_key_frame = true; | 66 rtp_header_.is_key_frame = true; |
| 67 complete = framer_.InsertPacket(payload_.data(), payload_.size(), rtp_header_, | 67 complete = framer_.InsertPacket(payload_.data(), payload_.size(), rtp_header_, |
| 68 &duplicate); | 68 &duplicate); |
| 69 EXPECT_TRUE(complete); | 69 EXPECT_TRUE(complete); |
| 70 EXPECT_TRUE(framer_.GetEncodedVideoFrame(&frame, &rtp_timestamp, | 70 EXPECT_TRUE(framer_.GetEncodedVideoFrame(&frame, &rtp_timestamp, |
| 71 &next_frame)); | 71 &next_frame)); |
| 72 EXPECT_TRUE(next_frame); | 72 EXPECT_TRUE(next_frame); |
| 73 EXPECT_EQ(1u, frame.frame_id); | 73 EXPECT_EQ(1u, frame.frame_id); |
| 74 EXPECT_TRUE(frame.key_frame); | 74 EXPECT_TRUE(frame.key_frame); |
| 75 framer_.ReleaseFrame(frame.frame_id); | 75 framer_.ReleaseFrame(frame.frame_id); |
| 76 } | 76 } |
| 77 | 77 |
| 78 TEST_F(FramerTest, CompleteFrame) { | 78 TEST_F(FramerTest, CompleteFrame) { |
| 79 transport::EncodedVideoFrame frame; | 79 EncodedVideoFrame frame; |
| 80 uint32 rtp_timestamp; | 80 uint32 rtp_timestamp; |
| 81 bool next_frame = false; | 81 bool next_frame = false; |
| 82 bool complete = false; | 82 bool complete = false; |
| 83 bool duplicate = false; | 83 bool duplicate = false; |
| 84 | 84 |
| 85 // Start with a complete key frame. | 85 // Start with a complete key frame. |
| 86 rtp_header_.is_key_frame = true; | 86 rtp_header_.is_key_frame = true; |
| 87 complete = framer_.InsertPacket(payload_.data(), payload_.size(), rtp_header_, | 87 complete = framer_.InsertPacket(payload_.data(), payload_.size(), rtp_header_, |
| 88 &duplicate); | 88 &duplicate); |
| 89 EXPECT_TRUE(complete); | 89 EXPECT_TRUE(complete); |
| (...skipping 18 matching lines...) Expand all Loading... |
| 108 ++rtp_header_.frame_id; | 108 ++rtp_header_.frame_id; |
| 109 rtp_header_.max_packet_id = 0; | 109 rtp_header_.max_packet_id = 0; |
| 110 complete = framer_.InsertPacket(payload_.data(), payload_.size(), rtp_header_, | 110 complete = framer_.InsertPacket(payload_.data(), payload_.size(), rtp_header_, |
| 111 &duplicate); | 111 &duplicate); |
| 112 EXPECT_TRUE(complete); | 112 EXPECT_TRUE(complete); |
| 113 EXPECT_FALSE(framer_.GetEncodedVideoFrame(&frame, &rtp_timestamp, | 113 EXPECT_FALSE(framer_.GetEncodedVideoFrame(&frame, &rtp_timestamp, |
| 114 &next_frame)); | 114 &next_frame)); |
| 115 } | 115 } |
| 116 | 116 |
| 117 TEST_F(FramerTest, DuplicatePackets) { | 117 TEST_F(FramerTest, DuplicatePackets) { |
| 118 transport::EncodedVideoFrame frame; | 118 EncodedVideoFrame frame; |
| 119 uint32 rtp_timestamp; | 119 uint32 rtp_timestamp; |
| 120 bool next_frame = false; | 120 bool next_frame = false; |
| 121 bool complete = false; | 121 bool complete = false; |
| 122 bool duplicate = false; | 122 bool duplicate = false; |
| 123 | 123 |
| 124 // Start with an incomplete key frame. | 124 // Start with an incomplete key frame. |
| 125 rtp_header_.is_key_frame = true; | 125 rtp_header_.is_key_frame = true; |
| 126 rtp_header_.max_packet_id = 1; | 126 rtp_header_.max_packet_id = 1; |
| 127 duplicate = true; | 127 duplicate = true; |
| 128 complete = framer_.InsertPacket(payload_.data(), payload_.size(), rtp_header_, | 128 complete = framer_.InsertPacket(payload_.data(), payload_.size(), rtp_header_, |
| (...skipping 71 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 200 complete = framer_.InsertPacket(payload_.data(), payload_.size(), rtp_header_, | 200 complete = framer_.InsertPacket(payload_.data(), payload_.size(), rtp_header_, |
| 201 &duplicate); | 201 &duplicate); |
| 202 EXPECT_FALSE(complete); | 202 EXPECT_FALSE(complete); |
| 203 EXPECT_TRUE(duplicate); | 203 EXPECT_TRUE(duplicate); |
| 204 EXPECT_TRUE(framer_.GetEncodedVideoFrame(&frame, &rtp_timestamp, | 204 EXPECT_TRUE(framer_.GetEncodedVideoFrame(&frame, &rtp_timestamp, |
| 205 &next_frame)); | 205 &next_frame)); |
| 206 EXPECT_EQ(1u, frame.frame_id); | 206 EXPECT_EQ(1u, frame.frame_id); |
| 207 } | 207 } |
| 208 | 208 |
| 209 TEST_F(FramerTest, ContinuousSequence) { | 209 TEST_F(FramerTest, ContinuousSequence) { |
| 210 transport::EncodedVideoFrame frame; | 210 EncodedVideoFrame frame; |
| 211 uint32 rtp_timestamp; | 211 uint32 rtp_timestamp; |
| 212 bool next_frame = false; | 212 bool next_frame = false; |
| 213 bool complete = false; | 213 bool complete = false; |
| 214 bool duplicate = false; | 214 bool duplicate = false; |
| 215 | 215 |
| 216 // Start with a complete key frame. | 216 // Start with a complete key frame. |
| 217 rtp_header_.is_key_frame = true; | 217 rtp_header_.is_key_frame = true; |
| 218 complete = framer_.InsertPacket(payload_.data(), payload_.size(), rtp_header_, | 218 complete = framer_.InsertPacket(payload_.data(), payload_.size(), rtp_header_, |
| 219 &duplicate); | 219 &duplicate); |
| 220 EXPECT_TRUE(complete); | 220 EXPECT_TRUE(complete); |
| 221 EXPECT_TRUE(framer_.GetEncodedVideoFrame(&frame, &rtp_timestamp, | 221 EXPECT_TRUE(framer_.GetEncodedVideoFrame(&frame, &rtp_timestamp, |
| 222 &next_frame)); | 222 &next_frame)); |
| 223 EXPECT_TRUE(next_frame); | 223 EXPECT_TRUE(next_frame); |
| 224 EXPECT_EQ(0u, frame.frame_id); | 224 EXPECT_EQ(0u, frame.frame_id); |
| 225 EXPECT_TRUE(frame.key_frame); | 225 EXPECT_TRUE(frame.key_frame); |
| 226 framer_.ReleaseFrame(frame.frame_id); | 226 framer_.ReleaseFrame(frame.frame_id); |
| 227 | 227 |
| 228 // Complete - not continuous. | 228 // Complete - not continuous. |
| 229 rtp_header_.frame_id = 2; | 229 rtp_header_.frame_id = 2; |
| 230 rtp_header_.is_key_frame = false; | 230 rtp_header_.is_key_frame = false; |
| 231 complete = framer_.InsertPacket(payload_.data(), payload_.size(), rtp_header_, | 231 complete = framer_.InsertPacket(payload_.data(), payload_.size(), rtp_header_, |
| 232 &duplicate); | 232 &duplicate); |
| 233 EXPECT_TRUE(complete); | 233 EXPECT_TRUE(complete); |
| 234 EXPECT_FALSE(framer_.GetEncodedVideoFrame(&frame, &rtp_timestamp, | 234 EXPECT_FALSE(framer_.GetEncodedVideoFrame(&frame, &rtp_timestamp, |
| 235 &next_frame)); | 235 &next_frame)); |
| 236 } | 236 } |
| 237 | 237 |
| 238 TEST_F(FramerTest, Wrap) { | 238 TEST_F(FramerTest, Wrap) { |
| 239 // Insert key frame, frame_id = 255 (will jump to that) | 239 // Insert key frame, frame_id = 255 (will jump to that) |
| 240 transport::EncodedVideoFrame frame; | 240 EncodedVideoFrame frame; |
| 241 uint32 rtp_timestamp; | 241 uint32 rtp_timestamp; |
| 242 bool next_frame = false; | 242 bool next_frame = false; |
| 243 bool duplicate = false; | 243 bool duplicate = false; |
| 244 | 244 |
| 245 // Start with a complete key frame. | 245 // Start with a complete key frame. |
| 246 rtp_header_.is_key_frame = true; | 246 rtp_header_.is_key_frame = true; |
| 247 rtp_header_.frame_id = 255u; | 247 rtp_header_.frame_id = 255u; |
| 248 framer_.InsertPacket(payload_.data(), payload_.size(), rtp_header_, | 248 framer_.InsertPacket(payload_.data(), payload_.size(), rtp_header_, |
| 249 &duplicate); | 249 &duplicate); |
| 250 EXPECT_TRUE(framer_.GetEncodedVideoFrame(&frame, &rtp_timestamp, | 250 EXPECT_TRUE(framer_.GetEncodedVideoFrame(&frame, &rtp_timestamp, |
| 251 &next_frame)); | 251 &next_frame)); |
| 252 EXPECT_TRUE(next_frame); | 252 EXPECT_TRUE(next_frame); |
| 253 EXPECT_EQ(255u, frame.frame_id); | 253 EXPECT_EQ(255u, frame.frame_id); |
| 254 framer_.ReleaseFrame(frame.frame_id); | 254 framer_.ReleaseFrame(frame.frame_id); |
| 255 | 255 |
| 256 // Insert wrapped delta frame - should be continuous. | 256 // Insert wrapped delta frame - should be continuous. |
| 257 rtp_header_.is_key_frame = false; | 257 rtp_header_.is_key_frame = false; |
| 258 rtp_header_.frame_id = 256; | 258 rtp_header_.frame_id = 256; |
| 259 framer_.InsertPacket(payload_.data(), payload_.size(), rtp_header_, | 259 framer_.InsertPacket(payload_.data(), payload_.size(), rtp_header_, |
| 260 &duplicate); | 260 &duplicate); |
| 261 EXPECT_TRUE(framer_.GetEncodedVideoFrame(&frame, &rtp_timestamp, | 261 EXPECT_TRUE(framer_.GetEncodedVideoFrame(&frame, &rtp_timestamp, |
| 262 &next_frame)); | 262 &next_frame)); |
| 263 EXPECT_TRUE(next_frame); | 263 EXPECT_TRUE(next_frame); |
| 264 EXPECT_EQ(256u, frame.frame_id); | 264 EXPECT_EQ(256u, frame.frame_id); |
| 265 framer_.ReleaseFrame(frame.frame_id); | 265 framer_.ReleaseFrame(frame.frame_id); |
| 266 } | 266 } |
| 267 | 267 |
| 268 TEST_F(FramerTest, Reset) { | 268 TEST_F(FramerTest, Reset) { |
| 269 transport::EncodedVideoFrame frame; | 269 EncodedVideoFrame frame; |
| 270 uint32 rtp_timestamp; | 270 uint32 rtp_timestamp; |
| 271 bool next_frame = false; | 271 bool next_frame = false; |
| 272 bool complete = false; | 272 bool complete = false; |
| 273 bool duplicate = false; | 273 bool duplicate = false; |
| 274 | 274 |
| 275 // Start with a complete key frame. | 275 // Start with a complete key frame. |
| 276 rtp_header_.is_key_frame = true; | 276 rtp_header_.is_key_frame = true; |
| 277 complete = framer_.InsertPacket(payload_.data(), payload_.size(), rtp_header_, | 277 complete = framer_.InsertPacket(payload_.data(), payload_.size(), rtp_header_, |
| 278 &duplicate); | 278 &duplicate); |
| 279 EXPECT_TRUE(complete); | 279 EXPECT_TRUE(complete); |
| 280 framer_.Reset(); | 280 framer_.Reset(); |
| 281 EXPECT_FALSE(framer_.GetEncodedVideoFrame(&frame, &rtp_timestamp, | 281 EXPECT_FALSE(framer_.GetEncodedVideoFrame(&frame, &rtp_timestamp, |
| 282 &next_frame)); | 282 &next_frame)); |
| 283 } | 283 } |
| 284 | 284 |
| 285 TEST_F(FramerTest, RequireKeyAfterReset) { | 285 TEST_F(FramerTest, RequireKeyAfterReset) { |
| 286 transport::EncodedVideoFrame frame; | 286 EncodedVideoFrame frame; |
| 287 uint32 rtp_timestamp; | 287 uint32 rtp_timestamp; |
| 288 bool next_frame = false; | 288 bool next_frame = false; |
| 289 bool duplicate = false; | 289 bool duplicate = false; |
| 290 | 290 |
| 291 framer_.Reset(); | 291 framer_.Reset(); |
| 292 | 292 |
| 293 // Start with a complete key frame. | 293 // Start with a complete key frame. |
| 294 rtp_header_.is_key_frame = false; | 294 rtp_header_.is_key_frame = false; |
| 295 rtp_header_.frame_id = 0u; | 295 rtp_header_.frame_id = 0u; |
| 296 framer_.InsertPacket(payload_.data(), payload_.size(), rtp_header_, | 296 framer_.InsertPacket(payload_.data(), payload_.size(), rtp_header_, |
| 297 &duplicate); | 297 &duplicate); |
| 298 EXPECT_FALSE(framer_.GetEncodedVideoFrame(&frame, &rtp_timestamp, | 298 EXPECT_FALSE(framer_.GetEncodedVideoFrame(&frame, &rtp_timestamp, |
| 299 &next_frame)); | 299 &next_frame)); |
| 300 rtp_header_.frame_id = 1; | 300 rtp_header_.frame_id = 1; |
| 301 rtp_header_.is_key_frame = true; | 301 rtp_header_.is_key_frame = true; |
| 302 framer_.InsertPacket(payload_.data(), payload_.size(), rtp_header_, | 302 framer_.InsertPacket(payload_.data(), payload_.size(), rtp_header_, |
| 303 &duplicate); | 303 &duplicate); |
| 304 EXPECT_TRUE(framer_.GetEncodedVideoFrame(&frame, &rtp_timestamp, | 304 EXPECT_TRUE(framer_.GetEncodedVideoFrame(&frame, &rtp_timestamp, |
| 305 &next_frame)); | 305 &next_frame)); |
| 306 EXPECT_TRUE(next_frame); | 306 EXPECT_TRUE(next_frame); |
| 307 } | 307 } |
| 308 | 308 |
| 309 TEST_F(FramerTest, BasicNonLastReferenceId) { | 309 TEST_F(FramerTest, BasicNonLastReferenceId) { |
| 310 transport::EncodedVideoFrame frame; | 310 EncodedVideoFrame frame; |
| 311 uint32 rtp_timestamp; | 311 uint32 rtp_timestamp; |
| 312 bool next_frame = false; | 312 bool next_frame = false; |
| 313 bool duplicate = false; | 313 bool duplicate = false; |
| 314 | 314 |
| 315 rtp_header_.is_key_frame = true; | 315 rtp_header_.is_key_frame = true; |
| 316 rtp_header_.frame_id = 0; | 316 rtp_header_.frame_id = 0; |
| 317 framer_.InsertPacket(payload_.data(), payload_.size(), rtp_header_, | 317 framer_.InsertPacket(payload_.data(), payload_.size(), rtp_header_, |
| 318 &duplicate); | 318 &duplicate); |
| 319 | 319 |
| 320 EXPECT_TRUE(framer_.GetEncodedVideoFrame(&frame, &rtp_timestamp, | 320 EXPECT_TRUE(framer_.GetEncodedVideoFrame(&frame, &rtp_timestamp, |
| 321 &next_frame)); | 321 &next_frame)); |
| 322 framer_.ReleaseFrame(frame.frame_id); | 322 framer_.ReleaseFrame(frame.frame_id); |
| 323 | 323 |
| 324 rtp_header_.is_key_frame = false; | 324 rtp_header_.is_key_frame = false; |
| 325 rtp_header_.is_reference = true; | 325 rtp_header_.is_reference = true; |
| 326 rtp_header_.reference_frame_id = 0; | 326 rtp_header_.reference_frame_id = 0; |
| 327 rtp_header_.frame_id = 5u; | 327 rtp_header_.frame_id = 5u; |
| 328 framer_.InsertPacket(payload_.data(), payload_.size(), rtp_header_, | 328 framer_.InsertPacket(payload_.data(), payload_.size(), rtp_header_, |
| 329 &duplicate); | 329 &duplicate); |
| 330 | 330 |
| 331 EXPECT_TRUE(framer_.GetEncodedVideoFrame(&frame, &rtp_timestamp, | 331 EXPECT_TRUE(framer_.GetEncodedVideoFrame(&frame, &rtp_timestamp, |
| 332 &next_frame)); | 332 &next_frame)); |
| 333 EXPECT_FALSE(next_frame); | 333 EXPECT_FALSE(next_frame); |
| 334 } | 334 } |
| 335 | 335 |
| 336 TEST_F(FramerTest, InOrderReferenceFrameSelection) { | 336 TEST_F(FramerTest, InOrderReferenceFrameSelection) { |
| 337 // Create pattern: 0, 1, 4, 5. | 337 // Create pattern: 0, 1, 4, 5. |
| 338 transport::EncodedVideoFrame frame; | 338 EncodedVideoFrame frame; |
| 339 uint32 rtp_timestamp; | 339 uint32 rtp_timestamp; |
| 340 bool next_frame = false; | 340 bool next_frame = false; |
| 341 bool duplicate = false; | 341 bool duplicate = false; |
| 342 | 342 |
| 343 rtp_header_.is_key_frame = true; | 343 rtp_header_.is_key_frame = true; |
| 344 rtp_header_.frame_id = 0; | 344 rtp_header_.frame_id = 0; |
| 345 framer_.InsertPacket(payload_.data(), payload_.size(), rtp_header_, | 345 framer_.InsertPacket(payload_.data(), payload_.size(), rtp_header_, |
| 346 &duplicate); | 346 &duplicate); |
| 347 rtp_header_.is_key_frame = false; | 347 rtp_header_.is_key_frame = false; |
| 348 rtp_header_.frame_id = 1; | 348 rtp_header_.frame_id = 1; |
| (...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 388 framer_.InsertPacket(payload_.data(), payload_.size(), rtp_header_, | 388 framer_.InsertPacket(payload_.data(), payload_.size(), rtp_header_, |
| 389 &duplicate); | 389 &duplicate); |
| 390 EXPECT_TRUE(framer_.GetEncodedVideoFrame(&frame, &rtp_timestamp, | 390 EXPECT_TRUE(framer_.GetEncodedVideoFrame(&frame, &rtp_timestamp, |
| 391 &next_frame)); | 391 &next_frame)); |
| 392 EXPECT_TRUE(next_frame); | 392 EXPECT_TRUE(next_frame); |
| 393 EXPECT_EQ(5u, frame.frame_id); | 393 EXPECT_EQ(5u, frame.frame_id); |
| 394 } | 394 } |
| 395 | 395 |
| 396 TEST_F(FramerTest, AudioWrap) { | 396 TEST_F(FramerTest, AudioWrap) { |
| 397 // All audio frames are marked as key frames. | 397 // All audio frames are marked as key frames. |
| 398 transport::EncodedAudioFrame frame; | 398 EncodedAudioFrame frame; |
| 399 uint32 rtp_timestamp; | 399 uint32 rtp_timestamp; |
| 400 bool next_frame = false; | 400 bool next_frame = false; |
| 401 bool duplicate = false; | 401 bool duplicate = false; |
| 402 | 402 |
| 403 rtp_header_.is_key_frame = true; | 403 rtp_header_.is_key_frame = true; |
| 404 rtp_header_.frame_id = 254; | 404 rtp_header_.frame_id = 254; |
| 405 | 405 |
| 406 framer_.InsertPacket(payload_.data(), payload_.size(), rtp_header_, | 406 framer_.InsertPacket(payload_.data(), payload_.size(), rtp_header_, |
| 407 &duplicate); | 407 &duplicate); |
| 408 EXPECT_TRUE(framer_.GetEncodedAudioFrame(&frame, &rtp_timestamp, | 408 EXPECT_TRUE(framer_.GetEncodedAudioFrame(&frame, &rtp_timestamp, |
| (...skipping 19 matching lines...) Expand all Loading... |
| 428 | 428 |
| 429 EXPECT_TRUE(framer_.GetEncodedAudioFrame(&frame, &rtp_timestamp, | 429 EXPECT_TRUE(framer_.GetEncodedAudioFrame(&frame, &rtp_timestamp, |
| 430 &next_frame)); | 430 &next_frame)); |
| 431 EXPECT_TRUE(next_frame); | 431 EXPECT_TRUE(next_frame); |
| 432 EXPECT_EQ(256u, frame.frame_id); | 432 EXPECT_EQ(256u, frame.frame_id); |
| 433 framer_.ReleaseFrame(frame.frame_id); | 433 framer_.ReleaseFrame(frame.frame_id); |
| 434 } | 434 } |
| 435 | 435 |
| 436 TEST_F(FramerTest, AudioWrapWithMissingFrame) { | 436 TEST_F(FramerTest, AudioWrapWithMissingFrame) { |
| 437 // All audio frames are marked as key frames. | 437 // All audio frames are marked as key frames. |
| 438 transport::EncodedAudioFrame frame; | 438 EncodedAudioFrame frame; |
| 439 uint32 rtp_timestamp; | 439 uint32 rtp_timestamp; |
| 440 bool next_frame = false; | 440 bool next_frame = false; |
| 441 bool duplicate = false; | 441 bool duplicate = false; |
| 442 | 442 |
| 443 // Insert and get first packet. | 443 // Insert and get first packet. |
| 444 rtp_header_.is_key_frame = true; | 444 rtp_header_.is_key_frame = true; |
| 445 rtp_header_.frame_id = 253; | 445 rtp_header_.frame_id = 253; |
| 446 framer_.InsertPacket(payload_.data(), payload_.size(), rtp_header_, | 446 framer_.InsertPacket(payload_.data(), payload_.size(), rtp_header_, |
| 447 &duplicate); | 447 &duplicate); |
| 448 EXPECT_TRUE(framer_.GetEncodedAudioFrame(&frame, &rtp_timestamp, | 448 EXPECT_TRUE(framer_.GetEncodedAudioFrame(&frame, &rtp_timestamp, |
| (...skipping 18 matching lines...) Expand all Loading... |
| 467 framer_.ReleaseFrame(frame.frame_id); | 467 framer_.ReleaseFrame(frame.frame_id); |
| 468 EXPECT_TRUE(framer_.GetEncodedAudioFrame(&frame, &rtp_timestamp, | 468 EXPECT_TRUE(framer_.GetEncodedAudioFrame(&frame, &rtp_timestamp, |
| 469 &next_frame)); | 469 &next_frame)); |
| 470 EXPECT_TRUE(next_frame); | 470 EXPECT_TRUE(next_frame); |
| 471 EXPECT_EQ(256u, frame.frame_id); | 471 EXPECT_EQ(256u, frame.frame_id); |
| 472 framer_.ReleaseFrame(frame.frame_id); | 472 framer_.ReleaseFrame(frame.frame_id); |
| 473 } | 473 } |
| 474 | 474 |
| 475 } // namespace cast | 475 } // namespace cast |
| 476 } // namespace media | 476 } // namespace media |
| OLD | NEW |