Index: media/cast/framer/framer_unittest.cc |
diff --git a/media/cast/framer/framer_unittest.cc b/media/cast/framer/framer_unittest.cc |
deleted file mode 100644 |
index ad53ef06eee5461a7ab1ca8bc6625581dc9f0dd1..0000000000000000000000000000000000000000 |
--- a/media/cast/framer/framer_unittest.cc |
+++ /dev/null |
@@ -1,500 +0,0 @@ |
-// Copyright 2013 The Chromium Authors. All rights reserved. |
-// Use of this source code is governed by a BSD-style license that can be |
-// found in the LICENSE file. |
- |
-#include "base/test/simple_test_tick_clock.h" |
-#include "media/cast/framer/framer.h" |
-#include "media/cast/rtp_receiver/mock_rtp_payload_feedback.h" |
-#include "testing/gtest/include/gtest/gtest.h" |
- |
-namespace media { |
-namespace cast { |
- |
-class FramerTest : public ::testing::Test { |
- protected: |
- FramerTest() |
- : mock_rtp_payload_feedback_(), |
- framer_(&testing_clock_, &mock_rtp_payload_feedback_, 0, true, 0) { |
- payload_.assign(kMaxIpPacketSize, 0); |
- |
- EXPECT_CALL(mock_rtp_payload_feedback_, CastFeedback(testing::_)) |
- .WillRepeatedly(testing::Return()); |
- } |
- |
- virtual ~FramerTest() {} |
- |
- std::vector<uint8> payload_; |
- RtpCastHeader rtp_header_; |
- MockRtpPayloadFeedback mock_rtp_payload_feedback_; |
- Framer framer_; |
- base::SimpleTestTickClock testing_clock_; |
- |
- DISALLOW_COPY_AND_ASSIGN(FramerTest); |
-}; |
- |
-TEST_F(FramerTest, EmptyState) { |
- transport::EncodedFrame frame; |
- bool next_frame = false; |
- bool multiple = false; |
- EXPECT_FALSE(framer_.GetEncodedFrame(&frame, &next_frame, &multiple)); |
-} |
- |
-TEST_F(FramerTest, AlwaysStartWithKey) { |
- transport::EncodedFrame frame; |
- bool next_frame = false; |
- bool complete = false; |
- bool multiple = false; |
- bool duplicate = false; |
- |
- // Insert non key first frame. |
- complete = framer_.InsertPacket( |
- payload_.data(), payload_.size(), rtp_header_, &duplicate); |
- EXPECT_TRUE(complete); |
- EXPECT_FALSE(framer_.GetEncodedFrame(&frame, &next_frame, &multiple)); |
- rtp_header_.frame_id = 1; |
- rtp_header_.reference_frame_id = 1; |
- rtp_header_.is_key_frame = true; |
- complete = framer_.InsertPacket( |
- payload_.data(), payload_.size(), rtp_header_, &duplicate); |
- EXPECT_TRUE(complete); |
- EXPECT_TRUE(framer_.GetEncodedFrame(&frame, &next_frame, &multiple)); |
- EXPECT_TRUE(next_frame); |
- EXPECT_TRUE(multiple); |
- EXPECT_EQ(transport::EncodedFrame::KEY, frame.dependency); |
- EXPECT_EQ(1u, frame.frame_id); |
- EXPECT_EQ(1u, frame.referenced_frame_id); |
- framer_.ReleaseFrame(frame.frame_id); |
-} |
- |
-TEST_F(FramerTest, CompleteFrame) { |
- transport::EncodedFrame frame; |
- bool next_frame = false; |
- bool complete = false; |
- bool multiple = false; |
- bool duplicate = false; |
- |
- // Start with a complete key frame. |
- rtp_header_.is_key_frame = true; |
- complete = framer_.InsertPacket( |
- payload_.data(), payload_.size(), rtp_header_, &duplicate); |
- EXPECT_TRUE(complete); |
- EXPECT_TRUE(framer_.GetEncodedFrame(&frame, &next_frame, &multiple)); |
- EXPECT_TRUE(next_frame); |
- EXPECT_FALSE(multiple); |
- EXPECT_EQ(transport::EncodedFrame::KEY, frame.dependency); |
- EXPECT_EQ(0u, frame.frame_id); |
- EXPECT_EQ(0u, frame.referenced_frame_id); |
- framer_.ReleaseFrame(frame.frame_id); |
- |
- // Incomplete delta. |
- ++rtp_header_.frame_id; |
- rtp_header_.reference_frame_id = rtp_header_.frame_id - 1; |
- rtp_header_.is_key_frame = false; |
- rtp_header_.max_packet_id = 2; |
- complete = framer_.InsertPacket( |
- payload_.data(), payload_.size(), rtp_header_, &duplicate); |
- EXPECT_FALSE(complete); |
- EXPECT_FALSE(framer_.GetEncodedFrame(&frame, &next_frame, &multiple)); |
- |
- // Complete delta - can't skip, as incomplete sequence. |
- ++rtp_header_.frame_id; |
- rtp_header_.reference_frame_id = rtp_header_.frame_id - 1; |
- rtp_header_.max_packet_id = 0; |
- complete = framer_.InsertPacket( |
- payload_.data(), payload_.size(), rtp_header_, &duplicate); |
- EXPECT_TRUE(complete); |
- EXPECT_FALSE(framer_.GetEncodedFrame(&frame, &next_frame, &multiple)); |
-} |
- |
-TEST_F(FramerTest, DuplicatePackets) { |
- transport::EncodedFrame frame; |
- bool next_frame = false; |
- bool complete = false; |
- bool multiple = false; |
- bool duplicate = false; |
- |
- // Start with an incomplete key frame. |
- rtp_header_.is_key_frame = true; |
- rtp_header_.max_packet_id = 1; |
- duplicate = true; |
- complete = framer_.InsertPacket( |
- payload_.data(), payload_.size(), rtp_header_, &duplicate); |
- EXPECT_FALSE(complete); |
- EXPECT_FALSE(duplicate); |
- EXPECT_FALSE(framer_.GetEncodedFrame(&frame, &next_frame, &multiple)); |
- |
- // Add same packet again in incomplete key frame. |
- duplicate = false; |
- complete = framer_.InsertPacket( |
- payload_.data(), payload_.size(), rtp_header_, &duplicate); |
- EXPECT_FALSE(complete); |
- EXPECT_TRUE(duplicate); |
- EXPECT_FALSE(framer_.GetEncodedFrame(&frame, &next_frame, &multiple)); |
- |
- // Complete key frame. |
- rtp_header_.packet_id = 1; |
- duplicate = true; |
- complete = framer_.InsertPacket( |
- payload_.data(), payload_.size(), rtp_header_, &duplicate); |
- EXPECT_TRUE(complete); |
- EXPECT_FALSE(duplicate); |
- EXPECT_TRUE(framer_.GetEncodedFrame(&frame, &next_frame, &multiple)); |
- EXPECT_EQ(transport::EncodedFrame::KEY, frame.dependency); |
- EXPECT_FALSE(multiple); |
- EXPECT_EQ(0u, frame.referenced_frame_id); |
- |
- // Add same packet again in complete key frame. |
- duplicate = false; |
- complete = framer_.InsertPacket( |
- payload_.data(), payload_.size(), rtp_header_, &duplicate); |
- EXPECT_FALSE(complete); |
- EXPECT_TRUE(duplicate); |
- EXPECT_TRUE(framer_.GetEncodedFrame(&frame, &next_frame, &multiple)); |
- EXPECT_EQ(transport::EncodedFrame::KEY, frame.dependency); |
- EXPECT_EQ(0u, frame.frame_id); |
- EXPECT_FALSE(multiple); |
- EXPECT_EQ(0u, frame.referenced_frame_id); |
- framer_.ReleaseFrame(frame.frame_id); |
- |
- // Incomplete delta frame. |
- ++rtp_header_.frame_id; |
- rtp_header_.reference_frame_id = rtp_header_.frame_id - 1; |
- rtp_header_.packet_id = 0; |
- rtp_header_.is_key_frame = false; |
- duplicate = true; |
- complete = framer_.InsertPacket( |
- payload_.data(), payload_.size(), rtp_header_, &duplicate); |
- EXPECT_FALSE(complete); |
- EXPECT_FALSE(duplicate); |
- EXPECT_FALSE(framer_.GetEncodedFrame(&frame, &next_frame, &multiple)); |
- |
- // Add same packet again in incomplete delta frame. |
- duplicate = false; |
- complete = framer_.InsertPacket( |
- payload_.data(), payload_.size(), rtp_header_, &duplicate); |
- EXPECT_FALSE(complete); |
- EXPECT_TRUE(duplicate); |
- EXPECT_FALSE(framer_.GetEncodedFrame(&frame, &next_frame, &multiple)); |
- |
- // Complete delta frame. |
- rtp_header_.packet_id = 1; |
- duplicate = true; |
- complete = framer_.InsertPacket( |
- payload_.data(), payload_.size(), rtp_header_, &duplicate); |
- EXPECT_TRUE(complete); |
- EXPECT_FALSE(duplicate); |
- EXPECT_TRUE(framer_.GetEncodedFrame(&frame, &next_frame, &multiple)); |
- EXPECT_EQ(transport::EncodedFrame::DEPENDENT, frame.dependency); |
- EXPECT_EQ(1u, frame.frame_id); |
- EXPECT_EQ(0u, frame.referenced_frame_id); |
- EXPECT_FALSE(multiple); |
- |
- // Add same packet again in complete delta frame. |
- duplicate = false; |
- complete = framer_.InsertPacket( |
- payload_.data(), payload_.size(), rtp_header_, &duplicate); |
- EXPECT_FALSE(complete); |
- EXPECT_TRUE(duplicate); |
- EXPECT_TRUE(framer_.GetEncodedFrame(&frame, &next_frame, &multiple)); |
- EXPECT_EQ(transport::EncodedFrame::DEPENDENT, frame.dependency); |
- EXPECT_EQ(1u, frame.frame_id); |
- EXPECT_EQ(0u, frame.referenced_frame_id); |
- EXPECT_FALSE(multiple); |
-} |
- |
-TEST_F(FramerTest, ContinuousSequence) { |
- transport::EncodedFrame frame; |
- bool next_frame = false; |
- bool complete = false; |
- bool multiple = false; |
- bool duplicate = false; |
- |
- // Start with a complete key frame. |
- rtp_header_.is_key_frame = true; |
- complete = framer_.InsertPacket( |
- payload_.data(), payload_.size(), rtp_header_, &duplicate); |
- EXPECT_TRUE(complete); |
- EXPECT_TRUE(framer_.GetEncodedFrame(&frame, &next_frame, &multiple)); |
- EXPECT_TRUE(next_frame); |
- EXPECT_FALSE(multiple); |
- EXPECT_EQ(transport::EncodedFrame::KEY, frame.dependency); |
- EXPECT_EQ(0u, frame.frame_id); |
- EXPECT_EQ(0u, frame.referenced_frame_id); |
- framer_.ReleaseFrame(frame.frame_id); |
- |
- // Complete - not continuous. |
- rtp_header_.frame_id = 2; |
- rtp_header_.reference_frame_id = rtp_header_.frame_id - 1; |
- rtp_header_.is_key_frame = false; |
- complete = framer_.InsertPacket( |
- payload_.data(), payload_.size(), rtp_header_, &duplicate); |
- EXPECT_TRUE(complete); |
- EXPECT_FALSE(framer_.GetEncodedFrame(&frame, &next_frame, &multiple)); |
-} |
- |
-TEST_F(FramerTest, Wrap) { |
- // Insert key frame, frame_id = 255 (will jump to that) |
- transport::EncodedFrame frame; |
- bool next_frame = false; |
- bool multiple = true; |
- bool duplicate = false; |
- |
- // Start with a complete key frame. |
- rtp_header_.is_key_frame = true; |
- rtp_header_.frame_id = 255; |
- rtp_header_.reference_frame_id = 255; |
- framer_.InsertPacket( |
- payload_.data(), payload_.size(), rtp_header_, &duplicate); |
- EXPECT_TRUE(framer_.GetEncodedFrame(&frame, &next_frame, &multiple)); |
- EXPECT_TRUE(next_frame); |
- EXPECT_FALSE(multiple); |
- EXPECT_EQ(transport::EncodedFrame::KEY, frame.dependency); |
- EXPECT_EQ(255u, frame.frame_id); |
- EXPECT_EQ(255u, frame.referenced_frame_id); |
- framer_.ReleaseFrame(frame.frame_id); |
- |
- // Insert wrapped delta frame - should be continuous. |
- rtp_header_.is_key_frame = false; |
- rtp_header_.frame_id = 256; |
- framer_.InsertPacket( |
- payload_.data(), payload_.size(), rtp_header_, &duplicate); |
- EXPECT_TRUE(framer_.GetEncodedFrame(&frame, &next_frame, &multiple)); |
- EXPECT_TRUE(next_frame); |
- EXPECT_FALSE(multiple); |
- EXPECT_EQ(transport::EncodedFrame::DEPENDENT, frame.dependency); |
- EXPECT_EQ(256u, frame.frame_id); |
- EXPECT_EQ(255u, frame.referenced_frame_id); |
- framer_.ReleaseFrame(frame.frame_id); |
-} |
- |
-TEST_F(FramerTest, Reset) { |
- transport::EncodedFrame frame; |
- bool next_frame = false; |
- bool complete = false; |
- bool multiple = true; |
- bool duplicate = false; |
- |
- // Start with a complete key frame. |
- rtp_header_.is_key_frame = true; |
- complete = framer_.InsertPacket( |
- payload_.data(), payload_.size(), rtp_header_, &duplicate); |
- EXPECT_TRUE(complete); |
- framer_.Reset(); |
- EXPECT_FALSE(framer_.GetEncodedFrame(&frame, &next_frame, &multiple)); |
-} |
- |
-TEST_F(FramerTest, RequireKeyAfterReset) { |
- transport::EncodedFrame frame; |
- bool next_frame = false; |
- bool multiple = false; |
- bool duplicate = false; |
- |
- framer_.Reset(); |
- |
- // Start with a complete key frame. |
- rtp_header_.is_key_frame = false; |
- rtp_header_.frame_id = 0; |
- framer_.InsertPacket( |
- payload_.data(), payload_.size(), rtp_header_, &duplicate); |
- EXPECT_FALSE(framer_.GetEncodedFrame(&frame, &next_frame, &multiple)); |
- rtp_header_.frame_id = 1; |
- rtp_header_.reference_frame_id = 1; |
- rtp_header_.is_key_frame = true; |
- framer_.InsertPacket( |
- payload_.data(), payload_.size(), rtp_header_, &duplicate); |
- EXPECT_TRUE(framer_.GetEncodedFrame(&frame, &next_frame, &multiple)); |
- EXPECT_TRUE(next_frame); |
- EXPECT_TRUE(multiple); |
-} |
- |
-TEST_F(FramerTest, BasicNonLastReferenceId) { |
- transport::EncodedFrame frame; |
- bool next_frame = false; |
- bool multiple = false; |
- bool duplicate = false; |
- |
- rtp_header_.is_key_frame = true; |
- rtp_header_.frame_id = 0; |
- framer_.InsertPacket( |
- payload_.data(), payload_.size(), rtp_header_, &duplicate); |
- |
- EXPECT_TRUE(framer_.GetEncodedFrame(&frame, &next_frame, &multiple)); |
- EXPECT_FALSE(multiple); |
- framer_.ReleaseFrame(frame.frame_id); |
- |
- rtp_header_.is_key_frame = false; |
- rtp_header_.reference_frame_id = 0; |
- rtp_header_.frame_id = 5; |
- framer_.InsertPacket( |
- payload_.data(), payload_.size(), rtp_header_, &duplicate); |
- |
- EXPECT_TRUE(framer_.GetEncodedFrame(&frame, &next_frame, &multiple)); |
- EXPECT_FALSE(next_frame); |
- EXPECT_FALSE(multiple); |
-} |
- |
-TEST_F(FramerTest, InOrderReferenceFrameSelection) { |
- // Create pattern: 0, 1, 4, 5. |
- transport::EncodedFrame frame; |
- bool next_frame = false; |
- bool multiple = false; |
- bool duplicate = false; |
- |
- rtp_header_.is_key_frame = true; |
- rtp_header_.frame_id = 0; |
- framer_.InsertPacket( |
- payload_.data(), payload_.size(), rtp_header_, &duplicate); |
- rtp_header_.is_key_frame = false; |
- rtp_header_.frame_id = 1; |
- framer_.InsertPacket( |
- payload_.data(), payload_.size(), rtp_header_, &duplicate); |
- |
- // Insert frame #2 partially. |
- rtp_header_.frame_id = 2; |
- rtp_header_.max_packet_id = 1; |
- framer_.InsertPacket( |
- payload_.data(), payload_.size(), rtp_header_, &duplicate); |
- rtp_header_.frame_id = 4; |
- rtp_header_.max_packet_id = 0; |
- rtp_header_.reference_frame_id = 0; |
- framer_.InsertPacket( |
- payload_.data(), payload_.size(), rtp_header_, &duplicate); |
- EXPECT_TRUE(framer_.GetEncodedFrame(&frame, &next_frame, &multiple)); |
- EXPECT_EQ(transport::EncodedFrame::KEY, frame.dependency); |
- EXPECT_EQ(0u, frame.frame_id); |
- EXPECT_EQ(0u, frame.referenced_frame_id); |
- EXPECT_FALSE(multiple); |
- framer_.ReleaseFrame(frame.frame_id); |
- EXPECT_TRUE(framer_.GetEncodedFrame(&frame, &next_frame, &multiple)); |
- EXPECT_TRUE(next_frame); |
- EXPECT_TRUE(multiple); |
- EXPECT_EQ(transport::EncodedFrame::DEPENDENT, frame.dependency); |
- EXPECT_EQ(1u, frame.frame_id); |
- EXPECT_EQ(0u, frame.referenced_frame_id); |
- framer_.ReleaseFrame(frame.frame_id); |
- EXPECT_TRUE(framer_.GetEncodedFrame(&frame, &next_frame, &multiple)); |
- EXPECT_FALSE(next_frame); |
- EXPECT_FALSE(multiple); |
- EXPECT_EQ(transport::EncodedFrame::DEPENDENT, frame.dependency); |
- EXPECT_EQ(4u, frame.frame_id); |
- EXPECT_EQ(0u, frame.referenced_frame_id); |
- framer_.ReleaseFrame(frame.frame_id); |
- // Insert remaining packet of frame #2 - should no be continuous. |
- rtp_header_.frame_id = 2; |
- rtp_header_.packet_id = 1; |
- framer_.InsertPacket( |
- payload_.data(), payload_.size(), rtp_header_, &duplicate); |
- EXPECT_FALSE(framer_.GetEncodedFrame(&frame, &next_frame, &multiple)); |
- rtp_header_.frame_id = 5; |
- rtp_header_.reference_frame_id = rtp_header_.frame_id - 1; |
- rtp_header_.packet_id = 0; |
- rtp_header_.max_packet_id = 0; |
- framer_.InsertPacket( |
- payload_.data(), payload_.size(), rtp_header_, &duplicate); |
- EXPECT_TRUE(framer_.GetEncodedFrame(&frame, &next_frame, &multiple)); |
- EXPECT_TRUE(next_frame); |
- EXPECT_FALSE(multiple); |
- EXPECT_EQ(transport::EncodedFrame::DEPENDENT, frame.dependency); |
- EXPECT_EQ(5u, frame.frame_id); |
- EXPECT_EQ(4u, frame.referenced_frame_id); |
-} |
- |
-TEST_F(FramerTest, AudioWrap) { |
- // All audio frames are marked as key frames. |
- transport::EncodedFrame frame; |
- bool next_frame = false; |
- bool multiple = false; |
- bool duplicate = false; |
- |
- rtp_header_.is_key_frame = true; |
- rtp_header_.frame_id = 254; |
- rtp_header_.reference_frame_id = 254; |
- |
- framer_.InsertPacket( |
- payload_.data(), payload_.size(), rtp_header_, &duplicate); |
- EXPECT_TRUE(framer_.GetEncodedFrame(&frame, &next_frame, &multiple)); |
- EXPECT_TRUE(next_frame); |
- EXPECT_FALSE(multiple); |
- EXPECT_EQ(transport::EncodedFrame::KEY, frame.dependency); |
- EXPECT_EQ(254u, frame.frame_id); |
- EXPECT_EQ(254u, frame.referenced_frame_id); |
- framer_.ReleaseFrame(frame.frame_id); |
- |
- rtp_header_.frame_id = 255; |
- rtp_header_.reference_frame_id = 255; |
- framer_.InsertPacket( |
- payload_.data(), payload_.size(), rtp_header_, &duplicate); |
- |
- // Insert wrapped frame - should be continuous. |
- rtp_header_.frame_id = 256; |
- rtp_header_.reference_frame_id = 256; |
- framer_.InsertPacket( |
- payload_.data(), payload_.size(), rtp_header_, &duplicate); |
- |
- EXPECT_TRUE(framer_.GetEncodedFrame(&frame, &next_frame, &multiple)); |
- EXPECT_TRUE(next_frame); |
- EXPECT_TRUE(multiple); |
- EXPECT_EQ(transport::EncodedFrame::KEY, frame.dependency); |
- EXPECT_EQ(255u, frame.frame_id); |
- EXPECT_EQ(255u, frame.referenced_frame_id); |
- framer_.ReleaseFrame(frame.frame_id); |
- |
- EXPECT_TRUE(framer_.GetEncodedFrame(&frame, &next_frame, &multiple)); |
- EXPECT_TRUE(next_frame); |
- EXPECT_FALSE(multiple); |
- EXPECT_EQ(transport::EncodedFrame::KEY, frame.dependency); |
- EXPECT_EQ(256u, frame.frame_id); |
- EXPECT_EQ(256u, frame.referenced_frame_id); |
- framer_.ReleaseFrame(frame.frame_id); |
-} |
- |
-TEST_F(FramerTest, AudioWrapWithMissingFrame) { |
- // All audio frames are marked as key frames. |
- transport::EncodedFrame frame; |
- bool next_frame = false; |
- bool multiple = true; |
- bool duplicate = false; |
- |
- // Insert and get first packet. |
- rtp_header_.is_key_frame = true; |
- rtp_header_.frame_id = 253; |
- rtp_header_.reference_frame_id = 253; |
- framer_.InsertPacket( |
- payload_.data(), payload_.size(), rtp_header_, &duplicate); |
- EXPECT_TRUE(framer_.GetEncodedFrame(&frame, &next_frame, &multiple)); |
- EXPECT_TRUE(next_frame); |
- EXPECT_FALSE(multiple); |
- EXPECT_EQ(transport::EncodedFrame::KEY, frame.dependency); |
- EXPECT_EQ(253u, frame.frame_id); |
- EXPECT_EQ(253u, frame.referenced_frame_id); |
- framer_.ReleaseFrame(frame.frame_id); |
- |
- // Insert third and fourth packets. |
- rtp_header_.frame_id = 255; |
- rtp_header_.reference_frame_id = 255; |
- framer_.InsertPacket( |
- payload_.data(), payload_.size(), rtp_header_, &duplicate); |
- rtp_header_.frame_id = 256; |
- rtp_header_.reference_frame_id = 256; |
- framer_.InsertPacket( |
- payload_.data(), payload_.size(), rtp_header_, &duplicate); |
- |
- // Get third and fourth packets. |
- EXPECT_TRUE(framer_.GetEncodedFrame(&frame, &next_frame, &multiple)); |
- EXPECT_FALSE(next_frame); |
- EXPECT_TRUE(multiple); |
- EXPECT_EQ(transport::EncodedFrame::KEY, frame.dependency); |
- EXPECT_EQ(255u, frame.frame_id); |
- EXPECT_EQ(255u, frame.referenced_frame_id); |
- framer_.ReleaseFrame(frame.frame_id); |
- EXPECT_TRUE(framer_.GetEncodedFrame(&frame, &next_frame, &multiple)); |
- EXPECT_TRUE(next_frame); |
- EXPECT_FALSE(multiple); |
- EXPECT_EQ(transport::EncodedFrame::KEY, frame.dependency); |
- EXPECT_EQ(256u, frame.frame_id); |
- EXPECT_EQ(256u, frame.referenced_frame_id); |
- framer_.ReleaseFrame(frame.frame_id); |
-} |
- |
-} // namespace cast |
-} // namespace media |