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 |
11 #include <string.h> | 11 #include <string.h> |
12 | 12 |
13 #include <list> | 13 #include <list> |
14 | 14 |
15 #include "testing/gtest/include/gtest/gtest.h" | 15 #include "testing/gtest/include/gtest/gtest.h" |
16 #include "webrtc/modules/video_coding/main/source/frame_buffer.h" | 16 #include "webrtc/modules/video_coding/main/source/frame_buffer.h" |
17 #include "webrtc/modules/video_coding/main/source/jitter_buffer.h" | 17 #include "webrtc/modules/video_coding/main/source/jitter_buffer.h" |
18 #include "webrtc/modules/video_coding/main/source/media_opt_util.h" | 18 #include "webrtc/modules/video_coding/main/source/media_opt_util.h" |
19 #include "webrtc/modules/video_coding/main/source/packet.h" | 19 #include "webrtc/modules/video_coding/main/source/packet.h" |
20 #include "webrtc/modules/video_coding/main/source/test/stream_generator.h" | 20 #include "webrtc/modules/video_coding/main/source/test/stream_generator.h" |
21 #include "webrtc/modules/video_coding/main/test/test_util.h" | 21 #include "webrtc/modules/video_coding/main/test/test_util.h" |
22 #include "webrtc/system_wrappers/interface/clock.h" | 22 #include "webrtc/system_wrappers/interface/clock.h" |
23 #include "webrtc/system_wrappers/interface/metrics.h" | 23 #include "webrtc/system_wrappers/interface/metrics.h" |
24 #include "webrtc/test/histogram.h" | 24 #include "webrtc/test/histogram.h" |
25 | 25 |
26 namespace webrtc { | 26 namespace webrtc { |
27 | 27 |
28 namespace { | |
29 const uint32_t kProcessIntervalSec = 60; | |
30 } // namespace | |
31 | |
32 class Vp9SsMapTest : public ::testing::Test { | |
33 protected: | |
34 virtual void SetUp() { | |
35 uint16_t seq_num = 1234; | |
36 uint32_t timestamp = 1; | |
37 int length = 1400; | |
38 packet_.reset(new VCMPacket(data_, length, seq_num, timestamp, true)); | |
39 packet_->isFirstPacket = true; | |
40 packet_->markerBit = true; | |
41 packet_->frameType = kVideoFrameKey; | |
42 packet_->codec = kVideoCodecVP9; | |
43 packet_->codecSpecificHeader.codec = kRtpVideoVp9; | |
44 packet_->codecSpecificHeader.codecHeader.VP9.flexible_mode = false; | |
45 packet_->codecSpecificHeader.codecHeader.VP9.gof_idx = 0; | |
46 packet_->codecSpecificHeader.codecHeader.VP9.temporal_idx = kNoTemporalIdx; | |
47 packet_->codecSpecificHeader.codecHeader.VP9.temporal_up_switch = false; | |
48 packet_->codecSpecificHeader.codecHeader.VP9.ss_data_available = true; | |
49 packet_->codecSpecificHeader.codecHeader.VP9.gof.SetGofInfoVP9( | |
50 kTemporalStructureMode3); // kTemporalStructureMode3: 0-2-1-2.. | |
51 } | |
52 | |
53 Vp9SsMap map_; | |
54 uint8_t data_[1500]; | |
55 rtc::scoped_ptr<VCMPacket> packet_; | |
stefan-webrtc
2015/10/16 12:26:11
No need for a scoped_ptr
åsapersson
2015/10/20 13:32:20
Done.
| |
56 }; | |
57 | |
58 TEST_F(Vp9SsMapTest, Insert) { | |
59 EXPECT_TRUE(map_.Insert(*packet_)); | |
60 } | |
61 | |
62 TEST_F(Vp9SsMapTest, Insert_NoSsData) { | |
63 packet_->codecSpecificHeader.codecHeader.VP9.ss_data_available = false; | |
64 EXPECT_FALSE(map_.Insert(*packet_)); | |
65 } | |
66 | |
67 TEST_F(Vp9SsMapTest, Find) { | |
68 EXPECT_TRUE(map_.Insert(*packet_)); | |
69 Vp9SsMap::SsMap::const_iterator it; | |
70 EXPECT_TRUE(map_.Find(packet_->timestamp, &it)); | |
71 EXPECT_EQ(packet_->timestamp, it->first); | |
72 } | |
73 | |
74 TEST_F(Vp9SsMapTest, Find_WithWrap) { | |
75 const uint32_t kSsTimestamp1 = 0xFFFFFFFF; | |
76 const uint32_t kSsTimestamp2 = 100; | |
77 packet_->timestamp = kSsTimestamp1; | |
78 EXPECT_TRUE(map_.Insert(*packet_)); | |
79 packet_->timestamp = kSsTimestamp2; | |
80 EXPECT_TRUE(map_.Insert(*packet_)); | |
81 Vp9SsMap::SsMap::const_iterator it; | |
82 EXPECT_FALSE(map_.Find(kSsTimestamp1 - 1, &it)); | |
83 EXPECT_TRUE(map_.Find(kSsTimestamp1, &it)); | |
84 EXPECT_EQ(kSsTimestamp1, it->first); | |
85 EXPECT_TRUE(map_.Find(kSsTimestamp1 + 1, &it)); | |
86 EXPECT_EQ(kSsTimestamp1, it->first); | |
87 EXPECT_TRUE(map_.Find(kSsTimestamp2 - 1, &it)); | |
88 EXPECT_EQ(kSsTimestamp1, it->first); | |
89 EXPECT_TRUE(map_.Find(kSsTimestamp2, &it)); | |
90 EXPECT_EQ(kSsTimestamp2, it->first); | |
91 EXPECT_TRUE(map_.Find(kSsTimestamp2 + 1, &it)); | |
92 EXPECT_EQ(kSsTimestamp2, it->first); | |
93 } | |
94 | |
95 TEST_F(Vp9SsMapTest, Reset) { | |
96 EXPECT_TRUE(map_.Insert(*packet_)); | |
97 Vp9SsMap::SsMap::const_iterator it; | |
98 EXPECT_TRUE(map_.Find(packet_->timestamp, &it)); | |
99 EXPECT_EQ(packet_->timestamp, it->first); | |
100 | |
101 map_.Reset(); | |
102 EXPECT_FALSE(map_.Find(packet_->timestamp, &it)); | |
103 } | |
104 | |
105 TEST_F(Vp9SsMapTest, RemoveOld) { | |
106 Vp9SsMap::SsMap::const_iterator it; | |
107 const uint32_t kSsTimestamp1 = 10000; | |
108 packet_->timestamp = kSsTimestamp1; | |
109 EXPECT_TRUE(map_.Insert(*packet_)); | |
110 | |
111 const uint32_t kTimestamp = kSsTimestamp1 + kProcessIntervalSec * 90000; | |
112 map_.RemoveOld(kTimestamp - 1); // Interval not passed. | |
113 EXPECT_TRUE(map_.Find(kSsTimestamp1, &it)); // Should not been removed. | |
114 | |
115 map_.RemoveOld(kTimestamp); | |
116 EXPECT_FALSE(map_.Find(kSsTimestamp1, &it)); | |
117 EXPECT_TRUE(map_.Find(kTimestamp, &it)); | |
118 EXPECT_EQ(kTimestamp, it->first); | |
119 } | |
120 | |
121 TEST_F(Vp9SsMapTest, RemoveOld_WithWrap) { | |
122 Vp9SsMap::SsMap::const_iterator it; | |
123 const uint32_t kSsTimestamp1 = 0xFFFFFFFF - kProcessIntervalSec * 90000; | |
124 const uint32_t kSsTimestamp2 = 10; | |
125 const uint32_t kSsTimestamp3 = 1000; | |
126 packet_->timestamp = kSsTimestamp1; | |
127 EXPECT_TRUE(map_.Insert(*packet_)); | |
128 packet_->timestamp = kSsTimestamp2; | |
129 EXPECT_TRUE(map_.Insert(*packet_)); | |
130 packet_->timestamp = kSsTimestamp3; | |
131 EXPECT_TRUE(map_.Insert(*packet_)); | |
132 | |
133 map_.RemoveOld(kSsTimestamp3); | |
134 EXPECT_FALSE(map_.Find(kSsTimestamp1, &it)); | |
135 EXPECT_FALSE(map_.Find(kSsTimestamp2, &it)); | |
136 EXPECT_TRUE(map_.Find(kSsTimestamp3, &it)); | |
137 } | |
138 | |
139 TEST_F(Vp9SsMapTest, UpdatePacket_NoSsData) { | |
140 packet_->codecSpecificHeader.codecHeader.VP9.gof_idx = 0; | |
141 EXPECT_FALSE(map_.UpdatePacket(packet_.get())); | |
142 } | |
143 | |
144 TEST_F(Vp9SsMapTest, UpdatePacket_NoGofIdx) { | |
145 EXPECT_TRUE(map_.Insert(*packet_)); | |
146 packet_->codecSpecificHeader.codecHeader.VP9.gof_idx = kNoGofIdx; | |
147 EXPECT_FALSE(map_.UpdatePacket(packet_.get())); | |
148 } | |
149 | |
150 TEST_F(Vp9SsMapTest, UpdatePacket_InvalidGofIdx) { | |
151 EXPECT_TRUE(map_.Insert(*packet_)); | |
152 packet_->codecSpecificHeader.codecHeader.VP9.gof_idx = 4; | |
153 EXPECT_FALSE(map_.UpdatePacket(packet_.get())); | |
154 } | |
155 | |
156 TEST_F(Vp9SsMapTest, UpdatePacket) { | |
157 EXPECT_TRUE(map_.Insert(*packet_)); // kTemporalStructureMode3: 0-2-1-2.. | |
158 | |
159 packet_->codecSpecificHeader.codecHeader.VP9.gof_idx = 0; | |
160 EXPECT_TRUE(map_.UpdatePacket(packet_.get())); | |
161 EXPECT_EQ(0, packet_->codecSpecificHeader.codecHeader.VP9.temporal_idx); | |
162 EXPECT_FALSE(packet_->codecSpecificHeader.codecHeader.VP9.temporal_up_switch); | |
163 EXPECT_EQ(1U, packet_->codecSpecificHeader.codecHeader.VP9.num_ref_pics); | |
164 EXPECT_EQ(4, packet_->codecSpecificHeader.codecHeader.VP9.pid_diff[0]); | |
165 | |
166 packet_->codecSpecificHeader.codecHeader.VP9.gof_idx = 1; | |
167 EXPECT_TRUE(map_.UpdatePacket(packet_.get())); | |
168 EXPECT_EQ(2, packet_->codecSpecificHeader.codecHeader.VP9.temporal_idx); | |
169 EXPECT_TRUE(packet_->codecSpecificHeader.codecHeader.VP9.temporal_up_switch); | |
170 EXPECT_EQ(1U, packet_->codecSpecificHeader.codecHeader.VP9.num_ref_pics); | |
171 EXPECT_EQ(1, packet_->codecSpecificHeader.codecHeader.VP9.pid_diff[0]); | |
172 | |
173 packet_->codecSpecificHeader.codecHeader.VP9.gof_idx = 2; | |
174 EXPECT_TRUE(map_.UpdatePacket(packet_.get())); | |
175 EXPECT_EQ(1, packet_->codecSpecificHeader.codecHeader.VP9.temporal_idx); | |
176 EXPECT_TRUE(packet_->codecSpecificHeader.codecHeader.VP9.temporal_up_switch); | |
177 EXPECT_EQ(1U, packet_->codecSpecificHeader.codecHeader.VP9.num_ref_pics); | |
178 EXPECT_EQ(2, packet_->codecSpecificHeader.codecHeader.VP9.pid_diff[0]); | |
179 | |
180 packet_->codecSpecificHeader.codecHeader.VP9.gof_idx = 3; | |
181 EXPECT_TRUE(map_.UpdatePacket(packet_.get())); | |
182 EXPECT_EQ(2, packet_->codecSpecificHeader.codecHeader.VP9.temporal_idx); | |
183 EXPECT_FALSE(packet_->codecSpecificHeader.codecHeader.VP9.temporal_up_switch); | |
184 EXPECT_EQ(2U, packet_->codecSpecificHeader.codecHeader.VP9.num_ref_pics); | |
185 EXPECT_EQ(1, packet_->codecSpecificHeader.codecHeader.VP9.pid_diff[0]); | |
186 EXPECT_EQ(2, packet_->codecSpecificHeader.codecHeader.VP9.pid_diff[1]); | |
187 } | |
188 | |
stefan-webrtc
2015/10/16 12:26:11
Maybe we should have a test with an incoming struc
åsapersson
2015/10/20 13:32:20
Added test with spatial layers.
| |
28 class TestBasicJitterBuffer : public ::testing::Test { | 189 class TestBasicJitterBuffer : public ::testing::Test { |
29 protected: | 190 protected: |
30 virtual void SetUp() { | 191 virtual void SetUp() { |
31 clock_.reset(new SimulatedClock(0)); | 192 clock_.reset(new SimulatedClock(0)); |
32 jitter_buffer_.reset(new VCMJitterBuffer( | 193 jitter_buffer_.reset(new VCMJitterBuffer( |
33 clock_.get(), | 194 clock_.get(), |
34 rtc::scoped_ptr<EventWrapper>(event_factory_.CreateEvent()))); | 195 rtc::scoped_ptr<EventWrapper>(event_factory_.CreateEvent()))); |
35 jitter_buffer_->Start(); | 196 jitter_buffer_->Start(); |
36 seq_num_ = 1234; | 197 seq_num_ = 1234; |
37 timestamp_ = 0; | 198 timestamp_ = 0; |
(...skipping 662 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
700 // Should be able to decode 3 delta frames, key frame already decoded. | 861 // Should be able to decode 3 delta frames, key frame already decoded. |
701 for (size_t i = 0; i < 3; ++i) { | 862 for (size_t i = 0; i < 3; ++i) { |
702 frame_out = DecodeCompleteFrame(); | 863 frame_out = DecodeCompleteFrame(); |
703 ASSERT_TRUE(frame_out != NULL); | 864 ASSERT_TRUE(frame_out != NULL); |
704 CheckOutFrame(frame_out, size_, false); | 865 CheckOutFrame(frame_out, size_, false); |
705 EXPECT_EQ(kVideoFrameDelta, frame_out->FrameType()); | 866 EXPECT_EQ(kVideoFrameDelta, frame_out->FrameType()); |
706 jitter_buffer_->ReleaseFrame(frame_out); | 867 jitter_buffer_->ReleaseFrame(frame_out); |
707 } | 868 } |
708 } | 869 } |
709 | 870 |
871 TEST_F(TestBasicJitterBuffer, TestSkipForwardVp9) { | |
872 // Verify that JB skips forward to next base layer frame. | |
873 // ------------------------------------------------- | |
874 // | 65485 | 65486 | 65487 | 65488 | 65489 | ... | |
875 // | pid:5 | pid:6 | pid:7 | pid:8 | pid:9 | ... | |
876 // | tid:0 | tid:2 | tid:1 | tid:2 | tid:0 | ... | |
877 // | ss | x | x | x | | | |
878 // ------------------------------------------------- | |
879 // |<----------tl0idx:200--------->|<---tl0idx:201--- | |
880 | |
881 bool re = false; | |
882 packet_->codec = kVideoCodecVP9; | |
883 packet_->codecSpecificHeader.codec = kRtpVideoVp9; | |
884 packet_->isFirstPacket = true; | |
885 packet_->markerBit = true; | |
886 packet_->codecSpecificHeader.codecHeader.VP9.flexible_mode = false; | |
887 packet_->codecSpecificHeader.codecHeader.VP9.spatial_idx = 0; | |
888 packet_->codecSpecificHeader.codecHeader.VP9.beginning_of_frame = true; | |
889 packet_->codecSpecificHeader.codecHeader.VP9.end_of_frame = true; | |
890 packet_->codecSpecificHeader.codecHeader.VP9.temporal_idx = kNoTemporalIdx; | |
891 packet_->codecSpecificHeader.codecHeader.VP9.temporal_up_switch = false; | |
892 | |
893 packet_->seqNum = 65485; | |
894 packet_->timestamp = 1000; | |
895 packet_->frameType = kVideoFrameKey; | |
896 packet_->codecSpecificHeader.codecHeader.VP9.picture_id = 5; | |
897 packet_->codecSpecificHeader.codecHeader.VP9.tl0_pic_idx = 200; | |
898 packet_->codecSpecificHeader.codecHeader.VP9.gof_idx = 0; | |
899 packet_->codecSpecificHeader.codecHeader.VP9.ss_data_available = true; | |
900 packet_->codecSpecificHeader.codecHeader.VP9.gof.SetGofInfoVP9( | |
901 kTemporalStructureMode3); // kTemporalStructureMode3: 0-2-1-2.. | |
902 EXPECT_EQ(kCompleteSession, jitter_buffer_->InsertPacket(*packet_, &re)); | |
903 | |
904 // Insert next temporal layer 0. | |
905 packet_->seqNum = 65489; | |
906 packet_->timestamp = 13000; | |
907 packet_->frameType = kVideoFrameDelta; | |
908 packet_->codecSpecificHeader.codecHeader.VP9.picture_id = 9; | |
909 packet_->codecSpecificHeader.codecHeader.VP9.tl0_pic_idx = 201; | |
910 packet_->codecSpecificHeader.codecHeader.VP9.gof_idx = 0; | |
911 packet_->codecSpecificHeader.codecHeader.VP9.ss_data_available = false; | |
912 EXPECT_EQ(kCompleteSession, jitter_buffer_->InsertPacket(*packet_, &re)); | |
913 | |
914 VCMEncodedFrame* frame_out = DecodeCompleteFrame(); | |
915 EXPECT_EQ(1000U, frame_out->TimeStamp()); | |
916 EXPECT_EQ(kVideoFrameKey, frame_out->FrameType()); | |
917 jitter_buffer_->ReleaseFrame(frame_out); | |
918 | |
919 frame_out = DecodeCompleteFrame(); | |
920 EXPECT_EQ(13000U, frame_out->TimeStamp()); | |
921 EXPECT_EQ(kVideoFrameDelta, frame_out->FrameType()); | |
922 jitter_buffer_->ReleaseFrame(frame_out); | |
923 } | |
924 | |
925 TEST_F(TestBasicJitterBuffer, ReorderedVp9SsData) { | |
926 // Verify that frames are updated with SS data when SS packet is reordered. | |
927 // -------------------------------- | |
928 // | 65486 | 65487 | 65485 |... | |
929 // | pid:6 | pid:7 | pid:5 |... | |
930 // | tid:2 | tid:1 | tid:0 |... | |
931 // | | | ss | | |
932 // -------------------------------- | |
933 // |<--------tl0idx:200--------->| | |
934 | |
935 bool re = false; | |
936 packet_->codec = kVideoCodecVP9; | |
937 packet_->codecSpecificHeader.codec = kRtpVideoVp9; | |
938 packet_->isFirstPacket = true; | |
939 packet_->markerBit = true; | |
940 packet_->codecSpecificHeader.codecHeader.VP9.flexible_mode = false; | |
941 packet_->codecSpecificHeader.codecHeader.VP9.spatial_idx = 0; | |
942 packet_->codecSpecificHeader.codecHeader.VP9.beginning_of_frame = true; | |
943 packet_->codecSpecificHeader.codecHeader.VP9.end_of_frame = true; | |
944 packet_->codecSpecificHeader.codecHeader.VP9.temporal_idx = kNoTemporalIdx; | |
945 packet_->codecSpecificHeader.codecHeader.VP9.temporal_up_switch = false; | |
946 packet_->codecSpecificHeader.codecHeader.VP9.tl0_pic_idx = 200; | |
947 | |
948 packet_->seqNum = 65486; | |
949 packet_->timestamp = 6000; | |
950 packet_->frameType = kVideoFrameDelta; | |
951 packet_->codecSpecificHeader.codecHeader.VP9.picture_id = 6; | |
952 packet_->codecSpecificHeader.codecHeader.VP9.gof_idx = 1; | |
953 EXPECT_EQ(kCompleteSession, jitter_buffer_->InsertPacket(*packet_, &re)); | |
954 | |
955 packet_->seqNum = 65487; | |
956 packet_->timestamp = 9000; | |
957 packet_->frameType = kVideoFrameDelta; | |
958 packet_->codecSpecificHeader.codecHeader.VP9.picture_id = 7; | |
959 packet_->codecSpecificHeader.codecHeader.VP9.gof_idx = 2; | |
960 EXPECT_EQ(kCompleteSession, jitter_buffer_->InsertPacket(*packet_, &re)); | |
961 | |
962 // Insert first frame with SS data. | |
963 packet_->seqNum = 65485; | |
964 packet_->timestamp = 3000; | |
965 packet_->frameType = kVideoFrameKey; | |
966 packet_->width = 352; | |
967 packet_->height = 288; | |
968 packet_->codecSpecificHeader.codecHeader.VP9.picture_id = 5; | |
969 packet_->codecSpecificHeader.codecHeader.VP9.gof_idx = 0; | |
970 packet_->codecSpecificHeader.codecHeader.VP9.ss_data_available = true; | |
971 packet_->codecSpecificHeader.codecHeader.VP9.gof.SetGofInfoVP9( | |
972 kTemporalStructureMode3); // kTemporalStructureMode3: 0-2-1-2.. | |
973 EXPECT_EQ(kCompleteSession, jitter_buffer_->InsertPacket(*packet_, &re)); | |
974 | |
975 VCMEncodedFrame* frame_out = DecodeCompleteFrame(); | |
976 EXPECT_EQ(3000U, frame_out->TimeStamp()); | |
977 EXPECT_EQ(kVideoFrameKey, frame_out->FrameType()); | |
978 EXPECT_EQ(0, frame_out->CodecSpecific()->codecSpecific.VP9.temporal_idx); | |
979 EXPECT_FALSE( | |
980 frame_out->CodecSpecific()->codecSpecific.VP9.temporal_up_switch); | |
981 EXPECT_EQ(1U, packet_->codecSpecificHeader.codecHeader.VP9.num_ref_pics); | |
982 EXPECT_EQ(4, packet_->codecSpecificHeader.codecHeader.VP9.pid_diff[0]); | |
983 jitter_buffer_->ReleaseFrame(frame_out); | |
984 | |
985 frame_out = DecodeCompleteFrame(); | |
986 EXPECT_EQ(6000U, frame_out->TimeStamp()); | |
987 EXPECT_EQ(kVideoFrameDelta, frame_out->FrameType()); | |
988 EXPECT_EQ(2, frame_out->CodecSpecific()->codecSpecific.VP9.temporal_idx); | |
989 EXPECT_TRUE(frame_out->CodecSpecific()->codecSpecific.VP9.temporal_up_switch); | |
990 jitter_buffer_->ReleaseFrame(frame_out); | |
991 | |
992 frame_out = DecodeCompleteFrame(); | |
993 EXPECT_EQ(9000U, frame_out->TimeStamp()); | |
994 EXPECT_EQ(kVideoFrameDelta, frame_out->FrameType()); | |
995 EXPECT_EQ(1, frame_out->CodecSpecific()->codecSpecific.VP9.temporal_idx); | |
996 EXPECT_TRUE(frame_out->CodecSpecific()->codecSpecific.VP9.temporal_up_switch); | |
997 jitter_buffer_->ReleaseFrame(frame_out); | |
998 } | |
999 | |
710 TEST_F(TestBasicJitterBuffer, H264InsertStartCode) { | 1000 TEST_F(TestBasicJitterBuffer, H264InsertStartCode) { |
711 packet_->frameType = kVideoFrameKey; | 1001 packet_->frameType = kVideoFrameKey; |
712 packet_->isFirstPacket = true; | 1002 packet_->isFirstPacket = true; |
713 packet_->markerBit = false; | 1003 packet_->markerBit = false; |
714 packet_->seqNum = seq_num_; | 1004 packet_->seqNum = seq_num_; |
715 packet_->timestamp = timestamp_; | 1005 packet_->timestamp = timestamp_; |
716 packet_->insertStartCode = true; | 1006 packet_->insertStartCode = true; |
717 | 1007 |
718 bool retransmitted = false; | 1008 bool retransmitted = false; |
719 EXPECT_EQ(kIncomplete, jitter_buffer_->InsertPacket(*packet_, | 1009 EXPECT_EQ(kIncomplete, jitter_buffer_->InsertPacket(*packet_, |
(...skipping 1478 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
2198 | 2488 |
2199 // Stream should be decodable from this point. | 2489 // Stream should be decodable from this point. |
2200 clock_->AdvanceTimeMilliseconds(kDefaultFramePeriodMs); | 2490 clock_->AdvanceTimeMilliseconds(kDefaultFramePeriodMs); |
2201 InsertFrame(kVideoFrameDelta); | 2491 InsertFrame(kVideoFrameDelta); |
2202 EXPECT_TRUE(DecodeCompleteFrame()); | 2492 EXPECT_TRUE(DecodeCompleteFrame()); |
2203 nack_list = jitter_buffer_->GetNackList(&extended); | 2493 nack_list = jitter_buffer_->GetNackList(&extended); |
2204 EXPECT_EQ(0u, nack_list.size()); | 2494 EXPECT_EQ(0u, nack_list.size()); |
2205 } | 2495 } |
2206 | 2496 |
2207 } // namespace webrtc | 2497 } // namespace webrtc |
OLD | NEW |