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

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: duplicate logic for audio 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
« no previous file with comments | « media/cast/framer/framer.cc ('k') | media/cast/video_receiver/video_receiver.cc » ('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/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;
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);
62 EXPECT_FALSE(multiple);
60 EXPECT_EQ(1u, frame.frame_id); 63 EXPECT_EQ(1u, frame.frame_id);
61 EXPECT_TRUE(frame.key_frame); 64 EXPECT_TRUE(frame.key_frame);
62 framer_.ReleaseFrame(frame.frame_id); 65 framer_.ReleaseFrame(frame.frame_id);
63 } 66 }
64 67
65 TEST_F(FramerTest, CompleteFrame) { 68 TEST_F(FramerTest, CompleteFrame) {
66 transport::EncodedVideoFrame frame; 69 transport::EncodedVideoFrame frame;
67 bool next_frame = false; 70 bool next_frame = false;
68 bool complete = false; 71 bool complete = false;
72 bool multiple = false;
69 bool duplicate = false; 73 bool duplicate = false;
70 74
71 // Start with a complete key frame. 75 // Start with a complete key frame.
72 rtp_header_.is_key_frame = true; 76 rtp_header_.is_key_frame = true;
73 complete = framer_.InsertPacket( 77 complete = framer_.InsertPacket(
74 payload_.data(), payload_.size(), rtp_header_, &duplicate); 78 payload_.data(), payload_.size(), rtp_header_, &duplicate);
75 EXPECT_TRUE(complete); 79 EXPECT_TRUE(complete);
76 EXPECT_TRUE(framer_.GetEncodedVideoFrame(&frame, &next_frame)); 80 EXPECT_TRUE(framer_.GetEncodedVideoFrame(&frame, &next_frame, &multiple));
77 EXPECT_TRUE(next_frame); 81 EXPECT_TRUE(next_frame);
82 EXPECT_FALSE(multiple);
78 EXPECT_EQ(0u, frame.frame_id); 83 EXPECT_EQ(0u, frame.frame_id);
79 EXPECT_TRUE(frame.key_frame); 84 EXPECT_TRUE(frame.key_frame);
80 framer_.ReleaseFrame(frame.frame_id); 85 framer_.ReleaseFrame(frame.frame_id);
81 86
82 // Incomplete delta. 87 // Incomplete delta.
83 ++rtp_header_.frame_id; 88 ++rtp_header_.frame_id;
84 rtp_header_.reference_frame_id = rtp_header_.frame_id - 1; 89 rtp_header_.reference_frame_id = rtp_header_.frame_id - 1;
85 rtp_header_.is_key_frame = false; 90 rtp_header_.is_key_frame = false;
86 rtp_header_.max_packet_id = 2; 91 rtp_header_.max_packet_id = 2;
87 complete = framer_.InsertPacket( 92 complete = framer_.InsertPacket(
88 payload_.data(), payload_.size(), rtp_header_, &duplicate); 93 payload_.data(), payload_.size(), rtp_header_, &duplicate);
89 EXPECT_FALSE(complete); 94 EXPECT_FALSE(complete);
90 EXPECT_FALSE(framer_.GetEncodedVideoFrame(&frame, &next_frame)); 95 EXPECT_FALSE(framer_.GetEncodedVideoFrame(&frame, &next_frame, &multiple));
91 96
92 // Complete delta - can't skip, as incomplete sequence. 97 // Complete delta - can't skip, as incomplete sequence.
93 ++rtp_header_.frame_id; 98 ++rtp_header_.frame_id;
94 rtp_header_.reference_frame_id = rtp_header_.frame_id - 1; 99 rtp_header_.reference_frame_id = rtp_header_.frame_id - 1;
95 rtp_header_.max_packet_id = 0; 100 rtp_header_.max_packet_id = 0;
96 complete = framer_.InsertPacket( 101 complete = framer_.InsertPacket(
97 payload_.data(), payload_.size(), rtp_header_, &duplicate); 102 payload_.data(), payload_.size(), rtp_header_, &duplicate);
98 EXPECT_TRUE(complete); 103 EXPECT_TRUE(complete);
99 EXPECT_FALSE(framer_.GetEncodedVideoFrame(&frame, &next_frame)); 104 EXPECT_FALSE(framer_.GetEncodedVideoFrame(&frame, &next_frame, &multiple));
100 } 105 }
101 106
102 TEST_F(FramerTest, DuplicatePackets) { 107 TEST_F(FramerTest, DuplicatePackets) {
103 transport::EncodedVideoFrame frame; 108 transport::EncodedVideoFrame frame;
104 bool next_frame = false; 109 bool next_frame = false;
105 bool complete = false; 110 bool complete = false;
111 bool multiple = false;
106 bool duplicate = false; 112 bool duplicate = false;
107 113
108 // Start with an incomplete key frame. 114 // Start with an incomplete key frame.
109 rtp_header_.is_key_frame = true; 115 rtp_header_.is_key_frame = true;
110 rtp_header_.max_packet_id = 1; 116 rtp_header_.max_packet_id = 1;
111 duplicate = true; 117 duplicate = true;
112 complete = framer_.InsertPacket( 118 complete = framer_.InsertPacket(
113 payload_.data(), payload_.size(), rtp_header_, &duplicate); 119 payload_.data(), payload_.size(), rtp_header_, &duplicate);
114 EXPECT_FALSE(complete); 120 EXPECT_FALSE(complete);
115 EXPECT_FALSE(duplicate); 121 EXPECT_FALSE(duplicate);
116 EXPECT_FALSE(framer_.GetEncodedVideoFrame(&frame, &next_frame)); 122 EXPECT_FALSE(framer_.GetEncodedVideoFrame(&frame, &next_frame, &multiple));
117 123
118 // Add same packet again in incomplete key frame. 124 // Add same packet again in incomplete key frame.
119 duplicate = false; 125 duplicate = false;
120 complete = framer_.InsertPacket( 126 complete = framer_.InsertPacket(
121 payload_.data(), payload_.size(), rtp_header_, &duplicate); 127 payload_.data(), payload_.size(), rtp_header_, &duplicate);
122 EXPECT_FALSE(complete); 128 EXPECT_FALSE(complete);
123 EXPECT_TRUE(duplicate); 129 EXPECT_TRUE(duplicate);
124 EXPECT_FALSE(framer_.GetEncodedVideoFrame(&frame, &next_frame)); 130 EXPECT_FALSE(framer_.GetEncodedVideoFrame(&frame, &next_frame, &multiple));
125 131
126 // Complete key frame. 132 // Complete key frame.
127 rtp_header_.packet_id = 1; 133 rtp_header_.packet_id = 1;
128 duplicate = true; 134 duplicate = true;
129 complete = framer_.InsertPacket( 135 complete = framer_.InsertPacket(
130 payload_.data(), payload_.size(), rtp_header_, &duplicate); 136 payload_.data(), payload_.size(), rtp_header_, &duplicate);
131 EXPECT_TRUE(complete); 137 EXPECT_TRUE(complete);
132 EXPECT_FALSE(duplicate); 138 EXPECT_FALSE(duplicate);
133 EXPECT_TRUE(framer_.GetEncodedVideoFrame(&frame, &next_frame)); 139 EXPECT_TRUE(framer_.GetEncodedVideoFrame(&frame, &next_frame, &multiple));
134 EXPECT_EQ(0u, frame.frame_id); 140 EXPECT_EQ(0u, frame.frame_id);
141 EXPECT_FALSE(multiple);
135 142
136 // Add same packet again in complete key frame. 143 // Add same packet again in complete key frame.
137 duplicate = false; 144 duplicate = false;
138 complete = framer_.InsertPacket( 145 complete = framer_.InsertPacket(
139 payload_.data(), payload_.size(), rtp_header_, &duplicate); 146 payload_.data(), payload_.size(), rtp_header_, &duplicate);
140 EXPECT_FALSE(complete); 147 EXPECT_FALSE(complete);
141 EXPECT_TRUE(duplicate); 148 EXPECT_TRUE(duplicate);
142 EXPECT_TRUE(framer_.GetEncodedVideoFrame(&frame, &next_frame)); 149 EXPECT_TRUE(framer_.GetEncodedVideoFrame(&frame, &next_frame, &multiple));
143 EXPECT_EQ(0u, frame.frame_id); 150 EXPECT_EQ(0u, frame.frame_id);
151 EXPECT_FALSE(multiple);
144 framer_.ReleaseFrame(frame.frame_id); 152 framer_.ReleaseFrame(frame.frame_id);
145 153
146 // Incomplete delta frame. 154 // Incomplete delta frame.
147 ++rtp_header_.frame_id; 155 ++rtp_header_.frame_id;
148 rtp_header_.reference_frame_id = rtp_header_.frame_id - 1; 156 rtp_header_.reference_frame_id = rtp_header_.frame_id - 1;
149 rtp_header_.packet_id = 0; 157 rtp_header_.packet_id = 0;
150 rtp_header_.is_key_frame = false; 158 rtp_header_.is_key_frame = false;
151 duplicate = true; 159 duplicate = true;
152 complete = framer_.InsertPacket( 160 complete = framer_.InsertPacket(
153 payload_.data(), payload_.size(), rtp_header_, &duplicate); 161 payload_.data(), payload_.size(), rtp_header_, &duplicate);
154 EXPECT_FALSE(complete); 162 EXPECT_FALSE(complete);
155 EXPECT_FALSE(duplicate); 163 EXPECT_FALSE(duplicate);
156 EXPECT_FALSE(framer_.GetEncodedVideoFrame(&frame, &next_frame)); 164 EXPECT_FALSE(framer_.GetEncodedVideoFrame(&frame, &next_frame, &multiple));
157 165
158 // Add same packet again in incomplete delta frame. 166 // Add same packet again in incomplete delta frame.
159 duplicate = false; 167 duplicate = false;
160 complete = framer_.InsertPacket( 168 complete = framer_.InsertPacket(
161 payload_.data(), payload_.size(), rtp_header_, &duplicate); 169 payload_.data(), payload_.size(), rtp_header_, &duplicate);
162 EXPECT_FALSE(complete); 170 EXPECT_FALSE(complete);
163 EXPECT_TRUE(duplicate); 171 EXPECT_TRUE(duplicate);
164 EXPECT_FALSE(framer_.GetEncodedVideoFrame(&frame, &next_frame)); 172 EXPECT_FALSE(framer_.GetEncodedVideoFrame(&frame, &next_frame, &multiple));
165 173
166 // Complete delta frame. 174 // Complete delta frame.
167 rtp_header_.packet_id = 1; 175 rtp_header_.packet_id = 1;
168 duplicate = true; 176 duplicate = true;
169 complete = framer_.InsertPacket( 177 complete = framer_.InsertPacket(
170 payload_.data(), payload_.size(), rtp_header_, &duplicate); 178 payload_.data(), payload_.size(), rtp_header_, &duplicate);
171 EXPECT_TRUE(complete); 179 EXPECT_TRUE(complete);
172 EXPECT_FALSE(duplicate); 180 EXPECT_FALSE(duplicate);
173 EXPECT_TRUE(framer_.GetEncodedVideoFrame(&frame, &next_frame)); 181 EXPECT_TRUE(framer_.GetEncodedVideoFrame(&frame, &next_frame, &multiple));
174 EXPECT_EQ(1u, frame.frame_id); 182 EXPECT_EQ(1u, frame.frame_id);
183 EXPECT_FALSE(multiple);
175 184
176 // Add same packet again in complete delta frame. 185 // Add same packet again in complete delta frame.
177 duplicate = false; 186 duplicate = false;
178 complete = framer_.InsertPacket( 187 complete = framer_.InsertPacket(
179 payload_.data(), payload_.size(), rtp_header_, &duplicate); 188 payload_.data(), payload_.size(), rtp_header_, &duplicate);
180 EXPECT_FALSE(complete); 189 EXPECT_FALSE(complete);
181 EXPECT_TRUE(duplicate); 190 EXPECT_TRUE(duplicate);
182 EXPECT_TRUE(framer_.GetEncodedVideoFrame(&frame, &next_frame)); 191 EXPECT_TRUE(framer_.GetEncodedVideoFrame(&frame, &next_frame, &multiple));
183 EXPECT_EQ(1u, frame.frame_id); 192 EXPECT_EQ(1u, frame.frame_id);
193 EXPECT_FALSE(multiple);
184 } 194 }
185 195
186 TEST_F(FramerTest, ContinuousSequence) { 196 TEST_F(FramerTest, ContinuousSequence) {
187 transport::EncodedVideoFrame frame; 197 transport::EncodedVideoFrame frame;
188 bool next_frame = false; 198 bool next_frame = false;
189 bool complete = false; 199 bool complete = false;
200 bool multiple = false;
190 bool duplicate = false; 201 bool duplicate = false;
191 202
192 // Start with a complete key frame. 203 // Start with a complete key frame.
193 rtp_header_.is_key_frame = true; 204 rtp_header_.is_key_frame = true;
194 complete = framer_.InsertPacket( 205 complete = framer_.InsertPacket(
195 payload_.data(), payload_.size(), rtp_header_, &duplicate); 206 payload_.data(), payload_.size(), rtp_header_, &duplicate);
196 EXPECT_TRUE(complete); 207 EXPECT_TRUE(complete);
197 EXPECT_TRUE(framer_.GetEncodedVideoFrame(&frame, &next_frame)); 208 EXPECT_TRUE(framer_.GetEncodedVideoFrame(&frame, &next_frame, &multiple));
198 EXPECT_TRUE(next_frame); 209 EXPECT_TRUE(next_frame);
210 EXPECT_FALSE(multiple);
199 EXPECT_EQ(0u, frame.frame_id); 211 EXPECT_EQ(0u, frame.frame_id);
200 EXPECT_TRUE(frame.key_frame); 212 EXPECT_TRUE(frame.key_frame);
201 framer_.ReleaseFrame(frame.frame_id); 213 framer_.ReleaseFrame(frame.frame_id);
202 214
203 // Complete - not continuous. 215 // Complete - not continuous.
204 rtp_header_.frame_id = 2; 216 rtp_header_.frame_id = 2;
205 rtp_header_.reference_frame_id = rtp_header_.frame_id - 1; 217 rtp_header_.reference_frame_id = rtp_header_.frame_id - 1;
206 rtp_header_.is_key_frame = false; 218 rtp_header_.is_key_frame = false;
207 complete = framer_.InsertPacket( 219 complete = framer_.InsertPacket(
208 payload_.data(), payload_.size(), rtp_header_, &duplicate); 220 payload_.data(), payload_.size(), rtp_header_, &duplicate);
209 EXPECT_TRUE(complete); 221 EXPECT_TRUE(complete);
210 EXPECT_FALSE(framer_.GetEncodedVideoFrame(&frame, &next_frame)); 222 EXPECT_FALSE(framer_.GetEncodedVideoFrame(&frame, &next_frame, &multiple));
211 } 223 }
212 224
213 TEST_F(FramerTest, Wrap) { 225 TEST_F(FramerTest, Wrap) {
214 // Insert key frame, frame_id = 255 (will jump to that) 226 // Insert key frame, frame_id = 255 (will jump to that)
215 transport::EncodedVideoFrame frame; 227 transport::EncodedVideoFrame frame;
216 bool next_frame = false; 228 bool next_frame = false;
229 bool multiple = true;
217 bool duplicate = false; 230 bool duplicate = false;
218 231
219 // Start with a complete key frame. 232 // Start with a complete key frame.
220 rtp_header_.is_key_frame = true; 233 rtp_header_.is_key_frame = true;
221 rtp_header_.frame_id = 255; 234 rtp_header_.frame_id = 255;
222 rtp_header_.reference_frame_id = 255; 235 rtp_header_.reference_frame_id = 255;
223 framer_.InsertPacket( 236 framer_.InsertPacket(
224 payload_.data(), payload_.size(), rtp_header_, &duplicate); 237 payload_.data(), payload_.size(), rtp_header_, &duplicate);
225 EXPECT_TRUE(framer_.GetEncodedVideoFrame(&frame, &next_frame)); 238 EXPECT_TRUE(framer_.GetEncodedVideoFrame(&frame, &next_frame, &multiple));
226 EXPECT_TRUE(next_frame); 239 EXPECT_TRUE(next_frame);
240 EXPECT_FALSE(multiple);
227 EXPECT_EQ(255u, frame.frame_id); 241 EXPECT_EQ(255u, frame.frame_id);
228 framer_.ReleaseFrame(frame.frame_id); 242 framer_.ReleaseFrame(frame.frame_id);
229 243
230 // Insert wrapped delta frame - should be continuous. 244 // Insert wrapped delta frame - should be continuous.
231 rtp_header_.is_key_frame = false; 245 rtp_header_.is_key_frame = false;
232 rtp_header_.frame_id = 256; 246 rtp_header_.frame_id = 256;
233 framer_.InsertPacket( 247 framer_.InsertPacket(
234 payload_.data(), payload_.size(), rtp_header_, &duplicate); 248 payload_.data(), payload_.size(), rtp_header_, &duplicate);
235 EXPECT_TRUE(framer_.GetEncodedVideoFrame(&frame, &next_frame)); 249 EXPECT_TRUE(framer_.GetEncodedVideoFrame(&frame, &next_frame, &multiple));
236 EXPECT_TRUE(next_frame); 250 EXPECT_TRUE(next_frame);
251 EXPECT_FALSE(multiple);
237 EXPECT_EQ(256u, frame.frame_id); 252 EXPECT_EQ(256u, frame.frame_id);
238 framer_.ReleaseFrame(frame.frame_id); 253 framer_.ReleaseFrame(frame.frame_id);
239 } 254 }
240 255
241 TEST_F(FramerTest, Reset) { 256 TEST_F(FramerTest, Reset) {
242 transport::EncodedVideoFrame frame; 257 transport::EncodedVideoFrame frame;
243 bool next_frame = false; 258 bool next_frame = false;
244 bool complete = false; 259 bool complete = false;
260 bool multiple = true;
245 bool duplicate = false; 261 bool duplicate = false;
246 262
247 // Start with a complete key frame. 263 // Start with a complete key frame.
248 rtp_header_.is_key_frame = true; 264 rtp_header_.is_key_frame = true;
249 complete = framer_.InsertPacket( 265 complete = framer_.InsertPacket(
250 payload_.data(), payload_.size(), rtp_header_, &duplicate); 266 payload_.data(), payload_.size(), rtp_header_, &duplicate);
251 EXPECT_TRUE(complete); 267 EXPECT_TRUE(complete);
252 framer_.Reset(); 268 framer_.Reset();
253 EXPECT_FALSE(framer_.GetEncodedVideoFrame(&frame, &next_frame)); 269 EXPECT_FALSE(framer_.GetEncodedVideoFrame(&frame, &next_frame, &multiple));
254 } 270 }
255 271
256 TEST_F(FramerTest, RequireKeyAfterReset) { 272 TEST_F(FramerTest, RequireKeyAfterReset) {
257 transport::EncodedVideoFrame frame; 273 transport::EncodedVideoFrame frame;
258 bool next_frame = false; 274 bool next_frame = false;
275 bool multiple = false;
259 bool duplicate = false; 276 bool duplicate = false;
260 277
261 framer_.Reset(); 278 framer_.Reset();
262 279
263 // Start with a complete key frame. 280 // Start with a complete key frame.
264 rtp_header_.is_key_frame = false; 281 rtp_header_.is_key_frame = false;
265 rtp_header_.frame_id = 0; 282 rtp_header_.frame_id = 0;
266 framer_.InsertPacket( 283 framer_.InsertPacket(
267 payload_.data(), payload_.size(), rtp_header_, &duplicate); 284 payload_.data(), payload_.size(), rtp_header_, &duplicate);
268 EXPECT_FALSE(framer_.GetEncodedVideoFrame(&frame, &next_frame)); 285 EXPECT_FALSE(framer_.GetEncodedVideoFrame(&frame, &next_frame, &multiple));
269 rtp_header_.frame_id = 1; 286 rtp_header_.frame_id = 1;
270 rtp_header_.reference_frame_id = 1; 287 rtp_header_.reference_frame_id = 1;
271 rtp_header_.is_key_frame = true; 288 rtp_header_.is_key_frame = true;
272 framer_.InsertPacket( 289 framer_.InsertPacket(
273 payload_.data(), payload_.size(), rtp_header_, &duplicate); 290 payload_.data(), payload_.size(), rtp_header_, &duplicate);
274 EXPECT_TRUE(framer_.GetEncodedVideoFrame(&frame, &next_frame)); 291 EXPECT_TRUE(framer_.GetEncodedVideoFrame(&frame, &next_frame, &multiple));
275 EXPECT_TRUE(next_frame); 292 EXPECT_TRUE(next_frame);
293 EXPECT_FALSE(multiple);
276 } 294 }
277 295
278 TEST_F(FramerTest, BasicNonLastReferenceId) { 296 TEST_F(FramerTest, BasicNonLastReferenceId) {
279 transport::EncodedVideoFrame frame; 297 transport::EncodedVideoFrame frame;
280 bool next_frame = false; 298 bool next_frame = false;
299 bool multiple = false;
281 bool duplicate = false; 300 bool duplicate = false;
282 301
283 rtp_header_.is_key_frame = true; 302 rtp_header_.is_key_frame = true;
284 rtp_header_.frame_id = 0; 303 rtp_header_.frame_id = 0;
285 framer_.InsertPacket( 304 framer_.InsertPacket(
286 payload_.data(), payload_.size(), rtp_header_, &duplicate); 305 payload_.data(), payload_.size(), rtp_header_, &duplicate);
287 306
288 EXPECT_TRUE(framer_.GetEncodedVideoFrame(&frame, &next_frame)); 307 EXPECT_TRUE(framer_.GetEncodedVideoFrame(&frame, &next_frame, &multiple));
308 EXPECT_FALSE(multiple);
289 framer_.ReleaseFrame(frame.frame_id); 309 framer_.ReleaseFrame(frame.frame_id);
290 310
291 rtp_header_.is_key_frame = false; 311 rtp_header_.is_key_frame = false;
292 rtp_header_.reference_frame_id = 0; 312 rtp_header_.reference_frame_id = 0;
293 rtp_header_.frame_id = 5; 313 rtp_header_.frame_id = 5;
294 framer_.InsertPacket( 314 framer_.InsertPacket(
295 payload_.data(), payload_.size(), rtp_header_, &duplicate); 315 payload_.data(), payload_.size(), rtp_header_, &duplicate);
296 316
297 EXPECT_TRUE(framer_.GetEncodedVideoFrame(&frame, &next_frame)); 317 EXPECT_TRUE(framer_.GetEncodedVideoFrame(&frame, &next_frame, &multiple));
298 EXPECT_FALSE(next_frame); 318 EXPECT_FALSE(next_frame);
319 EXPECT_FALSE(multiple);
299 } 320 }
300 321
301 TEST_F(FramerTest, InOrderReferenceFrameSelection) { 322 TEST_F(FramerTest, InOrderReferenceFrameSelection) {
302 // Create pattern: 0, 1, 4, 5. 323 // Create pattern: 0, 1, 4, 5.
303 transport::EncodedVideoFrame frame; 324 transport::EncodedVideoFrame frame;
304 bool next_frame = false; 325 bool next_frame = false;
326 bool multiple = false;
305 bool duplicate = false; 327 bool duplicate = false;
306 328
307 rtp_header_.is_key_frame = true; 329 rtp_header_.is_key_frame = true;
308 rtp_header_.frame_id = 0; 330 rtp_header_.frame_id = 0;
309 framer_.InsertPacket( 331 framer_.InsertPacket(
310 payload_.data(), payload_.size(), rtp_header_, &duplicate); 332 payload_.data(), payload_.size(), rtp_header_, &duplicate);
311 rtp_header_.is_key_frame = false; 333 rtp_header_.is_key_frame = false;
312 rtp_header_.frame_id = 1; 334 rtp_header_.frame_id = 1;
313 framer_.InsertPacket( 335 framer_.InsertPacket(
314 payload_.data(), payload_.size(), rtp_header_, &duplicate); 336 payload_.data(), payload_.size(), rtp_header_, &duplicate);
315 337
316 // Insert frame #2 partially. 338 // Insert frame #2 partially.
317 rtp_header_.frame_id = 2; 339 rtp_header_.frame_id = 2;
318 rtp_header_.max_packet_id = 1; 340 rtp_header_.max_packet_id = 1;
319 framer_.InsertPacket( 341 framer_.InsertPacket(
320 payload_.data(), payload_.size(), rtp_header_, &duplicate); 342 payload_.data(), payload_.size(), rtp_header_, &duplicate);
321 rtp_header_.frame_id = 4; 343 rtp_header_.frame_id = 4;
322 rtp_header_.max_packet_id = 0; 344 rtp_header_.max_packet_id = 0;
323 rtp_header_.reference_frame_id = 0; 345 rtp_header_.reference_frame_id = 0;
324 framer_.InsertPacket( 346 framer_.InsertPacket(
325 payload_.data(), payload_.size(), rtp_header_, &duplicate); 347 payload_.data(), payload_.size(), rtp_header_, &duplicate);
326 EXPECT_TRUE(framer_.GetEncodedVideoFrame(&frame, &next_frame)); 348 EXPECT_TRUE(framer_.GetEncodedVideoFrame(&frame, &next_frame, &multiple));
327 EXPECT_EQ(0u, frame.frame_id); 349 EXPECT_EQ(0u, frame.frame_id);
350 EXPECT_FALSE(multiple);
328 framer_.ReleaseFrame(frame.frame_id); 351 framer_.ReleaseFrame(frame.frame_id);
329 EXPECT_TRUE(framer_.GetEncodedVideoFrame(&frame, &next_frame)); 352 EXPECT_TRUE(framer_.GetEncodedVideoFrame(&frame, &next_frame, &multiple));
330 EXPECT_TRUE(next_frame); 353 EXPECT_TRUE(next_frame);
354 EXPECT_FALSE(multiple);
331 EXPECT_EQ(1u, frame.frame_id); 355 EXPECT_EQ(1u, frame.frame_id);
332 framer_.ReleaseFrame(frame.frame_id); 356 framer_.ReleaseFrame(frame.frame_id);
333 EXPECT_TRUE(framer_.GetEncodedVideoFrame(&frame, &next_frame)); 357 EXPECT_TRUE(framer_.GetEncodedVideoFrame(&frame, &next_frame, &multiple));
334 EXPECT_FALSE(next_frame); 358 EXPECT_FALSE(next_frame);
359 EXPECT_FALSE(multiple);
335 EXPECT_EQ(4u, frame.frame_id); 360 EXPECT_EQ(4u, frame.frame_id);
336 framer_.ReleaseFrame(frame.frame_id); 361 framer_.ReleaseFrame(frame.frame_id);
337 // Insert remaining packet of frame #2 - should no be continuous. 362 // Insert remaining packet of frame #2 - should no be continuous.
338 rtp_header_.frame_id = 2; 363 rtp_header_.frame_id = 2;
339 rtp_header_.packet_id = 1; 364 rtp_header_.packet_id = 1;
340 framer_.InsertPacket( 365 framer_.InsertPacket(
341 payload_.data(), payload_.size(), rtp_header_, &duplicate); 366 payload_.data(), payload_.size(), rtp_header_, &duplicate);
342 EXPECT_FALSE(framer_.GetEncodedVideoFrame(&frame, &next_frame)); 367 EXPECT_FALSE(framer_.GetEncodedVideoFrame(&frame, &next_frame, &multiple));
343 rtp_header_.frame_id = 5; 368 rtp_header_.frame_id = 5;
344 rtp_header_.reference_frame_id = rtp_header_.frame_id - 1; 369 rtp_header_.reference_frame_id = rtp_header_.frame_id - 1;
345 rtp_header_.packet_id = 0; 370 rtp_header_.packet_id = 0;
346 rtp_header_.max_packet_id = 0; 371 rtp_header_.max_packet_id = 0;
347 framer_.InsertPacket( 372 framer_.InsertPacket(
348 payload_.data(), payload_.size(), rtp_header_, &duplicate); 373 payload_.data(), payload_.size(), rtp_header_, &duplicate);
349 EXPECT_TRUE(framer_.GetEncodedVideoFrame(&frame, &next_frame)); 374 EXPECT_TRUE(framer_.GetEncodedVideoFrame(&frame, &next_frame, &multiple));
350 EXPECT_TRUE(next_frame); 375 EXPECT_TRUE(next_frame);
376 EXPECT_FALSE(multiple);
351 EXPECT_EQ(5u, frame.frame_id); 377 EXPECT_EQ(5u, frame.frame_id);
352 } 378 }
353 379
354 TEST_F(FramerTest, AudioWrap) { 380 TEST_F(FramerTest, AudioWrap) {
355 // All audio frames are marked as key frames. 381 // All audio frames are marked as key frames.
356 transport::EncodedAudioFrame frame; 382 transport::EncodedAudioFrame frame;
357 bool next_frame = false; 383 bool next_frame = false;
384 bool multiple = false;
358 bool duplicate = false; 385 bool duplicate = false;
359 386
360 rtp_header_.is_key_frame = true; 387 rtp_header_.is_key_frame = true;
361 rtp_header_.frame_id = 254; 388 rtp_header_.frame_id = 254;
362 rtp_header_.reference_frame_id = 254; 389 rtp_header_.reference_frame_id = 254;
363 390
364 framer_.InsertPacket( 391 framer_.InsertPacket(
365 payload_.data(), payload_.size(), rtp_header_, &duplicate); 392 payload_.data(), payload_.size(), rtp_header_, &duplicate);
366 EXPECT_TRUE(framer_.GetEncodedAudioFrame(&frame, &next_frame)); 393 EXPECT_TRUE(framer_.GetEncodedAudioFrame(&frame, &next_frame, &multiple));
367 EXPECT_TRUE(next_frame); 394 EXPECT_TRUE(next_frame);
395 EXPECT_FALSE(multiple);
368 EXPECT_EQ(254u, frame.frame_id); 396 EXPECT_EQ(254u, frame.frame_id);
369 framer_.ReleaseFrame(frame.frame_id); 397 framer_.ReleaseFrame(frame.frame_id);
370 398
371 rtp_header_.frame_id = 255; 399 rtp_header_.frame_id = 255;
372 rtp_header_.reference_frame_id = 255; 400 rtp_header_.reference_frame_id = 255;
373 framer_.InsertPacket( 401 framer_.InsertPacket(
374 payload_.data(), payload_.size(), rtp_header_, &duplicate); 402 payload_.data(), payload_.size(), rtp_header_, &duplicate);
375 403
376 // Insert wrapped frame - should be continuous. 404 // Insert wrapped frame - should be continuous.
377 rtp_header_.frame_id = 256; 405 rtp_header_.frame_id = 256;
378 rtp_header_.reference_frame_id = 256; 406 rtp_header_.reference_frame_id = 256;
379 framer_.InsertPacket( 407 framer_.InsertPacket(
380 payload_.data(), payload_.size(), rtp_header_, &duplicate); 408 payload_.data(), payload_.size(), rtp_header_, &duplicate);
381 409
382 EXPECT_TRUE(framer_.GetEncodedAudioFrame(&frame, &next_frame)); 410 EXPECT_TRUE(framer_.GetEncodedAudioFrame(&frame, &next_frame, &multiple));
383 EXPECT_TRUE(next_frame); 411 EXPECT_TRUE(next_frame);
412 EXPECT_FALSE(multiple);
384 EXPECT_EQ(255u, frame.frame_id); 413 EXPECT_EQ(255u, frame.frame_id);
385 framer_.ReleaseFrame(frame.frame_id); 414 framer_.ReleaseFrame(frame.frame_id);
386 415
387 EXPECT_TRUE(framer_.GetEncodedAudioFrame(&frame, &next_frame)); 416 EXPECT_TRUE(framer_.GetEncodedAudioFrame(&frame, &next_frame, &multiple));
388 EXPECT_TRUE(next_frame); 417 EXPECT_TRUE(next_frame);
418 EXPECT_FALSE(multiple);
389 EXPECT_EQ(256u, frame.frame_id); 419 EXPECT_EQ(256u, frame.frame_id);
390 framer_.ReleaseFrame(frame.frame_id); 420 framer_.ReleaseFrame(frame.frame_id);
391 } 421 }
392 422
393 TEST_F(FramerTest, AudioWrapWithMissingFrame) { 423 TEST_F(FramerTest, AudioWrapWithMissingFrame) {
394 // All audio frames are marked as key frames. 424 // All audio frames are marked as key frames.
395 transport::EncodedAudioFrame frame; 425 transport::EncodedAudioFrame frame;
396 bool next_frame = false; 426 bool next_frame = false;
427 bool multiple = true;
397 bool duplicate = false; 428 bool duplicate = false;
398 429
399 // Insert and get first packet. 430 // Insert and get first packet.
400 rtp_header_.is_key_frame = true; 431 rtp_header_.is_key_frame = true;
401 rtp_header_.frame_id = 253; 432 rtp_header_.frame_id = 253;
402 rtp_header_.reference_frame_id = 253; 433 rtp_header_.reference_frame_id = 253;
403 framer_.InsertPacket( 434 framer_.InsertPacket(
404 payload_.data(), payload_.size(), rtp_header_, &duplicate); 435 payload_.data(), payload_.size(), rtp_header_, &duplicate);
405 EXPECT_TRUE(framer_.GetEncodedAudioFrame(&frame, &next_frame)); 436 EXPECT_TRUE(framer_.GetEncodedAudioFrame(&frame, &next_frame, &multiple));
406 EXPECT_TRUE(next_frame); 437 EXPECT_TRUE(next_frame);
438 EXPECT_FALSE(multiple);
407 EXPECT_EQ(253u, frame.frame_id); 439 EXPECT_EQ(253u, frame.frame_id);
408 framer_.ReleaseFrame(frame.frame_id); 440 framer_.ReleaseFrame(frame.frame_id);
409 441
410 // Insert third and fourth packets. 442 // Insert third and fourth packets.
411 rtp_header_.frame_id = 255; 443 rtp_header_.frame_id = 255;
412 rtp_header_.reference_frame_id = 255; 444 rtp_header_.reference_frame_id = 255;
413 framer_.InsertPacket( 445 framer_.InsertPacket(
414 payload_.data(), payload_.size(), rtp_header_, &duplicate); 446 payload_.data(), payload_.size(), rtp_header_, &duplicate);
415 rtp_header_.frame_id = 256; 447 rtp_header_.frame_id = 256;
416 rtp_header_.reference_frame_id = 256; 448 rtp_header_.reference_frame_id = 256;
417 framer_.InsertPacket( 449 framer_.InsertPacket(
418 payload_.data(), payload_.size(), rtp_header_, &duplicate); 450 payload_.data(), payload_.size(), rtp_header_, &duplicate);
419 451
420 // Get third and fourth packets. 452 // Get third and fourth packets.
421 EXPECT_TRUE(framer_.GetEncodedAudioFrame(&frame, &next_frame)); 453 EXPECT_TRUE(framer_.GetEncodedAudioFrame(&frame, &next_frame, &multiple));
422 EXPECT_FALSE(next_frame); 454 EXPECT_FALSE(next_frame);
455 EXPECT_FALSE(multiple);
423 EXPECT_EQ(255u, frame.frame_id); 456 EXPECT_EQ(255u, frame.frame_id);
424 framer_.ReleaseFrame(frame.frame_id); 457 framer_.ReleaseFrame(frame.frame_id);
425 EXPECT_TRUE(framer_.GetEncodedAudioFrame(&frame, &next_frame)); 458 EXPECT_TRUE(framer_.GetEncodedAudioFrame(&frame, &next_frame, &multiple));
426 EXPECT_TRUE(next_frame); 459 EXPECT_TRUE(next_frame);
460 EXPECT_FALSE(multiple);
427 EXPECT_EQ(256u, frame.frame_id); 461 EXPECT_EQ(256u, frame.frame_id);
428 framer_.ReleaseFrame(frame.frame_id); 462 framer_.ReleaseFrame(frame.frame_id);
429 } 463 }
430 464
miu 2014/05/19 23:53:59 Perhaps we should add a test where we expect multi
hubbe 2014/05/20 00:08:21 Done, sort of. I had forgotten to check these. Som
431 } // namespace cast 465 } // namespace cast
432 } // namespace media 466 } // namespace media
OLDNEW
« no previous file with comments | « media/cast/framer/framer.cc ('k') | media/cast/video_receiver/video_receiver.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698