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

Side by Side Diff: media/cast/net/rtp/framer_unittest.cc

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

Powered by Google App Engine
This is Rietveld 408576698