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_; |
| 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 |
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 |