OLD | NEW |
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 |
11 #include <cstring> | 11 #include <cstring> |
12 #include <limits> | 12 #include <limits> |
| 13 #include <utility> |
13 | 14 |
14 #include "webrtc/modules/video_coding/frame_object.h" | 15 #include "webrtc/modules/video_coding/frame_object.h" |
15 #include "webrtc/modules/video_coding/packet_buffer.h" | 16 #include "webrtc/modules/video_coding/packet_buffer.h" |
16 | 17 |
17 #include "testing/gtest/include/gtest/gtest.h" | 18 #include "testing/gtest/include/gtest/gtest.h" |
18 #include "webrtc/base/random.h" | 19 #include "webrtc/base/random.h" |
19 | 20 |
20 namespace webrtc { | 21 namespace webrtc { |
21 namespace video_coding { | 22 namespace video_coding { |
22 | 23 |
23 class TestPacketBuffer : public ::testing::Test, | 24 class TestPacketBuffer : public ::testing::Test, |
24 public OnCompleteFrameCallback { | 25 public OnCompleteFrameCallback { |
25 protected: | 26 protected: |
26 TestPacketBuffer() | 27 TestPacketBuffer() |
27 : rand_(0x8739211), | 28 : rand_(0x8739211), |
28 packet_buffer_(new PacketBuffer(kStartSize, kMaxSize, this)) {} | 29 packet_buffer_(new PacketBuffer(kStartSize, kMaxSize, this)), |
| 30 frames_from_callback_(FrameComp()) {} |
29 | 31 |
30 uint16_t Rand() { return rand_.Rand(std::numeric_limits<uint16_t>::max()); } | 32 uint16_t Rand() { return rand_.Rand(std::numeric_limits<uint16_t>::max()); } |
31 | 33 |
32 void OnCompleteFrame(std::unique_ptr<FrameObject> frame) override { | 34 void OnCompleteFrame(std::unique_ptr<FrameObject> frame) override { |
33 uint16_t pid = frame->picture_id; | 35 uint16_t pid = frame->picture_id; |
34 auto frame_it = frames_from_callback_.find(pid); | 36 uint16_t sidx = frame->spatial_layer; |
| 37 auto frame_it = frames_from_callback_.find(std::make_pair(pid, sidx)); |
35 if (frame_it != frames_from_callback_.end()) { | 38 if (frame_it != frames_from_callback_.end()) { |
36 ADD_FAILURE() << "Already received frame with picture id: " << pid; | 39 ADD_FAILURE() << "Already received frame with (pid:sidx): (" |
| 40 << pid << ":" << sidx << ")"; |
37 return; | 41 return; |
38 } | 42 } |
39 | 43 |
40 frames_from_callback_.insert( | 44 frames_from_callback_.insert( |
41 make_pair(frame->picture_id, std::move(frame))); | 45 std::make_pair(std::make_pair(pid, sidx), std::move(frame))); |
42 } | 46 } |
43 | 47 |
44 void TearDown() override { | 48 void TearDown() override { |
45 // All frame objects must be destroyed before the packet buffer since | 49 // All frame objects must be destroyed before the packet buffer since |
46 // a frame object will try to remove itself from the packet buffer | 50 // a frame object will try to remove itself from the packet buffer |
47 // upon destruction. | 51 // upon destruction. |
48 frames_from_callback_.clear(); | 52 frames_from_callback_.clear(); |
49 } | 53 } |
50 | 54 |
| 55 // Short version of true and false. |
| 56 enum { |
| 57 kT = true, |
| 58 kF = false |
| 59 }; |
| 60 |
51 // Insert a generic packet into the packet buffer. | 61 // Insert a generic packet into the packet buffer. |
52 void InsertGeneric(uint16_t seq_num, // packet sequence number | 62 void InsertGeneric(uint16_t seq_num, // packet sequence number |
53 bool keyframe, // is keyframe | 63 bool keyframe, // is keyframe |
54 bool first, // is first packet of frame | 64 bool first, // is first packet of frame |
55 bool last, // is last packet of frame | 65 bool last, // is last packet of frame |
56 size_t data_size = 0, // size of data | 66 size_t data_size = 0, // size of data |
57 uint8_t* data = nullptr) { // data pointer | 67 uint8_t* data = nullptr) { // data pointer |
58 VCMPacket packet; | 68 VCMPacket packet; |
59 packet.codec = kVideoCodecGeneric; | 69 packet.codec = kVideoCodecGeneric; |
60 packet.seqNum = seq_num; | 70 packet.seqNum = seq_num; |
(...skipping 26 matching lines...) Expand all Loading... |
87 packet.sizeBytes = data_size; | 97 packet.sizeBytes = data_size; |
88 packet.dataPtr = data; | 98 packet.dataPtr = data; |
89 packet.codecSpecificHeader.codecHeader.VP8.pictureId = pid % (1 << 15); | 99 packet.codecSpecificHeader.codecHeader.VP8.pictureId = pid % (1 << 15); |
90 packet.codecSpecificHeader.codecHeader.VP8.temporalIdx = tid; | 100 packet.codecSpecificHeader.codecHeader.VP8.temporalIdx = tid; |
91 packet.codecSpecificHeader.codecHeader.VP8.tl0PicIdx = tl0; | 101 packet.codecSpecificHeader.codecHeader.VP8.tl0PicIdx = tl0; |
92 packet.codecSpecificHeader.codecHeader.VP8.layerSync = sync; | 102 packet.codecSpecificHeader.codecHeader.VP8.layerSync = sync; |
93 | 103 |
94 EXPECT_TRUE(packet_buffer_->InsertPacket(packet)); | 104 EXPECT_TRUE(packet_buffer_->InsertPacket(packet)); |
95 } | 105 } |
96 | 106 |
97 // Check if a frame with picture id |pid| has been delivered from the packet | 107 // Insert a Vp9 packet into the packet buffer. |
98 // buffer, and if so, if it has the references specified by |refs|. | 108 void InsertVp9Gof(uint16_t seq_num, // packet sequence number |
| 109 bool keyframe, // is keyframe |
| 110 bool first, // is first packet of frame |
| 111 bool last, // is last packet of frame |
| 112 bool up = false, // frame is up-switch point |
| 113 int32_t pid = kNoPictureId, // picture id |
| 114 uint8_t sid = kNoSpatialIdx, // spatial id |
| 115 uint8_t tid = kNoTemporalIdx, // temporal id |
| 116 int32_t tl0 = kNoTl0PicIdx, // tl0 pic index |
| 117 GofInfoVP9* ss = nullptr, // scalability structure |
| 118 size_t data_size = 0, // size of data |
| 119 uint8_t* data = nullptr) { // data pointer |
| 120 VCMPacket packet; |
| 121 packet.codec = kVideoCodecVP9; |
| 122 packet.seqNum = seq_num; |
| 123 packet.frameType = keyframe ? kVideoFrameKey : kVideoFrameDelta; |
| 124 packet.isFirstPacket = first; |
| 125 packet.markerBit = last; |
| 126 packet.sizeBytes = data_size; |
| 127 packet.dataPtr = data; |
| 128 packet.codecSpecificHeader.codecHeader.VP9.flexible_mode = false; |
| 129 packet.codecSpecificHeader.codecHeader.VP9.picture_id = pid % (1 << 15); |
| 130 packet.codecSpecificHeader.codecHeader.VP9.temporal_idx = tid; |
| 131 packet.codecSpecificHeader.codecHeader.VP9.spatial_idx = sid; |
| 132 packet.codecSpecificHeader.codecHeader.VP9.tl0_pic_idx = tl0; |
| 133 packet.codecSpecificHeader.codecHeader.VP9.temporal_up_switch = up; |
| 134 if (ss != nullptr) { |
| 135 packet.codecSpecificHeader.codecHeader.VP9.ss_data_available = true; |
| 136 packet.codecSpecificHeader.codecHeader.VP9.gof = *ss; |
| 137 } |
| 138 |
| 139 EXPECT_TRUE(packet_buffer_->InsertPacket(packet)); |
| 140 } |
| 141 |
| 142 // Insert a Vp9 packet into the packet buffer. |
| 143 void InsertVp9Flex(uint16_t seq_num, // packet sequence number |
| 144 bool keyframe, // is keyframe |
| 145 bool first, // is first packet of frame |
| 146 bool last, // is last packet of frame |
| 147 bool inter, // depends on S-1 layer |
| 148 int32_t pid = kNoPictureId, // picture id |
| 149 uint8_t sid = kNoSpatialIdx, // spatial id |
| 150 uint8_t tid = kNoTemporalIdx, // temporal id |
| 151 int32_t tl0 = kNoTl0PicIdx, // tl0 pic index |
| 152 std::vector<uint8_t> refs = |
| 153 std::vector<uint8_t>(), // frame references |
| 154 size_t data_size = 0, // size of data |
| 155 uint8_t* data = nullptr) { // data pointer |
| 156 VCMPacket packet; |
| 157 packet.codec = kVideoCodecVP9; |
| 158 packet.seqNum = seq_num; |
| 159 packet.frameType = keyframe ? kVideoFrameKey : kVideoFrameDelta; |
| 160 packet.isFirstPacket = first; |
| 161 packet.markerBit = last; |
| 162 packet.sizeBytes = data_size; |
| 163 packet.dataPtr = data; |
| 164 packet.codecSpecificHeader.codecHeader.VP9.inter_layer_predicted = inter; |
| 165 packet.codecSpecificHeader.codecHeader.VP9.flexible_mode = true; |
| 166 packet.codecSpecificHeader.codecHeader.VP9.picture_id = pid % (1 << 15); |
| 167 packet.codecSpecificHeader.codecHeader.VP9.temporal_idx = tid; |
| 168 packet.codecSpecificHeader.codecHeader.VP9.spatial_idx = sid; |
| 169 packet.codecSpecificHeader.codecHeader.VP9.tl0_pic_idx = tl0; |
| 170 packet.codecSpecificHeader.codecHeader.VP9.num_ref_pics = refs.size(); |
| 171 for (size_t i = 0; i < refs.size(); ++i) |
| 172 packet.codecSpecificHeader.codecHeader.VP9.pid_diff[i] = refs[i]; |
| 173 |
| 174 EXPECT_TRUE(packet_buffer_->InsertPacket(packet)); |
| 175 } |
| 176 |
| 177 // Check if a frame with picture id |pid| and spatial index |sidx| has been |
| 178 // delivered from the packet buffer, and if so, if it has the references |
| 179 // specified by |refs|. |
99 template <typename... T> | 180 template <typename... T> |
100 void CheckReferences(uint16_t pid, T... refs) const { | 181 void CheckReferences(uint16_t pid, uint16_t sidx, T... refs) const { |
101 auto frame_it = frames_from_callback_.find(pid); | 182 auto frame_it = frames_from_callback_.find(std::make_pair(pid, sidx)); |
102 if (frame_it == frames_from_callback_.end()) { | 183 if (frame_it == frames_from_callback_.end()) { |
103 ADD_FAILURE() << "Could not find frame with picture id " << pid; | 184 ADD_FAILURE() << "Could not find frame with (pid:sidx): (" |
| 185 << pid << ":" << sidx << ")"; |
104 return; | 186 return; |
105 } | 187 } |
106 | 188 |
107 std::set<uint16_t> actual_refs; | 189 std::set<uint16_t> actual_refs; |
108 for (uint8_t r = 0; r < frame_it->second->num_references; ++r) { | 190 for (uint8_t r = 0; r < frame_it->second->num_references; ++r) { |
109 actual_refs.insert(frame_it->second->references[r]); | 191 actual_refs.insert(frame_it->second->references[r]); |
110 } | 192 } |
111 | 193 |
112 std::set<uint16_t> expected_refs; | 194 std::set<uint16_t> expected_refs; |
113 RefsToSet(&expected_refs, refs...); | 195 RefsToSet(&expected_refs, refs...); |
114 | 196 |
115 ASSERT_EQ(expected_refs, actual_refs); | 197 ASSERT_EQ(expected_refs, actual_refs); |
116 } | 198 } |
117 | 199 |
118 template <typename... T> | 200 template <typename... T> |
| 201 void CheckReferencesGeneric(uint16_t pid, T... refs) const { |
| 202 CheckReferences(pid, 0, refs...); |
| 203 } |
| 204 |
| 205 template <typename... T> |
| 206 void CheckReferencesVp8(uint16_t pid, T... refs) const { |
| 207 CheckReferences(pid, 0, refs...); |
| 208 } |
| 209 |
| 210 template <typename... T> |
| 211 void CheckReferencesVp9(uint16_t pid, uint8_t sidx, T... refs) const { |
| 212 CheckReferences(pid, sidx, refs...); |
| 213 } |
| 214 |
| 215 template <typename... T> |
119 void RefsToSet(std::set<uint16_t>* m, uint16_t ref, T... refs) const { | 216 void RefsToSet(std::set<uint16_t>* m, uint16_t ref, T... refs) const { |
120 m->insert(ref); | 217 m->insert(ref); |
121 RefsToSet(m, refs...); | 218 RefsToSet(m, refs...); |
122 } | 219 } |
123 | 220 |
124 void RefsToSet(std::set<uint16_t>* m) const {} | 221 void RefsToSet(std::set<uint16_t>* m) const {} |
125 | 222 |
126 const int kStartSize = 16; | 223 const int kStartSize = 16; |
127 const int kMaxSize = 64; | 224 const int kMaxSize = 64; |
128 | 225 |
129 Random rand_; | 226 Random rand_; |
130 std::unique_ptr<PacketBuffer> packet_buffer_; | 227 std::unique_ptr<PacketBuffer> packet_buffer_; |
131 std::map<uint16_t, std::unique_ptr<FrameObject>> frames_from_callback_; | 228 struct FrameComp { |
| 229 bool operator()(const std::pair<uint16_t, uint8_t> f1, |
| 230 const std::pair<uint16_t, uint8_t> f2) const { |
| 231 if (f1.first == f2.first) |
| 232 return f1.second < f2.second; |
| 233 return f1.first < f2.first; |
| 234 } |
| 235 }; |
| 236 std::map<std::pair<uint16_t, uint8_t>, |
| 237 std::unique_ptr<FrameObject>, |
| 238 FrameComp> frames_from_callback_; |
132 }; | 239 }; |
133 | 240 |
134 TEST_F(TestPacketBuffer, InsertOnePacket) { | 241 TEST_F(TestPacketBuffer, InsertOnePacket) { |
135 VCMPacket packet; | 242 VCMPacket packet; |
136 packet.seqNum = Rand(); | 243 packet.seqNum = Rand(); |
137 EXPECT_TRUE(packet_buffer_->InsertPacket(packet)); | 244 EXPECT_TRUE(packet_buffer_->InsertPacket(packet)); |
138 } | 245 } |
139 | 246 |
140 TEST_F(TestPacketBuffer, InsertMultiplePackets) { | 247 TEST_F(TestPacketBuffer, InsertMultiplePackets) { |
141 VCMPacket packet; | 248 VCMPacket packet; |
(...skipping 11 matching lines...) Expand all Loading... |
153 EXPECT_TRUE(packet_buffer_->InsertPacket(packet)); | 260 EXPECT_TRUE(packet_buffer_->InsertPacket(packet)); |
154 ++packet.seqNum; | 261 ++packet.seqNum; |
155 EXPECT_TRUE(packet_buffer_->InsertPacket(packet)); | 262 EXPECT_TRUE(packet_buffer_->InsertPacket(packet)); |
156 EXPECT_TRUE(packet_buffer_->InsertPacket(packet)); | 263 EXPECT_TRUE(packet_buffer_->InsertPacket(packet)); |
157 } | 264 } |
158 | 265 |
159 TEST_F(TestPacketBuffer, ExpandBuffer) { | 266 TEST_F(TestPacketBuffer, ExpandBuffer) { |
160 uint16_t seq_num = Rand(); | 267 uint16_t seq_num = Rand(); |
161 | 268 |
162 for (int i = 0; i < kStartSize + 1; ++i) { | 269 for (int i = 0; i < kStartSize + 1; ++i) { |
163 // seq_num , keyframe, first, last | 270 // seq_num , kf, frst, lst |
164 InsertGeneric(seq_num + i, true , true , true); | 271 InsertGeneric(seq_num + i, kT , kT, kT); |
165 } | 272 } |
166 } | 273 } |
167 | 274 |
168 TEST_F(TestPacketBuffer, ExpandBufferOverflow) { | 275 TEST_F(TestPacketBuffer, ExpandBufferOverflow) { |
169 uint16_t seq_num = Rand(); | 276 uint16_t seq_num = Rand(); |
170 | 277 |
171 for (int i = 0; i < kMaxSize; ++i) { | 278 for (int i = 0; i < kMaxSize; ++i) { |
172 // seq_num , keyframe, first, last | 279 // seq_num , kf, frst, lst |
173 InsertGeneric(seq_num + i, true , true , true); | 280 InsertGeneric(seq_num + i, kT, kT , kT); |
174 } | 281 } |
175 | 282 |
176 VCMPacket packet; | 283 VCMPacket packet; |
177 packet.seqNum = seq_num + kMaxSize + 1; | 284 packet.seqNum = seq_num + kMaxSize + 1; |
178 packet.sizeBytes = 1; | 285 packet.sizeBytes = 1; |
179 EXPECT_FALSE(packet_buffer_->InsertPacket(packet)); | 286 EXPECT_FALSE(packet_buffer_->InsertPacket(packet)); |
180 } | 287 } |
181 | 288 |
182 TEST_F(TestPacketBuffer, GenericOnePacketOneFrame) { | 289 TEST_F(TestPacketBuffer, GenericOnePacketOneFrame) { |
183 // seq_num, keyframe, first, last | 290 // seq_num, kf, frst, lst |
184 InsertGeneric(Rand() , true , true , true); | 291 InsertGeneric(Rand() , kT, kT , kT); |
185 ASSERT_EQ(1UL, frames_from_callback_.size()); | 292 ASSERT_EQ(1UL, frames_from_callback_.size()); |
186 } | 293 } |
187 | 294 |
188 TEST_F(TestPacketBuffer, GenericTwoPacketsTwoFrames) { | 295 TEST_F(TestPacketBuffer, GenericTwoPacketsTwoFrames) { |
189 uint16_t seq_num = Rand(); | 296 uint16_t seq_num = Rand(); |
190 | 297 |
191 // seq_num , keyframe, first, last | 298 // seq_num , kf, frst, lst |
192 InsertGeneric(seq_num , true , true , true); | 299 InsertGeneric(seq_num , kT, kT , kT); |
193 InsertGeneric(seq_num + 1, true , true , true); | 300 InsertGeneric(seq_num + 1, kT, kT , kT); |
194 | 301 |
195 EXPECT_EQ(2UL, frames_from_callback_.size()); | 302 EXPECT_EQ(2UL, frames_from_callback_.size()); |
196 } | 303 } |
197 | 304 |
198 TEST_F(TestPacketBuffer, GenericTwoPacketsOneFrames) { | 305 TEST_F(TestPacketBuffer, GenericTwoPacketsOneFrames) { |
199 uint16_t seq_num = Rand(); | 306 uint16_t seq_num = Rand(); |
200 | 307 |
201 // seq_num , keyframe, first, last | 308 // seq_num , kf, frst, lst |
202 InsertGeneric(seq_num , true , true , false); | 309 InsertGeneric(seq_num , kT, kT , kF); |
203 InsertGeneric(seq_num + 1, true , false, true); | 310 InsertGeneric(seq_num + 1, kT, kF , kT); |
204 | 311 |
205 EXPECT_EQ(1UL, frames_from_callback_.size()); | 312 EXPECT_EQ(1UL, frames_from_callback_.size()); |
206 } | 313 } |
207 | 314 |
208 TEST_F(TestPacketBuffer, GenericThreePacketReorderingOneFrame) { | 315 TEST_F(TestPacketBuffer, GenericThreePacketReorderingOneFrame) { |
209 uint16_t seq_num = Rand(); | 316 uint16_t seq_num = Rand(); |
210 | 317 |
211 // seq_num , keyframe, first, last | 318 // seq_num , kf, frst, lst |
212 InsertGeneric(seq_num , true , true , false); | 319 InsertGeneric(seq_num , kT, kT , kF); |
213 InsertGeneric(seq_num + 2, true , false, true); | 320 InsertGeneric(seq_num + 2, kT, kF , kT); |
214 InsertGeneric(seq_num + 1, true , false, false); | 321 InsertGeneric(seq_num + 1, kT, kF , kF); |
215 | 322 |
216 EXPECT_EQ(1UL, frames_from_callback_.size()); | 323 EXPECT_EQ(1UL, frames_from_callback_.size()); |
217 } | 324 } |
218 | 325 |
219 TEST_F(TestPacketBuffer, DiscardOldPacket) { | 326 TEST_F(TestPacketBuffer, DiscardOldPacket) { |
220 uint16_t seq_num = Rand(); | 327 uint16_t seq_num = Rand(); |
221 VCMPacket packet; | 328 VCMPacket packet; |
222 packet.seqNum = Rand(); | 329 packet.seqNum = Rand(); |
223 EXPECT_TRUE(packet_buffer_->InsertPacket(packet)); | 330 EXPECT_TRUE(packet_buffer_->InsertPacket(packet)); |
224 packet.seqNum += 2; | 331 packet.seqNum += 2; |
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
262 TEST_F(TestPacketBuffer, GenericFrames) { | 369 TEST_F(TestPacketBuffer, GenericFrames) { |
263 uint16_t seq_num = Rand(); | 370 uint16_t seq_num = Rand(); |
264 | 371 |
265 // seq_num , keyf , first, last | 372 // seq_num , keyf , first, last |
266 InsertGeneric(seq_num , true , true , true); | 373 InsertGeneric(seq_num , true , true , true); |
267 InsertGeneric(seq_num + 1, false, true , true); | 374 InsertGeneric(seq_num + 1, false, true , true); |
268 InsertGeneric(seq_num + 2, false, true , true); | 375 InsertGeneric(seq_num + 2, false, true , true); |
269 InsertGeneric(seq_num + 3, false, true , true); | 376 InsertGeneric(seq_num + 3, false, true , true); |
270 | 377 |
271 ASSERT_EQ(4UL, frames_from_callback_.size()); | 378 ASSERT_EQ(4UL, frames_from_callback_.size()); |
272 CheckReferences(seq_num); | 379 CheckReferencesGeneric(seq_num); |
273 CheckReferences(seq_num + 1, seq_num); | 380 CheckReferencesGeneric(seq_num + 1, seq_num); |
274 CheckReferences(seq_num + 2, seq_num + 1); | 381 CheckReferencesGeneric(seq_num + 2, seq_num + 1); |
275 CheckReferences(seq_num + 3, seq_num + 2); | 382 CheckReferencesGeneric(seq_num + 3, seq_num + 2); |
276 } | 383 } |
277 | 384 |
278 TEST_F(TestPacketBuffer, GenericFramesReordered) { | 385 TEST_F(TestPacketBuffer, GenericFramesReordered) { |
279 uint16_t seq_num = Rand(); | 386 uint16_t seq_num = Rand(); |
280 | 387 |
281 // seq_num , keyf , first, last | 388 // seq_num , keyf , first, last |
282 InsertGeneric(seq_num + 1, false, true , true); | 389 InsertGeneric(seq_num + 1, false, true , true); |
283 InsertGeneric(seq_num , true , true , true); | 390 InsertGeneric(seq_num , true , true , true); |
284 InsertGeneric(seq_num + 3, false, true , true); | 391 InsertGeneric(seq_num + 3, false, true , true); |
285 InsertGeneric(seq_num + 2, false, true , true); | 392 InsertGeneric(seq_num + 2, false, true , true); |
286 | 393 |
287 ASSERT_EQ(4UL, frames_from_callback_.size()); | 394 ASSERT_EQ(4UL, frames_from_callback_.size()); |
288 CheckReferences(seq_num); | 395 CheckReferencesGeneric(seq_num); |
289 CheckReferences(seq_num + 1, seq_num); | 396 CheckReferencesGeneric(seq_num + 1, seq_num); |
290 CheckReferences(seq_num + 2, seq_num + 1); | 397 CheckReferencesGeneric(seq_num + 2, seq_num + 1); |
291 CheckReferences(seq_num + 3, seq_num + 2); | 398 CheckReferencesGeneric(seq_num + 3, seq_num + 2); |
292 } | 399 } |
293 | 400 |
294 TEST_F(TestPacketBuffer, GetBitstreamFromFrame) { | 401 TEST_F(TestPacketBuffer, GetBitstreamFromFrame) { |
295 // "many bitstream, such data" with null termination. | 402 // "many bitstream, such data" with null termination. |
296 uint8_t many[] = {0x6d, 0x61, 0x6e, 0x79, 0x20}; | 403 uint8_t many[] = {0x6d, 0x61, 0x6e, 0x79, 0x20}; |
297 uint8_t bitstream[] = {0x62, 0x69, 0x74, 0x73, 0x74, 0x72, | 404 uint8_t bitstream[] = {0x62, 0x69, 0x74, 0x73, 0x74, 0x72, |
298 0x65, 0x61, 0x6d, 0x2c, 0x20}; | 405 0x65, 0x61, 0x6d, 0x2c, 0x20}; |
299 uint8_t such[] = {0x73, 0x75, 0x63, 0x68, 0x20}; | 406 uint8_t such[] = {0x73, 0x75, 0x63, 0x68, 0x20}; |
300 uint8_t data[] = {0x64, 0x61, 0x74, 0x61, 0x0}; | 407 uint8_t data[] = {0x64, 0x61, 0x74, 0x61, 0x0}; |
301 uint8_t | 408 uint8_t |
302 result[sizeof(many) + sizeof(bitstream) + sizeof(such) + sizeof(data)]; | 409 result[sizeof(many) + sizeof(bitstream) + sizeof(such) + sizeof(data)]; |
303 | 410 |
304 uint16_t seq_num = Rand(); | 411 uint16_t seq_num = Rand(); |
305 | 412 |
306 // seq_num , keyf , first, last , data_size , data | 413 // seq_num , kf, frst, lst, data_size , data |
307 InsertGeneric(seq_num , true , true , false, sizeof(many) , many); | 414 InsertGeneric(seq_num , kT, kT , kF , sizeof(many) , many); |
308 InsertGeneric(seq_num + 1, false, false, false, sizeof(bitstream), bitstream); | 415 InsertGeneric(seq_num + 1, kF, kF , kF , sizeof(bitstream), bitstream); |
309 InsertGeneric(seq_num + 2, false, false, false, sizeof(such) , such); | 416 InsertGeneric(seq_num + 2, kF, kF , kF , sizeof(such) , such); |
310 InsertGeneric(seq_num + 3, false, false, true , sizeof(data) , data); | 417 InsertGeneric(seq_num + 3, kF, kF , kT , sizeof(data) , data); |
311 | 418 |
312 ASSERT_EQ(1UL, frames_from_callback_.size()); | 419 ASSERT_EQ(1UL, frames_from_callback_.size()); |
313 CheckReferences(seq_num + 3); | 420 CheckReferencesVp8(seq_num + 3); |
314 EXPECT_TRUE(frames_from_callback_[seq_num + 3]->GetBitstream(result)); | 421 EXPECT_TRUE(frames_from_callback_[std::make_pair(seq_num + 3, 0)]-> |
| 422 GetBitstream(result)); |
315 EXPECT_EQ(std::strcmp("many bitstream, such data", | 423 EXPECT_EQ(std::strcmp("many bitstream, such data", |
316 reinterpret_cast<char*>(result)), | 424 reinterpret_cast<char*>(result)), |
317 0); | 425 0); |
318 } | 426 } |
319 | 427 |
320 TEST_F(TestPacketBuffer, FreeSlotsOnFrameDestruction) { | 428 TEST_F(TestPacketBuffer, FreeSlotsOnFrameDestruction) { |
321 uint16_t seq_num = Rand(); | 429 uint16_t seq_num = Rand(); |
322 | 430 |
323 // seq_num , keyf , first, last | 431 // seq_num , kf, frst, lst |
324 InsertGeneric(seq_num , true , true , false); | 432 InsertGeneric(seq_num , kT, kT , kF); |
325 InsertGeneric(seq_num + 1, false, false, false); | 433 InsertGeneric(seq_num + 1, kF, kF , kF); |
326 InsertGeneric(seq_num + 2, false, false, true); | 434 InsertGeneric(seq_num + 2, kF, kF , kT); |
327 EXPECT_EQ(1UL, frames_from_callback_.size()); | 435 EXPECT_EQ(1UL, frames_from_callback_.size()); |
328 | 436 |
329 frames_from_callback_.clear(); | 437 frames_from_callback_.clear(); |
330 | 438 |
331 // seq_num , keyf , first, last | 439 // seq_num , kf, frst, lst |
332 InsertGeneric(seq_num , true , true , false); | 440 InsertGeneric(seq_num , kT, kT , kF); |
333 InsertGeneric(seq_num + 1, false, false, false); | 441 InsertGeneric(seq_num + 1, kF, kF , kF); |
334 InsertGeneric(seq_num + 2, false, false, true); | 442 InsertGeneric(seq_num + 2, kF, kF , kT); |
335 EXPECT_EQ(1UL, frames_from_callback_.size()); | 443 EXPECT_EQ(1UL, frames_from_callback_.size()); |
336 } | 444 } |
337 | 445 |
338 TEST_F(TestPacketBuffer, Flush) { | 446 TEST_F(TestPacketBuffer, Flush) { |
339 uint16_t seq_num = Rand(); | 447 uint16_t seq_num = Rand(); |
340 | 448 |
341 // seq_num , keyf , first, last | 449 // seq_num , kf, frst, lst |
342 InsertGeneric(seq_num , true , true , false); | 450 InsertGeneric(seq_num , kT, kT , kF); |
343 InsertGeneric(seq_num + 1, false, false, false); | 451 InsertGeneric(seq_num + 1, kF, kF , kF); |
344 InsertGeneric(seq_num + 2, false, false, true); | 452 InsertGeneric(seq_num + 2, kF, kF , kT); |
345 EXPECT_EQ(1UL, frames_from_callback_.size()); | 453 EXPECT_EQ(1UL, frames_from_callback_.size()); |
346 | 454 |
347 packet_buffer_->Flush(); | 455 packet_buffer_->Flush(); |
348 | 456 |
349 // seq_num , keyf , first, last | 457 // seq_num , kf, frst, lst |
350 InsertGeneric(seq_num + kStartSize , true , true , false); | 458 InsertGeneric(seq_num + kStartSize , kT, kT , kF); |
351 InsertGeneric(seq_num + kStartSize + 1, false, false, false); | 459 InsertGeneric(seq_num + kStartSize + 1, kF, kF , kF); |
352 InsertGeneric(seq_num + kStartSize + 2, false, false, true); | 460 InsertGeneric(seq_num + kStartSize + 2, kF, kF , kT); |
353 EXPECT_EQ(2UL, frames_from_callback_.size()); | 461 EXPECT_EQ(2UL, frames_from_callback_.size()); |
354 } | 462 } |
355 | 463 |
356 TEST_F(TestPacketBuffer, InvalidateFrameByFlushing) { | 464 TEST_F(TestPacketBuffer, InvalidateFrameByFlushing) { |
357 VCMPacket packet; | 465 VCMPacket packet; |
358 packet.codec = kVideoCodecGeneric; | 466 packet.codec = kVideoCodecGeneric; |
359 packet.frameType = kVideoFrameKey; | 467 packet.frameType = kVideoFrameKey; |
360 packet.isFirstPacket = true; | 468 packet.isFirstPacket = kT; |
361 packet.markerBit = true; | 469 packet.markerBit = kT; |
362 packet.seqNum = Rand(); | 470 packet.seqNum = Rand(); |
363 EXPECT_TRUE(packet_buffer_->InsertPacket(packet)); | 471 EXPECT_TRUE(packet_buffer_->InsertPacket(packet)); |
364 ASSERT_EQ(1UL, frames_from_callback_.size()); | 472 ASSERT_EQ(1UL, frames_from_callback_.size()); |
365 | 473 |
366 packet_buffer_->Flush(); | 474 packet_buffer_->Flush(); |
367 EXPECT_FALSE(frames_from_callback_.begin()->second->GetBitstream(nullptr)); | 475 EXPECT_FALSE(frames_from_callback_.begin()->second->GetBitstream(nullptr)); |
368 } | 476 } |
369 | 477 |
370 TEST_F(TestPacketBuffer, Vp8NoPictureId) { | 478 TEST_F(TestPacketBuffer, Vp8NoPictureId) { |
371 uint16_t seq_num = Rand(); | 479 uint16_t seq_num = Rand(); |
372 | 480 |
373 // seq_num , keyf , first, last | 481 // seq_num , kf, frst, lst |
374 InsertVp8(seq_num , true , true , false); | 482 InsertVp8(seq_num , kT, kT , kF); |
375 InsertVp8(seq_num + 1 , false, false, false); | 483 InsertVp8(seq_num + 1 , kF, kF , kF); |
376 InsertVp8(seq_num + 2 , false, false, true); | 484 InsertVp8(seq_num + 2 , kF, kF , kT); |
377 ASSERT_EQ(1UL, frames_from_callback_.size()); | 485 ASSERT_EQ(1UL, frames_from_callback_.size()); |
378 | 486 |
379 InsertVp8(seq_num + 3 , false, true , false); | 487 InsertVp8(seq_num + 3 , kF, kT , kF); |
380 InsertVp8(seq_num + 4 , false, false, true); | 488 InsertVp8(seq_num + 4 , kF, kF , kT); |
381 ASSERT_EQ(2UL, frames_from_callback_.size()); | 489 ASSERT_EQ(2UL, frames_from_callback_.size()); |
382 | 490 |
383 InsertVp8(seq_num + 5 , false, true , false); | 491 InsertVp8(seq_num + 5 , kF, kT , kF); |
384 InsertVp8(seq_num + 6 , false, false, false); | 492 InsertVp8(seq_num + 6 , kF, kF , kF); |
385 InsertVp8(seq_num + 7 , false, false, false); | 493 InsertVp8(seq_num + 7 , kF, kF , kF); |
386 InsertVp8(seq_num + 8 , false, false, true); | 494 InsertVp8(seq_num + 8 , kF, kF , kT); |
387 ASSERT_EQ(3UL, frames_from_callback_.size()); | 495 ASSERT_EQ(3UL, frames_from_callback_.size()); |
388 | 496 |
389 InsertVp8(seq_num + 9 , false, true , true); | 497 InsertVp8(seq_num + 9 , kF, kT , kT); |
390 ASSERT_EQ(4UL, frames_from_callback_.size()); | 498 ASSERT_EQ(4UL, frames_from_callback_.size()); |
391 | 499 |
392 InsertVp8(seq_num + 10, false, true , false); | 500 InsertVp8(seq_num + 10, kF, kT , kF); |
393 InsertVp8(seq_num + 11, false, false, true); | 501 InsertVp8(seq_num + 11, kF, kF , kT); |
394 ASSERT_EQ(5UL, frames_from_callback_.size()); | 502 ASSERT_EQ(5UL, frames_from_callback_.size()); |
395 | 503 |
396 InsertVp8(seq_num + 12, true , true , true); | 504 InsertVp8(seq_num + 12, kT, kT , kT); |
397 ASSERT_EQ(6UL, frames_from_callback_.size()); | 505 ASSERT_EQ(6UL, frames_from_callback_.size()); |
398 | 506 |
399 InsertVp8(seq_num + 13, false, true , false); | 507 InsertVp8(seq_num + 13, kF, kT , kF); |
400 InsertVp8(seq_num + 14, false, false, false); | 508 InsertVp8(seq_num + 14, kF, kF , kF); |
401 InsertVp8(seq_num + 15, false, false, false); | 509 InsertVp8(seq_num + 15, kF, kF , kF); |
402 InsertVp8(seq_num + 16, false, false, false); | 510 InsertVp8(seq_num + 16, kF, kF , kF); |
403 InsertVp8(seq_num + 17, false, false, true); | 511 InsertVp8(seq_num + 17, kF, kF , kT); |
404 ASSERT_EQ(7UL, frames_from_callback_.size()); | 512 ASSERT_EQ(7UL, frames_from_callback_.size()); |
405 | 513 |
406 InsertVp8(seq_num + 18, false, true , true); | 514 InsertVp8(seq_num + 18, kF, kT , kT); |
407 ASSERT_EQ(8UL, frames_from_callback_.size()); | 515 ASSERT_EQ(8UL, frames_from_callback_.size()); |
408 | 516 |
409 InsertVp8(seq_num + 19, false, true , false); | 517 InsertVp8(seq_num + 19, kF, kT , kF); |
410 InsertVp8(seq_num + 20, false, false, true); | 518 InsertVp8(seq_num + 20, kF, kF , kT); |
411 ASSERT_EQ(9UL, frames_from_callback_.size()); | 519 ASSERT_EQ(9UL, frames_from_callback_.size()); |
412 | 520 |
413 InsertVp8(seq_num + 21, false, true , true); | 521 InsertVp8(seq_num + 21, kF, kT , kT); |
414 | 522 |
415 ASSERT_EQ(10UL, frames_from_callback_.size()); | 523 ASSERT_EQ(10UL, frames_from_callback_.size()); |
416 CheckReferences(seq_num + 2); | 524 CheckReferencesVp8(seq_num + 2); |
417 CheckReferences(seq_num + 4, seq_num + 2); | 525 CheckReferencesVp8(seq_num + 4, seq_num + 2); |
418 CheckReferences(seq_num + 8, seq_num + 4); | 526 CheckReferencesVp8(seq_num + 8, seq_num + 4); |
419 CheckReferences(seq_num + 9, seq_num + 8); | 527 CheckReferencesVp8(seq_num + 9, seq_num + 8); |
420 CheckReferences(seq_num + 11, seq_num + 9); | 528 CheckReferencesVp8(seq_num + 11, seq_num + 9); |
421 CheckReferences(seq_num + 12); | 529 CheckReferencesVp8(seq_num + 12); |
422 CheckReferences(seq_num + 17, seq_num + 12); | 530 CheckReferencesVp8(seq_num + 17, seq_num + 12); |
423 CheckReferences(seq_num + 18, seq_num + 17); | 531 CheckReferencesVp8(seq_num + 18, seq_num + 17); |
424 CheckReferences(seq_num + 20, seq_num + 18); | 532 CheckReferencesVp8(seq_num + 20, seq_num + 18); |
425 CheckReferences(seq_num + 21, seq_num + 20); | 533 CheckReferencesVp8(seq_num + 21, seq_num + 20); |
426 } | 534 } |
427 | 535 |
428 TEST_F(TestPacketBuffer, Vp8NoPictureIdReordered) { | 536 TEST_F(TestPacketBuffer, Vp8NoPictureIdReordered) { |
429 uint16_t seq_num = 0xfffa; | 537 uint16_t seq_num = 0xfffa; |
430 | 538 |
431 // seq_num , keyf , first, last | 539 // seq_num , kf, frst, lst |
432 InsertVp8(seq_num + 1 , false, false, false); | 540 InsertVp8(seq_num + 1 , kF, kF , kF); |
433 InsertVp8(seq_num , true , true , false); | 541 InsertVp8(seq_num , kT, kT , kF); |
434 InsertVp8(seq_num + 2 , false, false, true); | 542 InsertVp8(seq_num + 2 , kF, kF , kT); |
435 InsertVp8(seq_num + 4 , false, false, true); | 543 InsertVp8(seq_num + 4 , kF, kF , kT); |
436 InsertVp8(seq_num + 6 , false, false, false); | 544 InsertVp8(seq_num + 6 , kF, kF , kF); |
437 InsertVp8(seq_num + 3 , false, true , false); | 545 InsertVp8(seq_num + 3 , kF, kT , kF); |
438 InsertVp8(seq_num + 7 , false, false, false); | 546 InsertVp8(seq_num + 7 , kF, kF , kF); |
439 InsertVp8(seq_num + 5 , false, true , false); | 547 InsertVp8(seq_num + 5 , kF, kT , kF); |
440 InsertVp8(seq_num + 9 , false, true , true); | 548 InsertVp8(seq_num + 9 , kF, kT , kT); |
441 InsertVp8(seq_num + 10, false, true , false); | 549 InsertVp8(seq_num + 10, kF, kT , kF); |
442 InsertVp8(seq_num + 8 , false, false, true); | 550 InsertVp8(seq_num + 8 , kF, kF , kT); |
443 InsertVp8(seq_num + 13, false, true , false); | 551 InsertVp8(seq_num + 13, kF, kT , kF); |
444 InsertVp8(seq_num + 14, false, false, false); | 552 InsertVp8(seq_num + 14, kF, kF , kF); |
445 InsertVp8(seq_num + 12, true , true , true); | 553 InsertVp8(seq_num + 12, kT, kT , kT); |
446 InsertVp8(seq_num + 11, false, false, true); | 554 InsertVp8(seq_num + 11, kF, kF , kT); |
447 InsertVp8(seq_num + 16, false, false, false); | 555 InsertVp8(seq_num + 16, kF, kF , kF); |
448 InsertVp8(seq_num + 19, false, true , false); | 556 InsertVp8(seq_num + 19, kF, kT , kF); |
449 InsertVp8(seq_num + 15, false, false, false); | 557 InsertVp8(seq_num + 15, kF, kF , kF); |
450 InsertVp8(seq_num + 17, false, false, true); | 558 InsertVp8(seq_num + 17, kF, kF , kT); |
451 InsertVp8(seq_num + 20, false, false, true); | 559 InsertVp8(seq_num + 20, kF, kF , kT); |
452 InsertVp8(seq_num + 21, false, true , true); | 560 InsertVp8(seq_num + 21, kF, kT , kT); |
453 InsertVp8(seq_num + 18, false, true , true); | 561 InsertVp8(seq_num + 18, kF, kT , kT); |
454 | 562 |
455 ASSERT_EQ(10UL, frames_from_callback_.size()); | 563 ASSERT_EQ(10UL, frames_from_callback_.size()); |
456 CheckReferences(seq_num + 2); | 564 CheckReferencesVp8(seq_num + 2); |
457 CheckReferences(seq_num + 4, seq_num + 2); | 565 CheckReferencesVp8(seq_num + 4, seq_num + 2); |
458 CheckReferences(seq_num + 8, seq_num + 4); | 566 CheckReferencesVp8(seq_num + 8, seq_num + 4); |
459 CheckReferences(seq_num + 9, seq_num + 8); | 567 CheckReferencesVp8(seq_num + 9, seq_num + 8); |
460 CheckReferences(seq_num + 11, seq_num + 9); | 568 CheckReferencesVp8(seq_num + 11, seq_num + 9); |
461 CheckReferences(seq_num + 12); | 569 CheckReferencesVp8(seq_num + 12); |
462 CheckReferences(seq_num + 17, seq_num + 12); | 570 CheckReferencesVp8(seq_num + 17, seq_num + 12); |
463 CheckReferences(seq_num + 18, seq_num + 17); | 571 CheckReferencesVp8(seq_num + 18, seq_num + 17); |
464 CheckReferences(seq_num + 20, seq_num + 18); | 572 CheckReferencesVp8(seq_num + 20, seq_num + 18); |
465 CheckReferences(seq_num + 21, seq_num + 20); | 573 CheckReferencesVp8(seq_num + 21, seq_num + 20); |
466 } | 574 } |
467 | 575 |
468 | 576 |
469 TEST_F(TestPacketBuffer, Vp8KeyFrameReferences) { | 577 TEST_F(TestPacketBuffer, Vp8KeyFrameReferences) { |
470 uint16_t pid = Rand(); | 578 uint16_t pid = Rand(); |
471 // seq_num, keyf, first, last, sync , pid, tid, tl0 | 579 // seq_num, kf, frst, lst, sync, pid, tid, tl0 |
472 InsertVp8(Rand() , true, true , true, false, pid, 0 , 0); | 580 InsertVp8(Rand() , kT, kT , kT , kF , pid, 0 , 0); |
473 | 581 |
474 ASSERT_EQ(1UL, frames_from_callback_.size()); | 582 ASSERT_EQ(1UL, frames_from_callback_.size()); |
475 CheckReferences(pid); | 583 CheckReferencesVp8(pid); |
476 } | 584 } |
477 | 585 |
478 // Test with 1 temporal layer. | 586 // Test with 1 temporal layer. |
479 TEST_F(TestPacketBuffer, Vp8TemporalLayers_0) { | 587 TEST_F(TestPacketBuffer, Vp8TemporalLayers_0) { |
480 uint16_t pid = Rand(); | 588 uint16_t pid = Rand(); |
481 uint16_t seq_num = Rand(); | 589 uint16_t seq_num = Rand(); |
482 | 590 |
483 // seq_num , keyf , first, last, sync , pid , tid, tl0 | 591 // seq_num , kf, frst, lst, sync, pid , tid, tl0 |
484 InsertVp8(seq_num , true , true , true, false, pid , 0 , 1); | 592 InsertVp8(seq_num , kT, kT , kT , kF , pid , 0 , 1); |
485 InsertVp8(seq_num + 1, false, true , true, false, pid + 1, 0 , 2); | 593 InsertVp8(seq_num + 1, kF, kT , kT , kF , pid + 1, 0 , 2); |
486 InsertVp8(seq_num + 2, false, true , true, false, pid + 2, 0 , 3); | 594 InsertVp8(seq_num + 2, kF, kT , kT , kF , pid + 2, 0 , 3); |
487 InsertVp8(seq_num + 3, false, true , true, false, pid + 3, 0 , 4); | 595 InsertVp8(seq_num + 3, kF, kT , kT , kF , pid + 3, 0 , 4); |
488 | 596 |
489 ASSERT_EQ(4UL, frames_from_callback_.size()); | 597 ASSERT_EQ(4UL, frames_from_callback_.size()); |
490 CheckReferences(pid); | 598 CheckReferencesVp8(pid); |
491 CheckReferences(pid + 1, pid); | 599 CheckReferencesVp8(pid + 1, pid); |
492 CheckReferences(pid + 2, pid + 1); | 600 CheckReferencesVp8(pid + 2, pid + 1); |
493 CheckReferences(pid + 3, pid + 2); | 601 CheckReferencesVp8(pid + 3, pid + 2); |
494 } | 602 } |
495 | 603 |
496 // Test with 1 temporal layer. | 604 // Test with 1 temporal layer. |
497 TEST_F(TestPacketBuffer, Vp8TemporalLayersReordering_0) { | 605 TEST_F(TestPacketBuffer, Vp8TemporalLayersReordering_0) { |
498 uint16_t pid = Rand(); | 606 uint16_t pid = Rand(); |
499 uint16_t seq_num = Rand(); | 607 uint16_t seq_num = Rand(); |
500 | 608 |
501 // seq_num , keyf , first, last, sync , pid , tid, tl0 | 609 // seq_num , kf, frst, lst, sync, pid , tid, tl0 |
502 InsertVp8(seq_num , true , true , true, false, pid , 0 , 1); | 610 InsertVp8(seq_num , kT, kT , kT , kF , pid , 0 , 1); |
503 InsertVp8(seq_num + 1, false, true , true, false, pid + 1, 0 , 2); | 611 InsertVp8(seq_num + 1, kF, kT , kT , kF , pid + 1, 0 , 2); |
504 InsertVp8(seq_num + 3, false, true , true, false, pid + 3, 0 , 4); | 612 InsertVp8(seq_num + 3, kF, kT , kT , kF , pid + 3, 0 , 4); |
505 InsertVp8(seq_num + 2, false, true , true, false, pid + 2, 0 , 3); | 613 InsertVp8(seq_num + 2, kF, kT , kT , kF , pid + 2, 0 , 3); |
506 InsertVp8(seq_num + 5, false, true , true, false, pid + 5, 0 , 6); | 614 InsertVp8(seq_num + 5, kF, kT , kT , kF , pid + 5, 0 , 6); |
507 InsertVp8(seq_num + 6, false, true , true, false, pid + 6, 0 , 7); | 615 InsertVp8(seq_num + 6, kF, kT , kT , kF , pid + 6, 0 , 7); |
508 InsertVp8(seq_num + 4, false, true , true, false, pid + 4, 0 , 5); | 616 InsertVp8(seq_num + 4, kF, kT , kT , kF , pid + 4, 0 , 5); |
509 | 617 |
510 ASSERT_EQ(7UL, frames_from_callback_.size()); | 618 ASSERT_EQ(7UL, frames_from_callback_.size()); |
511 CheckReferences(pid); | 619 CheckReferencesVp8(pid); |
512 CheckReferences(pid + 1, pid); | 620 CheckReferencesVp8(pid + 1, pid); |
513 CheckReferences(pid + 2, pid + 1); | 621 CheckReferencesVp8(pid + 2, pid + 1); |
514 CheckReferences(pid + 3, pid + 2); | 622 CheckReferencesVp8(pid + 3, pid + 2); |
515 CheckReferences(pid + 4, pid + 3); | 623 CheckReferencesVp8(pid + 4, pid + 3); |
516 CheckReferences(pid + 5, pid + 4); | 624 CheckReferencesVp8(pid + 5, pid + 4); |
517 CheckReferences(pid + 6, pid + 5); | 625 CheckReferencesVp8(pid + 6, pid + 5); |
518 } | 626 } |
519 | 627 |
520 // Test with 2 temporal layers in a 01 pattern. | 628 // Test with 2 temporal layers in a 01 pattern. |
521 TEST_F(TestPacketBuffer, Vp8TemporalLayers_01) { | 629 TEST_F(TestPacketBuffer, Vp8TemporalLayers_01) { |
522 uint16_t pid = Rand(); | 630 uint16_t pid = Rand(); |
523 uint16_t seq_num = Rand(); | 631 uint16_t seq_num = Rand(); |
524 | 632 |
525 // seq_num , keyf , first, last, sync , pid , tid, tl0 | 633 // seq_num , kf, frst, lst, sync, pid , tid, tl0 |
526 InsertVp8(seq_num , true , true , true, false, pid , 0, 255); | 634 InsertVp8(seq_num , kT, kT , kT , kF , pid , 0, 255); |
527 InsertVp8(seq_num + 1, false, true , true, true , pid + 1, 1, 255); | 635 InsertVp8(seq_num + 1, kF, kT , kT , kT , pid + 1, 1, 255); |
528 InsertVp8(seq_num + 2, false, true , true, false, pid + 2, 0, 0); | 636 InsertVp8(seq_num + 2, kF, kT , kT , kF , pid + 2, 0, 0); |
529 InsertVp8(seq_num + 3, false, true , true, false, pid + 3, 1, 0); | 637 InsertVp8(seq_num + 3, kF, kT , kT , kF , pid + 3, 1, 0); |
530 | 638 |
531 ASSERT_EQ(4UL, frames_from_callback_.size()); | 639 ASSERT_EQ(4UL, frames_from_callback_.size()); |
532 CheckReferences(pid); | 640 CheckReferencesVp8(pid); |
533 CheckReferences(pid + 1, pid); | 641 CheckReferencesVp8(pid + 1, pid); |
534 CheckReferences(pid + 2, pid); | 642 CheckReferencesVp8(pid + 2, pid); |
535 CheckReferences(pid + 3, pid + 1, pid + 2); | 643 CheckReferencesVp8(pid + 3, pid + 1, pid + 2); |
536 } | 644 } |
537 | 645 |
538 // Test with 2 temporal layers in a 01 pattern. | 646 // Test with 2 temporal layers in a 01 pattern. |
539 TEST_F(TestPacketBuffer, Vp8TemporalLayersReordering_01) { | 647 TEST_F(TestPacketBuffer, Vp8TemporalLayersReordering_01) { |
540 uint16_t pid = Rand(); | 648 uint16_t pid = Rand(); |
541 uint16_t seq_num = Rand(); | 649 uint16_t seq_num = Rand(); |
542 | 650 |
543 // seq_num , keyf , first, last, sync , pid , tid, tl0 | 651 // seq_num , kf, frst, lst, sync, pid , tid, tl0 |
544 InsertVp8(seq_num + 1, false, true , true, true , pid + 1, 1 , 255); | 652 InsertVp8(seq_num + 1, kF, kT , kT , kT , pid + 1, 1 , 255); |
545 InsertVp8(seq_num , true , true , true, false, pid , 0 , 255); | 653 InsertVp8(seq_num , kT, kT , kT , kF , pid , 0 , 255); |
546 InsertVp8(seq_num + 3, false, true , true, false, pid + 3, 1 , 0); | 654 InsertVp8(seq_num + 3, kF, kT , kT , kF , pid + 3, 1 , 0); |
547 InsertVp8(seq_num + 5, false, true , true, false, pid + 5, 1 , 1); | 655 InsertVp8(seq_num + 5, kF, kT , kT , kF , pid + 5, 1 , 1); |
548 InsertVp8(seq_num + 2, false, true , true, false, pid + 2, 0 , 0); | 656 InsertVp8(seq_num + 2, kF, kT , kT , kF , pid + 2, 0 , 0); |
549 InsertVp8(seq_num + 4, false, true , true, false, pid + 4, 0 , 1); | 657 InsertVp8(seq_num + 4, kF, kT , kT , kF , pid + 4, 0 , 1); |
550 InsertVp8(seq_num + 6, false, true , true, false, pid + 6, 0 , 2); | 658 InsertVp8(seq_num + 6, kF, kT , kT , kF , pid + 6, 0 , 2); |
551 InsertVp8(seq_num + 7, false, true , true, false, pid + 7, 1 , 2); | 659 InsertVp8(seq_num + 7, kF, kT , kT , kF , pid + 7, 1 , 2); |
552 | 660 |
553 ASSERT_EQ(8UL, frames_from_callback_.size()); | 661 ASSERT_EQ(8UL, frames_from_callback_.size()); |
554 CheckReferences(pid); | 662 CheckReferencesVp8(pid); |
555 CheckReferences(pid + 1, pid); | 663 CheckReferencesVp8(pid + 1, pid); |
556 CheckReferences(pid + 2, pid); | 664 CheckReferencesVp8(pid + 2, pid); |
557 CheckReferences(pid + 3, pid + 1, pid + 2); | 665 CheckReferencesVp8(pid + 3, pid + 1, pid + 2); |
558 CheckReferences(pid + 4, pid + 2); | 666 CheckReferencesVp8(pid + 4, pid + 2); |
559 CheckReferences(pid + 5, pid + 3, pid + 4); | 667 CheckReferencesVp8(pid + 5, pid + 3, pid + 4); |
560 CheckReferences(pid + 6, pid + 4); | 668 CheckReferencesVp8(pid + 6, pid + 4); |
561 CheckReferences(pid + 7, pid + 5, pid + 6); | 669 CheckReferencesVp8(pid + 7, pid + 5, pid + 6); |
562 } | 670 } |
563 | 671 |
564 // Test with 3 temporal layers in a 0212 pattern. | 672 // Test with 3 temporal layers in a 0212 pattern. |
565 TEST_F(TestPacketBuffer, Vp8TemporalLayers_0212) { | 673 TEST_F(TestPacketBuffer, Vp8TemporalLayers_0212) { |
566 uint16_t pid = Rand(); | 674 uint16_t pid = Rand(); |
567 uint16_t seq_num = Rand(); | 675 uint16_t seq_num = Rand(); |
568 | 676 |
569 // seq_num , keyf , first, last, sync , pid , tid, tl0 | 677 // seq_num , kf, frst, lst, sync, pid , tid, tl0 |
570 InsertVp8(seq_num , true , true , true , false, pid , 0 , 55); | 678 InsertVp8(seq_num , kT, kT , kT , kF , pid , 0 , 55); |
571 InsertVp8(seq_num + 1 , false, true , true , true , pid + 1 , 2 , 55); | 679 InsertVp8(seq_num + 1 , kF, kT , kT , kT , pid + 1 , 2 , 55); |
572 InsertVp8(seq_num + 2 , false, true , true , true , pid + 2 , 1 , 55); | 680 InsertVp8(seq_num + 2 , kF, kT , kT , kT , pid + 2 , 1 , 55); |
573 InsertVp8(seq_num + 3 , false, true , true , false, pid + 3 , 2 , 55); | 681 InsertVp8(seq_num + 3 , kF, kT , kT , kF , pid + 3 , 2 , 55); |
574 InsertVp8(seq_num + 4 , false, true , true , false, pid + 4 , 0 , 56); | 682 InsertVp8(seq_num + 4 , kF, kT , kT , kF , pid + 4 , 0 , 56); |
575 InsertVp8(seq_num + 5 , false, true , true , false, pid + 5 , 2 , 56); | 683 InsertVp8(seq_num + 5 , kF, kT , kT , kF , pid + 5 , 2 , 56); |
576 InsertVp8(seq_num + 6 , false, true , true , false, pid + 6 , 1 , 56); | 684 InsertVp8(seq_num + 6 , kF, kT , kT , kF , pid + 6 , 1 , 56); |
577 InsertVp8(seq_num + 7 , false, true , true , false, pid + 7 , 2 , 56); | 685 InsertVp8(seq_num + 7 , kF, kT , kT , kF , pid + 7 , 2 , 56); |
578 InsertVp8(seq_num + 8 , false, true , true , false, pid + 8 , 0 , 57); | 686 InsertVp8(seq_num + 8 , kF, kT , kT , kF , pid + 8 , 0 , 57); |
579 InsertVp8(seq_num + 9 , false, true , true , true , pid + 9 , 2 , 57); | 687 InsertVp8(seq_num + 9 , kF, kT , kT , kT , pid + 9 , 2 , 57); |
580 InsertVp8(seq_num + 10, false, true , true , true , pid + 10, 1 , 57); | 688 InsertVp8(seq_num + 10, kF, kT , kT , kT , pid + 10, 1 , 57); |
581 InsertVp8(seq_num + 11, false, true , true , false, pid + 11, 2 , 57); | 689 InsertVp8(seq_num + 11, kF, kT , kT , kF , pid + 11, 2 , 57); |
582 | 690 |
583 ASSERT_EQ(12UL, frames_from_callback_.size()); | 691 ASSERT_EQ(12UL, frames_from_callback_.size()); |
584 CheckReferences(pid); | 692 CheckReferencesVp8(pid); |
585 CheckReferences(pid + 1 , pid); | 693 CheckReferencesVp8(pid + 1 , pid); |
586 CheckReferences(pid + 2 , pid); | 694 CheckReferencesVp8(pid + 2 , pid); |
587 CheckReferences(pid + 3 , pid, pid + 1, pid + 2); | 695 CheckReferencesVp8(pid + 3 , pid, pid + 1, pid + 2); |
588 CheckReferences(pid + 4 , pid); | 696 CheckReferencesVp8(pid + 4 , pid); |
589 CheckReferences(pid + 5 , pid + 2, pid + 3, pid + 4); | 697 CheckReferencesVp8(pid + 5 , pid + 2, pid + 3, pid + 4); |
590 CheckReferences(pid + 6 , pid + 2, pid + 4); | 698 CheckReferencesVp8(pid + 6 , pid + 2, pid + 4); |
591 CheckReferences(pid + 7 , pid + 4, pid + 5, pid + 6); | 699 CheckReferencesVp8(pid + 7 , pid + 4, pid + 5, pid + 6); |
592 CheckReferences(pid + 8 , pid + 4); | 700 CheckReferencesVp8(pid + 8 , pid + 4); |
593 CheckReferences(pid + 9 , pid + 8); | 701 CheckReferencesVp8(pid + 9 , pid + 8); |
594 CheckReferences(pid + 10, pid + 8); | 702 CheckReferencesVp8(pid + 10, pid + 8); |
595 CheckReferences(pid + 11, pid + 8, pid + 9, pid + 10); | 703 CheckReferencesVp8(pid + 11, pid + 8, pid + 9, pid + 10); |
596 } | 704 } |
597 | 705 |
598 // Test with 3 temporal layers in a 0212 pattern. | 706 // Test with 3 temporal layers in a 0212 pattern. |
599 TEST_F(TestPacketBuffer, Vp8TemporalLayersReordering_0212) { | 707 TEST_F(TestPacketBuffer, Vp8TemporalLayersReordering_0212) { |
600 uint16_t pid = 126; | 708 uint16_t pid = 126; |
601 uint16_t seq_num = Rand(); | 709 uint16_t seq_num = Rand(); |
602 | 710 |
603 // seq_num , keyf , first, last, sync , pid , tid, tl0 | 711 // seq_num , kf, frst, lst, sync, pid , tid, tl0 |
604 InsertVp8(seq_num + 1 , false, true , true, true , pid + 1 , 2 , 55); | 712 InsertVp8(seq_num + 1 , kF, kT , kT , kT , pid + 1 , 2 , 55); |
605 InsertVp8(seq_num , true , true , true, false, pid , 0 , 55); | 713 InsertVp8(seq_num , kT, kT , kT , kF , pid , 0 , 55); |
606 InsertVp8(seq_num + 2 , false, true , true, true , pid + 2 , 1 , 55); | 714 InsertVp8(seq_num + 2 , kF, kT , kT , kT , pid + 2 , 1 , 55); |
607 InsertVp8(seq_num + 4 , false, true , true, false, pid + 4 , 0 , 56); | 715 InsertVp8(seq_num + 4 , kF, kT , kT , kF , pid + 4 , 0 , 56); |
608 InsertVp8(seq_num + 5 , false, true , true, false, pid + 5 , 2 , 56); | 716 InsertVp8(seq_num + 5 , kF, kT , kT , kF , pid + 5 , 2 , 56); |
609 InsertVp8(seq_num + 3 , false, true , true, false, pid + 3 , 2 , 55); | 717 InsertVp8(seq_num + 3 , kF, kT , kT , kF , pid + 3 , 2 , 55); |
610 InsertVp8(seq_num + 7 , false, true , true, false, pid + 7 , 2 , 56); | 718 InsertVp8(seq_num + 7 , kF, kT , kT , kF , pid + 7 , 2 , 56); |
611 InsertVp8(seq_num + 9 , false, true , true, true , pid + 9 , 2 , 57); | 719 InsertVp8(seq_num + 9 , kF, kT , kT , kT , pid + 9 , 2 , 57); |
612 InsertVp8(seq_num + 6 , false, true , true, false, pid + 6 , 1 , 56); | 720 InsertVp8(seq_num + 6 , kF, kT , kT , kF , pid + 6 , 1 , 56); |
613 InsertVp8(seq_num + 8 , false, true , true, false, pid + 8 , 0 , 57); | 721 InsertVp8(seq_num + 8 , kF, kT , kT , kF , pid + 8 , 0 , 57); |
614 InsertVp8(seq_num + 11, false, true , true, false, pid + 11, 2 , 57); | 722 InsertVp8(seq_num + 11, kF, kT , kT , kF , pid + 11, 2 , 57); |
615 InsertVp8(seq_num + 10, false, true , true, true , pid + 10, 1 , 57); | 723 InsertVp8(seq_num + 10, kF, kT , kT , kT , pid + 10, 1 , 57); |
616 | 724 |
617 ASSERT_EQ(12UL, frames_from_callback_.size()); | 725 ASSERT_EQ(12UL, frames_from_callback_.size()); |
618 CheckReferences(pid); | 726 CheckReferencesVp8(pid); |
619 CheckReferences(pid + 1 , pid); | 727 CheckReferencesVp8(pid + 1 , pid); |
620 CheckReferences(pid + 2 , pid); | 728 CheckReferencesVp8(pid + 2 , pid); |
621 CheckReferences(pid + 3 , pid, pid + 1, pid + 2); | 729 CheckReferencesVp8(pid + 3 , pid, pid + 1, pid + 2); |
622 CheckReferences(pid + 4 , pid); | 730 CheckReferencesVp8(pid + 4 , pid); |
623 CheckReferences(pid + 5 , pid + 2, pid + 3, pid + 4); | 731 CheckReferencesVp8(pid + 5 , pid + 2, pid + 3, pid + 4); |
624 CheckReferences(pid + 6 , pid + 2, pid + 4); | 732 CheckReferencesVp8(pid + 6 , pid + 2, pid + 4); |
625 CheckReferences(pid + 7 , pid + 4, pid + 5, pid + 6); | 733 CheckReferencesVp8(pid + 7 , pid + 4, pid + 5, pid + 6); |
626 CheckReferences(pid + 8 , pid + 4); | 734 CheckReferencesVp8(pid + 8 , pid + 4); |
627 CheckReferences(pid + 9 , pid + 8); | 735 CheckReferencesVp8(pid + 9 , pid + 8); |
628 CheckReferences(pid + 10, pid + 8); | 736 CheckReferencesVp8(pid + 10, pid + 8); |
629 CheckReferences(pid + 11, pid + 8, pid + 9, pid + 10); | 737 CheckReferencesVp8(pid + 11, pid + 8, pid + 9, pid + 10); |
630 } | 738 } |
631 | 739 |
632 TEST_F(TestPacketBuffer, Vp8InsertManyFrames_0212) { | 740 TEST_F(TestPacketBuffer, Vp8InsertManyFrames_0212) { |
633 uint16_t pid = Rand(); | 741 uint16_t pid = Rand(); |
634 uint16_t seq_num = Rand(); | 742 uint16_t seq_num = Rand(); |
635 | 743 |
636 const int keyframes_to_insert = 50; | 744 const int keyframes_to_insert = 50; |
637 const int frames_per_keyframe = 120; // Should be a multiple of 4. | 745 const int frames_per_keyframe = 120; // Should be a multiple of 4. |
638 uint8_t tl0 = 128; | 746 uint8_t tl0 = 128; |
639 | 747 |
640 for (int k = 0; k < keyframes_to_insert; ++k) { | 748 for (int k = 0; k < keyframes_to_insert; ++k) { |
641 // seq_num , keyf , first, last , sync , pid , tid, tl0 | 749 // seq_num , keyf, frst, lst, sync, pid , tid, tl0 |
642 InsertVp8(seq_num , true , true , true , false, pid , 0 , tl0); | 750 InsertVp8(seq_num , kT , kT , kT , kF , pid , 0 , tl0); |
643 InsertVp8(seq_num + 1, false, true , true , true , pid + 1, 2 , tl0); | 751 InsertVp8(seq_num + 1, kF , kT , kT , kT , pid + 1, 2 , tl0); |
644 InsertVp8(seq_num + 2, false, true , true , true , pid + 2, 1 , tl0); | 752 InsertVp8(seq_num + 2, kF , kT , kT , kT , pid + 2, 1 , tl0); |
645 InsertVp8(seq_num + 3, false, true , true , false, pid + 3, 2 , tl0); | 753 InsertVp8(seq_num + 3, kF , kT , kT , kF , pid + 3, 2 , tl0); |
646 CheckReferences(pid); | 754 CheckReferencesVp8(pid); |
647 CheckReferences(pid + 1, pid); | 755 CheckReferencesVp8(pid + 1, pid); |
648 CheckReferences(pid + 2, pid); | 756 CheckReferencesVp8(pid + 2, pid); |
649 CheckReferences(pid + 3, pid, pid + 1, pid + 2); | 757 CheckReferencesVp8(pid + 3, pid, pid + 1, pid + 2); |
650 frames_from_callback_.clear(); | 758 frames_from_callback_.clear(); |
651 ++tl0; | 759 ++tl0; |
652 | 760 |
653 for (int f = 4; f < frames_per_keyframe; f += 4) { | 761 for (int f = 4; f < frames_per_keyframe; f += 4) { |
654 uint16_t sf = seq_num + f; | 762 uint16_t sf = seq_num + f; |
655 uint16_t pidf = pid + f; | 763 uint16_t pidf = pid + f; |
656 | 764 |
657 // seq_num, keyf , first, last, sync , pid , tid, tl0 | 765 // seq_num, keyf, frst, lst, sync, pid , tid, tl0 |
658 InsertVp8(sf , false, true , true, false, pidf , 0 , tl0); | 766 InsertVp8(sf , kF , kT , kT , kF , pidf , 0 , tl0); |
659 InsertVp8(sf + 1 , false, true , true, false, pidf + 1, 2 , tl0); | 767 InsertVp8(sf + 1 , kF , kT , kT , kF , pidf + 1, 2 , tl0); |
660 InsertVp8(sf + 2 , false, true , true, false, pidf + 2, 1 , tl0); | 768 InsertVp8(sf + 2 , kF , kT , kT , kF , pidf + 2, 1 , tl0); |
661 InsertVp8(sf + 3 , false, true , true, false, pidf + 3, 2 , tl0); | 769 InsertVp8(sf + 3 , kF , kT , kT , kF , pidf + 3, 2 , tl0); |
662 CheckReferences(pidf, pidf - 4); | 770 CheckReferencesVp8(pidf, pidf - 4); |
663 CheckReferences(pidf + 1, pidf, pidf - 1, pidf - 2); | 771 CheckReferencesVp8(pidf + 1, pidf, pidf - 1, pidf - 2); |
664 CheckReferences(pidf + 2, pidf, pidf - 2); | 772 CheckReferencesVp8(pidf + 2, pidf, pidf - 2); |
665 CheckReferences(pidf + 3, pidf, pidf + 1, pidf + 2); | 773 CheckReferencesVp8(pidf + 3, pidf, pidf + 1, pidf + 2); |
666 frames_from_callback_.clear(); | 774 frames_from_callback_.clear(); |
667 ++tl0; | 775 ++tl0; |
668 } | 776 } |
669 | 777 |
670 pid += frames_per_keyframe; | 778 pid += frames_per_keyframe; |
671 seq_num += frames_per_keyframe; | 779 seq_num += frames_per_keyframe; |
672 } | 780 } |
673 } | 781 } |
674 | 782 |
675 TEST_F(TestPacketBuffer, Vp8LayerSync) { | 783 TEST_F(TestPacketBuffer, Vp8LayerSync) { |
676 uint16_t pid = Rand(); | 784 uint16_t pid = Rand(); |
677 uint16_t seq_num = Rand(); | 785 uint16_t seq_num = Rand(); |
678 | 786 |
679 // seq_num , keyf , first, last, sync , pid , tid, tl0 | 787 // seq_num , keyf, frst, lst, sync, pid , tid, tl0 |
680 InsertVp8(seq_num , true , true , true, false, pid , 0 , 0); | 788 InsertVp8(seq_num , kT , kT , kT , kF , pid , 0 , 0); |
681 InsertVp8(seq_num + 1 , false, true , true, true , pid + 1 , 1 , 0); | 789 InsertVp8(seq_num + 1 , kF , kT , kT , kT , pid + 1 , 1 , 0); |
682 InsertVp8(seq_num + 2 , false, true , true, false, pid + 2 , 0 , 1); | 790 InsertVp8(seq_num + 2 , kF , kT , kT , kF , pid + 2 , 0 , 1); |
683 ASSERT_EQ(3UL, frames_from_callback_.size()); | 791 ASSERT_EQ(3UL, frames_from_callback_.size()); |
684 | 792 |
685 InsertVp8(seq_num + 4 , false, true , true, false, pid + 4 , 0 , 2); | 793 InsertVp8(seq_num + 4 , kF , kT , kT , kF , pid + 4 , 0 , 2); |
686 InsertVp8(seq_num + 5 , false, true , true, true , pid + 5 , 1 , 2); | 794 InsertVp8(seq_num + 5 , kF , kT , kT , kT , pid + 5 , 1 , 2); |
687 InsertVp8(seq_num + 6 , false, true , true, false, pid + 6 , 0 , 3); | 795 InsertVp8(seq_num + 6 , kF , kT , kT , kF , pid + 6 , 0 , 3); |
688 InsertVp8(seq_num + 7 , false, true , true, false, pid + 7 , 1 , 3); | 796 InsertVp8(seq_num + 7 , kF , kT , kT , kF , pid + 7 , 1 , 3); |
689 | 797 |
690 ASSERT_EQ(7UL, frames_from_callback_.size()); | 798 ASSERT_EQ(7UL, frames_from_callback_.size()); |
691 CheckReferences(pid); | 799 CheckReferencesVp8(pid); |
692 CheckReferences(pid + 1, pid); | 800 CheckReferencesVp8(pid + 1, pid); |
693 CheckReferences(pid + 2, pid); | 801 CheckReferencesVp8(pid + 2, pid); |
694 CheckReferences(pid + 4, pid + 2); | 802 CheckReferencesVp8(pid + 4, pid + 2); |
695 CheckReferences(pid + 5, pid + 4); | 803 CheckReferencesVp8(pid + 5, pid + 4); |
696 CheckReferences(pid + 6, pid + 4); | 804 CheckReferencesVp8(pid + 6, pid + 4); |
697 CheckReferences(pid + 7, pid + 6, pid + 5); | 805 CheckReferencesVp8(pid + 7, pid + 6, pid + 5); |
698 } | 806 } |
699 | 807 |
700 TEST_F(TestPacketBuffer, Vp8InsertLargeFrames) { | 808 TEST_F(TestPacketBuffer, Vp8InsertLargeFrames) { |
701 packet_buffer_.reset(new PacketBuffer(1 << 3, 1 << 12, this)); | 809 packet_buffer_.reset(new PacketBuffer(1 << 3, 1 << 12, this)); |
702 uint16_t pid = Rand(); | 810 uint16_t pid = Rand(); |
703 uint16_t seq_num = Rand(); | 811 uint16_t seq_num = Rand(); |
704 | 812 |
705 const uint16_t packets_per_frame = 1000; | 813 const uint16_t packets_per_frame = 1000; |
706 uint16_t current = seq_num; | 814 uint16_t current = seq_num; |
707 uint16_t end = current + packets_per_frame; | 815 uint16_t end = current + packets_per_frame; |
708 | 816 |
709 // seq_num , keyf , first, last , sync , pid, tid, tl0 | 817 // seq_num , keyf, frst, lst, sync, pid, tid, tl0 |
710 InsertVp8(current++, true , true , false, false, pid, 0 , 0); | 818 InsertVp8(current++, kT , kT , kF , kF , pid, 0 , 0); |
711 while (current != end) | 819 while (current != end) |
712 InsertVp8(current++, false, false, false, false, pid, 0 , 0); | 820 InsertVp8(current++, kF , kF , kF , kF , pid, 0 , 0); |
713 InsertVp8(current++, false, false, true , false, pid, 0 , 0); | 821 InsertVp8(current++, kF , kF , kT , kF , pid, 0 , 0); |
714 end = current + packets_per_frame; | 822 end = current + packets_per_frame; |
715 | 823 |
716 for (int f = 1; f < 4; ++f) { | 824 for (int f = 1; f < 4; ++f) { |
717 InsertVp8(current++, false, true , false, false, pid + f, 0, f); | 825 InsertVp8(current++, kF , kT , kF , kF , pid + f, 0, f); |
718 while (current != end) | 826 while (current != end) |
719 InsertVp8(current++, false, false, false, false, pid + f, 0, f); | 827 InsertVp8(current++, kF , kF , kF , kF , pid + f, 0, f); |
720 InsertVp8(current++, false, false, true , false, pid + f, 0, f); | 828 InsertVp8(current++, kF , kF , kT , kF , pid + f, 0, f); |
721 end = current + packets_per_frame; | 829 end = current + packets_per_frame; |
722 } | 830 } |
723 | 831 |
724 ASSERT_EQ(4UL, frames_from_callback_.size()); | 832 ASSERT_EQ(4UL, frames_from_callback_.size()); |
725 CheckReferences(pid); | 833 CheckReferencesVp8(pid); |
726 CheckReferences(pid + 1, pid); | 834 CheckReferencesVp8(pid + 1, pid); |
727 CheckReferences(pid + 2, pid + 1); | 835 CheckReferencesVp8(pid + 2, pid + 1); |
728 CheckReferences(pid + 3, pid + 2); | 836 CheckReferencesVp8(pid + 3, pid + 2); |
| 837 } |
| 838 |
| 839 TEST_F(TestPacketBuffer, Vp9GofInsertOneFrame) { |
| 840 uint16_t pid = Rand(); |
| 841 uint16_t seq_num = Rand(); |
| 842 GofInfoVP9 ss; |
| 843 |
| 844 // seq_num, keyf, frst, lst, up, pid, sid, tid, tl0, ss |
| 845 InsertVp9Gof(seq_num, kT , kT , kT , kF, pid, 0 , 0 , 0 , &ss); |
| 846 |
| 847 CheckReferencesVp9(pid, 0); |
| 848 } |
| 849 |
| 850 TEST_F(TestPacketBuffer, Vp9NoPictureIdReordered) { |
| 851 uint16_t sn = 0xfffa; |
| 852 |
| 853 // sn , kf, frst, lst |
| 854 InsertVp9Gof(sn + 1 , kF, kF , kF); |
| 855 InsertVp9Gof(sn , kT, kT , kF); |
| 856 InsertVp9Gof(sn + 2 , kF, kF , kT); |
| 857 InsertVp9Gof(sn + 4 , kF, kF , kT); |
| 858 InsertVp9Gof(sn + 6 , kF, kF , kF); |
| 859 InsertVp9Gof(sn + 3 , kF, kT , kF); |
| 860 InsertVp9Gof(sn + 7 , kF, kF , kF); |
| 861 InsertVp9Gof(sn + 5 , kF, kT , kF); |
| 862 InsertVp9Gof(sn + 9 , kF, kT , kT); |
| 863 InsertVp9Gof(sn + 10, kF, kT , kF); |
| 864 InsertVp9Gof(sn + 8 , kF, kF , kT); |
| 865 InsertVp9Gof(sn + 13, kF, kT , kF); |
| 866 InsertVp9Gof(sn + 14, kF, kF , kF); |
| 867 InsertVp9Gof(sn + 12, kT, kT , kT); |
| 868 InsertVp9Gof(sn + 11, kF, kF , kT); |
| 869 InsertVp9Gof(sn + 16, kF, kF , kF); |
| 870 InsertVp9Gof(sn + 19, kF, kT , kF); |
| 871 InsertVp9Gof(sn + 15, kF, kF , kF); |
| 872 InsertVp9Gof(sn + 17, kF, kF , kT); |
| 873 InsertVp9Gof(sn + 20, kF, kF , kT); |
| 874 InsertVp9Gof(sn + 21, kF, kT , kT); |
| 875 InsertVp9Gof(sn + 18, kF, kT , kT); |
| 876 |
| 877 ASSERT_EQ(10UL, frames_from_callback_.size()); |
| 878 CheckReferencesVp9(sn + 2 , 0); |
| 879 CheckReferencesVp9(sn + 4 , 0, sn + 2); |
| 880 CheckReferencesVp9(sn + 8 , 0, sn + 4); |
| 881 CheckReferencesVp9(sn + 9 , 0, sn + 8); |
| 882 CheckReferencesVp9(sn + 11, 0, sn + 9); |
| 883 CheckReferencesVp9(sn + 12, 0); |
| 884 CheckReferencesVp9(sn + 17, 0, sn + 12); |
| 885 CheckReferencesVp9(sn + 18, 0, sn + 17); |
| 886 CheckReferencesVp9(sn + 20, 0, sn + 18); |
| 887 CheckReferencesVp9(sn + 21, 0, sn + 20); |
| 888 } |
| 889 |
| 890 TEST_F(TestPacketBuffer, Vp9GofTemporalLayers_0) { |
| 891 uint16_t pid = Rand(); |
| 892 uint16_t sn = Rand(); |
| 893 GofInfoVP9 ss; |
| 894 ss.SetGofInfoVP9(kTemporalStructureMode1); // Only 1 spatial layer. |
| 895 |
| 896 // sn , kf, frst, lst, up, pid , sid, tid, tl0, ss |
| 897 InsertVp9Gof(sn , kT, kT , kT , kF, pid , 0 , 0 , 0 , &ss); |
| 898 InsertVp9Gof(sn + 1 , kF, kT , kT , kF, pid + 1 , 0 , 0 , 1); |
| 899 InsertVp9Gof(sn + 2 , kF, kT , kT , kF, pid + 2 , 0 , 0 , 2); |
| 900 InsertVp9Gof(sn + 3 , kF, kT , kT , kF, pid + 3 , 0 , 0 , 3); |
| 901 InsertVp9Gof(sn + 4 , kF, kT , kT , kF, pid + 4 , 0 , 0 , 4); |
| 902 InsertVp9Gof(sn + 5 , kF, kT , kT , kF, pid + 5 , 0 , 0 , 5); |
| 903 InsertVp9Gof(sn + 6 , kF, kT , kT , kF, pid + 6 , 0 , 0 , 6); |
| 904 InsertVp9Gof(sn + 7 , kF, kT , kT , kF, pid + 7 , 0 , 0 , 7); |
| 905 InsertVp9Gof(sn + 8 , kF, kT , kT , kF, pid + 8 , 0 , 0 , 8); |
| 906 InsertVp9Gof(sn + 9 , kF, kT , kT , kF, pid + 9 , 0 , 0 , 9); |
| 907 InsertVp9Gof(sn + 10, kF, kT , kT , kF, pid + 10, 0 , 0 , 10); |
| 908 InsertVp9Gof(sn + 11, kF, kT , kT , kF, pid + 11, 0 , 0 , 11); |
| 909 InsertVp9Gof(sn + 12, kF, kT , kT , kF, pid + 12, 0 , 0 , 12); |
| 910 InsertVp9Gof(sn + 13, kF, kT , kT , kF, pid + 13, 0 , 0 , 13); |
| 911 InsertVp9Gof(sn + 14, kF, kT , kT , kF, pid + 14, 0 , 0 , 14); |
| 912 InsertVp9Gof(sn + 15, kF, kT , kT , kF, pid + 15, 0 , 0 , 15); |
| 913 InsertVp9Gof(sn + 16, kF, kT , kT , kF, pid + 16, 0 , 0 , 16); |
| 914 InsertVp9Gof(sn + 17, kF, kT , kT , kF, pid + 17, 0 , 0 , 17); |
| 915 InsertVp9Gof(sn + 18, kF, kT , kT , kF, pid + 18, 0 , 0 , 18); |
| 916 InsertVp9Gof(sn + 19, kF, kT , kT , kF, pid + 19, 0 , 0 , 19); |
| 917 |
| 918 ASSERT_EQ(20UL, frames_from_callback_.size()); |
| 919 CheckReferencesVp9(pid, 0); |
| 920 CheckReferencesVp9(pid + 1 , 0, pid); |
| 921 CheckReferencesVp9(pid + 2 , 0, pid + 1); |
| 922 CheckReferencesVp9(pid + 3 , 0, pid + 2); |
| 923 CheckReferencesVp9(pid + 4 , 0, pid + 3); |
| 924 CheckReferencesVp9(pid + 5 , 0, pid + 4); |
| 925 CheckReferencesVp9(pid + 6 , 0, pid + 5); |
| 926 CheckReferencesVp9(pid + 7 , 0, pid + 6); |
| 927 CheckReferencesVp9(pid + 8 , 0, pid + 7); |
| 928 CheckReferencesVp9(pid + 9 , 0, pid + 8); |
| 929 CheckReferencesVp9(pid + 10, 0, pid + 9); |
| 930 CheckReferencesVp9(pid + 11, 0, pid + 10); |
| 931 CheckReferencesVp9(pid + 12, 0, pid + 11); |
| 932 CheckReferencesVp9(pid + 13, 0, pid + 12); |
| 933 CheckReferencesVp9(pid + 14, 0, pid + 13); |
| 934 CheckReferencesVp9(pid + 15, 0, pid + 14); |
| 935 CheckReferencesVp9(pid + 16, 0, pid + 15); |
| 936 CheckReferencesVp9(pid + 17, 0, pid + 16); |
| 937 CheckReferencesVp9(pid + 18, 0, pid + 17); |
| 938 CheckReferencesVp9(pid + 19, 0, pid + 18); |
| 939 } |
| 940 |
| 941 TEST_F(TestPacketBuffer, Vp9GofTemporalLayersReordered_0) { |
| 942 uint16_t pid = Rand(); |
| 943 uint16_t sn = Rand(); |
| 944 GofInfoVP9 ss; |
| 945 ss.SetGofInfoVP9(kTemporalStructureMode1); // Only 1 spatial layer. |
| 946 |
| 947 // sn , kf, frst, lst, up, pid , sid, tid, tl0, ss |
| 948 InsertVp9Gof(sn + 2 , kF, kT , kT , kF, pid + 2 , 0 , 0 , 2); |
| 949 InsertVp9Gof(sn + 1 , kF, kT , kT , kF, pid + 1 , 0 , 0 , 1); |
| 950 InsertVp9Gof(sn , kT, kT , kT , kF, pid , 0 , 0 , 0 , &ss); |
| 951 InsertVp9Gof(sn + 4 , kF, kT , kT , kF, pid + 4 , 0 , 0 , 4); |
| 952 InsertVp9Gof(sn + 3 , kF, kT , kT , kF, pid + 3 , 0 , 0 , 3); |
| 953 InsertVp9Gof(sn + 5 , kF, kT , kT , kF, pid + 5 , 0 , 0 , 5); |
| 954 InsertVp9Gof(sn + 7 , kF, kT , kT , kF, pid + 7 , 0 , 0 , 7); |
| 955 InsertVp9Gof(sn + 6 , kF, kT , kT , kF, pid + 6 , 0 , 0 , 6); |
| 956 InsertVp9Gof(sn + 8 , kF, kT , kT , kF, pid + 8 , 0 , 0 , 8); |
| 957 InsertVp9Gof(sn + 10, kF, kT , kT , kF, pid + 10, 0 , 0 , 10); |
| 958 InsertVp9Gof(sn + 13, kF, kT , kT , kF, pid + 13, 0 , 0 , 13); |
| 959 InsertVp9Gof(sn + 11, kF, kT , kT , kF, pid + 11, 0 , 0 , 11); |
| 960 InsertVp9Gof(sn + 9 , kF, kT , kT , kF, pid + 9 , 0 , 0 , 9); |
| 961 InsertVp9Gof(sn + 16, kF, kT , kT , kF, pid + 16, 0 , 0 , 16); |
| 962 InsertVp9Gof(sn + 14, kF, kT , kT , kF, pid + 14, 0 , 0 , 14); |
| 963 InsertVp9Gof(sn + 15, kF, kT , kT , kF, pid + 15, 0 , 0 , 15); |
| 964 InsertVp9Gof(sn + 12, kF, kT , kT , kF, pid + 12, 0 , 0 , 12); |
| 965 InsertVp9Gof(sn + 17, kF, kT , kT , kF, pid + 17, 0 , 0 , 17); |
| 966 InsertVp9Gof(sn + 19, kF, kT , kT , kF, pid + 19, 0 , 0 , 19); |
| 967 InsertVp9Gof(sn + 18, kF, kT , kT , kF, pid + 18, 0 , 0 , 18); |
| 968 |
| 969 ASSERT_EQ(20UL, frames_from_callback_.size()); |
| 970 CheckReferencesVp9(pid, 0); |
| 971 CheckReferencesVp9(pid + 1 , 0, pid); |
| 972 CheckReferencesVp9(pid + 2 , 0, pid + 1); |
| 973 CheckReferencesVp9(pid + 3 , 0, pid + 2); |
| 974 CheckReferencesVp9(pid + 4 , 0, pid + 3); |
| 975 CheckReferencesVp9(pid + 5 , 0, pid + 4); |
| 976 CheckReferencesVp9(pid + 6 , 0, pid + 5); |
| 977 CheckReferencesVp9(pid + 7 , 0, pid + 6); |
| 978 CheckReferencesVp9(pid + 8 , 0, pid + 7); |
| 979 CheckReferencesVp9(pid + 9 , 0, pid + 8); |
| 980 CheckReferencesVp9(pid + 10, 0, pid + 9); |
| 981 CheckReferencesVp9(pid + 11, 0, pid + 10); |
| 982 CheckReferencesVp9(pid + 12, 0, pid + 11); |
| 983 CheckReferencesVp9(pid + 13, 0, pid + 12); |
| 984 CheckReferencesVp9(pid + 14, 0, pid + 13); |
| 985 CheckReferencesVp9(pid + 15, 0, pid + 14); |
| 986 CheckReferencesVp9(pid + 16, 0, pid + 15); |
| 987 CheckReferencesVp9(pid + 17, 0, pid + 16); |
| 988 CheckReferencesVp9(pid + 18, 0, pid + 17); |
| 989 CheckReferencesVp9(pid + 19, 0, pid + 18); |
| 990 } |
| 991 |
| 992 TEST_F(TestPacketBuffer, Vp9GofTemporalLayers_01) { |
| 993 uint16_t pid = Rand(); |
| 994 uint16_t sn = Rand(); |
| 995 GofInfoVP9 ss; |
| 996 ss.SetGofInfoVP9(kTemporalStructureMode2); // 0101 pattern |
| 997 |
| 998 // sn , kf, frst, lst, up, pid , sid, tid, tl0, ss |
| 999 InsertVp9Gof(sn , kT, kT , kT , kF, pid , 0 , 0 , 0 , &ss); |
| 1000 InsertVp9Gof(sn + 1 , kF, kT , kT , kF, pid + 1 , 0 , 1 , 0); |
| 1001 InsertVp9Gof(sn + 2 , kF, kT , kT , kF, pid + 2 , 0 , 0 , 1); |
| 1002 InsertVp9Gof(sn + 3 , kF, kT , kT , kF, pid + 3 , 0 , 1 , 1); |
| 1003 InsertVp9Gof(sn + 4 , kF, kT , kT , kF, pid + 4 , 0 , 0 , 2); |
| 1004 InsertVp9Gof(sn + 5 , kF, kT , kT , kF, pid + 5 , 0 , 1 , 2); |
| 1005 InsertVp9Gof(sn + 6 , kF, kT , kT , kF, pid + 6 , 0 , 0 , 3); |
| 1006 InsertVp9Gof(sn + 7 , kF, kT , kT , kF, pid + 7 , 0 , 1 , 3); |
| 1007 InsertVp9Gof(sn + 8 , kF, kT , kT , kF, pid + 8 , 0 , 0 , 4); |
| 1008 InsertVp9Gof(sn + 9 , kF, kT , kT , kF, pid + 9 , 0 , 1 , 4); |
| 1009 InsertVp9Gof(sn + 10, kF, kT , kT , kF, pid + 10, 0 , 0 , 5); |
| 1010 InsertVp9Gof(sn + 11, kF, kT , kT , kF, pid + 11, 0 , 1 , 5); |
| 1011 InsertVp9Gof(sn + 12, kF, kT , kT , kF, pid + 12, 0 , 0 , 6); |
| 1012 InsertVp9Gof(sn + 13, kF, kT , kT , kF, pid + 13, 0 , 1 , 6); |
| 1013 InsertVp9Gof(sn + 14, kF, kT , kT , kF, pid + 14, 0 , 0 , 7); |
| 1014 InsertVp9Gof(sn + 15, kF, kT , kT , kF, pid + 15, 0 , 1 , 7); |
| 1015 InsertVp9Gof(sn + 16, kF, kT , kT , kF, pid + 16, 0 , 0 , 8); |
| 1016 InsertVp9Gof(sn + 17, kF, kT , kT , kF, pid + 17, 0 , 1 , 8); |
| 1017 InsertVp9Gof(sn + 18, kF, kT , kT , kF, pid + 18, 0 , 0 , 9); |
| 1018 InsertVp9Gof(sn + 19, kF, kT , kT , kF, pid + 19, 0 , 1 , 9); |
| 1019 |
| 1020 ASSERT_EQ(20UL, frames_from_callback_.size()); |
| 1021 CheckReferencesVp9(pid, 0); |
| 1022 CheckReferencesVp9(pid + 1 , 0, pid); |
| 1023 CheckReferencesVp9(pid + 2 , 0, pid); |
| 1024 CheckReferencesVp9(pid + 3 , 0, pid + 2); |
| 1025 CheckReferencesVp9(pid + 4 , 0, pid + 2); |
| 1026 CheckReferencesVp9(pid + 5 , 0, pid + 4); |
| 1027 CheckReferencesVp9(pid + 6 , 0, pid + 4); |
| 1028 CheckReferencesVp9(pid + 7 , 0, pid + 6); |
| 1029 CheckReferencesVp9(pid + 8 , 0, pid + 6); |
| 1030 CheckReferencesVp9(pid + 9 , 0, pid + 8); |
| 1031 CheckReferencesVp9(pid + 10, 0, pid + 8); |
| 1032 CheckReferencesVp9(pid + 11, 0, pid + 10); |
| 1033 CheckReferencesVp9(pid + 12, 0, pid + 10); |
| 1034 CheckReferencesVp9(pid + 13, 0, pid + 12); |
| 1035 CheckReferencesVp9(pid + 14, 0, pid + 12); |
| 1036 CheckReferencesVp9(pid + 15, 0, pid + 14); |
| 1037 CheckReferencesVp9(pid + 16, 0, pid + 14); |
| 1038 CheckReferencesVp9(pid + 17, 0, pid + 16); |
| 1039 CheckReferencesVp9(pid + 18, 0, pid + 16); |
| 1040 CheckReferencesVp9(pid + 19, 0, pid + 18); |
| 1041 } |
| 1042 |
| 1043 TEST_F(TestPacketBuffer, Vp9GofTemporalLayersReordered_01) { |
| 1044 uint16_t pid = Rand(); |
| 1045 uint16_t sn = Rand(); |
| 1046 GofInfoVP9 ss; |
| 1047 ss.SetGofInfoVP9(kTemporalStructureMode2); // 01 pattern |
| 1048 |
| 1049 // sn , kf, frst, lst, up, pid , sid, tid, tl0, ss |
| 1050 InsertVp9Gof(sn + 1 , kF, kT , kT , kF, pid + 1 , 0 , 1 , 0); |
| 1051 InsertVp9Gof(sn , kT, kT , kT , kF, pid , 0 , 0 , 0 , &ss); |
| 1052 InsertVp9Gof(sn + 2 , kF, kT , kT , kF, pid + 2 , 0 , 0 , 1); |
| 1053 InsertVp9Gof(sn + 4 , kF, kT , kT , kF, pid + 4 , 0 , 0 , 2); |
| 1054 InsertVp9Gof(sn + 3 , kF, kT , kT , kF, pid + 3 , 0 , 1 , 1); |
| 1055 InsertVp9Gof(sn + 5 , kF, kT , kT , kF, pid + 5 , 0 , 1 , 2); |
| 1056 InsertVp9Gof(sn + 7 , kF, kT , kT , kF, pid + 7 , 0 , 1 , 3); |
| 1057 InsertVp9Gof(sn + 6 , kF, kT , kT , kF, pid + 6 , 0 , 0 , 3); |
| 1058 InsertVp9Gof(sn + 10, kF, kT , kT , kF, pid + 10, 0 , 0 , 5); |
| 1059 InsertVp9Gof(sn + 8 , kF, kT , kT , kF, pid + 8 , 0 , 0 , 4); |
| 1060 InsertVp9Gof(sn + 9 , kF, kT , kT , kF, pid + 9 , 0 , 1 , 4); |
| 1061 InsertVp9Gof(sn + 11, kF, kT , kT , kF, pid + 11, 0 , 1 , 5); |
| 1062 InsertVp9Gof(sn + 13, kF, kT , kT , kF, pid + 13, 0 , 1 , 6); |
| 1063 InsertVp9Gof(sn + 16, kF, kT , kT , kF, pid + 16, 0 , 0 , 8); |
| 1064 InsertVp9Gof(sn + 12, kF, kT , kT , kF, pid + 12, 0 , 0 , 6); |
| 1065 InsertVp9Gof(sn + 14, kF, kT , kT , kF, pid + 14, 0 , 0 , 7); |
| 1066 InsertVp9Gof(sn + 17, kF, kT , kT , kF, pid + 17, 0 , 1 , 8); |
| 1067 InsertVp9Gof(sn + 19, kF, kT , kT , kF, pid + 19, 0 , 1 , 9); |
| 1068 InsertVp9Gof(sn + 15, kF, kT , kT , kF, pid + 15, 0 , 1 , 7); |
| 1069 InsertVp9Gof(sn + 18, kF, kT , kT , kF, pid + 18, 0 , 0 , 9); |
| 1070 |
| 1071 ASSERT_EQ(20UL, frames_from_callback_.size()); |
| 1072 CheckReferencesVp9(pid, 0); |
| 1073 CheckReferencesVp9(pid + 1 , 0, pid); |
| 1074 CheckReferencesVp9(pid + 2 , 0, pid); |
| 1075 CheckReferencesVp9(pid + 3 , 0, pid + 2); |
| 1076 CheckReferencesVp9(pid + 4 , 0, pid + 2); |
| 1077 CheckReferencesVp9(pid + 5 , 0, pid + 4); |
| 1078 CheckReferencesVp9(pid + 6 , 0, pid + 4); |
| 1079 CheckReferencesVp9(pid + 7 , 0, pid + 6); |
| 1080 CheckReferencesVp9(pid + 8 , 0, pid + 6); |
| 1081 CheckReferencesVp9(pid + 9 , 0, pid + 8); |
| 1082 CheckReferencesVp9(pid + 10, 0, pid + 8); |
| 1083 CheckReferencesVp9(pid + 11, 0, pid + 10); |
| 1084 CheckReferencesVp9(pid + 12, 0, pid + 10); |
| 1085 CheckReferencesVp9(pid + 13, 0, pid + 12); |
| 1086 CheckReferencesVp9(pid + 14, 0, pid + 12); |
| 1087 CheckReferencesVp9(pid + 15, 0, pid + 14); |
| 1088 CheckReferencesVp9(pid + 16, 0, pid + 14); |
| 1089 CheckReferencesVp9(pid + 17, 0, pid + 16); |
| 1090 CheckReferencesVp9(pid + 18, 0, pid + 16); |
| 1091 CheckReferencesVp9(pid + 19, 0, pid + 18); |
| 1092 } |
| 1093 |
| 1094 TEST_F(TestPacketBuffer, Vp9GofTemporalLayers_0212) { |
| 1095 uint16_t pid = Rand(); |
| 1096 uint16_t sn = Rand(); |
| 1097 GofInfoVP9 ss; |
| 1098 ss.SetGofInfoVP9(kTemporalStructureMode3); // 0212 pattern |
| 1099 |
| 1100 // sn , kf, frst, lst, up, pid , sid, tid, tl0, ss |
| 1101 InsertVp9Gof(sn , kT, kT , kT , kF, pid , 0 , 0 , 0 , &ss); |
| 1102 InsertVp9Gof(sn + 1 , kF, kT , kT , kF, pid + 1 , 0 , 2 , 0); |
| 1103 InsertVp9Gof(sn + 2 , kF, kT , kT , kF, pid + 2 , 0 , 1 , 0); |
| 1104 InsertVp9Gof(sn + 3 , kF, kT , kT , kF, pid + 3 , 0 , 2 , 0); |
| 1105 InsertVp9Gof(sn + 4 , kF, kT , kT , kF, pid + 4 , 0 , 0 , 1); |
| 1106 InsertVp9Gof(sn + 5 , kF, kT , kT , kF, pid + 5 , 0 , 2 , 1); |
| 1107 InsertVp9Gof(sn + 6 , kF, kT , kT , kF, pid + 6 , 0 , 1 , 1); |
| 1108 InsertVp9Gof(sn + 7 , kF, kT , kT , kF, pid + 7 , 0 , 2 , 1); |
| 1109 InsertVp9Gof(sn + 8 , kF, kT , kT , kF, pid + 8 , 0 , 0 , 2); |
| 1110 InsertVp9Gof(sn + 9 , kF, kT , kT , kF, pid + 9 , 0 , 2 , 2); |
| 1111 InsertVp9Gof(sn + 10, kF, kT , kT , kF, pid + 10, 0 , 1 , 2); |
| 1112 InsertVp9Gof(sn + 11, kF, kT , kT , kF, pid + 11, 0 , 2 , 2); |
| 1113 InsertVp9Gof(sn + 12, kF, kT , kT , kF, pid + 12, 0 , 0 , 3); |
| 1114 InsertVp9Gof(sn + 13, kF, kT , kT , kF, pid + 13, 0 , 2 , 3); |
| 1115 InsertVp9Gof(sn + 14, kF, kT , kT , kF, pid + 14, 0 , 1 , 3); |
| 1116 InsertVp9Gof(sn + 15, kF, kT , kT , kF, pid + 15, 0 , 2 , 3); |
| 1117 InsertVp9Gof(sn + 16, kF, kT , kT , kF, pid + 16, 0 , 0 , 4); |
| 1118 InsertVp9Gof(sn + 17, kF, kT , kT , kF, pid + 17, 0 , 2 , 4); |
| 1119 InsertVp9Gof(sn + 18, kF, kT , kT , kF, pid + 18, 0 , 1 , 4); |
| 1120 InsertVp9Gof(sn + 19, kF, kT , kT , kF, pid + 19, 0 , 2 , 4); |
| 1121 |
| 1122 ASSERT_EQ(20UL, frames_from_callback_.size()); |
| 1123 CheckReferencesVp9(pid, 0); |
| 1124 CheckReferencesVp9(pid + 1 , 0, pid); |
| 1125 CheckReferencesVp9(pid + 2 , 0, pid); |
| 1126 CheckReferencesVp9(pid + 3 , 0, pid + 1, pid + 2); |
| 1127 CheckReferencesVp9(pid + 4 , 0, pid); |
| 1128 CheckReferencesVp9(pid + 5 , 0, pid + 4); |
| 1129 CheckReferencesVp9(pid + 6 , 0, pid + 4); |
| 1130 CheckReferencesVp9(pid + 7 , 0, pid + 5, pid + 6); |
| 1131 CheckReferencesVp9(pid + 8 , 0, pid + 4); |
| 1132 CheckReferencesVp9(pid + 9 , 0, pid + 8); |
| 1133 CheckReferencesVp9(pid + 10, 0, pid + 8); |
| 1134 CheckReferencesVp9(pid + 11, 0, pid + 9, pid + 10); |
| 1135 CheckReferencesVp9(pid + 12, 0, pid + 8); |
| 1136 CheckReferencesVp9(pid + 13, 0, pid + 12); |
| 1137 CheckReferencesVp9(pid + 14, 0, pid + 12); |
| 1138 CheckReferencesVp9(pid + 15, 0, pid + 13, pid + 14); |
| 1139 CheckReferencesVp9(pid + 16, 0, pid + 12); |
| 1140 CheckReferencesVp9(pid + 17, 0, pid + 16); |
| 1141 CheckReferencesVp9(pid + 18, 0, pid + 16); |
| 1142 CheckReferencesVp9(pid + 19, 0, pid + 17, pid + 18); |
| 1143 } |
| 1144 |
| 1145 TEST_F(TestPacketBuffer, Vp9GofTemporalLayersReordered_0212) { |
| 1146 uint16_t pid = Rand(); |
| 1147 uint16_t sn = Rand(); |
| 1148 GofInfoVP9 ss; |
| 1149 ss.SetGofInfoVP9(kTemporalStructureMode3); // 0212 pattern |
| 1150 |
| 1151 // sn , kf, frst, lst, up, pid , sid, tid, tl0, ss |
| 1152 InsertVp9Gof(sn + 2 , kF, kT , kT , kF, pid + 2 , 0 , 1 , 0); |
| 1153 InsertVp9Gof(sn + 1 , kF, kT , kT , kF, pid + 1 , 0 , 2 , 0); |
| 1154 InsertVp9Gof(sn , kT, kT , kT , kF, pid , 0 , 0 , 0 , &ss); |
| 1155 InsertVp9Gof(sn + 3 , kF, kT , kT , kF, pid + 3 , 0 , 2 , 0); |
| 1156 InsertVp9Gof(sn + 6 , kF, kT , kT , kF, pid + 6 , 0 , 1 , 1); |
| 1157 InsertVp9Gof(sn + 5 , kF, kT , kT , kF, pid + 5 , 0 , 2 , 1); |
| 1158 InsertVp9Gof(sn + 4 , kF, kT , kT , kF, pid + 4 , 0 , 0 , 1); |
| 1159 InsertVp9Gof(sn + 9 , kF, kT , kT , kF, pid + 9 , 0 , 2 , 2); |
| 1160 InsertVp9Gof(sn + 7 , kF, kT , kT , kF, pid + 7 , 0 , 2 , 1); |
| 1161 InsertVp9Gof(sn + 8 , kF, kT , kT , kF, pid + 8 , 0 , 0 , 2); |
| 1162 InsertVp9Gof(sn + 11, kF, kT , kT , kF, pid + 11, 0 , 2 , 2); |
| 1163 InsertVp9Gof(sn + 10, kF, kT , kT , kF, pid + 10, 0 , 1 , 2); |
| 1164 InsertVp9Gof(sn + 13, kF, kT , kT , kF, pid + 13, 0 , 2 , 3); |
| 1165 InsertVp9Gof(sn + 12, kF, kT , kT , kF, pid + 12, 0 , 0 , 3); |
| 1166 InsertVp9Gof(sn + 14, kF, kT , kT , kF, pid + 14, 0 , 1 , 3); |
| 1167 InsertVp9Gof(sn + 16, kF, kT , kT , kF, pid + 16, 0 , 0 , 4); |
| 1168 InsertVp9Gof(sn + 15, kF, kT , kT , kF, pid + 15, 0 , 2 , 3); |
| 1169 InsertVp9Gof(sn + 17, kF, kT , kT , kF, pid + 17, 0 , 2 , 4); |
| 1170 InsertVp9Gof(sn + 19, kF, kT , kT , kF, pid + 19, 0 , 2 , 4); |
| 1171 InsertVp9Gof(sn + 18, kF, kT , kT , kF, pid + 18, 0 , 1 , 4); |
| 1172 |
| 1173 ASSERT_EQ(20UL, frames_from_callback_.size()); |
| 1174 CheckReferencesVp9(pid, 0); |
| 1175 CheckReferencesVp9(pid + 1 , 0, pid); |
| 1176 CheckReferencesVp9(pid + 2 , 0, pid); |
| 1177 CheckReferencesVp9(pid + 3 , 0, pid + 1, pid + 2); |
| 1178 CheckReferencesVp9(pid + 4 , 0, pid); |
| 1179 CheckReferencesVp9(pid + 5 , 0, pid + 4); |
| 1180 CheckReferencesVp9(pid + 6 , 0, pid + 4); |
| 1181 CheckReferencesVp9(pid + 7 , 0, pid + 5, pid + 6); |
| 1182 CheckReferencesVp9(pid + 8 , 0, pid + 4); |
| 1183 CheckReferencesVp9(pid + 9 , 0, pid + 8); |
| 1184 CheckReferencesVp9(pid + 10, 0, pid + 8); |
| 1185 CheckReferencesVp9(pid + 11, 0, pid + 9, pid + 10); |
| 1186 CheckReferencesVp9(pid + 12, 0, pid + 8); |
| 1187 CheckReferencesVp9(pid + 13, 0, pid + 12); |
| 1188 CheckReferencesVp9(pid + 14, 0, pid + 12); |
| 1189 CheckReferencesVp9(pid + 15, 0, pid + 13, pid + 14); |
| 1190 CheckReferencesVp9(pid + 16, 0, pid + 12); |
| 1191 CheckReferencesVp9(pid + 17, 0, pid + 16); |
| 1192 CheckReferencesVp9(pid + 18, 0, pid + 16); |
| 1193 CheckReferencesVp9(pid + 19, 0, pid + 17, pid + 18); |
| 1194 } |
| 1195 |
| 1196 TEST_F(TestPacketBuffer, Vp9GofTemporalLayersUpSwitch_02120212) { |
| 1197 uint16_t pid = Rand(); |
| 1198 uint16_t sn = Rand(); |
| 1199 GofInfoVP9 ss; |
| 1200 ss.SetGofInfoVP9(kTemporalStructureMode4); // 02120212 pattern |
| 1201 |
| 1202 // sn , kf, frst, lst, up, pid , sid, tid, tl0, ss |
| 1203 InsertVp9Gof(sn , kT, kT , kT , kF, pid , 0 , 0 , 0 , &ss); |
| 1204 InsertVp9Gof(sn + 1 , kF, kT , kT , kF, pid + 1 , 0 , 2 , 0); |
| 1205 InsertVp9Gof(sn + 2 , kF, kT , kT , kF, pid + 2 , 0 , 1 , 0); |
| 1206 InsertVp9Gof(sn + 3 , kF, kT , kT , kF, pid + 3 , 0 , 2 , 0); |
| 1207 InsertVp9Gof(sn + 4 , kF, kT , kT , kF, pid + 4 , 0 , 0 , 1); |
| 1208 InsertVp9Gof(sn + 5 , kF, kT , kT , kF, pid + 5 , 0 , 2 , 1); |
| 1209 InsertVp9Gof(sn + 6 , kF, kT , kT , kT, pid + 6 , 0 , 1 , 1); |
| 1210 InsertVp9Gof(sn + 7 , kF, kT , kT , kF, pid + 7 , 0 , 2 , 1); |
| 1211 InsertVp9Gof(sn + 8 , kF, kT , kT , kT, pid + 8 , 0 , 0 , 2); |
| 1212 InsertVp9Gof(sn + 9 , kF, kT , kT , kF, pid + 9 , 0 , 2 , 2); |
| 1213 InsertVp9Gof(sn + 10, kF, kT , kT , kF, pid + 10, 0 , 1 , 2); |
| 1214 InsertVp9Gof(sn + 11, kF, kT , kT , kT, pid + 11, 0 , 2 , 2); |
| 1215 InsertVp9Gof(sn + 12, kF, kT , kT , kF, pid + 12, 0 , 0 , 3); |
| 1216 InsertVp9Gof(sn + 13, kF, kT , kT , kF, pid + 13, 0 , 2 , 3); |
| 1217 InsertVp9Gof(sn + 14, kF, kT , kT , kF, pid + 14, 0 , 1 , 3); |
| 1218 InsertVp9Gof(sn + 15, kF, kT , kT , kF, pid + 15, 0 , 2 , 3); |
| 1219 |
| 1220 ASSERT_EQ(16UL, frames_from_callback_.size()); |
| 1221 CheckReferencesVp9(pid, 0); |
| 1222 CheckReferencesVp9(pid + 1 , 0, pid); |
| 1223 CheckReferencesVp9(pid + 2 , 0, pid); |
| 1224 CheckReferencesVp9(pid + 3 , 0, pid + 1, pid + 2); |
| 1225 CheckReferencesVp9(pid + 4 , 0, pid); |
| 1226 CheckReferencesVp9(pid + 5 , 0, pid + 3, pid + 4); |
| 1227 CheckReferencesVp9(pid + 6 , 0, pid + 2, pid + 4); |
| 1228 CheckReferencesVp9(pid + 7 , 0, pid + 6); |
| 1229 CheckReferencesVp9(pid + 8 , 0, pid + 4); |
| 1230 CheckReferencesVp9(pid + 9 , 0, pid + 8); |
| 1231 CheckReferencesVp9(pid + 10, 0, pid + 8); |
| 1232 CheckReferencesVp9(pid + 11, 0, pid + 9, pid + 10); |
| 1233 CheckReferencesVp9(pid + 12, 0, pid + 8); |
| 1234 CheckReferencesVp9(pid + 13, 0, pid + 11, pid + 12); |
| 1235 CheckReferencesVp9(pid + 14, 0, pid + 10, pid + 12); |
| 1236 CheckReferencesVp9(pid + 15, 0, pid + 13, pid + 14); |
| 1237 } |
| 1238 |
| 1239 TEST_F(TestPacketBuffer, Vp9GofTemporalLayersUpSwitchReordered_02120212) { |
| 1240 uint16_t pid = Rand(); |
| 1241 uint16_t sn = Rand(); |
| 1242 GofInfoVP9 ss; |
| 1243 ss.SetGofInfoVP9(kTemporalStructureMode4); // 02120212 pattern |
| 1244 |
| 1245 // sn , kf, frst, lst, up, pid , sid, tid, tl0, ss |
| 1246 InsertVp9Gof(sn + 1 , kF, kT , kT , kF, pid + 1 , 0 , 2 , 0); |
| 1247 InsertVp9Gof(sn , kT, kT , kT , kF, pid , 0 , 0 , 0 , &ss); |
| 1248 InsertVp9Gof(sn + 4 , kF, kT , kT , kF, pid + 4 , 0 , 0 , 1); |
| 1249 InsertVp9Gof(sn + 2 , kF, kT , kT , kF, pid + 2 , 0 , 1 , 0); |
| 1250 InsertVp9Gof(sn + 5 , kF, kT , kT , kF, pid + 5 , 0 , 2 , 1); |
| 1251 InsertVp9Gof(sn + 3 , kF, kT , kT , kF, pid + 3 , 0 , 2 , 0); |
| 1252 InsertVp9Gof(sn + 7 , kF, kT , kT , kF, pid + 7 , 0 , 2 , 1); |
| 1253 InsertVp9Gof(sn + 9 , kF, kT , kT , kF, pid + 9 , 0 , 2 , 2); |
| 1254 InsertVp9Gof(sn + 6 , kF, kT , kT , kT, pid + 6 , 0 , 1 , 1); |
| 1255 InsertVp9Gof(sn + 12, kF, kT , kT , kF, pid + 12, 0 , 0 , 3); |
| 1256 InsertVp9Gof(sn + 10, kF, kT , kT , kF, pid + 10, 0 , 1 , 2); |
| 1257 InsertVp9Gof(sn + 8 , kF, kT , kT , kT, pid + 8 , 0 , 0 , 2); |
| 1258 InsertVp9Gof(sn + 11, kF, kT , kT , kT, pid + 11, 0 , 2 , 2); |
| 1259 InsertVp9Gof(sn + 13, kF, kT , kT , kF, pid + 13, 0 , 2 , 3); |
| 1260 InsertVp9Gof(sn + 15, kF, kT , kT , kF, pid + 15, 0 , 2 , 3); |
| 1261 InsertVp9Gof(sn + 14, kF, kT , kT , kF, pid + 14, 0 , 1 , 3); |
| 1262 |
| 1263 ASSERT_EQ(16UL, frames_from_callback_.size()); |
| 1264 CheckReferencesVp9(pid, 0); |
| 1265 CheckReferencesVp9(pid + 1 , 0, pid); |
| 1266 CheckReferencesVp9(pid + 2 , 0, pid); |
| 1267 CheckReferencesVp9(pid + 3 , 0, pid + 1, pid + 2); |
| 1268 CheckReferencesVp9(pid + 4 , 0, pid); |
| 1269 CheckReferencesVp9(pid + 5 , 0, pid + 3, pid + 4); |
| 1270 CheckReferencesVp9(pid + 6 , 0, pid + 2, pid + 4); |
| 1271 CheckReferencesVp9(pid + 7 , 0, pid + 6); |
| 1272 CheckReferencesVp9(pid + 8 , 0, pid + 4); |
| 1273 CheckReferencesVp9(pid + 9 , 0, pid + 8); |
| 1274 CheckReferencesVp9(pid + 10, 0, pid + 8); |
| 1275 CheckReferencesVp9(pid + 11, 0, pid + 9, pid + 10); |
| 1276 CheckReferencesVp9(pid + 12, 0, pid + 8); |
| 1277 CheckReferencesVp9(pid + 13, 0, pid + 11, pid + 12); |
| 1278 CheckReferencesVp9(pid + 14, 0, pid + 10, pid + 12); |
| 1279 CheckReferencesVp9(pid + 15, 0, pid + 13, pid + 14); |
| 1280 } |
| 1281 |
| 1282 TEST_F(TestPacketBuffer, Vp9GofTemporalLayersReordered_01_0212) { |
| 1283 uint16_t pid = Rand(); |
| 1284 uint16_t sn = Rand(); |
| 1285 GofInfoVP9 ss; |
| 1286 ss.SetGofInfoVP9(kTemporalStructureMode2); // 01 pattern |
| 1287 |
| 1288 // sn , kf, frst, lst, up, pid , sid, tid, tl0, ss |
| 1289 InsertVp9Gof(sn + 1 , kF, kT , kT , kF, pid + 1 , 0 , 1 , 0); |
| 1290 InsertVp9Gof(sn , kT, kT , kT , kF, pid , 0 , 0 , 0 , &ss); |
| 1291 InsertVp9Gof(sn + 3 , kF, kT , kT , kF, pid + 3 , 0 , 1 , 1); |
| 1292 InsertVp9Gof(sn + 6 , kF, kT , kT , kF, pid + 6 , 0 , 1 , 2); |
| 1293 ss.SetGofInfoVP9(kTemporalStructureMode3); // 0212 pattern |
| 1294 InsertVp9Gof(sn + 4 , kF, kT , kT , kF, pid + 4 , 0 , 0 , 2 , &ss); |
| 1295 InsertVp9Gof(sn + 2 , kF, kT , kT , kF, pid + 2 , 0 , 0 , 1); |
| 1296 InsertVp9Gof(sn + 5 , kF, kT , kT , kF, pid + 5 , 0 , 2 , 2); |
| 1297 InsertVp9Gof(sn + 8 , kF, kT , kT , kF, pid + 8 , 0 , 0 , 3); |
| 1298 InsertVp9Gof(sn + 10, kF, kT , kT , kF, pid + 10, 0 , 1 , 3); |
| 1299 InsertVp9Gof(sn + 7 , kF, kT , kT , kF, pid + 7 , 0 , 2 , 2); |
| 1300 InsertVp9Gof(sn + 11, kF, kT , kT , kF, pid + 11, 0 , 2 , 3); |
| 1301 InsertVp9Gof(sn + 9 , kF, kT , kT , kF, pid + 9 , 0 , 2 , 3); |
| 1302 |
| 1303 ASSERT_EQ(12UL, frames_from_callback_.size()); |
| 1304 CheckReferencesVp9(pid, 0); |
| 1305 CheckReferencesVp9(pid + 1 , 0, pid); |
| 1306 CheckReferencesVp9(pid + 2 , 0, pid); |
| 1307 CheckReferencesVp9(pid + 3 , 0, pid + 2); |
| 1308 CheckReferencesVp9(pid + 4 , 0, pid); |
| 1309 CheckReferencesVp9(pid + 5 , 0, pid + 4); |
| 1310 CheckReferencesVp9(pid + 6 , 0, pid + 4); |
| 1311 CheckReferencesVp9(pid + 7 , 0, pid + 5, pid + 6); |
| 1312 CheckReferencesVp9(pid + 8 , 0, pid + 4); |
| 1313 CheckReferencesVp9(pid + 9 , 0, pid + 8); |
| 1314 CheckReferencesVp9(pid + 10, 0, pid + 8); |
| 1315 CheckReferencesVp9(pid + 11, 0, pid + 9, pid + 10); |
| 1316 } |
| 1317 |
| 1318 TEST_F(TestPacketBuffer, Vp9FlexibleModeOneFrame) { |
| 1319 uint16_t pid = Rand(); |
| 1320 uint16_t sn = Rand(); |
| 1321 |
| 1322 // sn, kf, frst, lst, intr, pid, sid, tid, tl0 |
| 1323 InsertVp9Flex(sn, kT, kT , kT , kF , pid, 0 , 0 , 0); |
| 1324 |
| 1325 ASSERT_EQ(1UL, frames_from_callback_.size()); |
| 1326 CheckReferencesVp9(pid, 0); |
| 1327 } |
| 1328 |
| 1329 TEST_F(TestPacketBuffer, Vp9FlexibleModeTwoSpatialLayers) { |
| 1330 uint16_t pid = Rand(); |
| 1331 uint16_t sn = Rand(); |
| 1332 |
| 1333 // sn , kf, frst, lst, intr, pid , sid, tid, tl0, refs |
| 1334 InsertVp9Flex(sn , kT, kT , kT , kF , pid , 0 , 0 , 0); |
| 1335 InsertVp9Flex(sn + 1 , kT, kT , kT , kT , pid , 1 , 0 , 0); |
| 1336 InsertVp9Flex(sn + 2 , kF, kT , kT , kF , pid + 1, 1 , 0 , 0 , {1}); |
| 1337 InsertVp9Flex(sn + 3 , kF, kT , kT , kF , pid + 2, 0 , 0 , 1 , {2}); |
| 1338 InsertVp9Flex(sn + 4 , kF, kT , kT , kF , pid + 2, 1 , 0 , 1 , {1}); |
| 1339 InsertVp9Flex(sn + 5 , kF, kT , kT , kF , pid + 3, 1 , 0 , 1 , {1}); |
| 1340 InsertVp9Flex(sn + 6 , kF, kT , kT , kF , pid + 4, 0 , 0 , 2 , {2}); |
| 1341 InsertVp9Flex(sn + 7 , kF, kT , kT , kF , pid + 4, 1 , 0 , 2 , {1}); |
| 1342 InsertVp9Flex(sn + 8 , kF, kT , kT , kF , pid + 5, 1 , 0 , 2 , {1}); |
| 1343 InsertVp9Flex(sn + 9 , kF, kT , kT , kF , pid + 6, 0 , 0 , 3 , {2}); |
| 1344 InsertVp9Flex(sn + 10, kF, kT , kT , kF , pid + 6, 1 , 0 , 3 , {1}); |
| 1345 InsertVp9Flex(sn + 11, kF, kT , kT , kF , pid + 7, 1 , 0 , 3 , {1}); |
| 1346 InsertVp9Flex(sn + 12, kF, kT , kT , kF , pid + 8, 0 , 0 , 4 , {2}); |
| 1347 InsertVp9Flex(sn + 13, kF, kT , kT , kF , pid + 8, 1 , 0 , 4 , {1}); |
| 1348 |
| 1349 ASSERT_EQ(14UL, frames_from_callback_.size()); |
| 1350 CheckReferencesVp9(pid , 0); |
| 1351 CheckReferencesVp9(pid , 1); |
| 1352 CheckReferencesVp9(pid + 1, 1, pid); |
| 1353 CheckReferencesVp9(pid + 2, 0, pid); |
| 1354 CheckReferencesVp9(pid + 2, 1, pid + 1); |
| 1355 CheckReferencesVp9(pid + 3, 1, pid + 2); |
| 1356 CheckReferencesVp9(pid + 4, 0, pid + 2); |
| 1357 CheckReferencesVp9(pid + 4, 1, pid + 3); |
| 1358 CheckReferencesVp9(pid + 5, 1, pid + 4); |
| 1359 CheckReferencesVp9(pid + 6, 0, pid + 4); |
| 1360 CheckReferencesVp9(pid + 6, 1, pid + 5); |
| 1361 CheckReferencesVp9(pid + 7, 1, pid + 6); |
| 1362 CheckReferencesVp9(pid + 8, 0, pid + 6); |
| 1363 CheckReferencesVp9(pid + 8, 1, pid + 7); |
| 1364 } |
| 1365 |
| 1366 TEST_F(TestPacketBuffer, Vp9FlexibleModeTwoSpatialLayersReordered) { |
| 1367 uint16_t pid = Rand(); |
| 1368 uint16_t sn = Rand(); |
| 1369 |
| 1370 // sn , kf, frst, lst, intr, pid , sid, tid, tl0, refs |
| 1371 InsertVp9Flex(sn + 1 , kT, kT , kT , kT , pid , 1 , 0 , 0); |
| 1372 InsertVp9Flex(sn + 2 , kF, kT , kT , kF , pid + 1, 1 , 0 , 0 , {1}); |
| 1373 InsertVp9Flex(sn , kT, kT , kT , kF , pid , 0 , 0 , 0); |
| 1374 InsertVp9Flex(sn + 4 , kF, kT , kT , kF , pid + 2, 1 , 0 , 1 , {1}); |
| 1375 InsertVp9Flex(sn + 5 , kF, kT , kT , kF , pid + 3, 1 , 0 , 1 , {1}); |
| 1376 InsertVp9Flex(sn + 3 , kF, kT , kT , kF , pid + 2, 0 , 0 , 1 , {2}); |
| 1377 InsertVp9Flex(sn + 7 , kF, kT , kT , kF , pid + 4, 1 , 0 , 2 , {1}); |
| 1378 InsertVp9Flex(sn + 6 , kF, kT , kT , kF , pid + 4, 0 , 0 , 2 , {2}); |
| 1379 InsertVp9Flex(sn + 8 , kF, kT , kT , kF , pid + 5, 1 , 0 , 2 , {1}); |
| 1380 InsertVp9Flex(sn + 9 , kF, kT , kT , kF , pid + 6, 0 , 0 , 3 , {2}); |
| 1381 InsertVp9Flex(sn + 11, kF, kT , kT , kF , pid + 7, 1 , 0 , 3 , {1}); |
| 1382 InsertVp9Flex(sn + 10, kF, kT , kT , kF , pid + 6, 1 , 0 , 3 , {1}); |
| 1383 InsertVp9Flex(sn + 13, kF, kT , kT , kF , pid + 8, 1 , 0 , 4 , {1}); |
| 1384 InsertVp9Flex(sn + 12, kF, kT , kT , kF , pid + 8, 0 , 0 , 4 , {2}); |
| 1385 |
| 1386 ASSERT_EQ(14UL, frames_from_callback_.size()); |
| 1387 CheckReferencesVp9(pid , 0); |
| 1388 CheckReferencesVp9(pid , 1); |
| 1389 CheckReferencesVp9(pid + 1, 1, pid); |
| 1390 CheckReferencesVp9(pid + 2, 0, pid); |
| 1391 CheckReferencesVp9(pid + 2, 1, pid + 1); |
| 1392 CheckReferencesVp9(pid + 3, 1, pid + 2); |
| 1393 CheckReferencesVp9(pid + 4, 0, pid + 2); |
| 1394 CheckReferencesVp9(pid + 4, 1, pid + 3); |
| 1395 CheckReferencesVp9(pid + 5, 1, pid + 4); |
| 1396 CheckReferencesVp9(pid + 6, 0, pid + 4); |
| 1397 CheckReferencesVp9(pid + 6, 1, pid + 5); |
| 1398 CheckReferencesVp9(pid + 7, 1, pid + 6); |
| 1399 CheckReferencesVp9(pid + 8, 0, pid + 6); |
| 1400 CheckReferencesVp9(pid + 8, 1, pid + 7); |
729 } | 1401 } |
730 | 1402 |
731 } // namespace video_coding | 1403 } // namespace video_coding |
732 } // namespace webrtc | 1404 } // namespace webrtc |
OLD | NEW |