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

Side by Side Diff: media/cast/framer/framer_unittest.cc

Issue 288103002: [Cast] EncodedAudioFrame+EncodedVideoFrame+reference_time --> EncodedFrame (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 6 years, 7 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
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/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 {
(...skipping 15 matching lines...) Expand all
26 std::vector<uint8> payload_; 26 std::vector<uint8> payload_;
27 RtpCastHeader rtp_header_; 27 RtpCastHeader rtp_header_;
28 MockRtpPayloadFeedback mock_rtp_payload_feedback_; 28 MockRtpPayloadFeedback mock_rtp_payload_feedback_;
29 Framer framer_; 29 Framer framer_;
30 base::SimpleTestTickClock testing_clock_; 30 base::SimpleTestTickClock testing_clock_;
31 31
32 DISALLOW_COPY_AND_ASSIGN(FramerTest); 32 DISALLOW_COPY_AND_ASSIGN(FramerTest);
33 }; 33 };
34 34
35 TEST_F(FramerTest, EmptyState) { 35 TEST_F(FramerTest, EmptyState) {
36 transport::EncodedVideoFrame frame; 36 transport::EncodedFrame frame;
37 bool next_frame = false; 37 bool next_frame = false;
38 EXPECT_FALSE(framer_.GetEncodedVideoFrame(&frame, &next_frame)); 38 EXPECT_FALSE(framer_.GetEncodedVideoFrame(&frame, &next_frame));
39 } 39 }
40 40
41 TEST_F(FramerTest, AlwaysStartWithKey) { 41 TEST_F(FramerTest, AlwaysStartWithKey) {
42 transport::EncodedVideoFrame frame; 42 transport::EncodedFrame frame;
43 bool next_frame = false; 43 bool next_frame = false;
44 bool complete = false; 44 bool complete = false;
45 bool duplicate = false; 45 bool duplicate = false;
46 46
47 // Insert non key first frame. 47 // Insert non key first frame.
48 complete = framer_.InsertPacket( 48 complete = framer_.InsertPacket(
49 payload_.data(), payload_.size(), rtp_header_, &duplicate); 49 payload_.data(), payload_.size(), rtp_header_, &duplicate);
50 EXPECT_TRUE(complete); 50 EXPECT_TRUE(complete);
51 EXPECT_FALSE(framer_.GetEncodedVideoFrame(&frame, &next_frame)); 51 EXPECT_FALSE(framer_.GetEncodedVideoFrame(&frame, &next_frame));
52 rtp_header_.frame_id = 1; 52 rtp_header_.frame_id = 1;
53 rtp_header_.reference_frame_id = 1; 53 rtp_header_.reference_frame_id = 1;
54 rtp_header_.is_key_frame = true; 54 rtp_header_.is_key_frame = true;
55 complete = framer_.InsertPacket( 55 complete = framer_.InsertPacket(
56 payload_.data(), payload_.size(), rtp_header_, &duplicate); 56 payload_.data(), payload_.size(), rtp_header_, &duplicate);
57 EXPECT_TRUE(complete); 57 EXPECT_TRUE(complete);
58 EXPECT_TRUE(framer_.GetEncodedVideoFrame(&frame, &next_frame)); 58 EXPECT_TRUE(framer_.GetEncodedVideoFrame(&frame, &next_frame));
59 EXPECT_TRUE(next_frame); 59 EXPECT_TRUE(next_frame);
60 EXPECT_EQ(1u, frame.frame_id); 60 EXPECT_EQ(1u, frame.frame_id);
61 EXPECT_TRUE(frame.key_frame); 61 EXPECT_EQ(1u, frame.base_frame_id);
62 framer_.ReleaseFrame(frame.frame_id); 62 framer_.ReleaseFrame(frame.frame_id);
63 } 63 }
64 64
65 TEST_F(FramerTest, CompleteFrame) { 65 TEST_F(FramerTest, CompleteFrame) {
66 transport::EncodedVideoFrame frame; 66 transport::EncodedFrame frame;
67 bool next_frame = false; 67 bool next_frame = false;
68 bool complete = false; 68 bool complete = false;
69 bool duplicate = false; 69 bool duplicate = false;
70 70
71 // Start with a complete key frame. 71 // Start with a complete key frame.
72 rtp_header_.is_key_frame = true; 72 rtp_header_.is_key_frame = true;
73 complete = framer_.InsertPacket( 73 complete = framer_.InsertPacket(
74 payload_.data(), payload_.size(), rtp_header_, &duplicate); 74 payload_.data(), payload_.size(), rtp_header_, &duplicate);
75 EXPECT_TRUE(complete); 75 EXPECT_TRUE(complete);
76 EXPECT_TRUE(framer_.GetEncodedVideoFrame(&frame, &next_frame)); 76 EXPECT_TRUE(framer_.GetEncodedVideoFrame(&frame, &next_frame));
77 EXPECT_TRUE(next_frame); 77 EXPECT_TRUE(next_frame);
78 EXPECT_EQ(0u, frame.frame_id); 78 EXPECT_EQ(0u, frame.frame_id);
79 EXPECT_TRUE(frame.key_frame); 79 EXPECT_EQ(0u, frame.base_frame_id);
80 framer_.ReleaseFrame(frame.frame_id); 80 framer_.ReleaseFrame(frame.frame_id);
81 81
82 // Incomplete delta. 82 // Incomplete delta.
83 ++rtp_header_.frame_id; 83 ++rtp_header_.frame_id;
84 rtp_header_.reference_frame_id = rtp_header_.frame_id - 1; 84 rtp_header_.reference_frame_id = rtp_header_.frame_id - 1;
85 rtp_header_.is_key_frame = false; 85 rtp_header_.is_key_frame = false;
86 rtp_header_.max_packet_id = 2; 86 rtp_header_.max_packet_id = 2;
87 complete = framer_.InsertPacket( 87 complete = framer_.InsertPacket(
88 payload_.data(), payload_.size(), rtp_header_, &duplicate); 88 payload_.data(), payload_.size(), rtp_header_, &duplicate);
89 EXPECT_FALSE(complete); 89 EXPECT_FALSE(complete);
90 EXPECT_FALSE(framer_.GetEncodedVideoFrame(&frame, &next_frame)); 90 EXPECT_FALSE(framer_.GetEncodedVideoFrame(&frame, &next_frame));
91 91
92 // Complete delta - can't skip, as incomplete sequence. 92 // Complete delta - can't skip, as incomplete sequence.
93 ++rtp_header_.frame_id; 93 ++rtp_header_.frame_id;
94 rtp_header_.reference_frame_id = rtp_header_.frame_id - 1; 94 rtp_header_.reference_frame_id = rtp_header_.frame_id - 1;
95 rtp_header_.max_packet_id = 0; 95 rtp_header_.max_packet_id = 0;
96 complete = framer_.InsertPacket( 96 complete = framer_.InsertPacket(
97 payload_.data(), payload_.size(), rtp_header_, &duplicate); 97 payload_.data(), payload_.size(), rtp_header_, &duplicate);
98 EXPECT_TRUE(complete); 98 EXPECT_TRUE(complete);
99 EXPECT_FALSE(framer_.GetEncodedVideoFrame(&frame, &next_frame)); 99 EXPECT_FALSE(framer_.GetEncodedVideoFrame(&frame, &next_frame));
100 } 100 }
101 101
102 TEST_F(FramerTest, DuplicatePackets) { 102 TEST_F(FramerTest, DuplicatePackets) {
103 transport::EncodedVideoFrame frame; 103 transport::EncodedFrame frame;
104 bool next_frame = false; 104 bool next_frame = false;
105 bool complete = false; 105 bool complete = false;
106 bool duplicate = false; 106 bool duplicate = false;
107 107
108 // Start with an incomplete key frame. 108 // Start with an incomplete key frame.
109 rtp_header_.is_key_frame = true; 109 rtp_header_.is_key_frame = true;
110 rtp_header_.max_packet_id = 1; 110 rtp_header_.max_packet_id = 1;
111 duplicate = true; 111 duplicate = true;
112 complete = framer_.InsertPacket( 112 complete = framer_.InsertPacket(
113 payload_.data(), payload_.size(), rtp_header_, &duplicate); 113 payload_.data(), payload_.size(), rtp_header_, &duplicate);
(...skipping 11 matching lines...) Expand all
125 125
126 // Complete key frame. 126 // Complete key frame.
127 rtp_header_.packet_id = 1; 127 rtp_header_.packet_id = 1;
128 duplicate = true; 128 duplicate = true;
129 complete = framer_.InsertPacket( 129 complete = framer_.InsertPacket(
130 payload_.data(), payload_.size(), rtp_header_, &duplicate); 130 payload_.data(), payload_.size(), rtp_header_, &duplicate);
131 EXPECT_TRUE(complete); 131 EXPECT_TRUE(complete);
132 EXPECT_FALSE(duplicate); 132 EXPECT_FALSE(duplicate);
133 EXPECT_TRUE(framer_.GetEncodedVideoFrame(&frame, &next_frame)); 133 EXPECT_TRUE(framer_.GetEncodedVideoFrame(&frame, &next_frame));
134 EXPECT_EQ(0u, frame.frame_id); 134 EXPECT_EQ(0u, frame.frame_id);
135 EXPECT_EQ(0u, frame.base_frame_id);
135 136
136 // Add same packet again in complete key frame. 137 // Add same packet again in complete key frame.
137 duplicate = false; 138 duplicate = false;
138 complete = framer_.InsertPacket( 139 complete = framer_.InsertPacket(
139 payload_.data(), payload_.size(), rtp_header_, &duplicate); 140 payload_.data(), payload_.size(), rtp_header_, &duplicate);
140 EXPECT_FALSE(complete); 141 EXPECT_FALSE(complete);
141 EXPECT_TRUE(duplicate); 142 EXPECT_TRUE(duplicate);
142 EXPECT_TRUE(framer_.GetEncodedVideoFrame(&frame, &next_frame)); 143 EXPECT_TRUE(framer_.GetEncodedVideoFrame(&frame, &next_frame));
143 EXPECT_EQ(0u, frame.frame_id); 144 EXPECT_EQ(0u, frame.frame_id);
145 EXPECT_EQ(0u, frame.base_frame_id);
144 framer_.ReleaseFrame(frame.frame_id); 146 framer_.ReleaseFrame(frame.frame_id);
145 147
146 // Incomplete delta frame. 148 // Incomplete delta frame.
147 ++rtp_header_.frame_id; 149 ++rtp_header_.frame_id;
148 rtp_header_.reference_frame_id = rtp_header_.frame_id - 1; 150 rtp_header_.reference_frame_id = rtp_header_.frame_id - 1;
149 rtp_header_.packet_id = 0; 151 rtp_header_.packet_id = 0;
150 rtp_header_.is_key_frame = false; 152 rtp_header_.is_key_frame = false;
151 duplicate = true; 153 duplicate = true;
152 complete = framer_.InsertPacket( 154 complete = framer_.InsertPacket(
153 payload_.data(), payload_.size(), rtp_header_, &duplicate); 155 payload_.data(), payload_.size(), rtp_header_, &duplicate);
(...skipping 11 matching lines...) Expand all
165 167
166 // Complete delta frame. 168 // Complete delta frame.
167 rtp_header_.packet_id = 1; 169 rtp_header_.packet_id = 1;
168 duplicate = true; 170 duplicate = true;
169 complete = framer_.InsertPacket( 171 complete = framer_.InsertPacket(
170 payload_.data(), payload_.size(), rtp_header_, &duplicate); 172 payload_.data(), payload_.size(), rtp_header_, &duplicate);
171 EXPECT_TRUE(complete); 173 EXPECT_TRUE(complete);
172 EXPECT_FALSE(duplicate); 174 EXPECT_FALSE(duplicate);
173 EXPECT_TRUE(framer_.GetEncodedVideoFrame(&frame, &next_frame)); 175 EXPECT_TRUE(framer_.GetEncodedVideoFrame(&frame, &next_frame));
174 EXPECT_EQ(1u, frame.frame_id); 176 EXPECT_EQ(1u, frame.frame_id);
177 EXPECT_EQ(0u, frame.base_frame_id);
175 178
176 // Add same packet again in complete delta frame. 179 // Add same packet again in complete delta frame.
177 duplicate = false; 180 duplicate = false;
178 complete = framer_.InsertPacket( 181 complete = framer_.InsertPacket(
179 payload_.data(), payload_.size(), rtp_header_, &duplicate); 182 payload_.data(), payload_.size(), rtp_header_, &duplicate);
180 EXPECT_FALSE(complete); 183 EXPECT_FALSE(complete);
181 EXPECT_TRUE(duplicate); 184 EXPECT_TRUE(duplicate);
182 EXPECT_TRUE(framer_.GetEncodedVideoFrame(&frame, &next_frame)); 185 EXPECT_TRUE(framer_.GetEncodedVideoFrame(&frame, &next_frame));
183 EXPECT_EQ(1u, frame.frame_id); 186 EXPECT_EQ(1u, frame.frame_id);
187 EXPECT_EQ(0u, frame.base_frame_id);
184 } 188 }
185 189
186 TEST_F(FramerTest, ContinuousSequence) { 190 TEST_F(FramerTest, ContinuousSequence) {
187 transport::EncodedVideoFrame frame; 191 transport::EncodedFrame frame;
188 bool next_frame = false; 192 bool next_frame = false;
189 bool complete = false; 193 bool complete = false;
190 bool duplicate = false; 194 bool duplicate = false;
191 195
192 // Start with a complete key frame. 196 // Start with a complete key frame.
193 rtp_header_.is_key_frame = true; 197 rtp_header_.is_key_frame = true;
194 complete = framer_.InsertPacket( 198 complete = framer_.InsertPacket(
195 payload_.data(), payload_.size(), rtp_header_, &duplicate); 199 payload_.data(), payload_.size(), rtp_header_, &duplicate);
196 EXPECT_TRUE(complete); 200 EXPECT_TRUE(complete);
197 EXPECT_TRUE(framer_.GetEncodedVideoFrame(&frame, &next_frame)); 201 EXPECT_TRUE(framer_.GetEncodedVideoFrame(&frame, &next_frame));
198 EXPECT_TRUE(next_frame); 202 EXPECT_TRUE(next_frame);
199 EXPECT_EQ(0u, frame.frame_id); 203 EXPECT_EQ(0u, frame.frame_id);
200 EXPECT_TRUE(frame.key_frame); 204 EXPECT_EQ(0u, frame.base_frame_id);
201 framer_.ReleaseFrame(frame.frame_id); 205 framer_.ReleaseFrame(frame.frame_id);
202 206
203 // Complete - not continuous. 207 // Complete - not continuous.
204 rtp_header_.frame_id = 2; 208 rtp_header_.frame_id = 2;
205 rtp_header_.reference_frame_id = rtp_header_.frame_id - 1; 209 rtp_header_.reference_frame_id = rtp_header_.frame_id - 1;
206 rtp_header_.is_key_frame = false; 210 rtp_header_.is_key_frame = false;
207 complete = framer_.InsertPacket( 211 complete = framer_.InsertPacket(
208 payload_.data(), payload_.size(), rtp_header_, &duplicate); 212 payload_.data(), payload_.size(), rtp_header_, &duplicate);
209 EXPECT_TRUE(complete); 213 EXPECT_TRUE(complete);
210 EXPECT_FALSE(framer_.GetEncodedVideoFrame(&frame, &next_frame)); 214 EXPECT_FALSE(framer_.GetEncodedVideoFrame(&frame, &next_frame));
211 } 215 }
212 216
213 TEST_F(FramerTest, Wrap) { 217 TEST_F(FramerTest, Wrap) {
214 // Insert key frame, frame_id = 255 (will jump to that) 218 // Insert key frame, frame_id = 255 (will jump to that)
215 transport::EncodedVideoFrame frame; 219 transport::EncodedFrame frame;
216 bool next_frame = false; 220 bool next_frame = false;
217 bool duplicate = false; 221 bool duplicate = false;
218 222
219 // Start with a complete key frame. 223 // Start with a complete key frame.
220 rtp_header_.is_key_frame = true; 224 rtp_header_.is_key_frame = true;
221 rtp_header_.frame_id = 255; 225 rtp_header_.frame_id = 255;
222 rtp_header_.reference_frame_id = 255; 226 rtp_header_.reference_frame_id = 255;
223 framer_.InsertPacket( 227 framer_.InsertPacket(
224 payload_.data(), payload_.size(), rtp_header_, &duplicate); 228 payload_.data(), payload_.size(), rtp_header_, &duplicate);
225 EXPECT_TRUE(framer_.GetEncodedVideoFrame(&frame, &next_frame)); 229 EXPECT_TRUE(framer_.GetEncodedVideoFrame(&frame, &next_frame));
226 EXPECT_TRUE(next_frame); 230 EXPECT_TRUE(next_frame);
227 EXPECT_EQ(255u, frame.frame_id); 231 EXPECT_EQ(255u, frame.frame_id);
232 EXPECT_EQ(255u, frame.base_frame_id);
228 framer_.ReleaseFrame(frame.frame_id); 233 framer_.ReleaseFrame(frame.frame_id);
229 234
230 // Insert wrapped delta frame - should be continuous. 235 // Insert wrapped delta frame - should be continuous.
231 rtp_header_.is_key_frame = false; 236 rtp_header_.is_key_frame = false;
232 rtp_header_.frame_id = 256; 237 rtp_header_.frame_id = 256;
233 framer_.InsertPacket( 238 framer_.InsertPacket(
234 payload_.data(), payload_.size(), rtp_header_, &duplicate); 239 payload_.data(), payload_.size(), rtp_header_, &duplicate);
235 EXPECT_TRUE(framer_.GetEncodedVideoFrame(&frame, &next_frame)); 240 EXPECT_TRUE(framer_.GetEncodedVideoFrame(&frame, &next_frame));
236 EXPECT_TRUE(next_frame); 241 EXPECT_TRUE(next_frame);
237 EXPECT_EQ(256u, frame.frame_id); 242 EXPECT_EQ(256u, frame.frame_id);
243 EXPECT_EQ(255u, frame.base_frame_id);
238 framer_.ReleaseFrame(frame.frame_id); 244 framer_.ReleaseFrame(frame.frame_id);
239 } 245 }
240 246
241 TEST_F(FramerTest, Reset) { 247 TEST_F(FramerTest, Reset) {
242 transport::EncodedVideoFrame frame; 248 transport::EncodedFrame frame;
243 bool next_frame = false; 249 bool next_frame = false;
244 bool complete = false; 250 bool complete = false;
245 bool duplicate = false; 251 bool duplicate = false;
246 252
247 // Start with a complete key frame. 253 // Start with a complete key frame.
248 rtp_header_.is_key_frame = true; 254 rtp_header_.is_key_frame = true;
249 complete = framer_.InsertPacket( 255 complete = framer_.InsertPacket(
250 payload_.data(), payload_.size(), rtp_header_, &duplicate); 256 payload_.data(), payload_.size(), rtp_header_, &duplicate);
251 EXPECT_TRUE(complete); 257 EXPECT_TRUE(complete);
252 framer_.Reset(); 258 framer_.Reset();
253 EXPECT_FALSE(framer_.GetEncodedVideoFrame(&frame, &next_frame)); 259 EXPECT_FALSE(framer_.GetEncodedVideoFrame(&frame, &next_frame));
254 } 260 }
255 261
256 TEST_F(FramerTest, RequireKeyAfterReset) { 262 TEST_F(FramerTest, RequireKeyAfterReset) {
257 transport::EncodedVideoFrame frame; 263 transport::EncodedFrame frame;
258 bool next_frame = false; 264 bool next_frame = false;
259 bool duplicate = false; 265 bool duplicate = false;
260 266
261 framer_.Reset(); 267 framer_.Reset();
262 268
263 // Start with a complete key frame. 269 // Start with a complete key frame.
264 rtp_header_.is_key_frame = false; 270 rtp_header_.is_key_frame = false;
265 rtp_header_.frame_id = 0; 271 rtp_header_.frame_id = 0;
266 framer_.InsertPacket( 272 framer_.InsertPacket(
267 payload_.data(), payload_.size(), rtp_header_, &duplicate); 273 payload_.data(), payload_.size(), rtp_header_, &duplicate);
268 EXPECT_FALSE(framer_.GetEncodedVideoFrame(&frame, &next_frame)); 274 EXPECT_FALSE(framer_.GetEncodedVideoFrame(&frame, &next_frame));
269 rtp_header_.frame_id = 1; 275 rtp_header_.frame_id = 1;
270 rtp_header_.reference_frame_id = 1; 276 rtp_header_.reference_frame_id = 1;
271 rtp_header_.is_key_frame = true; 277 rtp_header_.is_key_frame = true;
272 framer_.InsertPacket( 278 framer_.InsertPacket(
273 payload_.data(), payload_.size(), rtp_header_, &duplicate); 279 payload_.data(), payload_.size(), rtp_header_, &duplicate);
274 EXPECT_TRUE(framer_.GetEncodedVideoFrame(&frame, &next_frame)); 280 EXPECT_TRUE(framer_.GetEncodedVideoFrame(&frame, &next_frame));
275 EXPECT_TRUE(next_frame); 281 EXPECT_TRUE(next_frame);
276 } 282 }
277 283
278 TEST_F(FramerTest, BasicNonLastReferenceId) { 284 TEST_F(FramerTest, BasicNonLastReferenceId) {
279 transport::EncodedVideoFrame frame; 285 transport::EncodedFrame frame;
280 bool next_frame = false; 286 bool next_frame = false;
281 bool duplicate = false; 287 bool duplicate = false;
282 288
283 rtp_header_.is_key_frame = true; 289 rtp_header_.is_key_frame = true;
284 rtp_header_.frame_id = 0; 290 rtp_header_.frame_id = 0;
285 framer_.InsertPacket( 291 framer_.InsertPacket(
286 payload_.data(), payload_.size(), rtp_header_, &duplicate); 292 payload_.data(), payload_.size(), rtp_header_, &duplicate);
287 293
288 EXPECT_TRUE(framer_.GetEncodedVideoFrame(&frame, &next_frame)); 294 EXPECT_TRUE(framer_.GetEncodedVideoFrame(&frame, &next_frame));
289 framer_.ReleaseFrame(frame.frame_id); 295 framer_.ReleaseFrame(frame.frame_id);
290 296
291 rtp_header_.is_key_frame = false; 297 rtp_header_.is_key_frame = false;
292 rtp_header_.reference_frame_id = 0; 298 rtp_header_.reference_frame_id = 0;
293 rtp_header_.frame_id = 5; 299 rtp_header_.frame_id = 5;
294 framer_.InsertPacket( 300 framer_.InsertPacket(
295 payload_.data(), payload_.size(), rtp_header_, &duplicate); 301 payload_.data(), payload_.size(), rtp_header_, &duplicate);
296 302
297 EXPECT_TRUE(framer_.GetEncodedVideoFrame(&frame, &next_frame)); 303 EXPECT_TRUE(framer_.GetEncodedVideoFrame(&frame, &next_frame));
298 EXPECT_FALSE(next_frame); 304 EXPECT_FALSE(next_frame);
299 } 305 }
300 306
301 TEST_F(FramerTest, InOrderReferenceFrameSelection) { 307 TEST_F(FramerTest, InOrderReferenceFrameSelection) {
302 // Create pattern: 0, 1, 4, 5. 308 // Create pattern: 0, 1, 4, 5.
303 transport::EncodedVideoFrame frame; 309 transport::EncodedFrame frame;
304 bool next_frame = false; 310 bool next_frame = false;
305 bool duplicate = false; 311 bool duplicate = false;
306 312
307 rtp_header_.is_key_frame = true; 313 rtp_header_.is_key_frame = true;
308 rtp_header_.frame_id = 0; 314 rtp_header_.frame_id = 0;
309 framer_.InsertPacket( 315 framer_.InsertPacket(
310 payload_.data(), payload_.size(), rtp_header_, &duplicate); 316 payload_.data(), payload_.size(), rtp_header_, &duplicate);
311 rtp_header_.is_key_frame = false; 317 rtp_header_.is_key_frame = false;
312 rtp_header_.frame_id = 1; 318 rtp_header_.frame_id = 1;
313 framer_.InsertPacket( 319 framer_.InsertPacket(
314 payload_.data(), payload_.size(), rtp_header_, &duplicate); 320 payload_.data(), payload_.size(), rtp_header_, &duplicate);
315 321
316 // Insert frame #2 partially. 322 // Insert frame #2 partially.
317 rtp_header_.frame_id = 2; 323 rtp_header_.frame_id = 2;
318 rtp_header_.max_packet_id = 1; 324 rtp_header_.max_packet_id = 1;
319 framer_.InsertPacket( 325 framer_.InsertPacket(
320 payload_.data(), payload_.size(), rtp_header_, &duplicate); 326 payload_.data(), payload_.size(), rtp_header_, &duplicate);
321 rtp_header_.frame_id = 4; 327 rtp_header_.frame_id = 4;
322 rtp_header_.max_packet_id = 0; 328 rtp_header_.max_packet_id = 0;
323 rtp_header_.reference_frame_id = 0; 329 rtp_header_.reference_frame_id = 0;
324 framer_.InsertPacket( 330 framer_.InsertPacket(
325 payload_.data(), payload_.size(), rtp_header_, &duplicate); 331 payload_.data(), payload_.size(), rtp_header_, &duplicate);
326 EXPECT_TRUE(framer_.GetEncodedVideoFrame(&frame, &next_frame)); 332 EXPECT_TRUE(framer_.GetEncodedVideoFrame(&frame, &next_frame));
327 EXPECT_EQ(0u, frame.frame_id); 333 EXPECT_EQ(0u, frame.frame_id);
334 EXPECT_EQ(0u, frame.base_frame_id);
328 framer_.ReleaseFrame(frame.frame_id); 335 framer_.ReleaseFrame(frame.frame_id);
329 EXPECT_TRUE(framer_.GetEncodedVideoFrame(&frame, &next_frame)); 336 EXPECT_TRUE(framer_.GetEncodedVideoFrame(&frame, &next_frame));
330 EXPECT_TRUE(next_frame); 337 EXPECT_TRUE(next_frame);
331 EXPECT_EQ(1u, frame.frame_id); 338 EXPECT_EQ(1u, frame.frame_id);
339 EXPECT_EQ(0u, frame.base_frame_id);
332 framer_.ReleaseFrame(frame.frame_id); 340 framer_.ReleaseFrame(frame.frame_id);
333 EXPECT_TRUE(framer_.GetEncodedVideoFrame(&frame, &next_frame)); 341 EXPECT_TRUE(framer_.GetEncodedVideoFrame(&frame, &next_frame));
334 EXPECT_FALSE(next_frame); 342 EXPECT_FALSE(next_frame);
335 EXPECT_EQ(4u, frame.frame_id); 343 EXPECT_EQ(4u, frame.frame_id);
344 EXPECT_EQ(0u, frame.base_frame_id);
336 framer_.ReleaseFrame(frame.frame_id); 345 framer_.ReleaseFrame(frame.frame_id);
337 // Insert remaining packet of frame #2 - should no be continuous. 346 // Insert remaining packet of frame #2 - should no be continuous.
338 rtp_header_.frame_id = 2; 347 rtp_header_.frame_id = 2;
339 rtp_header_.packet_id = 1; 348 rtp_header_.packet_id = 1;
340 framer_.InsertPacket( 349 framer_.InsertPacket(
341 payload_.data(), payload_.size(), rtp_header_, &duplicate); 350 payload_.data(), payload_.size(), rtp_header_, &duplicate);
342 EXPECT_FALSE(framer_.GetEncodedVideoFrame(&frame, &next_frame)); 351 EXPECT_FALSE(framer_.GetEncodedVideoFrame(&frame, &next_frame));
343 rtp_header_.frame_id = 5; 352 rtp_header_.frame_id = 5;
344 rtp_header_.reference_frame_id = rtp_header_.frame_id - 1; 353 rtp_header_.reference_frame_id = rtp_header_.frame_id - 1;
345 rtp_header_.packet_id = 0; 354 rtp_header_.packet_id = 0;
346 rtp_header_.max_packet_id = 0; 355 rtp_header_.max_packet_id = 0;
347 framer_.InsertPacket( 356 framer_.InsertPacket(
348 payload_.data(), payload_.size(), rtp_header_, &duplicate); 357 payload_.data(), payload_.size(), rtp_header_, &duplicate);
349 EXPECT_TRUE(framer_.GetEncodedVideoFrame(&frame, &next_frame)); 358 EXPECT_TRUE(framer_.GetEncodedVideoFrame(&frame, &next_frame));
350 EXPECT_TRUE(next_frame); 359 EXPECT_TRUE(next_frame);
351 EXPECT_EQ(5u, frame.frame_id); 360 EXPECT_EQ(5u, frame.frame_id);
361 EXPECT_EQ(4u, frame.base_frame_id);
352 } 362 }
353 363
354 TEST_F(FramerTest, AudioWrap) { 364 TEST_F(FramerTest, AudioWrap) {
355 // All audio frames are marked as key frames. 365 // All audio frames are marked as key frames.
356 transport::EncodedAudioFrame frame; 366 transport::EncodedFrame frame;
357 bool next_frame = false; 367 bool next_frame = false;
358 bool duplicate = false; 368 bool duplicate = false;
359 369
360 rtp_header_.is_key_frame = true; 370 rtp_header_.is_key_frame = true;
361 rtp_header_.frame_id = 254; 371 rtp_header_.frame_id = 254;
362 rtp_header_.reference_frame_id = 254; 372 rtp_header_.reference_frame_id = 254;
363 373
364 framer_.InsertPacket( 374 framer_.InsertPacket(
365 payload_.data(), payload_.size(), rtp_header_, &duplicate); 375 payload_.data(), payload_.size(), rtp_header_, &duplicate);
366 EXPECT_TRUE(framer_.GetEncodedAudioFrame(&frame, &next_frame)); 376 EXPECT_TRUE(framer_.GetEncodedAudioFrame(&frame, &next_frame));
367 EXPECT_TRUE(next_frame); 377 EXPECT_TRUE(next_frame);
368 EXPECT_EQ(254u, frame.frame_id); 378 EXPECT_EQ(254u, frame.frame_id);
379 EXPECT_EQ(254u, frame.base_frame_id);
369 framer_.ReleaseFrame(frame.frame_id); 380 framer_.ReleaseFrame(frame.frame_id);
370 381
371 rtp_header_.frame_id = 255; 382 rtp_header_.frame_id = 255;
372 rtp_header_.reference_frame_id = 255; 383 rtp_header_.reference_frame_id = 255;
373 framer_.InsertPacket( 384 framer_.InsertPacket(
374 payload_.data(), payload_.size(), rtp_header_, &duplicate); 385 payload_.data(), payload_.size(), rtp_header_, &duplicate);
375 386
376 // Insert wrapped frame - should be continuous. 387 // Insert wrapped frame - should be continuous.
377 rtp_header_.frame_id = 256; 388 rtp_header_.frame_id = 256;
378 rtp_header_.reference_frame_id = 256; 389 rtp_header_.reference_frame_id = 256;
379 framer_.InsertPacket( 390 framer_.InsertPacket(
380 payload_.data(), payload_.size(), rtp_header_, &duplicate); 391 payload_.data(), payload_.size(), rtp_header_, &duplicate);
381 392
382 EXPECT_TRUE(framer_.GetEncodedAudioFrame(&frame, &next_frame)); 393 EXPECT_TRUE(framer_.GetEncodedAudioFrame(&frame, &next_frame));
383 EXPECT_TRUE(next_frame); 394 EXPECT_TRUE(next_frame);
384 EXPECT_EQ(255u, frame.frame_id); 395 EXPECT_EQ(255u, frame.frame_id);
396 EXPECT_EQ(255u, frame.base_frame_id);
385 framer_.ReleaseFrame(frame.frame_id); 397 framer_.ReleaseFrame(frame.frame_id);
386 398
387 EXPECT_TRUE(framer_.GetEncodedAudioFrame(&frame, &next_frame)); 399 EXPECT_TRUE(framer_.GetEncodedAudioFrame(&frame, &next_frame));
388 EXPECT_TRUE(next_frame); 400 EXPECT_TRUE(next_frame);
389 EXPECT_EQ(256u, frame.frame_id); 401 EXPECT_EQ(256u, frame.frame_id);
402 EXPECT_EQ(256u, frame.base_frame_id);
390 framer_.ReleaseFrame(frame.frame_id); 403 framer_.ReleaseFrame(frame.frame_id);
391 } 404 }
392 405
393 TEST_F(FramerTest, AudioWrapWithMissingFrame) { 406 TEST_F(FramerTest, AudioWrapWithMissingFrame) {
394 // All audio frames are marked as key frames. 407 // All audio frames are marked as key frames.
395 transport::EncodedAudioFrame frame; 408 transport::EncodedFrame frame;
396 bool next_frame = false; 409 bool next_frame = false;
397 bool duplicate = false; 410 bool duplicate = false;
398 411
399 // Insert and get first packet. 412 // Insert and get first packet.
400 rtp_header_.is_key_frame = true; 413 rtp_header_.is_key_frame = true;
401 rtp_header_.frame_id = 253; 414 rtp_header_.frame_id = 253;
402 rtp_header_.reference_frame_id = 253; 415 rtp_header_.reference_frame_id = 253;
403 framer_.InsertPacket( 416 framer_.InsertPacket(
404 payload_.data(), payload_.size(), rtp_header_, &duplicate); 417 payload_.data(), payload_.size(), rtp_header_, &duplicate);
405 EXPECT_TRUE(framer_.GetEncodedAudioFrame(&frame, &next_frame)); 418 EXPECT_TRUE(framer_.GetEncodedAudioFrame(&frame, &next_frame));
406 EXPECT_TRUE(next_frame); 419 EXPECT_TRUE(next_frame);
407 EXPECT_EQ(253u, frame.frame_id); 420 EXPECT_EQ(253u, frame.frame_id);
421 EXPECT_EQ(253u, frame.base_frame_id);
408 framer_.ReleaseFrame(frame.frame_id); 422 framer_.ReleaseFrame(frame.frame_id);
409 423
410 // Insert third and fourth packets. 424 // Insert third and fourth packets.
411 rtp_header_.frame_id = 255; 425 rtp_header_.frame_id = 255;
412 rtp_header_.reference_frame_id = 255; 426 rtp_header_.reference_frame_id = 255;
413 framer_.InsertPacket( 427 framer_.InsertPacket(
414 payload_.data(), payload_.size(), rtp_header_, &duplicate); 428 payload_.data(), payload_.size(), rtp_header_, &duplicate);
415 rtp_header_.frame_id = 256; 429 rtp_header_.frame_id = 256;
416 rtp_header_.reference_frame_id = 256; 430 rtp_header_.reference_frame_id = 256;
417 framer_.InsertPacket( 431 framer_.InsertPacket(
418 payload_.data(), payload_.size(), rtp_header_, &duplicate); 432 payload_.data(), payload_.size(), rtp_header_, &duplicate);
419 433
420 // Get third and fourth packets. 434 // Get third and fourth packets.
421 EXPECT_TRUE(framer_.GetEncodedAudioFrame(&frame, &next_frame)); 435 EXPECT_TRUE(framer_.GetEncodedAudioFrame(&frame, &next_frame));
422 EXPECT_FALSE(next_frame); 436 EXPECT_FALSE(next_frame);
423 EXPECT_EQ(255u, frame.frame_id); 437 EXPECT_EQ(255u, frame.frame_id);
438 EXPECT_EQ(255u, frame.base_frame_id);
424 framer_.ReleaseFrame(frame.frame_id); 439 framer_.ReleaseFrame(frame.frame_id);
425 EXPECT_TRUE(framer_.GetEncodedAudioFrame(&frame, &next_frame)); 440 EXPECT_TRUE(framer_.GetEncodedAudioFrame(&frame, &next_frame));
426 EXPECT_TRUE(next_frame); 441 EXPECT_TRUE(next_frame);
427 EXPECT_EQ(256u, frame.frame_id); 442 EXPECT_EQ(256u, frame.frame_id);
443 EXPECT_EQ(256u, frame.base_frame_id);
428 framer_.ReleaseFrame(frame.frame_id); 444 framer_.ReleaseFrame(frame.frame_id);
429 } 445 }
430 446
431 } // namespace cast 447 } // namespace cast
432 } // namespace media 448 } // namespace media
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698