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

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

Powered by Google App Engine
This is Rietveld 408576698