OLD | NEW |
1 /* | 1 /* |
2 * Copyright (c) 2011 The WebRTC project authors. All Rights Reserved. | 2 * Copyright (c) 2011 The WebRTC project authors. All Rights Reserved. |
3 * | 3 * |
4 * Use of this source code is governed by a BSD-style license | 4 * Use of this source code is governed by a BSD-style license |
5 * that can be found in the LICENSE file in the root of the source | 5 * that can be found in the LICENSE file in the root of the source |
6 * tree. An additional intellectual property rights grant can be found | 6 * tree. An additional intellectual property rights grant can be found |
7 * in the file PATENTS. All contributing project authors may | 7 * in the file PATENTS. All contributing project authors may |
8 * be found in the AUTHORS file in the root of the source tree. | 8 * be found in the AUTHORS file in the root of the source tree. |
9 */ | 9 */ |
10 | 10 |
(...skipping 24 matching lines...) Expand all Loading... |
35 | 35 |
36 class Vp9SsMapTest : public ::testing::Test { | 36 class Vp9SsMapTest : public ::testing::Test { |
37 protected: | 37 protected: |
38 Vp9SsMapTest() : packet_(data_, 1400, 1234, 1, true) {} | 38 Vp9SsMapTest() : packet_(data_, 1400, 1234, 1, true) {} |
39 | 39 |
40 virtual void SetUp() { | 40 virtual void SetUp() { |
41 packet_.isFirstPacket = true; | 41 packet_.isFirstPacket = true; |
42 packet_.markerBit = true; | 42 packet_.markerBit = true; |
43 packet_.frameType = kVideoFrameKey; | 43 packet_.frameType = kVideoFrameKey; |
44 packet_.codec = kVideoCodecVP9; | 44 packet_.codec = kVideoCodecVP9; |
45 packet_.codecSpecificHeader.codec = kRtpVideoVp9; | 45 packet_.video_header.codec = kRtpVideoVp9; |
46 packet_.codecSpecificHeader.codecHeader.VP9.flexible_mode = false; | 46 packet_.video_header.codecHeader.VP9.flexible_mode = false; |
47 packet_.codecSpecificHeader.codecHeader.VP9.gof_idx = 0; | 47 packet_.video_header.codecHeader.VP9.gof_idx = 0; |
48 packet_.codecSpecificHeader.codecHeader.VP9.temporal_idx = kNoTemporalIdx; | 48 packet_.video_header.codecHeader.VP9.temporal_idx = kNoTemporalIdx; |
49 packet_.codecSpecificHeader.codecHeader.VP9.temporal_up_switch = false; | 49 packet_.video_header.codecHeader.VP9.temporal_up_switch = false; |
50 packet_.codecSpecificHeader.codecHeader.VP9.ss_data_available = true; | 50 packet_.video_header.codecHeader.VP9.ss_data_available = true; |
51 packet_.codecSpecificHeader.codecHeader.VP9.gof.SetGofInfoVP9( | 51 packet_.video_header.codecHeader.VP9.gof.SetGofInfoVP9( |
52 kTemporalStructureMode3); // kTemporalStructureMode3: 0-2-1-2.. | 52 kTemporalStructureMode3); // kTemporalStructureMode3: 0-2-1-2.. |
53 } | 53 } |
54 | 54 |
55 Vp9SsMap map_; | 55 Vp9SsMap map_; |
56 uint8_t data_[1500]; | 56 uint8_t data_[1500]; |
57 VCMPacket packet_; | 57 VCMPacket packet_; |
58 }; | 58 }; |
59 | 59 |
60 TEST_F(Vp9SsMapTest, Insert) { | 60 TEST_F(Vp9SsMapTest, Insert) { |
61 EXPECT_TRUE(map_.Insert(packet_)); | 61 EXPECT_TRUE(map_.Insert(packet_)); |
62 } | 62 } |
63 | 63 |
64 TEST_F(Vp9SsMapTest, Insert_NoSsData) { | 64 TEST_F(Vp9SsMapTest, Insert_NoSsData) { |
65 packet_.codecSpecificHeader.codecHeader.VP9.ss_data_available = false; | 65 packet_.video_header.codecHeader.VP9.ss_data_available = false; |
66 EXPECT_FALSE(map_.Insert(packet_)); | 66 EXPECT_FALSE(map_.Insert(packet_)); |
67 } | 67 } |
68 | 68 |
69 TEST_F(Vp9SsMapTest, Find) { | 69 TEST_F(Vp9SsMapTest, Find) { |
70 EXPECT_TRUE(map_.Insert(packet_)); | 70 EXPECT_TRUE(map_.Insert(packet_)); |
71 Vp9SsMap::SsMap::iterator it; | 71 Vp9SsMap::SsMap::iterator it; |
72 EXPECT_TRUE(map_.Find(packet_.timestamp, &it)); | 72 EXPECT_TRUE(map_.Find(packet_.timestamp, &it)); |
73 EXPECT_EQ(packet_.timestamp, it->first); | 73 EXPECT_EQ(packet_.timestamp, it->first); |
74 } | 74 } |
75 | 75 |
(...skipping 56 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
132 packet_.timestamp = kSsTimestamp3; | 132 packet_.timestamp = kSsTimestamp3; |
133 EXPECT_TRUE(map_.Insert(packet_)); | 133 EXPECT_TRUE(map_.Insert(packet_)); |
134 | 134 |
135 map_.RemoveOld(kSsTimestamp3); | 135 map_.RemoveOld(kSsTimestamp3); |
136 EXPECT_FALSE(map_.Find(kSsTimestamp1, &it)); | 136 EXPECT_FALSE(map_.Find(kSsTimestamp1, &it)); |
137 EXPECT_FALSE(map_.Find(kSsTimestamp2, &it)); | 137 EXPECT_FALSE(map_.Find(kSsTimestamp2, &it)); |
138 EXPECT_TRUE(map_.Find(kSsTimestamp3, &it)); | 138 EXPECT_TRUE(map_.Find(kSsTimestamp3, &it)); |
139 } | 139 } |
140 | 140 |
141 TEST_F(Vp9SsMapTest, UpdatePacket_NoSsData) { | 141 TEST_F(Vp9SsMapTest, UpdatePacket_NoSsData) { |
142 packet_.codecSpecificHeader.codecHeader.VP9.gof_idx = 0; | 142 packet_.video_header.codecHeader.VP9.gof_idx = 0; |
143 EXPECT_FALSE(map_.UpdatePacket(&packet_)); | 143 EXPECT_FALSE(map_.UpdatePacket(&packet_)); |
144 } | 144 } |
145 | 145 |
146 TEST_F(Vp9SsMapTest, UpdatePacket_NoGofIdx) { | 146 TEST_F(Vp9SsMapTest, UpdatePacket_NoGofIdx) { |
147 EXPECT_TRUE(map_.Insert(packet_)); | 147 EXPECT_TRUE(map_.Insert(packet_)); |
148 packet_.codecSpecificHeader.codecHeader.VP9.gof_idx = kNoGofIdx; | 148 packet_.video_header.codecHeader.VP9.gof_idx = kNoGofIdx; |
149 EXPECT_FALSE(map_.UpdatePacket(&packet_)); | 149 EXPECT_FALSE(map_.UpdatePacket(&packet_)); |
150 } | 150 } |
151 | 151 |
152 TEST_F(Vp9SsMapTest, UpdatePacket_InvalidGofIdx) { | 152 TEST_F(Vp9SsMapTest, UpdatePacket_InvalidGofIdx) { |
153 EXPECT_TRUE(map_.Insert(packet_)); | 153 EXPECT_TRUE(map_.Insert(packet_)); |
154 packet_.codecSpecificHeader.codecHeader.VP9.gof_idx = 4; | 154 packet_.video_header.codecHeader.VP9.gof_idx = 4; |
155 EXPECT_FALSE(map_.UpdatePacket(&packet_)); | 155 EXPECT_FALSE(map_.UpdatePacket(&packet_)); |
156 } | 156 } |
157 | 157 |
158 TEST_F(Vp9SsMapTest, UpdatePacket) { | 158 TEST_F(Vp9SsMapTest, UpdatePacket) { |
159 EXPECT_TRUE(map_.Insert(packet_)); // kTemporalStructureMode3: 0-2-1-2.. | 159 EXPECT_TRUE(map_.Insert(packet_)); // kTemporalStructureMode3: 0-2-1-2.. |
160 | 160 |
161 packet_.codecSpecificHeader.codecHeader.VP9.gof_idx = 0; | 161 packet_.video_header.codecHeader.VP9.gof_idx = 0; |
162 EXPECT_TRUE(map_.UpdatePacket(&packet_)); | 162 EXPECT_TRUE(map_.UpdatePacket(&packet_)); |
163 EXPECT_EQ(0, packet_.codecSpecificHeader.codecHeader.VP9.temporal_idx); | 163 EXPECT_EQ(0, packet_.video_header.codecHeader.VP9.temporal_idx); |
164 EXPECT_FALSE(packet_.codecSpecificHeader.codecHeader.VP9.temporal_up_switch); | 164 EXPECT_FALSE(packet_.video_header.codecHeader.VP9.temporal_up_switch); |
165 EXPECT_EQ(1U, packet_.codecSpecificHeader.codecHeader.VP9.num_ref_pics); | 165 EXPECT_EQ(1U, packet_.video_header.codecHeader.VP9.num_ref_pics); |
166 EXPECT_EQ(4, packet_.codecSpecificHeader.codecHeader.VP9.pid_diff[0]); | 166 EXPECT_EQ(4, packet_.video_header.codecHeader.VP9.pid_diff[0]); |
167 | 167 |
168 packet_.codecSpecificHeader.codecHeader.VP9.gof_idx = 1; | 168 packet_.video_header.codecHeader.VP9.gof_idx = 1; |
169 EXPECT_TRUE(map_.UpdatePacket(&packet_)); | 169 EXPECT_TRUE(map_.UpdatePacket(&packet_)); |
170 EXPECT_EQ(2, packet_.codecSpecificHeader.codecHeader.VP9.temporal_idx); | 170 EXPECT_EQ(2, packet_.video_header.codecHeader.VP9.temporal_idx); |
171 EXPECT_TRUE(packet_.codecSpecificHeader.codecHeader.VP9.temporal_up_switch); | 171 EXPECT_TRUE(packet_.video_header.codecHeader.VP9.temporal_up_switch); |
172 EXPECT_EQ(1U, packet_.codecSpecificHeader.codecHeader.VP9.num_ref_pics); | 172 EXPECT_EQ(1U, packet_.video_header.codecHeader.VP9.num_ref_pics); |
173 EXPECT_EQ(1, packet_.codecSpecificHeader.codecHeader.VP9.pid_diff[0]); | 173 EXPECT_EQ(1, packet_.video_header.codecHeader.VP9.pid_diff[0]); |
174 | 174 |
175 packet_.codecSpecificHeader.codecHeader.VP9.gof_idx = 2; | 175 packet_.video_header.codecHeader.VP9.gof_idx = 2; |
176 EXPECT_TRUE(map_.UpdatePacket(&packet_)); | 176 EXPECT_TRUE(map_.UpdatePacket(&packet_)); |
177 EXPECT_EQ(1, packet_.codecSpecificHeader.codecHeader.VP9.temporal_idx); | 177 EXPECT_EQ(1, packet_.video_header.codecHeader.VP9.temporal_idx); |
178 EXPECT_TRUE(packet_.codecSpecificHeader.codecHeader.VP9.temporal_up_switch); | 178 EXPECT_TRUE(packet_.video_header.codecHeader.VP9.temporal_up_switch); |
179 EXPECT_EQ(1U, packet_.codecSpecificHeader.codecHeader.VP9.num_ref_pics); | 179 EXPECT_EQ(1U, packet_.video_header.codecHeader.VP9.num_ref_pics); |
180 EXPECT_EQ(2, packet_.codecSpecificHeader.codecHeader.VP9.pid_diff[0]); | 180 EXPECT_EQ(2, packet_.video_header.codecHeader.VP9.pid_diff[0]); |
181 | 181 |
182 packet_.codecSpecificHeader.codecHeader.VP9.gof_idx = 3; | 182 packet_.video_header.codecHeader.VP9.gof_idx = 3; |
183 EXPECT_TRUE(map_.UpdatePacket(&packet_)); | 183 EXPECT_TRUE(map_.UpdatePacket(&packet_)); |
184 EXPECT_EQ(2, packet_.codecSpecificHeader.codecHeader.VP9.temporal_idx); | 184 EXPECT_EQ(2, packet_.video_header.codecHeader.VP9.temporal_idx); |
185 EXPECT_FALSE(packet_.codecSpecificHeader.codecHeader.VP9.temporal_up_switch); | 185 EXPECT_FALSE(packet_.video_header.codecHeader.VP9.temporal_up_switch); |
186 EXPECT_EQ(2U, packet_.codecSpecificHeader.codecHeader.VP9.num_ref_pics); | 186 EXPECT_EQ(2U, packet_.video_header.codecHeader.VP9.num_ref_pics); |
187 EXPECT_EQ(1, packet_.codecSpecificHeader.codecHeader.VP9.pid_diff[0]); | 187 EXPECT_EQ(1, packet_.video_header.codecHeader.VP9.pid_diff[0]); |
188 EXPECT_EQ(2, packet_.codecSpecificHeader.codecHeader.VP9.pid_diff[1]); | 188 EXPECT_EQ(2, packet_.video_header.codecHeader.VP9.pid_diff[1]); |
189 } | 189 } |
190 | 190 |
191 class ProcessThreadMock : public ProcessThread { | 191 class ProcessThreadMock : public ProcessThread { |
192 public: | 192 public: |
193 MOCK_METHOD0(Start, void()); | 193 MOCK_METHOD0(Start, void()); |
194 MOCK_METHOD0(Stop, void()); | 194 MOCK_METHOD0(Stop, void()); |
195 MOCK_METHOD1(WakeUp, void(Module* module)); | 195 MOCK_METHOD1(WakeUp, void(Module* module)); |
196 MOCK_METHOD1(RegisterModule, void(Module* module)); | 196 MOCK_METHOD1(RegisterModule, void(Module* module)); |
197 MOCK_METHOD1(DeRegisterModule, void(Module* module)); | 197 MOCK_METHOD1(DeRegisterModule, void(Module* module)); |
198 void PostTask(std::unique_ptr<rtc::QueuedTask> task) /*override*/ {} | 198 void PostTask(std::unique_ptr<rtc::QueuedTask> task) /*override*/ {} |
(...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
239 data_[i + 2] = 0; | 239 data_[i + 2] = 0; |
240 data_[i + 3] = 0x80; | 240 data_[i + 3] = 0x80; |
241 count = 3; | 241 count = 3; |
242 i += 3; | 242 i += 3; |
243 } | 243 } |
244 } | 244 } |
245 packet_.reset(new VCMPacket(data_, size_, seq_num_, timestamp_, true)); | 245 packet_.reset(new VCMPacket(data_, size_, seq_num_, timestamp_, true)); |
246 } | 246 } |
247 | 247 |
248 VCMEncodedFrame* DecodeCompleteFrame() { | 248 VCMEncodedFrame* DecodeCompleteFrame() { |
249 uint32_t timestamp = 0; | 249 VCMEncodedFrame* found_frame = jitter_buffer_->NextCompleteFrame(10); |
250 bool found_frame = jitter_buffer_->NextCompleteTimestamp(10, ×tamp); | |
251 if (!found_frame) | 250 if (!found_frame) |
252 return NULL; | 251 return nullptr; |
253 VCMEncodedFrame* frame = jitter_buffer_->ExtractAndSetDecode(timestamp); | 252 return jitter_buffer_->ExtractAndSetDecode(found_frame->TimeStamp()); |
254 return frame; | |
255 } | 253 } |
256 | 254 |
257 VCMEncodedFrame* DecodeIncompleteFrame() { | 255 VCMEncodedFrame* DecodeIncompleteFrame() { |
258 uint32_t timestamp = 0; | 256 uint32_t timestamp = 0; |
259 bool found_frame = jitter_buffer_->NextMaybeIncompleteTimestamp(×tamp); | 257 bool found_frame = jitter_buffer_->NextMaybeIncompleteTimestamp(×tamp); |
260 if (!found_frame) | 258 if (!found_frame) |
261 return NULL; | 259 return NULL; |
262 VCMEncodedFrame* frame = jitter_buffer_->ExtractAndSetDecode(timestamp); | 260 VCMEncodedFrame* frame = jitter_buffer_->ExtractAndSetDecode(timestamp); |
263 return frame; | 261 return frame; |
264 } | 262 } |
(...skipping 137 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
402 | 400 |
403 void DropFrame(int num_packets) { | 401 void DropFrame(int num_packets) { |
404 stream_generator_->GenerateFrame(kVideoFrameDelta, num_packets, 0, | 402 stream_generator_->GenerateFrame(kVideoFrameDelta, num_packets, 0, |
405 clock_->TimeInMilliseconds()); | 403 clock_->TimeInMilliseconds()); |
406 for (int i = 0; i < num_packets; ++i) | 404 for (int i = 0; i < num_packets; ++i) |
407 stream_generator_->DropLastPacket(); | 405 stream_generator_->DropLastPacket(); |
408 clock_->AdvanceTimeMilliseconds(kDefaultFramePeriodMs); | 406 clock_->AdvanceTimeMilliseconds(kDefaultFramePeriodMs); |
409 } | 407 } |
410 | 408 |
411 bool DecodeCompleteFrame() { | 409 bool DecodeCompleteFrame() { |
412 uint32_t timestamp = 0; | 410 VCMEncodedFrame* found_frame = jitter_buffer_->NextCompleteFrame(0); |
413 bool found_frame = jitter_buffer_->NextCompleteTimestamp(0, ×tamp); | |
414 if (!found_frame) | 411 if (!found_frame) |
415 return false; | 412 return false; |
416 | 413 |
417 VCMEncodedFrame* frame = jitter_buffer_->ExtractAndSetDecode(timestamp); | 414 VCMEncodedFrame* frame = |
| 415 jitter_buffer_->ExtractAndSetDecode(found_frame->TimeStamp()); |
418 bool ret = (frame != NULL); | 416 bool ret = (frame != NULL); |
419 jitter_buffer_->ReleaseFrame(frame); | 417 jitter_buffer_->ReleaseFrame(frame); |
420 return ret; | 418 return ret; |
421 } | 419 } |
422 | 420 |
423 bool DecodeIncompleteFrame() { | 421 bool DecodeIncompleteFrame() { |
424 uint32_t timestamp = 0; | 422 uint32_t timestamp = 0; |
425 bool found_frame = jitter_buffer_->NextMaybeIncompleteTimestamp(×tamp); | 423 bool found_frame = jitter_buffer_->NextMaybeIncompleteTimestamp(×tamp); |
426 if (!found_frame) | 424 if (!found_frame) |
427 return false; | 425 return false; |
(...skipping 497 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
925 // ------------------------------------------------- | 923 // ------------------------------------------------- |
926 // | 65485 | 65486 | 65487 | 65488 | 65489 | ... | 924 // | 65485 | 65486 | 65487 | 65488 | 65489 | ... |
927 // | pid:5 | pid:6 | pid:7 | pid:8 | pid:9 | ... | 925 // | pid:5 | pid:6 | pid:7 | pid:8 | pid:9 | ... |
928 // | tid:0 | tid:2 | tid:1 | tid:2 | tid:0 | ... | 926 // | tid:0 | tid:2 | tid:1 | tid:2 | tid:0 | ... |
929 // | ss | x | x | x | | | 927 // | ss | x | x | x | | |
930 // ------------------------------------------------- | 928 // ------------------------------------------------- |
931 // |<----------tl0idx:200--------->|<---tl0idx:201--- | 929 // |<----------tl0idx:200--------->|<---tl0idx:201--- |
932 | 930 |
933 bool re = false; | 931 bool re = false; |
934 packet_->codec = kVideoCodecVP9; | 932 packet_->codec = kVideoCodecVP9; |
935 packet_->codecSpecificHeader.codec = kRtpVideoVp9; | 933 packet_->video_header.codec = kRtpVideoVp9; |
936 packet_->isFirstPacket = true; | 934 packet_->isFirstPacket = true; |
937 packet_->markerBit = true; | 935 packet_->markerBit = true; |
938 packet_->codecSpecificHeader.codecHeader.VP9.flexible_mode = false; | 936 packet_->video_header.codecHeader.VP9.flexible_mode = false; |
939 packet_->codecSpecificHeader.codecHeader.VP9.spatial_idx = 0; | 937 packet_->video_header.codecHeader.VP9.spatial_idx = 0; |
940 packet_->codecSpecificHeader.codecHeader.VP9.beginning_of_frame = true; | 938 packet_->video_header.codecHeader.VP9.beginning_of_frame = true; |
941 packet_->codecSpecificHeader.codecHeader.VP9.end_of_frame = true; | 939 packet_->video_header.codecHeader.VP9.end_of_frame = true; |
942 packet_->codecSpecificHeader.codecHeader.VP9.temporal_up_switch = false; | 940 packet_->video_header.codecHeader.VP9.temporal_up_switch = false; |
943 | 941 |
944 packet_->seqNum = 65485; | 942 packet_->seqNum = 65485; |
945 packet_->timestamp = 1000; | 943 packet_->timestamp = 1000; |
946 packet_->frameType = kVideoFrameKey; | 944 packet_->frameType = kVideoFrameKey; |
947 packet_->codecSpecificHeader.codecHeader.VP9.picture_id = 5; | 945 packet_->video_header.codecHeader.VP9.picture_id = 5; |
948 packet_->codecSpecificHeader.codecHeader.VP9.tl0_pic_idx = 200; | 946 packet_->video_header.codecHeader.VP9.tl0_pic_idx = 200; |
949 packet_->codecSpecificHeader.codecHeader.VP9.temporal_idx = 0; | 947 packet_->video_header.codecHeader.VP9.temporal_idx = 0; |
950 packet_->codecSpecificHeader.codecHeader.VP9.ss_data_available = true; | 948 packet_->video_header.codecHeader.VP9.ss_data_available = true; |
951 packet_->codecSpecificHeader.codecHeader.VP9.gof.SetGofInfoVP9( | 949 packet_->video_header.codecHeader.VP9.gof.SetGofInfoVP9( |
952 kTemporalStructureMode3); // kTemporalStructureMode3: 0-2-1-2.. | 950 kTemporalStructureMode3); // kTemporalStructureMode3: 0-2-1-2.. |
953 EXPECT_EQ(kCompleteSession, jitter_buffer_->InsertPacket(*packet_, &re)); | 951 EXPECT_EQ(kCompleteSession, jitter_buffer_->InsertPacket(*packet_, &re)); |
954 | 952 |
955 // Insert next temporal layer 0. | 953 // Insert next temporal layer 0. |
956 packet_->seqNum = 65489; | 954 packet_->seqNum = 65489; |
957 packet_->timestamp = 13000; | 955 packet_->timestamp = 13000; |
958 packet_->frameType = kVideoFrameDelta; | 956 packet_->frameType = kVideoFrameDelta; |
959 packet_->codecSpecificHeader.codecHeader.VP9.picture_id = 9; | 957 packet_->video_header.codecHeader.VP9.picture_id = 9; |
960 packet_->codecSpecificHeader.codecHeader.VP9.tl0_pic_idx = 201; | 958 packet_->video_header.codecHeader.VP9.tl0_pic_idx = 201; |
961 packet_->codecSpecificHeader.codecHeader.VP9.temporal_idx = 0; | 959 packet_->video_header.codecHeader.VP9.temporal_idx = 0; |
962 packet_->codecSpecificHeader.codecHeader.VP9.ss_data_available = false; | 960 packet_->video_header.codecHeader.VP9.ss_data_available = false; |
963 EXPECT_EQ(kCompleteSession, jitter_buffer_->InsertPacket(*packet_, &re)); | 961 EXPECT_EQ(kCompleteSession, jitter_buffer_->InsertPacket(*packet_, &re)); |
964 | 962 |
965 VCMEncodedFrame* frame_out = DecodeCompleteFrame(); | 963 VCMEncodedFrame* frame_out = DecodeCompleteFrame(); |
966 EXPECT_EQ(1000U, frame_out->TimeStamp()); | 964 EXPECT_EQ(1000U, frame_out->TimeStamp()); |
967 EXPECT_EQ(kVideoFrameKey, frame_out->FrameType()); | 965 EXPECT_EQ(kVideoFrameKey, frame_out->FrameType()); |
968 jitter_buffer_->ReleaseFrame(frame_out); | 966 jitter_buffer_->ReleaseFrame(frame_out); |
969 | 967 |
970 frame_out = DecodeCompleteFrame(); | 968 frame_out = DecodeCompleteFrame(); |
971 EXPECT_EQ(13000U, frame_out->TimeStamp()); | 969 EXPECT_EQ(13000U, frame_out->TimeStamp()); |
972 EXPECT_EQ(kVideoFrameDelta, frame_out->FrameType()); | 970 EXPECT_EQ(kVideoFrameDelta, frame_out->FrameType()); |
973 jitter_buffer_->ReleaseFrame(frame_out); | 971 jitter_buffer_->ReleaseFrame(frame_out); |
974 } | 972 } |
975 | 973 |
976 TEST_P(TestBasicJitterBuffer, ReorderedVp9SsData_3TlLayers) { | 974 TEST_P(TestBasicJitterBuffer, ReorderedVp9SsData_3TlLayers) { |
977 // Verify that frames are updated with SS data when SS packet is reordered. | 975 // Verify that frames are updated with SS data when SS packet is reordered. |
978 // -------------------------------- | 976 // -------------------------------- |
979 // | 65486 | 65487 | 65485 |... | 977 // | 65486 | 65487 | 65485 |... |
980 // | pid:6 | pid:7 | pid:5 |... | 978 // | pid:6 | pid:7 | pid:5 |... |
981 // | tid:2 | tid:1 | tid:0 |... | 979 // | tid:2 | tid:1 | tid:0 |... |
982 // | | | ss | | 980 // | | | ss | |
983 // -------------------------------- | 981 // -------------------------------- |
984 // |<--------tl0idx:200--------->| | 982 // |<--------tl0idx:200--------->| |
985 | 983 |
986 bool re = false; | 984 bool re = false; |
987 packet_->codec = kVideoCodecVP9; | 985 packet_->codec = kVideoCodecVP9; |
988 packet_->codecSpecificHeader.codec = kRtpVideoVp9; | 986 packet_->video_header.codec = kRtpVideoVp9; |
989 packet_->isFirstPacket = true; | 987 packet_->isFirstPacket = true; |
990 packet_->markerBit = true; | 988 packet_->markerBit = true; |
991 packet_->codecSpecificHeader.codecHeader.VP9.flexible_mode = false; | 989 packet_->video_header.codecHeader.VP9.flexible_mode = false; |
992 packet_->codecSpecificHeader.codecHeader.VP9.spatial_idx = 0; | 990 packet_->video_header.codecHeader.VP9.spatial_idx = 0; |
993 packet_->codecSpecificHeader.codecHeader.VP9.beginning_of_frame = true; | 991 packet_->video_header.codecHeader.VP9.beginning_of_frame = true; |
994 packet_->codecSpecificHeader.codecHeader.VP9.end_of_frame = true; | 992 packet_->video_header.codecHeader.VP9.end_of_frame = true; |
995 packet_->codecSpecificHeader.codecHeader.VP9.tl0_pic_idx = 200; | 993 packet_->video_header.codecHeader.VP9.tl0_pic_idx = 200; |
996 | 994 |
997 packet_->seqNum = 65486; | 995 packet_->seqNum = 65486; |
998 packet_->timestamp = 6000; | 996 packet_->timestamp = 6000; |
999 packet_->frameType = kVideoFrameDelta; | 997 packet_->frameType = kVideoFrameDelta; |
1000 packet_->codecSpecificHeader.codecHeader.VP9.picture_id = 6; | 998 packet_->video_header.codecHeader.VP9.picture_id = 6; |
1001 packet_->codecSpecificHeader.codecHeader.VP9.temporal_idx = 2; | 999 packet_->video_header.codecHeader.VP9.temporal_idx = 2; |
1002 packet_->codecSpecificHeader.codecHeader.VP9.temporal_up_switch = true; | 1000 packet_->video_header.codecHeader.VP9.temporal_up_switch = true; |
1003 EXPECT_EQ(kCompleteSession, jitter_buffer_->InsertPacket(*packet_, &re)); | 1001 EXPECT_EQ(kCompleteSession, jitter_buffer_->InsertPacket(*packet_, &re)); |
1004 | 1002 |
1005 packet_->seqNum = 65487; | 1003 packet_->seqNum = 65487; |
1006 packet_->timestamp = 9000; | 1004 packet_->timestamp = 9000; |
1007 packet_->frameType = kVideoFrameDelta; | 1005 packet_->frameType = kVideoFrameDelta; |
1008 packet_->codecSpecificHeader.codecHeader.VP9.picture_id = 7; | 1006 packet_->video_header.codecHeader.VP9.picture_id = 7; |
1009 packet_->codecSpecificHeader.codecHeader.VP9.temporal_idx = 1; | 1007 packet_->video_header.codecHeader.VP9.temporal_idx = 1; |
1010 packet_->codecSpecificHeader.codecHeader.VP9.temporal_up_switch = true; | 1008 packet_->video_header.codecHeader.VP9.temporal_up_switch = true; |
1011 EXPECT_EQ(kCompleteSession, jitter_buffer_->InsertPacket(*packet_, &re)); | 1009 EXPECT_EQ(kCompleteSession, jitter_buffer_->InsertPacket(*packet_, &re)); |
1012 | 1010 |
1013 // Insert first frame with SS data. | 1011 // Insert first frame with SS data. |
1014 packet_->seqNum = 65485; | 1012 packet_->seqNum = 65485; |
1015 packet_->timestamp = 3000; | 1013 packet_->timestamp = 3000; |
1016 packet_->frameType = kVideoFrameKey; | 1014 packet_->frameType = kVideoFrameKey; |
1017 packet_->width = 352; | 1015 packet_->width = 352; |
1018 packet_->height = 288; | 1016 packet_->height = 288; |
1019 packet_->codecSpecificHeader.codecHeader.VP9.picture_id = 5; | 1017 packet_->video_header.codecHeader.VP9.picture_id = 5; |
1020 packet_->codecSpecificHeader.codecHeader.VP9.temporal_idx = 0; | 1018 packet_->video_header.codecHeader.VP9.temporal_idx = 0; |
1021 packet_->codecSpecificHeader.codecHeader.VP9.temporal_up_switch = false; | 1019 packet_->video_header.codecHeader.VP9.temporal_up_switch = false; |
1022 packet_->codecSpecificHeader.codecHeader.VP9.ss_data_available = true; | 1020 packet_->video_header.codecHeader.VP9.ss_data_available = true; |
1023 packet_->codecSpecificHeader.codecHeader.VP9.gof.SetGofInfoVP9( | 1021 packet_->video_header.codecHeader.VP9.gof.SetGofInfoVP9( |
1024 kTemporalStructureMode3); // kTemporalStructureMode3: 0-2-1-2.. | 1022 kTemporalStructureMode3); // kTemporalStructureMode3: 0-2-1-2.. |
1025 EXPECT_EQ(kCompleteSession, jitter_buffer_->InsertPacket(*packet_, &re)); | 1023 EXPECT_EQ(kCompleteSession, jitter_buffer_->InsertPacket(*packet_, &re)); |
1026 | 1024 |
1027 VCMEncodedFrame* frame_out = DecodeCompleteFrame(); | 1025 VCMEncodedFrame* frame_out = DecodeCompleteFrame(); |
1028 EXPECT_EQ(3000U, frame_out->TimeStamp()); | 1026 EXPECT_EQ(3000U, frame_out->TimeStamp()); |
1029 EXPECT_EQ(kVideoFrameKey, frame_out->FrameType()); | 1027 EXPECT_EQ(kVideoFrameKey, frame_out->FrameType()); |
1030 EXPECT_EQ(0, frame_out->CodecSpecific()->codecSpecific.VP9.temporal_idx); | 1028 EXPECT_EQ(0, frame_out->CodecSpecific()->codecSpecific.VP9.temporal_idx); |
1031 EXPECT_FALSE( | 1029 EXPECT_FALSE( |
1032 frame_out->CodecSpecific()->codecSpecific.VP9.temporal_up_switch); | 1030 frame_out->CodecSpecific()->codecSpecific.VP9.temporal_up_switch); |
1033 jitter_buffer_->ReleaseFrame(frame_out); | 1031 jitter_buffer_->ReleaseFrame(frame_out); |
(...skipping 20 matching lines...) Expand all Loading... |
1054 // | pid:6 | pid:6 | pid:5 | pid:5 |... | 1052 // | pid:6 | pid:6 | pid:5 | pid:5 |... |
1055 // | tid:1 | tid:1 | tid:0 | tid:0 |... | 1053 // | tid:1 | tid:1 | tid:0 | tid:0 |... |
1056 // | sid:0 | sid:1 | sid:1 | sid:0 |... | 1054 // | sid:0 | sid:1 | sid:1 | sid:0 |... |
1057 // | t:6000 | t:6000 | t:3000 | t:3000 | | 1055 // | t:6000 | t:6000 | t:3000 | t:3000 | |
1058 // | | | | ss | | 1056 // | | | | ss | |
1059 // ----------------------------------------- | 1057 // ----------------------------------------- |
1060 // |<-----------tl0idx:200------------>| | 1058 // |<-----------tl0idx:200------------>| |
1061 | 1059 |
1062 bool re = false; | 1060 bool re = false; |
1063 packet_->codec = kVideoCodecVP9; | 1061 packet_->codec = kVideoCodecVP9; |
1064 packet_->codecSpecificHeader.codec = kRtpVideoVp9; | 1062 packet_->video_header.codec = kRtpVideoVp9; |
1065 packet_->codecSpecificHeader.codecHeader.VP9.flexible_mode = false; | 1063 packet_->video_header.codecHeader.VP9.flexible_mode = false; |
1066 packet_->codecSpecificHeader.codecHeader.VP9.beginning_of_frame = true; | 1064 packet_->video_header.codecHeader.VP9.beginning_of_frame = true; |
1067 packet_->codecSpecificHeader.codecHeader.VP9.end_of_frame = true; | 1065 packet_->video_header.codecHeader.VP9.end_of_frame = true; |
1068 packet_->codecSpecificHeader.codecHeader.VP9.tl0_pic_idx = 200; | 1066 packet_->video_header.codecHeader.VP9.tl0_pic_idx = 200; |
1069 | 1067 |
1070 packet_->isFirstPacket = true; | 1068 packet_->isFirstPacket = true; |
1071 packet_->markerBit = false; | 1069 packet_->markerBit = false; |
1072 packet_->seqNum = 65486; | 1070 packet_->seqNum = 65486; |
1073 packet_->timestamp = 6000; | 1071 packet_->timestamp = 6000; |
1074 packet_->frameType = kVideoFrameDelta; | 1072 packet_->frameType = kVideoFrameDelta; |
1075 packet_->codecSpecificHeader.codecHeader.VP9.spatial_idx = 0; | 1073 packet_->video_header.codecHeader.VP9.spatial_idx = 0; |
1076 packet_->codecSpecificHeader.codecHeader.VP9.picture_id = 6; | 1074 packet_->video_header.codecHeader.VP9.picture_id = 6; |
1077 packet_->codecSpecificHeader.codecHeader.VP9.temporal_idx = 1; | 1075 packet_->video_header.codecHeader.VP9.temporal_idx = 1; |
1078 packet_->codecSpecificHeader.codecHeader.VP9.temporal_up_switch = true; | 1076 packet_->video_header.codecHeader.VP9.temporal_up_switch = true; |
1079 EXPECT_EQ(kIncomplete, jitter_buffer_->InsertPacket(*packet_, &re)); | 1077 EXPECT_EQ(kIncomplete, jitter_buffer_->InsertPacket(*packet_, &re)); |
1080 | 1078 |
1081 packet_->isFirstPacket = false; | 1079 packet_->isFirstPacket = false; |
1082 packet_->markerBit = true; | 1080 packet_->markerBit = true; |
1083 packet_->seqNum = 65487; | 1081 packet_->seqNum = 65487; |
1084 packet_->frameType = kVideoFrameDelta; | 1082 packet_->frameType = kVideoFrameDelta; |
1085 packet_->codecSpecificHeader.codecHeader.VP9.spatial_idx = 1; | 1083 packet_->video_header.codecHeader.VP9.spatial_idx = 1; |
1086 packet_->codecSpecificHeader.codecHeader.VP9.picture_id = 6; | 1084 packet_->video_header.codecHeader.VP9.picture_id = 6; |
1087 packet_->codecSpecificHeader.codecHeader.VP9.temporal_idx = 1; | 1085 packet_->video_header.codecHeader.VP9.temporal_idx = 1; |
1088 packet_->codecSpecificHeader.codecHeader.VP9.temporal_up_switch = true; | 1086 packet_->video_header.codecHeader.VP9.temporal_up_switch = true; |
1089 EXPECT_EQ(kCompleteSession, jitter_buffer_->InsertPacket(*packet_, &re)); | 1087 EXPECT_EQ(kCompleteSession, jitter_buffer_->InsertPacket(*packet_, &re)); |
1090 | 1088 |
1091 packet_->isFirstPacket = false; | 1089 packet_->isFirstPacket = false; |
1092 packet_->markerBit = true; | 1090 packet_->markerBit = true; |
1093 packet_->seqNum = 65485; | 1091 packet_->seqNum = 65485; |
1094 packet_->timestamp = 3000; | 1092 packet_->timestamp = 3000; |
1095 packet_->frameType = kVideoFrameKey; | 1093 packet_->frameType = kVideoFrameKey; |
1096 packet_->codecSpecificHeader.codecHeader.VP9.spatial_idx = 1; | 1094 packet_->video_header.codecHeader.VP9.spatial_idx = 1; |
1097 packet_->codecSpecificHeader.codecHeader.VP9.picture_id = 5; | 1095 packet_->video_header.codecHeader.VP9.picture_id = 5; |
1098 packet_->codecSpecificHeader.codecHeader.VP9.temporal_idx = 0; | 1096 packet_->video_header.codecHeader.VP9.temporal_idx = 0; |
1099 packet_->codecSpecificHeader.codecHeader.VP9.temporal_up_switch = false; | 1097 packet_->video_header.codecHeader.VP9.temporal_up_switch = false; |
1100 EXPECT_EQ(kIncomplete, jitter_buffer_->InsertPacket(*packet_, &re)); | 1098 EXPECT_EQ(kIncomplete, jitter_buffer_->InsertPacket(*packet_, &re)); |
1101 | 1099 |
1102 // Insert first frame with SS data. | 1100 // Insert first frame with SS data. |
1103 packet_->isFirstPacket = true; | 1101 packet_->isFirstPacket = true; |
1104 packet_->markerBit = false; | 1102 packet_->markerBit = false; |
1105 packet_->seqNum = 65484; | 1103 packet_->seqNum = 65484; |
1106 packet_->frameType = kVideoFrameKey; | 1104 packet_->frameType = kVideoFrameKey; |
1107 packet_->width = 352; | 1105 packet_->width = 352; |
1108 packet_->height = 288; | 1106 packet_->height = 288; |
1109 packet_->codecSpecificHeader.codecHeader.VP9.spatial_idx = 0; | 1107 packet_->video_header.codecHeader.VP9.spatial_idx = 0; |
1110 packet_->codecSpecificHeader.codecHeader.VP9.picture_id = 5; | 1108 packet_->video_header.codecHeader.VP9.picture_id = 5; |
1111 packet_->codecSpecificHeader.codecHeader.VP9.temporal_idx = 0; | 1109 packet_->video_header.codecHeader.VP9.temporal_idx = 0; |
1112 packet_->codecSpecificHeader.codecHeader.VP9.temporal_up_switch = false; | 1110 packet_->video_header.codecHeader.VP9.temporal_up_switch = false; |
1113 packet_->codecSpecificHeader.codecHeader.VP9.ss_data_available = true; | 1111 packet_->video_header.codecHeader.VP9.ss_data_available = true; |
1114 packet_->codecSpecificHeader.codecHeader.VP9.gof.SetGofInfoVP9( | 1112 packet_->video_header.codecHeader.VP9.gof.SetGofInfoVP9( |
1115 kTemporalStructureMode2); // kTemporalStructureMode3: 0-1-0-1.. | 1113 kTemporalStructureMode2); // kTemporalStructureMode3: 0-1-0-1.. |
1116 EXPECT_EQ(kCompleteSession, jitter_buffer_->InsertPacket(*packet_, &re)); | 1114 EXPECT_EQ(kCompleteSession, jitter_buffer_->InsertPacket(*packet_, &re)); |
1117 | 1115 |
1118 VCMEncodedFrame* frame_out = DecodeCompleteFrame(); | 1116 VCMEncodedFrame* frame_out = DecodeCompleteFrame(); |
1119 EXPECT_EQ(3000U, frame_out->TimeStamp()); | 1117 EXPECT_EQ(3000U, frame_out->TimeStamp()); |
1120 EXPECT_EQ(kVideoFrameKey, frame_out->FrameType()); | 1118 EXPECT_EQ(kVideoFrameKey, frame_out->FrameType()); |
1121 EXPECT_EQ(0, frame_out->CodecSpecific()->codecSpecific.VP9.temporal_idx); | 1119 EXPECT_EQ(0, frame_out->CodecSpecific()->codecSpecific.VP9.temporal_idx); |
1122 EXPECT_FALSE( | 1120 EXPECT_FALSE( |
1123 frame_out->CodecSpecific()->codecSpecific.VP9.temporal_up_switch); | 1121 frame_out->CodecSpecific()->codecSpecific.VP9.temporal_up_switch); |
1124 jitter_buffer_->ReleaseFrame(frame_out); | 1122 jitter_buffer_->ReleaseFrame(frame_out); |
(...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1170 packet_->frameType = kVideoFrameKey; | 1168 packet_->frameType = kVideoFrameKey; |
1171 packet_->isFirstPacket = true; | 1169 packet_->isFirstPacket = true; |
1172 packet_->markerBit = false; | 1170 packet_->markerBit = false; |
1173 packet_->seqNum = seq_num_; | 1171 packet_->seqNum = seq_num_; |
1174 packet_->timestamp = timestamp_; | 1172 packet_->timestamp = timestamp_; |
1175 | 1173 |
1176 bool retransmitted = false; | 1174 bool retransmitted = false; |
1177 EXPECT_EQ(kIncomplete, | 1175 EXPECT_EQ(kIncomplete, |
1178 jitter_buffer_->InsertPacket(*packet_, &retransmitted)); | 1176 jitter_buffer_->InsertPacket(*packet_, &retransmitted)); |
1179 uint32_t timestamp = 0; | 1177 uint32_t timestamp = 0; |
1180 EXPECT_FALSE(jitter_buffer_->NextCompleteTimestamp(0, ×tamp)); | 1178 EXPECT_EQ(jitter_buffer_->NextCompleteFrame(0), nullptr); |
1181 EXPECT_FALSE(jitter_buffer_->NextMaybeIncompleteTimestamp(×tamp)); | 1179 EXPECT_FALSE(jitter_buffer_->NextMaybeIncompleteTimestamp(×tamp)); |
1182 | 1180 |
1183 packet_->isFirstPacket = false; | 1181 packet_->isFirstPacket = false; |
1184 for (int i = 1; i < 9; ++i) { | 1182 for (int i = 1; i < 9; ++i) { |
1185 packet_->seqNum++; | 1183 packet_->seqNum++; |
1186 EXPECT_EQ(kIncomplete, | 1184 EXPECT_EQ(kIncomplete, |
1187 jitter_buffer_->InsertPacket(*packet_, &retransmitted)); | 1185 jitter_buffer_->InsertPacket(*packet_, &retransmitted)); |
1188 EXPECT_FALSE(jitter_buffer_->NextCompleteTimestamp(0, ×tamp)); | 1186 EXPECT_EQ(jitter_buffer_->NextCompleteFrame(0), nullptr); |
1189 EXPECT_FALSE(jitter_buffer_->NextMaybeIncompleteTimestamp(×tamp)); | 1187 EXPECT_FALSE(jitter_buffer_->NextMaybeIncompleteTimestamp(×tamp)); |
1190 } | 1188 } |
1191 | 1189 |
1192 // last packet | 1190 // last packet |
1193 packet_->markerBit = true; | 1191 packet_->markerBit = true; |
1194 packet_->seqNum++; | 1192 packet_->seqNum++; |
1195 | 1193 |
1196 EXPECT_EQ(kCompleteSession, | 1194 EXPECT_EQ(kCompleteSession, |
1197 jitter_buffer_->InsertPacket(*packet_, &retransmitted)); | 1195 jitter_buffer_->InsertPacket(*packet_, &retransmitted)); |
1198 VCMEncodedFrame* frame_out = DecodeCompleteFrame(); | 1196 VCMEncodedFrame* frame_out = DecodeCompleteFrame(); |
1199 CheckOutFrame(frame_out, 10 * size_, false); | 1197 CheckOutFrame(frame_out, 10 * size_, false); |
1200 EXPECT_EQ(kVideoFrameKey, frame_out->FrameType()); | 1198 EXPECT_EQ(kVideoFrameKey, frame_out->FrameType()); |
1201 jitter_buffer_->ReleaseFrame(frame_out); | 1199 jitter_buffer_->ReleaseFrame(frame_out); |
1202 | 1200 |
1203 // An incomplete frame can only be decoded once a subsequent frame has begun | 1201 // An incomplete frame can only be decoded once a subsequent frame has begun |
1204 // to arrive. Insert packet in distant frame for this purpose. | 1202 // to arrive. Insert packet in distant frame for this purpose. |
1205 packet_->frameType = kVideoFrameDelta; | 1203 packet_->frameType = kVideoFrameDelta; |
1206 packet_->isFirstPacket = true; | 1204 packet_->isFirstPacket = true; |
1207 packet_->markerBit = false; | 1205 packet_->markerBit = false; |
1208 packet_->seqNum += 100; | 1206 packet_->seqNum += 100; |
1209 packet_->timestamp += 33 * 90 * 8; | 1207 packet_->timestamp += 33 * 90 * 8; |
1210 | 1208 |
1211 EXPECT_EQ(kDecodableSession, | 1209 EXPECT_EQ(kDecodableSession, |
1212 jitter_buffer_->InsertPacket(*packet_, &retransmitted)); | 1210 jitter_buffer_->InsertPacket(*packet_, &retransmitted)); |
1213 EXPECT_FALSE(jitter_buffer_->NextCompleteTimestamp(0, ×tamp)); | 1211 EXPECT_EQ(jitter_buffer_->NextCompleteFrame(0), nullptr); |
1214 EXPECT_FALSE(jitter_buffer_->NextMaybeIncompleteTimestamp(×tamp)); | 1212 EXPECT_FALSE(jitter_buffer_->NextMaybeIncompleteTimestamp(×tamp)); |
1215 | 1213 |
1216 // Insert second frame | 1214 // Insert second frame |
1217 packet_->seqNum -= 99; | 1215 packet_->seqNum -= 99; |
1218 packet_->timestamp -= 33 * 90 * 7; | 1216 packet_->timestamp -= 33 * 90 * 7; |
1219 | 1217 |
1220 EXPECT_EQ(kDecodableSession, | 1218 EXPECT_EQ(kDecodableSession, |
1221 jitter_buffer_->InsertPacket(*packet_, &retransmitted)); | 1219 jitter_buffer_->InsertPacket(*packet_, &retransmitted)); |
1222 EXPECT_FALSE(jitter_buffer_->NextCompleteTimestamp(0, ×tamp)); | 1220 EXPECT_EQ(jitter_buffer_->NextCompleteFrame(0), nullptr); |
1223 EXPECT_TRUE(jitter_buffer_->NextMaybeIncompleteTimestamp(×tamp)); | 1221 EXPECT_TRUE(jitter_buffer_->NextMaybeIncompleteTimestamp(×tamp)); |
1224 | 1222 |
1225 packet_->isFirstPacket = false; | 1223 packet_->isFirstPacket = false; |
1226 for (int i = 1; i < 8; ++i) { | 1224 for (int i = 1; i < 8; ++i) { |
1227 packet_->seqNum++; | 1225 packet_->seqNum++; |
1228 EXPECT_EQ(kDecodableSession, | 1226 EXPECT_EQ(kDecodableSession, |
1229 jitter_buffer_->InsertPacket(*packet_, &retransmitted)); | 1227 jitter_buffer_->InsertPacket(*packet_, &retransmitted)); |
1230 EXPECT_FALSE(jitter_buffer_->NextCompleteTimestamp(0, ×tamp)); | 1228 EXPECT_EQ(jitter_buffer_->NextCompleteFrame(0), nullptr); |
1231 EXPECT_TRUE(jitter_buffer_->NextMaybeIncompleteTimestamp(×tamp)); | 1229 EXPECT_TRUE(jitter_buffer_->NextMaybeIncompleteTimestamp(×tamp)); |
1232 } | 1230 } |
1233 | 1231 |
1234 packet_->seqNum++; | 1232 packet_->seqNum++; |
1235 EXPECT_EQ(kDecodableSession, | 1233 EXPECT_EQ(kDecodableSession, |
1236 jitter_buffer_->InsertPacket(*packet_, &retransmitted)); | 1234 jitter_buffer_->InsertPacket(*packet_, &retransmitted)); |
1237 EXPECT_FALSE(jitter_buffer_->NextCompleteTimestamp(0, ×tamp)); | 1235 EXPECT_EQ(jitter_buffer_->NextCompleteFrame(0), nullptr); |
1238 EXPECT_TRUE(jitter_buffer_->NextMaybeIncompleteTimestamp(×tamp)); | 1236 EXPECT_TRUE(jitter_buffer_->NextMaybeIncompleteTimestamp(×tamp)); |
1239 | 1237 |
1240 frame_out = DecodeIncompleteFrame(); | 1238 frame_out = DecodeIncompleteFrame(); |
1241 ASSERT_FALSE(NULL == frame_out); | 1239 ASSERT_FALSE(NULL == frame_out); |
1242 CheckOutFrame(frame_out, 9 * size_, false); | 1240 CheckOutFrame(frame_out, 9 * size_, false); |
1243 EXPECT_EQ(kVideoFrameDelta, frame_out->FrameType()); | 1241 EXPECT_EQ(kVideoFrameDelta, frame_out->FrameType()); |
1244 jitter_buffer_->ReleaseFrame(frame_out); | 1242 jitter_buffer_->ReleaseFrame(frame_out); |
1245 | 1243 |
1246 packet_->markerBit = true; | 1244 packet_->markerBit = true; |
1247 packet_->seqNum++; | 1245 packet_->seqNum++; |
(...skipping 21 matching lines...) Expand all Loading... |
1269 // An incomplete frame can only be decoded once a subsequent frame has begun | 1267 // An incomplete frame can only be decoded once a subsequent frame has begun |
1270 // to arrive. Insert packet in distant frame for this purpose. | 1268 // to arrive. Insert packet in distant frame for this purpose. |
1271 packet_->frameType = kVideoFrameDelta; | 1269 packet_->frameType = kVideoFrameDelta; |
1272 packet_->isFirstPacket = false; | 1270 packet_->isFirstPacket = false; |
1273 packet_->markerBit = false; | 1271 packet_->markerBit = false; |
1274 packet_->seqNum += 100; | 1272 packet_->seqNum += 100; |
1275 packet_->timestamp += 33 * 90 * 8; | 1273 packet_->timestamp += 33 * 90 * 8; |
1276 EXPECT_EQ(kIncomplete, | 1274 EXPECT_EQ(kIncomplete, |
1277 jitter_buffer_->InsertPacket(*packet_, &retransmitted)); | 1275 jitter_buffer_->InsertPacket(*packet_, &retransmitted)); |
1278 uint32_t timestamp; | 1276 uint32_t timestamp; |
1279 EXPECT_FALSE(jitter_buffer_->NextCompleteTimestamp(0, ×tamp)); | 1277 EXPECT_EQ(jitter_buffer_->NextCompleteFrame(0), nullptr); |
1280 EXPECT_FALSE(jitter_buffer_->NextMaybeIncompleteTimestamp(×tamp)); | 1278 EXPECT_FALSE(jitter_buffer_->NextMaybeIncompleteTimestamp(×tamp)); |
1281 | 1279 |
1282 // Insert second frame - an incomplete key frame. | 1280 // Insert second frame - an incomplete key frame. |
1283 packet_->frameType = kVideoFrameKey; | 1281 packet_->frameType = kVideoFrameKey; |
1284 packet_->isFirstPacket = true; | 1282 packet_->isFirstPacket = true; |
1285 packet_->seqNum -= 99; | 1283 packet_->seqNum -= 99; |
1286 packet_->timestamp -= 33 * 90 * 7; | 1284 packet_->timestamp -= 33 * 90 * 7; |
1287 | 1285 |
1288 EXPECT_EQ(kIncomplete, | 1286 EXPECT_EQ(kIncomplete, |
1289 jitter_buffer_->InsertPacket(*packet_, &retransmitted)); | 1287 jitter_buffer_->InsertPacket(*packet_, &retransmitted)); |
1290 EXPECT_FALSE(jitter_buffer_->NextCompleteTimestamp(0, ×tamp)); | 1288 EXPECT_EQ(jitter_buffer_->NextCompleteFrame(0), nullptr); |
1291 EXPECT_FALSE(jitter_buffer_->NextMaybeIncompleteTimestamp(×tamp)); | 1289 EXPECT_FALSE(jitter_buffer_->NextMaybeIncompleteTimestamp(×tamp)); |
1292 | 1290 |
1293 // Insert a few more packets. Make sure we're waiting for the key frame to be | 1291 // Insert a few more packets. Make sure we're waiting for the key frame to be |
1294 // complete. | 1292 // complete. |
1295 packet_->isFirstPacket = false; | 1293 packet_->isFirstPacket = false; |
1296 for (int i = 1; i < 5; ++i) { | 1294 for (int i = 1; i < 5; ++i) { |
1297 packet_->seqNum++; | 1295 packet_->seqNum++; |
1298 EXPECT_EQ(kIncomplete, | 1296 EXPECT_EQ(kIncomplete, |
1299 jitter_buffer_->InsertPacket(*packet_, &retransmitted)); | 1297 jitter_buffer_->InsertPacket(*packet_, &retransmitted)); |
1300 EXPECT_FALSE(jitter_buffer_->NextCompleteTimestamp(0, ×tamp)); | 1298 EXPECT_EQ(jitter_buffer_->NextCompleteFrame(0), nullptr); |
1301 EXPECT_FALSE(jitter_buffer_->NextMaybeIncompleteTimestamp(×tamp)); | 1299 EXPECT_FALSE(jitter_buffer_->NextMaybeIncompleteTimestamp(×tamp)); |
1302 } | 1300 } |
1303 | 1301 |
1304 // Complete key frame. | 1302 // Complete key frame. |
1305 packet_->markerBit = true; | 1303 packet_->markerBit = true; |
1306 packet_->seqNum++; | 1304 packet_->seqNum++; |
1307 EXPECT_EQ(kCompleteSession, | 1305 EXPECT_EQ(kCompleteSession, |
1308 jitter_buffer_->InsertPacket(*packet_, &retransmitted)); | 1306 jitter_buffer_->InsertPacket(*packet_, &retransmitted)); |
1309 frame_out = DecodeCompleteFrame(); | 1307 frame_out = DecodeCompleteFrame(); |
1310 CheckOutFrame(frame_out, 6 * size_, false); | 1308 CheckOutFrame(frame_out, 6 * size_, false); |
(...skipping 22 matching lines...) Expand all Loading... |
1333 // An incomplete frame can only be decoded once a subsequent frame has begun | 1331 // An incomplete frame can only be decoded once a subsequent frame has begun |
1334 // to arrive. Insert packet in distant frame for this purpose. | 1332 // to arrive. Insert packet in distant frame for this purpose. |
1335 packet_->frameType = kVideoFrameDelta; | 1333 packet_->frameType = kVideoFrameDelta; |
1336 packet_->isFirstPacket = false; | 1334 packet_->isFirstPacket = false; |
1337 packet_->markerBit = false; | 1335 packet_->markerBit = false; |
1338 packet_->seqNum += 100; | 1336 packet_->seqNum += 100; |
1339 packet_->timestamp += 33 * 90 * 8; | 1337 packet_->timestamp += 33 * 90 * 8; |
1340 EXPECT_EQ(kIncomplete, | 1338 EXPECT_EQ(kIncomplete, |
1341 jitter_buffer_->InsertPacket(*packet_, &retransmitted)); | 1339 jitter_buffer_->InsertPacket(*packet_, &retransmitted)); |
1342 uint32_t timestamp; | 1340 uint32_t timestamp; |
1343 EXPECT_FALSE(jitter_buffer_->NextCompleteTimestamp(0, ×tamp)); | 1341 EXPECT_EQ(jitter_buffer_->NextCompleteFrame(0), nullptr); |
1344 EXPECT_FALSE(jitter_buffer_->NextMaybeIncompleteTimestamp(×tamp)); | 1342 EXPECT_FALSE(jitter_buffer_->NextMaybeIncompleteTimestamp(×tamp)); |
1345 | 1343 |
1346 // Insert second frame with the first packet missing. Make sure we're waiting | 1344 // Insert second frame with the first packet missing. Make sure we're waiting |
1347 // for the key frame to be complete. | 1345 // for the key frame to be complete. |
1348 packet_->seqNum -= 98; | 1346 packet_->seqNum -= 98; |
1349 packet_->timestamp -= 33 * 90 * 7; | 1347 packet_->timestamp -= 33 * 90 * 7; |
1350 | 1348 |
1351 EXPECT_EQ(kIncomplete, | 1349 EXPECT_EQ(kIncomplete, |
1352 jitter_buffer_->InsertPacket(*packet_, &retransmitted)); | 1350 jitter_buffer_->InsertPacket(*packet_, &retransmitted)); |
1353 EXPECT_FALSE(jitter_buffer_->NextCompleteTimestamp(0, ×tamp)); | 1351 EXPECT_EQ(jitter_buffer_->NextCompleteFrame(0), nullptr); |
1354 EXPECT_FALSE(jitter_buffer_->NextMaybeIncompleteTimestamp(×tamp)); | 1352 EXPECT_FALSE(jitter_buffer_->NextMaybeIncompleteTimestamp(×tamp)); |
1355 | 1353 |
1356 for (int i = 0; i < 5; ++i) { | 1354 for (int i = 0; i < 5; ++i) { |
1357 packet_->seqNum++; | 1355 packet_->seqNum++; |
1358 EXPECT_EQ(kIncomplete, | 1356 EXPECT_EQ(kIncomplete, |
1359 jitter_buffer_->InsertPacket(*packet_, &retransmitted)); | 1357 jitter_buffer_->InsertPacket(*packet_, &retransmitted)); |
1360 EXPECT_FALSE(jitter_buffer_->NextCompleteTimestamp(0, ×tamp)); | 1358 EXPECT_EQ(jitter_buffer_->NextCompleteFrame(0), nullptr); |
1361 EXPECT_FALSE(jitter_buffer_->NextMaybeIncompleteTimestamp(×tamp)); | 1359 EXPECT_FALSE(jitter_buffer_->NextMaybeIncompleteTimestamp(×tamp)); |
1362 } | 1360 } |
1363 | 1361 |
1364 // Add first packet. Frame should now be decodable, but incomplete. | 1362 // Add first packet. Frame should now be decodable, but incomplete. |
1365 packet_->isFirstPacket = true; | 1363 packet_->isFirstPacket = true; |
1366 packet_->seqNum -= 6; | 1364 packet_->seqNum -= 6; |
1367 EXPECT_EQ(kDecodableSession, | 1365 EXPECT_EQ(kDecodableSession, |
1368 jitter_buffer_->InsertPacket(*packet_, &retransmitted)); | 1366 jitter_buffer_->InsertPacket(*packet_, &retransmitted)); |
1369 EXPECT_FALSE(jitter_buffer_->NextCompleteTimestamp(0, ×tamp)); | 1367 EXPECT_EQ(jitter_buffer_->NextCompleteFrame(0), nullptr); |
1370 EXPECT_TRUE(jitter_buffer_->NextMaybeIncompleteTimestamp(×tamp)); | 1368 EXPECT_TRUE(jitter_buffer_->NextMaybeIncompleteTimestamp(×tamp)); |
1371 | 1369 |
1372 frame_out = DecodeIncompleteFrame(); | 1370 frame_out = DecodeIncompleteFrame(); |
1373 CheckOutFrame(frame_out, 7 * size_, false); | 1371 CheckOutFrame(frame_out, 7 * size_, false); |
1374 EXPECT_EQ(kVideoFrameDelta, frame_out->FrameType()); | 1372 EXPECT_EQ(kVideoFrameDelta, frame_out->FrameType()); |
1375 jitter_buffer_->ReleaseFrame(frame_out); | 1373 jitter_buffer_->ReleaseFrame(frame_out); |
1376 } | 1374 } |
1377 | 1375 |
1378 TEST_P(TestBasicJitterBuffer, DiscontinuousStreamWhenDecodingWithErrors) { | 1376 TEST_P(TestBasicJitterBuffer, DiscontinuousStreamWhenDecodingWithErrors) { |
1379 // Will use one packet per frame. | 1377 // Will use one packet per frame. |
1380 jitter_buffer_->SetDecodeErrorMode(kWithErrors); | 1378 jitter_buffer_->SetDecodeErrorMode(kWithErrors); |
1381 packet_->frameType = kVideoFrameKey; | 1379 packet_->frameType = kVideoFrameKey; |
1382 packet_->isFirstPacket = true; | 1380 packet_->isFirstPacket = true; |
1383 packet_->markerBit = true; | 1381 packet_->markerBit = true; |
1384 packet_->seqNum = seq_num_; | 1382 packet_->seqNum = seq_num_; |
1385 packet_->timestamp = timestamp_; | 1383 packet_->timestamp = timestamp_; |
1386 bool retransmitted = false; | 1384 bool retransmitted = false; |
1387 EXPECT_EQ(kCompleteSession, | 1385 EXPECT_EQ(kCompleteSession, |
1388 jitter_buffer_->InsertPacket(*packet_, &retransmitted)); | 1386 jitter_buffer_->InsertPacket(*packet_, &retransmitted)); |
1389 uint32_t next_timestamp; | 1387 uint32_t next_timestamp; |
1390 EXPECT_TRUE(jitter_buffer_->NextCompleteTimestamp(0, &next_timestamp)); | 1388 VCMEncodedFrame* frame = jitter_buffer_->NextCompleteFrame(0); |
1391 EXPECT_EQ(packet_->timestamp, next_timestamp); | 1389 EXPECT_NE(frame, nullptr); |
1392 VCMEncodedFrame* frame = jitter_buffer_->ExtractAndSetDecode(next_timestamp); | 1390 EXPECT_EQ(packet_->timestamp, frame->TimeStamp()); |
| 1391 frame = jitter_buffer_->ExtractAndSetDecode(frame->TimeStamp()); |
1393 EXPECT_TRUE(frame != NULL); | 1392 EXPECT_TRUE(frame != NULL); |
1394 jitter_buffer_->ReleaseFrame(frame); | 1393 jitter_buffer_->ReleaseFrame(frame); |
1395 | 1394 |
1396 // Drop a complete frame. | 1395 // Drop a complete frame. |
1397 timestamp_ += 2 * 33 * 90; | 1396 timestamp_ += 2 * 33 * 90; |
1398 seq_num_ += 2; | 1397 seq_num_ += 2; |
1399 packet_->frameType = kVideoFrameDelta; | 1398 packet_->frameType = kVideoFrameDelta; |
1400 packet_->isFirstPacket = true; | 1399 packet_->isFirstPacket = true; |
1401 packet_->markerBit = false; | 1400 packet_->markerBit = false; |
1402 packet_->seqNum = seq_num_; | 1401 packet_->seqNum = seq_num_; |
1403 packet_->timestamp = timestamp_; | 1402 packet_->timestamp = timestamp_; |
1404 EXPECT_EQ(kDecodableSession, | 1403 EXPECT_EQ(kDecodableSession, |
1405 jitter_buffer_->InsertPacket(*packet_, &retransmitted)); | 1404 jitter_buffer_->InsertPacket(*packet_, &retransmitted)); |
1406 // Insert a packet (so the previous one will be released). | 1405 // Insert a packet (so the previous one will be released). |
1407 timestamp_ += 33 * 90; | 1406 timestamp_ += 33 * 90; |
1408 seq_num_ += 2; | 1407 seq_num_ += 2; |
1409 packet_->frameType = kVideoFrameDelta; | 1408 packet_->frameType = kVideoFrameDelta; |
1410 packet_->isFirstPacket = true; | 1409 packet_->isFirstPacket = true; |
1411 packet_->markerBit = false; | 1410 packet_->markerBit = false; |
1412 packet_->seqNum = seq_num_; | 1411 packet_->seqNum = seq_num_; |
1413 packet_->timestamp = timestamp_; | 1412 packet_->timestamp = timestamp_; |
1414 EXPECT_EQ(kDecodableSession, | 1413 EXPECT_EQ(kDecodableSession, |
1415 jitter_buffer_->InsertPacket(*packet_, &retransmitted)); | 1414 jitter_buffer_->InsertPacket(*packet_, &retransmitted)); |
1416 EXPECT_FALSE(jitter_buffer_->NextCompleteTimestamp(0, &next_timestamp)); | 1415 EXPECT_EQ(jitter_buffer_->NextCompleteFrame(0), nullptr); |
1417 EXPECT_TRUE(jitter_buffer_->NextMaybeIncompleteTimestamp(&next_timestamp)); | 1416 EXPECT_TRUE(jitter_buffer_->NextMaybeIncompleteTimestamp(&next_timestamp)); |
1418 EXPECT_EQ(packet_->timestamp - 33 * 90, next_timestamp); | 1417 EXPECT_EQ(packet_->timestamp - 33 * 90, next_timestamp); |
1419 } | 1418 } |
1420 | 1419 |
1421 TEST_P(TestBasicJitterBuffer, PacketLoss) { | 1420 TEST_P(TestBasicJitterBuffer, PacketLoss) { |
1422 // Verify missing packets statistics and not decodable packets statistics. | 1421 // Verify missing packets statistics and not decodable packets statistics. |
1423 // Insert 10 frames consisting of 4 packets and remove one from all of them. | 1422 // Insert 10 frames consisting of 4 packets and remove one from all of them. |
1424 // The last packet is an empty (non-media) packet. | 1423 // The last packet is an empty (non-media) packet. |
1425 | 1424 |
1426 // Select a start seqNum which triggers a difficult wrap situation | 1425 // Select a start seqNum which triggers a difficult wrap situation |
(...skipping 1232 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2659 | 2658 |
2660 // Stream should be decodable from this point. | 2659 // Stream should be decodable from this point. |
2661 clock_->AdvanceTimeMilliseconds(kDefaultFramePeriodMs); | 2660 clock_->AdvanceTimeMilliseconds(kDefaultFramePeriodMs); |
2662 InsertFrame(kVideoFrameDelta); | 2661 InsertFrame(kVideoFrameDelta); |
2663 EXPECT_TRUE(DecodeCompleteFrame()); | 2662 EXPECT_TRUE(DecodeCompleteFrame()); |
2664 nack_list = jitter_buffer_->GetNackList(&extended); | 2663 nack_list = jitter_buffer_->GetNackList(&extended); |
2665 EXPECT_EQ(0u, nack_list.size()); | 2664 EXPECT_EQ(0u, nack_list.size()); |
2666 } | 2665 } |
2667 | 2666 |
2668 } // namespace webrtc | 2667 } // namespace webrtc |
OLD | NEW |