| OLD | NEW |
| (Empty) |
| 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 | |
| 3 // found in the LICENSE file. | |
| 4 | |
| 5 #include "base/memory/scoped_ptr.h" | |
| 6 #include "base/rand_util.h" | |
| 7 #include "media/cast/rtp_receiver/rtp_parser/rtp_parser.h" | |
| 8 #include "media/cast/rtp_receiver/rtp_parser/test/rtp_packet_builder.h" | |
| 9 #include "media/cast/rtp_receiver/rtp_receiver_defines.h" | |
| 10 #include "testing/gtest/include/gtest/gtest.h" | |
| 11 | |
| 12 namespace media { | |
| 13 namespace cast { | |
| 14 | |
| 15 static const size_t kPacketLength = 1500; | |
| 16 static const int kTestPayloadType = 127; | |
| 17 static const uint32 kTestSsrc = 1234; | |
| 18 static const uint32 kTestTimestamp = 111111; | |
| 19 static const uint16 kTestSeqNum = 4321; | |
| 20 static const uint8 kRefFrameId = 17; | |
| 21 | |
| 22 class RtpParserTest : public ::testing::Test { | |
| 23 protected: | |
| 24 RtpParserTest() : rtp_parser_(kTestSsrc, kTestPayloadType) { | |
| 25 packet_builder_.SetSsrc(kTestSsrc); | |
| 26 packet_builder_.SetSequenceNumber(kTestSeqNum); | |
| 27 packet_builder_.SetTimestamp(kTestTimestamp); | |
| 28 packet_builder_.SetPayloadType(kTestPayloadType); | |
| 29 packet_builder_.SetMarkerBit(true); // Only one packet. | |
| 30 cast_header_.sender_ssrc = kTestSsrc; | |
| 31 cast_header_.sequence_number = kTestSeqNum; | |
| 32 cast_header_.rtp_timestamp = kTestTimestamp; | |
| 33 cast_header_.payload_type = kTestPayloadType; | |
| 34 cast_header_.marker = true; | |
| 35 } | |
| 36 | |
| 37 virtual ~RtpParserTest() {} | |
| 38 | |
| 39 void ExpectParsesPacket() { | |
| 40 RtpCastHeader parsed_header; | |
| 41 const uint8* payload = NULL; | |
| 42 size_t payload_size = static_cast<size_t>(-1); | |
| 43 EXPECT_TRUE(rtp_parser_.ParsePacket( | |
| 44 packet_, kPacketLength, &parsed_header, &payload, &payload_size)); | |
| 45 | |
| 46 EXPECT_EQ(cast_header_.marker, parsed_header.marker); | |
| 47 EXPECT_EQ(cast_header_.payload_type, parsed_header.payload_type); | |
| 48 EXPECT_EQ(cast_header_.sequence_number, parsed_header.sequence_number); | |
| 49 EXPECT_EQ(cast_header_.rtp_timestamp, parsed_header.rtp_timestamp); | |
| 50 EXPECT_EQ(cast_header_.sender_ssrc, parsed_header.sender_ssrc); | |
| 51 | |
| 52 EXPECT_EQ(cast_header_.is_key_frame, parsed_header.is_key_frame); | |
| 53 EXPECT_EQ(cast_header_.frame_id, parsed_header.frame_id); | |
| 54 EXPECT_EQ(cast_header_.packet_id, parsed_header.packet_id); | |
| 55 EXPECT_EQ(cast_header_.max_packet_id, parsed_header.max_packet_id); | |
| 56 EXPECT_EQ(cast_header_.reference_frame_id, | |
| 57 parsed_header.reference_frame_id); | |
| 58 | |
| 59 EXPECT_TRUE(!!payload); | |
| 60 EXPECT_NE(static_cast<size_t>(-1), payload_size); | |
| 61 } | |
| 62 | |
| 63 void ExpectDoesNotParsePacket() { | |
| 64 RtpCastHeader parsed_header; | |
| 65 const uint8* payload = NULL; | |
| 66 size_t payload_size = static_cast<size_t>(-1); | |
| 67 EXPECT_FALSE(rtp_parser_.ParsePacket( | |
| 68 packet_, kPacketLength, &parsed_header, &payload, &payload_size)); | |
| 69 } | |
| 70 | |
| 71 RtpPacketBuilder packet_builder_; | |
| 72 uint8 packet_[kPacketLength]; | |
| 73 RtpParser rtp_parser_; | |
| 74 RtpCastHeader cast_header_; | |
| 75 }; | |
| 76 | |
| 77 TEST_F(RtpParserTest, ParseDefaultCastPacket) { | |
| 78 packet_builder_.BuildHeader(packet_, kPacketLength); | |
| 79 ExpectParsesPacket(); | |
| 80 } | |
| 81 | |
| 82 TEST_F(RtpParserTest, ParseNonDefaultCastPacket) { | |
| 83 packet_builder_.SetKeyFrame(true); | |
| 84 packet_builder_.SetFrameIds(10, 10); | |
| 85 packet_builder_.SetPacketId(5); | |
| 86 packet_builder_.SetMaxPacketId(15); | |
| 87 packet_builder_.SetMarkerBit(false); | |
| 88 packet_builder_.BuildHeader(packet_, kPacketLength); | |
| 89 cast_header_.is_key_frame = true; | |
| 90 cast_header_.frame_id = 10; | |
| 91 cast_header_.reference_frame_id = 10; | |
| 92 cast_header_.packet_id = 5; | |
| 93 cast_header_.max_packet_id = 15; | |
| 94 cast_header_.marker = false; | |
| 95 ExpectParsesPacket(); | |
| 96 } | |
| 97 | |
| 98 TEST_F(RtpParserTest, TooBigPacketId) { | |
| 99 packet_builder_.SetKeyFrame(true); | |
| 100 packet_builder_.SetFrameIds(10, 10); | |
| 101 packet_builder_.SetPacketId(15); | |
| 102 packet_builder_.SetMaxPacketId(5); | |
| 103 packet_builder_.BuildHeader(packet_, kPacketLength); | |
| 104 cast_header_.is_key_frame = true; | |
| 105 cast_header_.frame_id = 10; | |
| 106 cast_header_.reference_frame_id = 10; | |
| 107 cast_header_.packet_id = 15; | |
| 108 cast_header_.max_packet_id = 5; | |
| 109 ExpectDoesNotParsePacket(); | |
| 110 } | |
| 111 | |
| 112 TEST_F(RtpParserTest, MaxPacketId) { | |
| 113 packet_builder_.SetKeyFrame(true); | |
| 114 packet_builder_.SetFrameIds(10, 10); | |
| 115 packet_builder_.SetPacketId(65535); | |
| 116 packet_builder_.SetMaxPacketId(65535); | |
| 117 packet_builder_.BuildHeader(packet_, kPacketLength); | |
| 118 cast_header_.is_key_frame = true; | |
| 119 cast_header_.frame_id = 10; | |
| 120 cast_header_.reference_frame_id = 10; | |
| 121 cast_header_.packet_id = 65535; | |
| 122 cast_header_.max_packet_id = 65535; | |
| 123 ExpectParsesPacket(); | |
| 124 } | |
| 125 | |
| 126 TEST_F(RtpParserTest, InvalidPayloadType) { | |
| 127 packet_builder_.SetKeyFrame(true); | |
| 128 packet_builder_.SetFrameIds(10, 10); | |
| 129 packet_builder_.SetPacketId(65535); | |
| 130 packet_builder_.SetMaxPacketId(65535); | |
| 131 packet_builder_.SetPayloadType(kTestPayloadType - 1); | |
| 132 packet_builder_.BuildHeader(packet_, kPacketLength); | |
| 133 cast_header_.is_key_frame = true; | |
| 134 cast_header_.frame_id = 10; | |
| 135 cast_header_.reference_frame_id = 10; | |
| 136 cast_header_.packet_id = 65535; | |
| 137 cast_header_.max_packet_id = 65535; | |
| 138 cast_header_.payload_type = kTestPayloadType - 1; | |
| 139 ExpectDoesNotParsePacket(); | |
| 140 } | |
| 141 | |
| 142 TEST_F(RtpParserTest, InvalidSsrc) { | |
| 143 packet_builder_.SetKeyFrame(true); | |
| 144 packet_builder_.SetFrameIds(10, 10); | |
| 145 packet_builder_.SetPacketId(65535); | |
| 146 packet_builder_.SetMaxPacketId(65535); | |
| 147 packet_builder_.SetSsrc(kTestSsrc - 1); | |
| 148 packet_builder_.BuildHeader(packet_, kPacketLength); | |
| 149 cast_header_.is_key_frame = true; | |
| 150 cast_header_.frame_id = 10; | |
| 151 cast_header_.reference_frame_id = 10; | |
| 152 cast_header_.packet_id = 65535; | |
| 153 cast_header_.max_packet_id = 65535; | |
| 154 cast_header_.sender_ssrc = kTestSsrc - 1; | |
| 155 ExpectDoesNotParsePacket(); | |
| 156 } | |
| 157 | |
| 158 TEST_F(RtpParserTest, ParseCastPacketWithSpecificFrameReference) { | |
| 159 packet_builder_.SetFrameIds(kRefFrameId + 3, kRefFrameId); | |
| 160 packet_builder_.BuildHeader(packet_, kPacketLength); | |
| 161 cast_header_.frame_id = kRefFrameId + 3; | |
| 162 cast_header_.reference_frame_id = kRefFrameId; | |
| 163 ExpectParsesPacket(); | |
| 164 } | |
| 165 | |
| 166 TEST_F(RtpParserTest, ParseExpandingFrameIdTo32Bits) { | |
| 167 const uint32 kMaxFrameId = 1000; | |
| 168 packet_builder_.SetKeyFrame(true); | |
| 169 cast_header_.is_key_frame = true; | |
| 170 for (uint32 frame_id = 0; frame_id <= kMaxFrameId; ++frame_id) { | |
| 171 packet_builder_.SetFrameIds(frame_id, frame_id); | |
| 172 packet_builder_.BuildHeader(packet_, kPacketLength); | |
| 173 cast_header_.frame_id = frame_id; | |
| 174 cast_header_.reference_frame_id = frame_id; | |
| 175 ExpectParsesPacket(); | |
| 176 } | |
| 177 } | |
| 178 | |
| 179 TEST_F(RtpParserTest, ParseExpandingReferenceFrameIdTo32Bits) { | |
| 180 const uint32 kMaxFrameId = 1000; | |
| 181 const uint32 kMaxBackReferenceOffset = 10; | |
| 182 packet_builder_.SetKeyFrame(false); | |
| 183 cast_header_.is_key_frame = false; | |
| 184 for (uint32 frame_id = kMaxBackReferenceOffset; | |
| 185 frame_id <= kMaxFrameId; ++frame_id) { | |
| 186 const uint32 reference_frame_id = | |
| 187 frame_id - base::RandInt(1, kMaxBackReferenceOffset); | |
| 188 packet_builder_.SetFrameIds(frame_id, reference_frame_id); | |
| 189 packet_builder_.BuildHeader(packet_, kPacketLength); | |
| 190 cast_header_.frame_id = frame_id; | |
| 191 cast_header_.reference_frame_id = reference_frame_id; | |
| 192 ExpectParsesPacket(); | |
| 193 } | |
| 194 } | |
| 195 | |
| 196 } // namespace cast | |
| 197 } // namespace media | |
| OLD | NEW |