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