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

Side by Side Diff: webrtc/modules/video_coding/rtp_frame_reference_finder_unittest.cc

Issue 2522493002: Now run EndToEndTest with the WebRTC-NewVideoJitterBuffer experiment. (Closed)
Patch Set: Rebase Created 4 years ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 /* 1 /*
2 * Copyright (c) 2016 The WebRTC project authors. All Rights Reserved. 2 * Copyright (c) 2016 The WebRTC project authors. All Rights Reserved.
3 * 3 *
4 * Use of this source code is governed by a BSD-style license 4 * Use of this source code is governed by a BSD-style license
5 * that can be found in the LICENSE file in the root of the source 5 * that can be found in the LICENSE file in the root of the source
6 * tree. An additional intellectual property rights grant can be found 6 * tree. An additional intellectual property rights grant can be found
7 * in the file PATENTS. All contributing project authors may 7 * in the file PATENTS. All contributing project authors may
8 * be found in the AUTHORS file in the root of the source tree. 8 * be found in the AUTHORS file in the root of the source tree.
9 */ 9 */
10 10
(...skipping 65 matching lines...) Expand 10 before | Expand all | Expand 10 after
76 std::make_pair(std::make_pair(pid, sidx), std::move(frame))); 76 std::make_pair(std::make_pair(pid, sidx), std::move(frame)));
77 } 77 }
78 78
79 void InsertGeneric(uint16_t seq_num_start, 79 void InsertGeneric(uint16_t seq_num_start,
80 uint16_t seq_num_end, 80 uint16_t seq_num_end,
81 bool keyframe) { 81 bool keyframe) {
82 VCMPacket packet; 82 VCMPacket packet;
83 packet.codec = kVideoCodecGeneric; 83 packet.codec = kVideoCodecGeneric;
84 packet.seqNum = seq_num_start; 84 packet.seqNum = seq_num_start;
85 packet.frameType = keyframe ? kVideoFrameKey : kVideoFrameDelta; 85 packet.frameType = keyframe ? kVideoFrameKey : kVideoFrameDelta;
86 ref_packet_buffer_->InsertPacket(packet);
86 87
88 packet.seqNum = seq_num_end;
89 packet.markerBit = true;
87 ref_packet_buffer_->InsertPacket(packet); 90 ref_packet_buffer_->InsertPacket(packet);
91
88 std::unique_ptr<RtpFrameObject> frame(new RtpFrameObject( 92 std::unique_ptr<RtpFrameObject> frame(new RtpFrameObject(
89 ref_packet_buffer_, seq_num_start, seq_num_end, 0, 0, 0)); 93 ref_packet_buffer_, seq_num_start, seq_num_end, 0, 0, 0));
90 reference_finder_->ManageFrame(std::move(frame)); 94 reference_finder_->ManageFrame(std::move(frame));
91 } 95 }
92 96
93 void InsertVp8(uint16_t seq_num_start, 97 void InsertVp8(uint16_t seq_num_start,
94 uint16_t seq_num_end, 98 uint16_t seq_num_end,
95 bool keyframe, 99 bool keyframe,
96 int32_t pid = kNoPictureId, 100 int32_t pid = kNoPictureId,
97 uint8_t tid = kNoTemporalIdx, 101 uint8_t tid = kNoTemporalIdx,
98 int32_t tl0 = kNoTl0PicIdx, 102 int32_t tl0 = kNoTl0PicIdx,
99 bool sync = false) { 103 bool sync = false) {
100 VCMPacket packet; 104 VCMPacket packet;
101 packet.codec = kVideoCodecVP8; 105 packet.codec = kVideoCodecVP8;
102 packet.seqNum = seq_num_start; 106 packet.seqNum = seq_num_start;
107 packet.markerBit = (seq_num_start == seq_num_end);
103 packet.frameType = keyframe ? kVideoFrameKey : kVideoFrameDelta; 108 packet.frameType = keyframe ? kVideoFrameKey : kVideoFrameDelta;
104 packet.video_header.codecHeader.VP8.pictureId = pid % (1 << 15); 109 packet.video_header.codecHeader.VP8.pictureId = pid % (1 << 15);
105 packet.video_header.codecHeader.VP8.temporalIdx = tid; 110 packet.video_header.codecHeader.VP8.temporalIdx = tid;
106 packet.video_header.codecHeader.VP8.tl0PicIdx = tl0; 111 packet.video_header.codecHeader.VP8.tl0PicIdx = tl0;
107 packet.video_header.codecHeader.VP8.layerSync = sync; 112 packet.video_header.codecHeader.VP8.layerSync = sync;
113 ref_packet_buffer_->InsertPacket(packet);
108 114
109 ref_packet_buffer_->InsertPacket(packet); 115 if (seq_num_start != seq_num_end) {
116 packet.seqNum = seq_num_end;
117 packet.markerBit = true;
118 ref_packet_buffer_->InsertPacket(packet);
119 }
120
110 std::unique_ptr<RtpFrameObject> frame(new RtpFrameObject( 121 std::unique_ptr<RtpFrameObject> frame(new RtpFrameObject(
111 ref_packet_buffer_, seq_num_start, seq_num_end, 0, 0, 0)); 122 ref_packet_buffer_, seq_num_start, seq_num_end, 0, 0, 0));
112 reference_finder_->ManageFrame(std::move(frame)); 123 reference_finder_->ManageFrame(std::move(frame));
113 } 124 }
114 125
115 void InsertVp9Gof(uint16_t seq_num_start, 126 void InsertVp9Gof(uint16_t seq_num_start,
116 uint16_t seq_num_end, 127 uint16_t seq_num_end,
117 bool keyframe, 128 bool keyframe,
118 int32_t pid = kNoPictureId, 129 int32_t pid = kNoPictureId,
119 uint8_t sid = kNoSpatialIdx, 130 uint8_t sid = kNoSpatialIdx,
120 uint8_t tid = kNoTemporalIdx, 131 uint8_t tid = kNoTemporalIdx,
121 int32_t tl0 = kNoTl0PicIdx, 132 int32_t tl0 = kNoTl0PicIdx,
122 bool up_switch = false, 133 bool up_switch = false,
123 GofInfoVP9* ss = nullptr) { 134 GofInfoVP9* ss = nullptr) {
124 VCMPacket packet; 135 VCMPacket packet;
125 packet.timestamp = pid; 136 packet.timestamp = pid;
126 packet.codec = kVideoCodecVP9; 137 packet.codec = kVideoCodecVP9;
127 packet.seqNum = seq_num_start; 138 packet.seqNum = seq_num_start;
139 packet.markerBit = (seq_num_start == seq_num_end);
128 packet.frameType = keyframe ? kVideoFrameKey : kVideoFrameDelta; 140 packet.frameType = keyframe ? kVideoFrameKey : kVideoFrameDelta;
129 packet.video_header.codecHeader.VP9.flexible_mode = false; 141 packet.video_header.codecHeader.VP9.flexible_mode = false;
130 packet.video_header.codecHeader.VP9.picture_id = pid % (1 << 15); 142 packet.video_header.codecHeader.VP9.picture_id = pid % (1 << 15);
131 packet.video_header.codecHeader.VP9.temporal_idx = tid; 143 packet.video_header.codecHeader.VP9.temporal_idx = tid;
132 packet.video_header.codecHeader.VP9.spatial_idx = sid; 144 packet.video_header.codecHeader.VP9.spatial_idx = sid;
133 packet.video_header.codecHeader.VP9.tl0_pic_idx = tl0; 145 packet.video_header.codecHeader.VP9.tl0_pic_idx = tl0;
134 packet.video_header.codecHeader.VP9.temporal_up_switch = up_switch; 146 packet.video_header.codecHeader.VP9.temporal_up_switch = up_switch;
135 if (ss != nullptr) { 147 if (ss != nullptr) {
136 packet.video_header.codecHeader.VP9.ss_data_available = true; 148 packet.video_header.codecHeader.VP9.ss_data_available = true;
137 packet.video_header.codecHeader.VP9.gof = *ss; 149 packet.video_header.codecHeader.VP9.gof = *ss;
138 } 150 }
151 ref_packet_buffer_->InsertPacket(packet);
139 152
140 ref_packet_buffer_->InsertPacket(packet); 153 if (seq_num_start != seq_num_end) {
154 packet.markerBit = true;
155 packet.video_header.codecHeader.VP9.ss_data_available = false;
156 packet.seqNum = seq_num_end;
157 ref_packet_buffer_->InsertPacket(packet);
158 }
159
141 std::unique_ptr<RtpFrameObject> frame(new RtpFrameObject( 160 std::unique_ptr<RtpFrameObject> frame(new RtpFrameObject(
142 ref_packet_buffer_, seq_num_start, seq_num_end, 0, 0, 0)); 161 ref_packet_buffer_, seq_num_start, seq_num_end, 0, 0, 0));
143 reference_finder_->ManageFrame(std::move(frame)); 162 reference_finder_->ManageFrame(std::move(frame));
144 } 163 }
145 164
146 void InsertVp9Flex(uint16_t seq_num_start, 165 void InsertVp9Flex(uint16_t seq_num_start,
147 uint16_t seq_num_end, 166 uint16_t seq_num_end,
148 bool keyframe, 167 bool keyframe,
149 int32_t pid = kNoPictureId, 168 int32_t pid = kNoPictureId,
150 uint8_t sid = kNoSpatialIdx, 169 uint8_t sid = kNoSpatialIdx,
151 uint8_t tid = kNoTemporalIdx, 170 uint8_t tid = kNoTemporalIdx,
152 int32_t tl0 = kNoTl0PicIdx, 171 int32_t tl0 = kNoTl0PicIdx,
153 bool inter = false, 172 bool inter = false,
154 std::vector<uint8_t> refs = std::vector<uint8_t>()) { 173 std::vector<uint8_t> refs = std::vector<uint8_t>()) {
155 VCMPacket packet; 174 VCMPacket packet;
156 packet.timestamp = pid; 175 packet.timestamp = pid;
157 packet.codec = kVideoCodecVP9; 176 packet.codec = kVideoCodecVP9;
158 packet.seqNum = seq_num_start; 177 packet.seqNum = seq_num_start;
178 packet.markerBit = (seq_num_start == seq_num_end);
159 packet.frameType = keyframe ? kVideoFrameKey : kVideoFrameDelta; 179 packet.frameType = keyframe ? kVideoFrameKey : kVideoFrameDelta;
160 packet.video_header.codecHeader.VP9.inter_layer_predicted = inter; 180 packet.video_header.codecHeader.VP9.inter_layer_predicted = inter;
161 packet.video_header.codecHeader.VP9.flexible_mode = true; 181 packet.video_header.codecHeader.VP9.flexible_mode = true;
162 packet.video_header.codecHeader.VP9.picture_id = pid % (1 << 15); 182 packet.video_header.codecHeader.VP9.picture_id = pid % (1 << 15);
163 packet.video_header.codecHeader.VP9.temporal_idx = tid; 183 packet.video_header.codecHeader.VP9.temporal_idx = tid;
164 packet.video_header.codecHeader.VP9.spatial_idx = sid; 184 packet.video_header.codecHeader.VP9.spatial_idx = sid;
165 packet.video_header.codecHeader.VP9.tl0_pic_idx = tl0; 185 packet.video_header.codecHeader.VP9.tl0_pic_idx = tl0;
166 packet.video_header.codecHeader.VP9.num_ref_pics = refs.size(); 186 packet.video_header.codecHeader.VP9.num_ref_pics = refs.size();
167 for (size_t i = 0; i < refs.size(); ++i) 187 for (size_t i = 0; i < refs.size(); ++i)
168 packet.video_header.codecHeader.VP9.pid_diff[i] = refs[i]; 188 packet.video_header.codecHeader.VP9.pid_diff[i] = refs[i];
189 ref_packet_buffer_->InsertPacket(packet);
169 190
170 ref_packet_buffer_->InsertPacket(packet); 191 if (seq_num_start != seq_num_end) {
192 packet.seqNum = seq_num_end;
193 packet.markerBit = true;
194 ref_packet_buffer_->InsertPacket(packet);
195 }
196
171 std::unique_ptr<RtpFrameObject> frame(new RtpFrameObject( 197 std::unique_ptr<RtpFrameObject> frame(new RtpFrameObject(
172 ref_packet_buffer_, seq_num_start, seq_num_end, 0, 0, 0)); 198 ref_packet_buffer_, seq_num_start, seq_num_end, 0, 0, 0));
173 reference_finder_->ManageFrame(std::move(frame)); 199 reference_finder_->ManageFrame(std::move(frame));
174 } 200 }
175 201
176 // Check if a frame with picture id |pid| and spatial index |sidx| has been 202 // Check if a frame with picture id |pid| and spatial index |sidx| has been
177 // delivered from the packet buffer, and if so, if it has the references 203 // delivered from the packet buffer, and if so, if it has the references
178 // specified by |refs|. 204 // specified by |refs|.
179 template <typename... T> 205 template <typename... T>
180 void CheckReferences(uint16_t pid, uint16_t sidx, T... refs) const { 206 void CheckReferences(uint16_t pid, uint16_t sidx, T... refs) const {
(...skipping 1045 matching lines...) Expand 10 before | Expand all | Expand 10 after
1226 // TODO(philipel): Remove when VP9 PID/TL0 does not jump mid-stream (should be 1252 // TODO(philipel): Remove when VP9 PID/TL0 does not jump mid-stream (should be
1227 // around M59). 1253 // around M59).
1228 TEST_F(TestRtpFrameReferenceFinder, Vp9PidFix_PidJumpsBackwardThenForward) { 1254 TEST_F(TestRtpFrameReferenceFinder, Vp9PidFix_PidJumpsBackwardThenForward) {
1229 GofInfoVP9 ss; 1255 GofInfoVP9 ss;
1230 ss.SetGofInfoVP9(kTemporalStructureMode1); 1256 ss.SetGofInfoVP9(kTemporalStructureMode1);
1231 1257
1232 VCMPacket packet; 1258 VCMPacket packet;
1233 packet.timestamp = 0; 1259 packet.timestamp = 0;
1234 packet.codec = kVideoCodecVP9; 1260 packet.codec = kVideoCodecVP9;
1235 packet.frameType = kVideoFrameKey; 1261 packet.frameType = kVideoFrameKey;
1262 packet.markerBit = true;
1236 packet.video_header.codecHeader.VP9.flexible_mode = false; 1263 packet.video_header.codecHeader.VP9.flexible_mode = false;
1237 packet.video_header.codecHeader.VP9.picture_id = 1; 1264 packet.video_header.codecHeader.VP9.picture_id = 1;
1238 packet.video_header.codecHeader.VP9.temporal_idx = 0; 1265 packet.video_header.codecHeader.VP9.temporal_idx = 0;
1239 packet.video_header.codecHeader.VP9.spatial_idx = 0; 1266 packet.video_header.codecHeader.VP9.spatial_idx = 0;
1240 packet.video_header.codecHeader.VP9.tl0_pic_idx = 0; 1267 packet.video_header.codecHeader.VP9.tl0_pic_idx = 0;
1241 packet.video_header.codecHeader.VP9.temporal_up_switch = true; 1268 packet.video_header.codecHeader.VP9.temporal_up_switch = true;
1242 packet.video_header.codecHeader.VP9.ss_data_available = true; 1269 packet.video_header.codecHeader.VP9.ss_data_available = true;
1243 packet.video_header.codecHeader.VP9.gof = ss; 1270 packet.video_header.codecHeader.VP9.gof = ss;
1244 1271
1245 { 1272 {
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after
1279 // TODO(philipel): Remove when VP9 PID/TL0 does not jump mid-stream (should be 1306 // TODO(philipel): Remove when VP9 PID/TL0 does not jump mid-stream (should be
1280 // around M59). 1307 // around M59).
1281 TEST_F(TestRtpFrameReferenceFinder, Vp9PidFix_Tl0JumpsBackwardThenForward) { 1308 TEST_F(TestRtpFrameReferenceFinder, Vp9PidFix_Tl0JumpsBackwardThenForward) {
1282 GofInfoVP9 ss; 1309 GofInfoVP9 ss;
1283 ss.SetGofInfoVP9(kTemporalStructureMode1); 1310 ss.SetGofInfoVP9(kTemporalStructureMode1);
1284 1311
1285 VCMPacket packet; 1312 VCMPacket packet;
1286 packet.timestamp = 0; 1313 packet.timestamp = 0;
1287 packet.codec = kVideoCodecVP9; 1314 packet.codec = kVideoCodecVP9;
1288 packet.frameType = kVideoFrameKey; 1315 packet.frameType = kVideoFrameKey;
1316 packet.markerBit = true;
1289 packet.video_header.codecHeader.VP9.flexible_mode = false; 1317 packet.video_header.codecHeader.VP9.flexible_mode = false;
1290 packet.video_header.codecHeader.VP9.picture_id = 0; 1318 packet.video_header.codecHeader.VP9.picture_id = 0;
1291 packet.video_header.codecHeader.VP9.temporal_idx = 0; 1319 packet.video_header.codecHeader.VP9.temporal_idx = 0;
1292 packet.video_header.codecHeader.VP9.spatial_idx = 0; 1320 packet.video_header.codecHeader.VP9.spatial_idx = 0;
1293 packet.video_header.codecHeader.VP9.tl0_pic_idx = 1; 1321 packet.video_header.codecHeader.VP9.tl0_pic_idx = 1;
1294 packet.video_header.codecHeader.VP9.temporal_up_switch = true; 1322 packet.video_header.codecHeader.VP9.temporal_up_switch = true;
1295 packet.video_header.codecHeader.VP9.ss_data_available = true; 1323 packet.video_header.codecHeader.VP9.ss_data_available = true;
1296 packet.video_header.codecHeader.VP9.gof = ss; 1324 packet.video_header.codecHeader.VP9.gof = ss;
1297 { 1325 {
1298 ref_packet_buffer_->InsertPacket(packet); 1326 ref_packet_buffer_->InsertPacket(packet);
(...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after
1344 // TODO(philipel): Remove when VP9 PID/TL0 does not jump mid-stream (should be 1372 // TODO(philipel): Remove when VP9 PID/TL0 does not jump mid-stream (should be
1345 // around M59). 1373 // around M59).
1346 TEST_F(TestRtpFrameReferenceFinder, Vp9PidFix_PidSmallJumpForward) { 1374 TEST_F(TestRtpFrameReferenceFinder, Vp9PidFix_PidSmallJumpForward) {
1347 GofInfoVP9 ss; 1375 GofInfoVP9 ss;
1348 ss.SetGofInfoVP9(kTemporalStructureMode1); 1376 ss.SetGofInfoVP9(kTemporalStructureMode1);
1349 1377
1350 VCMPacket packet; 1378 VCMPacket packet;
1351 packet.timestamp = 0; 1379 packet.timestamp = 0;
1352 packet.codec = kVideoCodecVP9; 1380 packet.codec = kVideoCodecVP9;
1353 packet.frameType = kVideoFrameKey; 1381 packet.frameType = kVideoFrameKey;
1382 packet.markerBit = true;
1354 packet.video_header.codecHeader.VP9.flexible_mode = false; 1383 packet.video_header.codecHeader.VP9.flexible_mode = false;
1355 packet.video_header.codecHeader.VP9.picture_id = 1; 1384 packet.video_header.codecHeader.VP9.picture_id = 1;
1356 packet.video_header.codecHeader.VP9.temporal_idx = 0; 1385 packet.video_header.codecHeader.VP9.temporal_idx = 0;
1357 packet.video_header.codecHeader.VP9.spatial_idx = 0; 1386 packet.video_header.codecHeader.VP9.spatial_idx = 0;
1358 packet.video_header.codecHeader.VP9.tl0_pic_idx = 1; 1387 packet.video_header.codecHeader.VP9.tl0_pic_idx = 1;
1359 packet.video_header.codecHeader.VP9.temporal_up_switch = true; 1388 packet.video_header.codecHeader.VP9.temporal_up_switch = true;
1360 packet.video_header.codecHeader.VP9.ss_data_available = true; 1389 packet.video_header.codecHeader.VP9.ss_data_available = true;
1361 packet.video_header.codecHeader.VP9.gof = ss; 1390 packet.video_header.codecHeader.VP9.gof = ss;
1362 { 1391 {
1363 ref_packet_buffer_->InsertPacket(packet); 1392 ref_packet_buffer_->InsertPacket(packet);
(...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after
1406 // TODO(philipel): Remove when VP9 PID/TL0 does not jump mid-stream (should be 1435 // TODO(philipel): Remove when VP9 PID/TL0 does not jump mid-stream (should be
1407 // around M59). 1436 // around M59).
1408 TEST_F(TestRtpFrameReferenceFinder, Vp9PidFix_DropOldFrame) { 1437 TEST_F(TestRtpFrameReferenceFinder, Vp9PidFix_DropOldFrame) {
1409 GofInfoVP9 ss; 1438 GofInfoVP9 ss;
1410 ss.SetGofInfoVP9(kTemporalStructureMode1); 1439 ss.SetGofInfoVP9(kTemporalStructureMode1);
1411 1440
1412 VCMPacket packet; 1441 VCMPacket packet;
1413 packet.timestamp = 0; 1442 packet.timestamp = 0;
1414 packet.codec = kVideoCodecVP9; 1443 packet.codec = kVideoCodecVP9;
1415 packet.frameType = kVideoFrameKey; 1444 packet.frameType = kVideoFrameKey;
1445 packet.markerBit = true;
1416 packet.video_header.codecHeader.VP9.flexible_mode = false; 1446 packet.video_header.codecHeader.VP9.flexible_mode = false;
1417 packet.video_header.codecHeader.VP9.picture_id = 1; 1447 packet.video_header.codecHeader.VP9.picture_id = 1;
1418 packet.video_header.codecHeader.VP9.temporal_idx = 0; 1448 packet.video_header.codecHeader.VP9.temporal_idx = 0;
1419 packet.video_header.codecHeader.VP9.spatial_idx = 0; 1449 packet.video_header.codecHeader.VP9.spatial_idx = 0;
1420 packet.video_header.codecHeader.VP9.tl0_pic_idx = 1; 1450 packet.video_header.codecHeader.VP9.tl0_pic_idx = 1;
1421 packet.video_header.codecHeader.VP9.temporal_up_switch = true; 1451 packet.video_header.codecHeader.VP9.temporal_up_switch = true;
1422 packet.video_header.codecHeader.VP9.ss_data_available = true; 1452 packet.video_header.codecHeader.VP9.ss_data_available = true;
1423 packet.video_header.codecHeader.VP9.gof = ss; 1453 packet.video_header.codecHeader.VP9.gof = ss;
1424 { 1454 {
1425 ref_packet_buffer_->InsertPacket(packet); 1455 ref_packet_buffer_->InsertPacket(packet);
(...skipping 22 matching lines...) Expand all
1448 reference_finder_->ManageFrame(std::move(frame)); 1478 reference_finder_->ManageFrame(std::move(frame));
1449 } 1479 }
1450 1480
1451 ASSERT_EQ(2UL, frames_from_callback_.size()); 1481 ASSERT_EQ(2UL, frames_from_callback_.size());
1452 CheckReferencesVp9(1, 0); 1482 CheckReferencesVp9(1, 0);
1453 CheckReferencesVp9(129, 0); 1483 CheckReferencesVp9(129, 0);
1454 } 1484 }
1455 1485
1456 } // namespace video_coding 1486 } // namespace video_coding
1457 } // namespace webrtc 1487 } // namespace webrtc
OLDNEW
« no previous file with comments | « webrtc/modules/video_coding/rtp_frame_reference_finder.cc ('k') | webrtc/modules/video_coding/video_receiver.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698