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

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