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

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

Issue 289483003: Cast: Only ACK decodable frames (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Comments addressed 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
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 17 matching lines...) Expand all
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::EncodedVideoFrame frame;
37 bool next_frame = false; 37 bool next_frame = false;
38 EXPECT_FALSE(framer_.GetEncodedVideoFrame(&frame, &next_frame)); 38 bool multiple = false;
miu 2014/05/16 19:45:25 In all these tests, consider testing that "multipl
hubbe 2014/05/16 20:50:58 Done.
39 EXPECT_FALSE(framer_.GetEncodedVideoFrame(&frame, &next_frame, &multiple));
39 } 40 }
40 41
41 TEST_F(FramerTest, AlwaysStartWithKey) { 42 TEST_F(FramerTest, AlwaysStartWithKey) {
42 transport::EncodedVideoFrame frame; 43 transport::EncodedVideoFrame frame;
43 bool next_frame = false; 44 bool next_frame = false;
44 bool complete = false; 45 bool complete = false;
46 bool multiple = false;
45 bool duplicate = false; 47 bool duplicate = false;
46 48
47 // Insert non key first frame. 49 // Insert non key first frame.
48 complete = framer_.InsertPacket( 50 complete = framer_.InsertPacket(
49 payload_.data(), payload_.size(), rtp_header_, &duplicate); 51 payload_.data(), payload_.size(), rtp_header_, &duplicate);
50 EXPECT_TRUE(complete); 52 EXPECT_TRUE(complete);
51 EXPECT_FALSE(framer_.GetEncodedVideoFrame(&frame, &next_frame)); 53 EXPECT_FALSE(framer_.GetEncodedVideoFrame(&frame, &next_frame, &multiple));
52 rtp_header_.frame_id = 1; 54 rtp_header_.frame_id = 1;
53 rtp_header_.reference_frame_id = 1; 55 rtp_header_.reference_frame_id = 1;
54 rtp_header_.is_key_frame = true; 56 rtp_header_.is_key_frame = true;
55 complete = framer_.InsertPacket( 57 complete = framer_.InsertPacket(
56 payload_.data(), payload_.size(), rtp_header_, &duplicate); 58 payload_.data(), payload_.size(), rtp_header_, &duplicate);
57 EXPECT_TRUE(complete); 59 EXPECT_TRUE(complete);
58 EXPECT_TRUE(framer_.GetEncodedVideoFrame(&frame, &next_frame)); 60 EXPECT_TRUE(framer_.GetEncodedVideoFrame(&frame, &next_frame, &multiple));
59 EXPECT_TRUE(next_frame); 61 EXPECT_TRUE(next_frame);
60 EXPECT_EQ(1u, frame.frame_id); 62 EXPECT_EQ(1u, frame.frame_id);
61 EXPECT_TRUE(frame.key_frame); 63 EXPECT_TRUE(frame.key_frame);
62 framer_.ReleaseFrame(frame.frame_id); 64 framer_.ReleaseFrame(frame.frame_id);
63 } 65 }
64 66
65 TEST_F(FramerTest, CompleteFrame) { 67 TEST_F(FramerTest, CompleteFrame) {
66 transport::EncodedVideoFrame frame; 68 transport::EncodedVideoFrame frame;
67 bool next_frame = false; 69 bool next_frame = false;
68 bool complete = false; 70 bool complete = false;
71 bool multiple = false;
69 bool duplicate = false; 72 bool duplicate = false;
70 73
71 // Start with a complete key frame. 74 // Start with a complete key frame.
72 rtp_header_.is_key_frame = true; 75 rtp_header_.is_key_frame = true;
73 complete = framer_.InsertPacket( 76 complete = framer_.InsertPacket(
74 payload_.data(), payload_.size(), rtp_header_, &duplicate); 77 payload_.data(), payload_.size(), rtp_header_, &duplicate);
75 EXPECT_TRUE(complete); 78 EXPECT_TRUE(complete);
76 EXPECT_TRUE(framer_.GetEncodedVideoFrame(&frame, &next_frame)); 79 EXPECT_TRUE(framer_.GetEncodedVideoFrame(&frame, &next_frame, &multiple));
77 EXPECT_TRUE(next_frame); 80 EXPECT_TRUE(next_frame);
78 EXPECT_EQ(0u, frame.frame_id); 81 EXPECT_EQ(0u, frame.frame_id);
79 EXPECT_TRUE(frame.key_frame); 82 EXPECT_TRUE(frame.key_frame);
80 framer_.ReleaseFrame(frame.frame_id); 83 framer_.ReleaseFrame(frame.frame_id);
81 84
82 // Incomplete delta. 85 // Incomplete delta.
83 ++rtp_header_.frame_id; 86 ++rtp_header_.frame_id;
84 rtp_header_.reference_frame_id = rtp_header_.frame_id - 1; 87 rtp_header_.reference_frame_id = rtp_header_.frame_id - 1;
85 rtp_header_.is_key_frame = false; 88 rtp_header_.is_key_frame = false;
86 rtp_header_.max_packet_id = 2; 89 rtp_header_.max_packet_id = 2;
87 complete = framer_.InsertPacket( 90 complete = framer_.InsertPacket(
88 payload_.data(), payload_.size(), rtp_header_, &duplicate); 91 payload_.data(), payload_.size(), rtp_header_, &duplicate);
89 EXPECT_FALSE(complete); 92 EXPECT_FALSE(complete);
90 EXPECT_FALSE(framer_.GetEncodedVideoFrame(&frame, &next_frame)); 93 EXPECT_FALSE(framer_.GetEncodedVideoFrame(&frame, &next_frame, &multiple));
91 94
92 // Complete delta - can't skip, as incomplete sequence. 95 // Complete delta - can't skip, as incomplete sequence.
93 ++rtp_header_.frame_id; 96 ++rtp_header_.frame_id;
94 rtp_header_.reference_frame_id = rtp_header_.frame_id - 1; 97 rtp_header_.reference_frame_id = rtp_header_.frame_id - 1;
95 rtp_header_.max_packet_id = 0; 98 rtp_header_.max_packet_id = 0;
96 complete = framer_.InsertPacket( 99 complete = framer_.InsertPacket(
97 payload_.data(), payload_.size(), rtp_header_, &duplicate); 100 payload_.data(), payload_.size(), rtp_header_, &duplicate);
98 EXPECT_TRUE(complete); 101 EXPECT_TRUE(complete);
99 EXPECT_FALSE(framer_.GetEncodedVideoFrame(&frame, &next_frame)); 102 EXPECT_FALSE(framer_.GetEncodedVideoFrame(&frame, &next_frame, &multiple));
100 } 103 }
101 104
102 TEST_F(FramerTest, DuplicatePackets) { 105 TEST_F(FramerTest, DuplicatePackets) {
103 transport::EncodedVideoFrame frame; 106 transport::EncodedVideoFrame frame;
104 bool next_frame = false; 107 bool next_frame = false;
105 bool complete = false; 108 bool complete = false;
109 bool multiple = false;
106 bool duplicate = false; 110 bool duplicate = false;
107 111
108 // Start with an incomplete key frame. 112 // Start with an incomplete key frame.
109 rtp_header_.is_key_frame = true; 113 rtp_header_.is_key_frame = true;
110 rtp_header_.max_packet_id = 1; 114 rtp_header_.max_packet_id = 1;
111 duplicate = true; 115 duplicate = true;
112 complete = framer_.InsertPacket( 116 complete = framer_.InsertPacket(
113 payload_.data(), payload_.size(), rtp_header_, &duplicate); 117 payload_.data(), payload_.size(), rtp_header_, &duplicate);
114 EXPECT_FALSE(complete); 118 EXPECT_FALSE(complete);
115 EXPECT_FALSE(duplicate); 119 EXPECT_FALSE(duplicate);
116 EXPECT_FALSE(framer_.GetEncodedVideoFrame(&frame, &next_frame)); 120 EXPECT_FALSE(framer_.GetEncodedVideoFrame(&frame, &next_frame, &multiple));
117 121
118 // Add same packet again in incomplete key frame. 122 // Add same packet again in incomplete key frame.
119 duplicate = false; 123 duplicate = false;
120 complete = framer_.InsertPacket( 124 complete = framer_.InsertPacket(
121 payload_.data(), payload_.size(), rtp_header_, &duplicate); 125 payload_.data(), payload_.size(), rtp_header_, &duplicate);
122 EXPECT_FALSE(complete); 126 EXPECT_FALSE(complete);
123 EXPECT_TRUE(duplicate); 127 EXPECT_TRUE(duplicate);
124 EXPECT_FALSE(framer_.GetEncodedVideoFrame(&frame, &next_frame)); 128 EXPECT_FALSE(framer_.GetEncodedVideoFrame(&frame, &next_frame, &multiple));
125 129
126 // Complete key frame. 130 // Complete key frame.
127 rtp_header_.packet_id = 1; 131 rtp_header_.packet_id = 1;
128 duplicate = true; 132 duplicate = true;
129 complete = framer_.InsertPacket( 133 complete = framer_.InsertPacket(
130 payload_.data(), payload_.size(), rtp_header_, &duplicate); 134 payload_.data(), payload_.size(), rtp_header_, &duplicate);
131 EXPECT_TRUE(complete); 135 EXPECT_TRUE(complete);
132 EXPECT_FALSE(duplicate); 136 EXPECT_FALSE(duplicate);
133 EXPECT_TRUE(framer_.GetEncodedVideoFrame(&frame, &next_frame)); 137 EXPECT_TRUE(framer_.GetEncodedVideoFrame(&frame, &next_frame, &multiple));
134 EXPECT_EQ(0u, frame.frame_id); 138 EXPECT_EQ(0u, frame.frame_id);
135 139
136 // Add same packet again in complete key frame. 140 // Add same packet again in complete key frame.
137 duplicate = false; 141 duplicate = false;
138 complete = framer_.InsertPacket( 142 complete = framer_.InsertPacket(
139 payload_.data(), payload_.size(), rtp_header_, &duplicate); 143 payload_.data(), payload_.size(), rtp_header_, &duplicate);
140 EXPECT_FALSE(complete); 144 EXPECT_FALSE(complete);
141 EXPECT_TRUE(duplicate); 145 EXPECT_TRUE(duplicate);
142 EXPECT_TRUE(framer_.GetEncodedVideoFrame(&frame, &next_frame)); 146 EXPECT_TRUE(framer_.GetEncodedVideoFrame(&frame, &next_frame, &multiple));
143 EXPECT_EQ(0u, frame.frame_id); 147 EXPECT_EQ(0u, frame.frame_id);
144 framer_.ReleaseFrame(frame.frame_id); 148 framer_.ReleaseFrame(frame.frame_id);
145 149
146 // Incomplete delta frame. 150 // Incomplete delta frame.
147 ++rtp_header_.frame_id; 151 ++rtp_header_.frame_id;
148 rtp_header_.reference_frame_id = rtp_header_.frame_id - 1; 152 rtp_header_.reference_frame_id = rtp_header_.frame_id - 1;
149 rtp_header_.packet_id = 0; 153 rtp_header_.packet_id = 0;
150 rtp_header_.is_key_frame = false; 154 rtp_header_.is_key_frame = false;
151 duplicate = true; 155 duplicate = true;
152 complete = framer_.InsertPacket( 156 complete = framer_.InsertPacket(
153 payload_.data(), payload_.size(), rtp_header_, &duplicate); 157 payload_.data(), payload_.size(), rtp_header_, &duplicate);
154 EXPECT_FALSE(complete); 158 EXPECT_FALSE(complete);
155 EXPECT_FALSE(duplicate); 159 EXPECT_FALSE(duplicate);
156 EXPECT_FALSE(framer_.GetEncodedVideoFrame(&frame, &next_frame)); 160 EXPECT_FALSE(framer_.GetEncodedVideoFrame(&frame, &next_frame, &multiple));
157 161
158 // Add same packet again in incomplete delta frame. 162 // Add same packet again in incomplete delta frame.
159 duplicate = false; 163 duplicate = false;
160 complete = framer_.InsertPacket( 164 complete = framer_.InsertPacket(
161 payload_.data(), payload_.size(), rtp_header_, &duplicate); 165 payload_.data(), payload_.size(), rtp_header_, &duplicate);
162 EXPECT_FALSE(complete); 166 EXPECT_FALSE(complete);
163 EXPECT_TRUE(duplicate); 167 EXPECT_TRUE(duplicate);
164 EXPECT_FALSE(framer_.GetEncodedVideoFrame(&frame, &next_frame)); 168 EXPECT_FALSE(framer_.GetEncodedVideoFrame(&frame, &next_frame, &multiple));
165 169
166 // Complete delta frame. 170 // Complete delta frame.
167 rtp_header_.packet_id = 1; 171 rtp_header_.packet_id = 1;
168 duplicate = true; 172 duplicate = true;
169 complete = framer_.InsertPacket( 173 complete = framer_.InsertPacket(
170 payload_.data(), payload_.size(), rtp_header_, &duplicate); 174 payload_.data(), payload_.size(), rtp_header_, &duplicate);
171 EXPECT_TRUE(complete); 175 EXPECT_TRUE(complete);
172 EXPECT_FALSE(duplicate); 176 EXPECT_FALSE(duplicate);
173 EXPECT_TRUE(framer_.GetEncodedVideoFrame(&frame, &next_frame)); 177 EXPECT_TRUE(framer_.GetEncodedVideoFrame(&frame, &next_frame, &multiple));
174 EXPECT_EQ(1u, frame.frame_id); 178 EXPECT_EQ(1u, frame.frame_id);
175 179
176 // Add same packet again in complete delta frame. 180 // Add same packet again in complete delta frame.
177 duplicate = false; 181 duplicate = false;
178 complete = framer_.InsertPacket( 182 complete = framer_.InsertPacket(
179 payload_.data(), payload_.size(), rtp_header_, &duplicate); 183 payload_.data(), payload_.size(), rtp_header_, &duplicate);
180 EXPECT_FALSE(complete); 184 EXPECT_FALSE(complete);
181 EXPECT_TRUE(duplicate); 185 EXPECT_TRUE(duplicate);
182 EXPECT_TRUE(framer_.GetEncodedVideoFrame(&frame, &next_frame)); 186 EXPECT_TRUE(framer_.GetEncodedVideoFrame(&frame, &next_frame, &multiple));
183 EXPECT_EQ(1u, frame.frame_id); 187 EXPECT_EQ(1u, frame.frame_id);
184 } 188 }
185 189
186 TEST_F(FramerTest, ContinuousSequence) { 190 TEST_F(FramerTest, ContinuousSequence) {
187 transport::EncodedVideoFrame frame; 191 transport::EncodedVideoFrame frame;
188 bool next_frame = false; 192 bool next_frame = false;
189 bool complete = false; 193 bool complete = false;
194 bool multiple = false;
190 bool duplicate = false; 195 bool duplicate = false;
191 196
192 // Start with a complete key frame. 197 // Start with a complete key frame.
193 rtp_header_.is_key_frame = true; 198 rtp_header_.is_key_frame = true;
194 complete = framer_.InsertPacket( 199 complete = framer_.InsertPacket(
195 payload_.data(), payload_.size(), rtp_header_, &duplicate); 200 payload_.data(), payload_.size(), rtp_header_, &duplicate);
196 EXPECT_TRUE(complete); 201 EXPECT_TRUE(complete);
197 EXPECT_TRUE(framer_.GetEncodedVideoFrame(&frame, &next_frame)); 202 EXPECT_TRUE(framer_.GetEncodedVideoFrame(&frame, &next_frame, &multiple));
198 EXPECT_TRUE(next_frame); 203 EXPECT_TRUE(next_frame);
199 EXPECT_EQ(0u, frame.frame_id); 204 EXPECT_EQ(0u, frame.frame_id);
200 EXPECT_TRUE(frame.key_frame); 205 EXPECT_TRUE(frame.key_frame);
201 framer_.ReleaseFrame(frame.frame_id); 206 framer_.ReleaseFrame(frame.frame_id);
202 207
203 // Complete - not continuous. 208 // Complete - not continuous.
204 rtp_header_.frame_id = 2; 209 rtp_header_.frame_id = 2;
205 rtp_header_.reference_frame_id = rtp_header_.frame_id - 1; 210 rtp_header_.reference_frame_id = rtp_header_.frame_id - 1;
206 rtp_header_.is_key_frame = false; 211 rtp_header_.is_key_frame = false;
207 complete = framer_.InsertPacket( 212 complete = framer_.InsertPacket(
208 payload_.data(), payload_.size(), rtp_header_, &duplicate); 213 payload_.data(), payload_.size(), rtp_header_, &duplicate);
209 EXPECT_TRUE(complete); 214 EXPECT_TRUE(complete);
210 EXPECT_FALSE(framer_.GetEncodedVideoFrame(&frame, &next_frame)); 215 EXPECT_FALSE(framer_.GetEncodedVideoFrame(&frame, &next_frame, &multiple));
211 } 216 }
212 217
213 TEST_F(FramerTest, Wrap) { 218 TEST_F(FramerTest, Wrap) {
214 // Insert key frame, frame_id = 255 (will jump to that) 219 // Insert key frame, frame_id = 255 (will jump to that)
215 transport::EncodedVideoFrame frame; 220 transport::EncodedVideoFrame frame;
216 bool next_frame = false; 221 bool next_frame = false;
222 bool multiple = true;
217 bool duplicate = false; 223 bool duplicate = false;
218 224
219 // Start with a complete key frame. 225 // Start with a complete key frame.
220 rtp_header_.is_key_frame = true; 226 rtp_header_.is_key_frame = true;
221 rtp_header_.frame_id = 255; 227 rtp_header_.frame_id = 255;
222 rtp_header_.reference_frame_id = 255; 228 rtp_header_.reference_frame_id = 255;
223 framer_.InsertPacket( 229 framer_.InsertPacket(
224 payload_.data(), payload_.size(), rtp_header_, &duplicate); 230 payload_.data(), payload_.size(), rtp_header_, &duplicate);
225 EXPECT_TRUE(framer_.GetEncodedVideoFrame(&frame, &next_frame)); 231 EXPECT_TRUE(framer_.GetEncodedVideoFrame(&frame, &next_frame, &multiple));
226 EXPECT_TRUE(next_frame); 232 EXPECT_TRUE(next_frame);
227 EXPECT_EQ(255u, frame.frame_id); 233 EXPECT_EQ(255u, frame.frame_id);
228 framer_.ReleaseFrame(frame.frame_id); 234 framer_.ReleaseFrame(frame.frame_id);
229 235
230 // Insert wrapped delta frame - should be continuous. 236 // Insert wrapped delta frame - should be continuous.
231 rtp_header_.is_key_frame = false; 237 rtp_header_.is_key_frame = false;
232 rtp_header_.frame_id = 256; 238 rtp_header_.frame_id = 256;
233 framer_.InsertPacket( 239 framer_.InsertPacket(
234 payload_.data(), payload_.size(), rtp_header_, &duplicate); 240 payload_.data(), payload_.size(), rtp_header_, &duplicate);
235 EXPECT_TRUE(framer_.GetEncodedVideoFrame(&frame, &next_frame)); 241 EXPECT_TRUE(framer_.GetEncodedVideoFrame(&frame, &next_frame, &multiple));
236 EXPECT_TRUE(next_frame); 242 EXPECT_TRUE(next_frame);
237 EXPECT_EQ(256u, frame.frame_id); 243 EXPECT_EQ(256u, frame.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::EncodedVideoFrame frame;
243 bool next_frame = false; 249 bool next_frame = false;
244 bool complete = false; 250 bool complete = false;
251 bool multiple = true;
245 bool duplicate = false; 252 bool duplicate = false;
246 253
247 // Start with a complete key frame. 254 // Start with a complete key frame.
248 rtp_header_.is_key_frame = true; 255 rtp_header_.is_key_frame = true;
249 complete = framer_.InsertPacket( 256 complete = framer_.InsertPacket(
250 payload_.data(), payload_.size(), rtp_header_, &duplicate); 257 payload_.data(), payload_.size(), rtp_header_, &duplicate);
251 EXPECT_TRUE(complete); 258 EXPECT_TRUE(complete);
252 framer_.Reset(); 259 framer_.Reset();
253 EXPECT_FALSE(framer_.GetEncodedVideoFrame(&frame, &next_frame)); 260 EXPECT_FALSE(framer_.GetEncodedVideoFrame(&frame, &next_frame, &multiple));
254 } 261 }
255 262
256 TEST_F(FramerTest, RequireKeyAfterReset) { 263 TEST_F(FramerTest, RequireKeyAfterReset) {
257 transport::EncodedVideoFrame frame; 264 transport::EncodedVideoFrame frame;
258 bool next_frame = false; 265 bool next_frame = false;
266 bool multiple = false;
259 bool duplicate = false; 267 bool duplicate = false;
260 268
261 framer_.Reset(); 269 framer_.Reset();
262 270
263 // Start with a complete key frame. 271 // Start with a complete key frame.
264 rtp_header_.is_key_frame = false; 272 rtp_header_.is_key_frame = false;
265 rtp_header_.frame_id = 0; 273 rtp_header_.frame_id = 0;
266 framer_.InsertPacket( 274 framer_.InsertPacket(
267 payload_.data(), payload_.size(), rtp_header_, &duplicate); 275 payload_.data(), payload_.size(), rtp_header_, &duplicate);
268 EXPECT_FALSE(framer_.GetEncodedVideoFrame(&frame, &next_frame)); 276 EXPECT_FALSE(framer_.GetEncodedVideoFrame(&frame, &next_frame, &multiple));
269 rtp_header_.frame_id = 1; 277 rtp_header_.frame_id = 1;
270 rtp_header_.reference_frame_id = 1; 278 rtp_header_.reference_frame_id = 1;
271 rtp_header_.is_key_frame = true; 279 rtp_header_.is_key_frame = true;
272 framer_.InsertPacket( 280 framer_.InsertPacket(
273 payload_.data(), payload_.size(), rtp_header_, &duplicate); 281 payload_.data(), payload_.size(), rtp_header_, &duplicate);
274 EXPECT_TRUE(framer_.GetEncodedVideoFrame(&frame, &next_frame)); 282 EXPECT_TRUE(framer_.GetEncodedVideoFrame(&frame, &next_frame, &multiple));
275 EXPECT_TRUE(next_frame); 283 EXPECT_TRUE(next_frame);
276 } 284 }
277 285
278 TEST_F(FramerTest, BasicNonLastReferenceId) { 286 TEST_F(FramerTest, BasicNonLastReferenceId) {
279 transport::EncodedVideoFrame frame; 287 transport::EncodedVideoFrame frame;
280 bool next_frame = false; 288 bool next_frame = false;
289 bool multiple = false;
281 bool duplicate = false; 290 bool duplicate = false;
282 291
283 rtp_header_.is_key_frame = true; 292 rtp_header_.is_key_frame = true;
284 rtp_header_.frame_id = 0; 293 rtp_header_.frame_id = 0;
285 framer_.InsertPacket( 294 framer_.InsertPacket(
286 payload_.data(), payload_.size(), rtp_header_, &duplicate); 295 payload_.data(), payload_.size(), rtp_header_, &duplicate);
287 296
288 EXPECT_TRUE(framer_.GetEncodedVideoFrame(&frame, &next_frame)); 297 EXPECT_TRUE(framer_.GetEncodedVideoFrame(&frame, &next_frame, &multiple));
289 framer_.ReleaseFrame(frame.frame_id); 298 framer_.ReleaseFrame(frame.frame_id);
290 299
291 rtp_header_.is_key_frame = false; 300 rtp_header_.is_key_frame = false;
292 rtp_header_.reference_frame_id = 0; 301 rtp_header_.reference_frame_id = 0;
293 rtp_header_.frame_id = 5; 302 rtp_header_.frame_id = 5;
294 framer_.InsertPacket( 303 framer_.InsertPacket(
295 payload_.data(), payload_.size(), rtp_header_, &duplicate); 304 payload_.data(), payload_.size(), rtp_header_, &duplicate);
296 305
297 EXPECT_TRUE(framer_.GetEncodedVideoFrame(&frame, &next_frame)); 306 EXPECT_TRUE(framer_.GetEncodedVideoFrame(&frame, &next_frame, &multiple));
298 EXPECT_FALSE(next_frame); 307 EXPECT_FALSE(next_frame);
299 } 308 }
300 309
301 TEST_F(FramerTest, InOrderReferenceFrameSelection) { 310 TEST_F(FramerTest, InOrderReferenceFrameSelection) {
302 // Create pattern: 0, 1, 4, 5. 311 // Create pattern: 0, 1, 4, 5.
303 transport::EncodedVideoFrame frame; 312 transport::EncodedVideoFrame frame;
304 bool next_frame = false; 313 bool next_frame = false;
314 bool multiple = false;
305 bool duplicate = false; 315 bool duplicate = false;
306 316
307 rtp_header_.is_key_frame = true; 317 rtp_header_.is_key_frame = true;
308 rtp_header_.frame_id = 0; 318 rtp_header_.frame_id = 0;
309 framer_.InsertPacket( 319 framer_.InsertPacket(
310 payload_.data(), payload_.size(), rtp_header_, &duplicate); 320 payload_.data(), payload_.size(), rtp_header_, &duplicate);
311 rtp_header_.is_key_frame = false; 321 rtp_header_.is_key_frame = false;
312 rtp_header_.frame_id = 1; 322 rtp_header_.frame_id = 1;
313 framer_.InsertPacket( 323 framer_.InsertPacket(
314 payload_.data(), payload_.size(), rtp_header_, &duplicate); 324 payload_.data(), payload_.size(), rtp_header_, &duplicate);
315 325
316 // Insert frame #2 partially. 326 // Insert frame #2 partially.
317 rtp_header_.frame_id = 2; 327 rtp_header_.frame_id = 2;
318 rtp_header_.max_packet_id = 1; 328 rtp_header_.max_packet_id = 1;
319 framer_.InsertPacket( 329 framer_.InsertPacket(
320 payload_.data(), payload_.size(), rtp_header_, &duplicate); 330 payload_.data(), payload_.size(), rtp_header_, &duplicate);
321 rtp_header_.frame_id = 4; 331 rtp_header_.frame_id = 4;
322 rtp_header_.max_packet_id = 0; 332 rtp_header_.max_packet_id = 0;
323 rtp_header_.reference_frame_id = 0; 333 rtp_header_.reference_frame_id = 0;
324 framer_.InsertPacket( 334 framer_.InsertPacket(
325 payload_.data(), payload_.size(), rtp_header_, &duplicate); 335 payload_.data(), payload_.size(), rtp_header_, &duplicate);
326 EXPECT_TRUE(framer_.GetEncodedVideoFrame(&frame, &next_frame)); 336 EXPECT_TRUE(framer_.GetEncodedVideoFrame(&frame, &next_frame, &multiple));
327 EXPECT_EQ(0u, frame.frame_id); 337 EXPECT_EQ(0u, frame.frame_id);
328 framer_.ReleaseFrame(frame.frame_id); 338 framer_.ReleaseFrame(frame.frame_id);
329 EXPECT_TRUE(framer_.GetEncodedVideoFrame(&frame, &next_frame)); 339 EXPECT_TRUE(framer_.GetEncodedVideoFrame(&frame, &next_frame, &multiple));
330 EXPECT_TRUE(next_frame); 340 EXPECT_TRUE(next_frame);
331 EXPECT_EQ(1u, frame.frame_id); 341 EXPECT_EQ(1u, frame.frame_id);
332 framer_.ReleaseFrame(frame.frame_id); 342 framer_.ReleaseFrame(frame.frame_id);
333 EXPECT_TRUE(framer_.GetEncodedVideoFrame(&frame, &next_frame)); 343 EXPECT_TRUE(framer_.GetEncodedVideoFrame(&frame, &next_frame, &multiple));
334 EXPECT_FALSE(next_frame); 344 EXPECT_FALSE(next_frame);
335 EXPECT_EQ(4u, frame.frame_id); 345 EXPECT_EQ(4u, frame.frame_id);
336 framer_.ReleaseFrame(frame.frame_id); 346 framer_.ReleaseFrame(frame.frame_id);
337 // Insert remaining packet of frame #2 - should no be continuous. 347 // Insert remaining packet of frame #2 - should no be continuous.
338 rtp_header_.frame_id = 2; 348 rtp_header_.frame_id = 2;
339 rtp_header_.packet_id = 1; 349 rtp_header_.packet_id = 1;
340 framer_.InsertPacket( 350 framer_.InsertPacket(
341 payload_.data(), payload_.size(), rtp_header_, &duplicate); 351 payload_.data(), payload_.size(), rtp_header_, &duplicate);
342 EXPECT_FALSE(framer_.GetEncodedVideoFrame(&frame, &next_frame)); 352 EXPECT_FALSE(framer_.GetEncodedVideoFrame(&frame, &next_frame, &multiple));
343 rtp_header_.frame_id = 5; 353 rtp_header_.frame_id = 5;
344 rtp_header_.reference_frame_id = rtp_header_.frame_id - 1; 354 rtp_header_.reference_frame_id = rtp_header_.frame_id - 1;
345 rtp_header_.packet_id = 0; 355 rtp_header_.packet_id = 0;
346 rtp_header_.max_packet_id = 0; 356 rtp_header_.max_packet_id = 0;
347 framer_.InsertPacket( 357 framer_.InsertPacket(
348 payload_.data(), payload_.size(), rtp_header_, &duplicate); 358 payload_.data(), payload_.size(), rtp_header_, &duplicate);
349 EXPECT_TRUE(framer_.GetEncodedVideoFrame(&frame, &next_frame)); 359 EXPECT_TRUE(framer_.GetEncodedVideoFrame(&frame, &next_frame, &multiple));
350 EXPECT_TRUE(next_frame); 360 EXPECT_TRUE(next_frame);
351 EXPECT_EQ(5u, frame.frame_id); 361 EXPECT_EQ(5u, frame.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::EncodedAudioFrame frame;
357 bool next_frame = false; 367 bool next_frame = false;
358 bool duplicate = false; 368 bool duplicate = false;
359 369
(...skipping 63 matching lines...) Expand 10 before | Expand all | Expand 10 after
423 EXPECT_EQ(255u, frame.frame_id); 433 EXPECT_EQ(255u, frame.frame_id);
424 framer_.ReleaseFrame(frame.frame_id); 434 framer_.ReleaseFrame(frame.frame_id);
425 EXPECT_TRUE(framer_.GetEncodedAudioFrame(&frame, &next_frame)); 435 EXPECT_TRUE(framer_.GetEncodedAudioFrame(&frame, &next_frame));
426 EXPECT_TRUE(next_frame); 436 EXPECT_TRUE(next_frame);
427 EXPECT_EQ(256u, frame.frame_id); 437 EXPECT_EQ(256u, frame.frame_id);
428 framer_.ReleaseFrame(frame.frame_id); 438 framer_.ReleaseFrame(frame.frame_id);
429 } 439 }
430 440
431 } // namespace cast 441 } // namespace cast
432 } // namespace media 442 } // namespace media
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698