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

Side by Side Diff: webrtc/modules/video_coding/main/source/jitter_buffer_unittest.cc

Issue 1386903002: Add support for handling reordered SS data on the receive-side for VP9. (Closed) Base URL: https://chromium.googlesource.com/external/webrtc.git@master
Patch Set: Created 5 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 /* 1 /*
2 * Copyright (c) 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_;
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 uint32_t timestamp;
70 EXPECT_TRUE(map_.Find(packet_->timestamp, &timestamp));
71 EXPECT_EQ(packet_->timestamp, timestamp);
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 uint32_t timestamp;
82 EXPECT_FALSE(map_.Find(kSsTimestamp1 - 1, &timestamp));
83 EXPECT_TRUE(map_.Find(kSsTimestamp1, &timestamp));
84 EXPECT_EQ(kSsTimestamp1, timestamp);
85 EXPECT_TRUE(map_.Find(kSsTimestamp1 + 1, &timestamp));
86 EXPECT_EQ(kSsTimestamp1, timestamp);
87 EXPECT_TRUE(map_.Find(kSsTimestamp2 - 1, &timestamp));
88 EXPECT_EQ(kSsTimestamp1, timestamp);
89 EXPECT_TRUE(map_.Find(kSsTimestamp2, &timestamp));
90 EXPECT_EQ(kSsTimestamp2, timestamp);
91 EXPECT_TRUE(map_.Find(kSsTimestamp2 + 1, &timestamp));
92 EXPECT_EQ(kSsTimestamp2, timestamp);
93 }
94
95 TEST_F(Vp9SsMapTest, Reset) {
96 EXPECT_TRUE(map_.Insert(*packet_));
97 uint32_t timestamp;
98 EXPECT_TRUE(map_.Find(packet_->timestamp, &timestamp));
99 EXPECT_EQ(packet_->timestamp, timestamp);
100
101 map_.Reset();
102 EXPECT_FALSE(map_.Find(packet_->timestamp, &timestamp));
103 }
104
105 TEST_F(Vp9SsMapTest, RemoveOld) {
106 const uint32_t kSsTimestamp1 = 10000;
107 const uint32_t kSsTimestamp2 = 20000;
108 const uint32_t kSsTimestamp3 = 30000;
109 packet_->timestamp = kSsTimestamp1;
110 EXPECT_TRUE(map_.Insert(*packet_));
111 packet_->timestamp = kSsTimestamp2;
112 EXPECT_TRUE(map_.Insert(*packet_));
113 packet_->timestamp = kSsTimestamp3;
114 EXPECT_TRUE(map_.Insert(*packet_));
115
116 const uint32_t kTimestamp = kSsTimestamp1 + (kProcessIntervalSec) * 90000;
117 map_.RemoveOld(kTimestamp);
118 uint32_t timestamp;
119 EXPECT_FALSE(map_.Find(kSsTimestamp1, &timestamp));
120 EXPECT_FALSE(map_.Find(kSsTimestamp2, &timestamp));
121 EXPECT_FALSE(map_.Find(kSsTimestamp3, &timestamp));
122 EXPECT_TRUE(map_.Find(kTimestamp, &timestamp));
123 EXPECT_EQ(kTimestamp, timestamp);
124 }
125
126 TEST_F(Vp9SsMapTest, RemoveOld_WithWrap) {
127 uint32_t timestamp;
128 const uint32_t kSsTimestamp1 = 0xFFFFFFFF;
129 map_.RemoveOld(kSsTimestamp1); // No SS data, should have no effect.
130
131 packet_->timestamp = kSsTimestamp1;
132 EXPECT_TRUE(map_.Insert(*packet_));
133
134 map_.RemoveOld(kSsTimestamp1 - 1);
135 EXPECT_TRUE(map_.Find(kSsTimestamp1, &timestamp));
136 map_.RemoveOld(kSsTimestamp1);
137 EXPECT_TRUE(map_.Find(kSsTimestamp1, &timestamp));
138
139 const uint32_t kSsTimestamp2 = kSsTimestamp1 + kProcessIntervalSec * 90000;
140 packet_->timestamp = kSsTimestamp2;
141 EXPECT_TRUE(map_.Insert(*packet_));
142
143 map_.RemoveOld(kSsTimestamp1);
144 EXPECT_TRUE(map_.Find(kSsTimestamp1, &timestamp));
145 EXPECT_TRUE(map_.Find(kSsTimestamp2, &timestamp));
146 map_.RemoveOld(kSsTimestamp2);
147 EXPECT_FALSE(map_.Find(kSsTimestamp1, &timestamp));
148 EXPECT_TRUE(map_.Find(kSsTimestamp2, &timestamp));
149 }
150
151 TEST_F(Vp9SsMapTest, UpdatePacket_NoSsData) {
152 packet_->codecSpecificHeader.codecHeader.VP9.gof_idx = 0;
153 EXPECT_FALSE(map_.UpdatePacket(packet_.get()));
154 }
155
156 TEST_F(Vp9SsMapTest, UpdatePacket_NoGofIdx) {
157 EXPECT_TRUE(map_.Insert(*packet_));
158 packet_->codecSpecificHeader.codecHeader.VP9.gof_idx = kNoGofIdx;
159 EXPECT_FALSE(map_.UpdatePacket(packet_.get()));
160 }
161
162 TEST_F(Vp9SsMapTest, UpdatePacket_InvalidGofIdx) {
163 EXPECT_TRUE(map_.Insert(*packet_));
164 packet_->codecSpecificHeader.codecHeader.VP9.gof_idx = 4;
165 EXPECT_FALSE(map_.UpdatePacket(packet_.get()));
166 }
167
168 TEST_F(Vp9SsMapTest, UpdatePacket) {
169 EXPECT_TRUE(map_.Insert(*packet_)); // kTemporalStructureMode3: 0-2-1-2..
170
171 packet_->codecSpecificHeader.codecHeader.VP9.gof_idx = 0;
172 EXPECT_TRUE(map_.UpdatePacket(packet_.get()));
173 EXPECT_EQ(0, packet_->codecSpecificHeader.codecHeader.VP9.temporal_idx);
174 EXPECT_FALSE(packet_->codecSpecificHeader.codecHeader.VP9.temporal_up_switch);
175 EXPECT_EQ(1U, packet_->codecSpecificHeader.codecHeader.VP9.num_ref_pics);
176 EXPECT_EQ(4, packet_->codecSpecificHeader.codecHeader.VP9.pid_diff[0]);
177
178 packet_->codecSpecificHeader.codecHeader.VP9.gof_idx = 1;
179 EXPECT_TRUE(map_.UpdatePacket(packet_.get()));
180 EXPECT_EQ(2, packet_->codecSpecificHeader.codecHeader.VP9.temporal_idx);
181 EXPECT_TRUE(packet_->codecSpecificHeader.codecHeader.VP9.temporal_up_switch);
182 EXPECT_EQ(1U, packet_->codecSpecificHeader.codecHeader.VP9.num_ref_pics);
183 EXPECT_EQ(1, packet_->codecSpecificHeader.codecHeader.VP9.pid_diff[0]);
184
185 packet_->codecSpecificHeader.codecHeader.VP9.gof_idx = 2;
186 EXPECT_TRUE(map_.UpdatePacket(packet_.get()));
187 EXPECT_EQ(1, packet_->codecSpecificHeader.codecHeader.VP9.temporal_idx);
188 EXPECT_TRUE(packet_->codecSpecificHeader.codecHeader.VP9.temporal_up_switch);
189 EXPECT_EQ(1U, packet_->codecSpecificHeader.codecHeader.VP9.num_ref_pics);
190 EXPECT_EQ(2, packet_->codecSpecificHeader.codecHeader.VP9.pid_diff[0]);
191
192 packet_->codecSpecificHeader.codecHeader.VP9.gof_idx = 3;
193 EXPECT_TRUE(map_.UpdatePacket(packet_.get()));
194 EXPECT_EQ(2, packet_->codecSpecificHeader.codecHeader.VP9.temporal_idx);
195 EXPECT_FALSE(packet_->codecSpecificHeader.codecHeader.VP9.temporal_up_switch);
196 EXPECT_EQ(2U, packet_->codecSpecificHeader.codecHeader.VP9.num_ref_pics);
197 EXPECT_EQ(1, packet_->codecSpecificHeader.codecHeader.VP9.pid_diff[0]);
198 EXPECT_EQ(2, packet_->codecSpecificHeader.codecHeader.VP9.pid_diff[1]);
199 }
200
28 class TestBasicJitterBuffer : public ::testing::Test { 201 class TestBasicJitterBuffer : public ::testing::Test {
29 protected: 202 protected:
30 virtual void SetUp() { 203 virtual void SetUp() {
31 clock_.reset(new SimulatedClock(0)); 204 clock_.reset(new SimulatedClock(0));
32 jitter_buffer_.reset(new VCMJitterBuffer( 205 jitter_buffer_.reset(new VCMJitterBuffer(
33 clock_.get(), 206 clock_.get(),
34 rtc::scoped_ptr<EventWrapper>(event_factory_.CreateEvent()))); 207 rtc::scoped_ptr<EventWrapper>(event_factory_.CreateEvent())));
35 jitter_buffer_->Start(); 208 jitter_buffer_->Start();
36 seq_num_ = 1234; 209 seq_num_ = 1234;
37 timestamp_ = 0; 210 timestamp_ = 0;
(...skipping 662 matching lines...) Expand 10 before | Expand all | Expand 10 after
700 // Should be able to decode 3 delta frames, key frame already decoded. 873 // Should be able to decode 3 delta frames, key frame already decoded.
701 for (size_t i = 0; i < 3; ++i) { 874 for (size_t i = 0; i < 3; ++i) {
702 frame_out = DecodeCompleteFrame(); 875 frame_out = DecodeCompleteFrame();
703 ASSERT_TRUE(frame_out != NULL); 876 ASSERT_TRUE(frame_out != NULL);
704 CheckOutFrame(frame_out, size_, false); 877 CheckOutFrame(frame_out, size_, false);
705 EXPECT_EQ(kVideoFrameDelta, frame_out->FrameType()); 878 EXPECT_EQ(kVideoFrameDelta, frame_out->FrameType());
706 jitter_buffer_->ReleaseFrame(frame_out); 879 jitter_buffer_->ReleaseFrame(frame_out);
707 } 880 }
708 } 881 }
709 882
883 TEST_F(TestBasicJitterBuffer, TestSkipForwardVp9) {
884 // Verify that JB skips forward to next base layer frame.
885 // -------------------------------------------------
886 // | 65485 | 65486 | 65487 | 65488 | 65489 | ...
887 // | pid:5 | pid:6 | pid:7 | pid:8 | pid:9 | ...
888 // | tid:0 | tid:2 | tid:1 | tid:2 | tid:0 | ...
889 // | ss | x | x | x | |
890 // -------------------------------------------------
891 // |<----------tl0idx:200--------->|<---tl0idx:201---
892
893 bool re = false;
894 packet_->codec = kVideoCodecVP9;
895 packet_->codecSpecificHeader.codec = kRtpVideoVp9;
896 packet_->isFirstPacket = true;
897 packet_->markerBit = true;
898 packet_->codecSpecificHeader.codecHeader.VP9.flexible_mode = false;
899 packet_->codecSpecificHeader.codecHeader.VP9.spatial_idx = 0;
900 packet_->codecSpecificHeader.codecHeader.VP9.beginning_of_frame = true;
901 packet_->codecSpecificHeader.codecHeader.VP9.end_of_frame = true;
902 packet_->codecSpecificHeader.codecHeader.VP9.temporal_idx = kNoTemporalIdx;
903 packet_->codecSpecificHeader.codecHeader.VP9.temporal_up_switch = false;
904
905 packet_->seqNum = 65485;
906 packet_->timestamp = 1000;
907 packet_->frameType = kVideoFrameKey;
908 packet_->codecSpecificHeader.codecHeader.VP9.picture_id = 5;
909 packet_->codecSpecificHeader.codecHeader.VP9.tl0_pic_idx = 200;
910 packet_->codecSpecificHeader.codecHeader.VP9.gof_idx = 0;
911 packet_->codecSpecificHeader.codecHeader.VP9.ss_data_available = true;
912 packet_->codecSpecificHeader.codecHeader.VP9.gof.SetGofInfoVP9(
913 kTemporalStructureMode3); // kTemporalStructureMode3: 0-2-1-2..
914 EXPECT_EQ(kCompleteSession, jitter_buffer_->InsertPacket(*packet_, &re));
915
916 // Insert next temporal layer 0.
917 packet_->seqNum = 65489;
918 packet_->timestamp = 13000;
919 packet_->frameType = kVideoFrameDelta;
920 packet_->codecSpecificHeader.codecHeader.VP9.picture_id = 9;
921 packet_->codecSpecificHeader.codecHeader.VP9.tl0_pic_idx = 201;
922 packet_->codecSpecificHeader.codecHeader.VP9.gof_idx = 0;
923 packet_->codecSpecificHeader.codecHeader.VP9.ss_data_available = false;
924 EXPECT_EQ(kCompleteSession, jitter_buffer_->InsertPacket(*packet_, &re));
925
926 VCMEncodedFrame* frame_out = DecodeCompleteFrame();
927 EXPECT_EQ(1000U, frame_out->TimeStamp());
928 EXPECT_EQ(kVideoFrameKey, frame_out->FrameType());
929 jitter_buffer_->ReleaseFrame(frame_out);
930
931 frame_out = DecodeCompleteFrame();
932 EXPECT_EQ(13000U, frame_out->TimeStamp());
933 EXPECT_EQ(kVideoFrameDelta, frame_out->FrameType());
934 jitter_buffer_->ReleaseFrame(frame_out);
935 }
936
937 TEST_F(TestBasicJitterBuffer, ReorderedVp9SsData) {
938 // Verify that frames are updated with SS data when SS packet is reordered.
939 // --------------------------------
940 // | 65486 | 65487 | 65485 |...
941 // | pid:6 | pid:7 | pid:5 |...
942 // | tid:2 | tid:1 | tid:0 |...
943 // | | | ss |
944 // --------------------------------
945 // |<--------tl0idx:200--------->|
946
947 bool re = false;
948 packet_->codec = kVideoCodecVP9;
949 packet_->codecSpecificHeader.codec = kRtpVideoVp9;
950 packet_->isFirstPacket = true;
951 packet_->markerBit = true;
952 packet_->codecSpecificHeader.codecHeader.VP9.flexible_mode = false;
953 packet_->codecSpecificHeader.codecHeader.VP9.spatial_idx = 0;
954 packet_->codecSpecificHeader.codecHeader.VP9.beginning_of_frame = true;
955 packet_->codecSpecificHeader.codecHeader.VP9.end_of_frame = true;
956 packet_->codecSpecificHeader.codecHeader.VP9.temporal_idx = kNoTemporalIdx;
957 packet_->codecSpecificHeader.codecHeader.VP9.temporal_up_switch = false;
958 packet_->codecSpecificHeader.codecHeader.VP9.tl0_pic_idx = 200;
959
960 packet_->seqNum = 65486;
961 packet_->timestamp = 6000;
962 packet_->frameType = kVideoFrameDelta;
963 packet_->codecSpecificHeader.codecHeader.VP9.picture_id = 6;
964 packet_->codecSpecificHeader.codecHeader.VP9.gof_idx = 1;
965 EXPECT_EQ(kCompleteSession, jitter_buffer_->InsertPacket(*packet_, &re));
966
967 packet_->seqNum = 65487;
968 packet_->timestamp = 9000;
969 packet_->frameType = kVideoFrameDelta;
970 packet_->codecSpecificHeader.codecHeader.VP9.picture_id = 7;
971 packet_->codecSpecificHeader.codecHeader.VP9.gof_idx = 2;
972 EXPECT_EQ(kCompleteSession, jitter_buffer_->InsertPacket(*packet_, &re));
973
974 // Insert first frame with SS data.
975 packet_->seqNum = 65485;
976 packet_->timestamp = 3000;
977 packet_->frameType = kVideoFrameKey;
978 packet_->width = 352;
979 packet_->height = 288;
980 packet_->codecSpecificHeader.codecHeader.VP9.picture_id = 5;
981 packet_->codecSpecificHeader.codecHeader.VP9.gof_idx = 0;
982 packet_->codecSpecificHeader.codecHeader.VP9.ss_data_available = true;
983 packet_->codecSpecificHeader.codecHeader.VP9.gof.SetGofInfoVP9(
984 kTemporalStructureMode3); // kTemporalStructureMode3: 0-2-1-2..
985 EXPECT_EQ(kCompleteSession, jitter_buffer_->InsertPacket(*packet_, &re));
986
987 VCMEncodedFrame* frame_out = DecodeCompleteFrame();
988 EXPECT_EQ(3000U, frame_out->TimeStamp());
989 EXPECT_EQ(kVideoFrameKey, frame_out->FrameType());
990 EXPECT_EQ(0, frame_out->CodecSpecific()->codecSpecific.VP9.temporal_idx);
991 EXPECT_FALSE(
992 frame_out->CodecSpecific()->codecSpecific.VP9.temporal_up_switch);
993 EXPECT_EQ(1U, packet_->codecSpecificHeader.codecHeader.VP9.num_ref_pics);
994 EXPECT_EQ(4, packet_->codecSpecificHeader.codecHeader.VP9.pid_diff[0]);
995 jitter_buffer_->ReleaseFrame(frame_out);
996
997 frame_out = DecodeCompleteFrame();
998 EXPECT_EQ(6000U, frame_out->TimeStamp());
999 EXPECT_EQ(kVideoFrameDelta, frame_out->FrameType());
1000 EXPECT_EQ(2, frame_out->CodecSpecific()->codecSpecific.VP9.temporal_idx);
1001 EXPECT_TRUE(frame_out->CodecSpecific()->codecSpecific.VP9.temporal_up_switch);
1002 jitter_buffer_->ReleaseFrame(frame_out);
1003
1004 frame_out = DecodeCompleteFrame();
1005 EXPECT_EQ(9000U, frame_out->TimeStamp());
1006 EXPECT_EQ(kVideoFrameDelta, frame_out->FrameType());
1007 EXPECT_EQ(1, frame_out->CodecSpecific()->codecSpecific.VP9.temporal_idx);
1008 EXPECT_TRUE(frame_out->CodecSpecific()->codecSpecific.VP9.temporal_up_switch);
1009 jitter_buffer_->ReleaseFrame(frame_out);
1010 }
1011
710 TEST_F(TestBasicJitterBuffer, H264InsertStartCode) { 1012 TEST_F(TestBasicJitterBuffer, H264InsertStartCode) {
711 packet_->frameType = kVideoFrameKey; 1013 packet_->frameType = kVideoFrameKey;
712 packet_->isFirstPacket = true; 1014 packet_->isFirstPacket = true;
713 packet_->markerBit = false; 1015 packet_->markerBit = false;
714 packet_->seqNum = seq_num_; 1016 packet_->seqNum = seq_num_;
715 packet_->timestamp = timestamp_; 1017 packet_->timestamp = timestamp_;
716 packet_->insertStartCode = true; 1018 packet_->insertStartCode = true;
717 1019
718 bool retransmitted = false; 1020 bool retransmitted = false;
719 EXPECT_EQ(kIncomplete, jitter_buffer_->InsertPacket(*packet_, 1021 EXPECT_EQ(kIncomplete, jitter_buffer_->InsertPacket(*packet_,
(...skipping 1478 matching lines...) Expand 10 before | Expand all | Expand 10 after
2198 2500
2199 // Stream should be decodable from this point. 2501 // Stream should be decodable from this point.
2200 clock_->AdvanceTimeMilliseconds(kDefaultFramePeriodMs); 2502 clock_->AdvanceTimeMilliseconds(kDefaultFramePeriodMs);
2201 InsertFrame(kVideoFrameDelta); 2503 InsertFrame(kVideoFrameDelta);
2202 EXPECT_TRUE(DecodeCompleteFrame()); 2504 EXPECT_TRUE(DecodeCompleteFrame());
2203 nack_list = jitter_buffer_->GetNackList(&extended); 2505 nack_list = jitter_buffer_->GetNackList(&extended);
2204 EXPECT_EQ(0u, nack_list.size()); 2506 EXPECT_EQ(0u, nack_list.size());
2205 } 2507 }
2206 2508
2207 } // namespace webrtc 2509 } // namespace webrtc
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698