| 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<ProcessTask> task) {} | 198 void PostTask(std::unique_ptr<ProcessTask> task) {} |
| (...skipping 726 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 925 // ------------------------------------------------- | 925 // ------------------------------------------------- |
| 926 // | 65485 | 65486 | 65487 | 65488 | 65489 | ... | 926 // | 65485 | 65486 | 65487 | 65488 | 65489 | ... |
| 927 // | pid:5 | pid:6 | pid:7 | pid:8 | pid:9 | ... | 927 // | pid:5 | pid:6 | pid:7 | pid:8 | pid:9 | ... |
| 928 // | tid:0 | tid:2 | tid:1 | tid:2 | tid:0 | ... | 928 // | tid:0 | tid:2 | tid:1 | tid:2 | tid:0 | ... |
| 929 // | ss | x | x | x | | | 929 // | ss | x | x | x | | |
| 930 // ------------------------------------------------- | 930 // ------------------------------------------------- |
| 931 // |<----------tl0idx:200--------->|<---tl0idx:201--- | 931 // |<----------tl0idx:200--------->|<---tl0idx:201--- |
| 932 | 932 |
| 933 bool re = false; | 933 bool re = false; |
| 934 packet_->codec = kVideoCodecVP9; | 934 packet_->codec = kVideoCodecVP9; |
| 935 packet_->codecSpecificHeader.codec = kRtpVideoVp9; | 935 packet_->video_header.codec = kRtpVideoVp9; |
| 936 packet_->isFirstPacket = true; | 936 packet_->isFirstPacket = true; |
| 937 packet_->markerBit = true; | 937 packet_->markerBit = true; |
| 938 packet_->codecSpecificHeader.codecHeader.VP9.flexible_mode = false; | 938 packet_->video_header.codecHeader.VP9.flexible_mode = false; |
| 939 packet_->codecSpecificHeader.codecHeader.VP9.spatial_idx = 0; | 939 packet_->video_header.codecHeader.VP9.spatial_idx = 0; |
| 940 packet_->codecSpecificHeader.codecHeader.VP9.beginning_of_frame = true; | 940 packet_->video_header.codecHeader.VP9.beginning_of_frame = true; |
| 941 packet_->codecSpecificHeader.codecHeader.VP9.end_of_frame = true; | 941 packet_->video_header.codecHeader.VP9.end_of_frame = true; |
| 942 packet_->codecSpecificHeader.codecHeader.VP9.temporal_up_switch = false; | 942 packet_->video_header.codecHeader.VP9.temporal_up_switch = false; |
| 943 | 943 |
| 944 packet_->seqNum = 65485; | 944 packet_->seqNum = 65485; |
| 945 packet_->timestamp = 1000; | 945 packet_->timestamp = 1000; |
| 946 packet_->frameType = kVideoFrameKey; | 946 packet_->frameType = kVideoFrameKey; |
| 947 packet_->codecSpecificHeader.codecHeader.VP9.picture_id = 5; | 947 packet_->video_header.codecHeader.VP9.picture_id = 5; |
| 948 packet_->codecSpecificHeader.codecHeader.VP9.tl0_pic_idx = 200; | 948 packet_->video_header.codecHeader.VP9.tl0_pic_idx = 200; |
| 949 packet_->codecSpecificHeader.codecHeader.VP9.temporal_idx = 0; | 949 packet_->video_header.codecHeader.VP9.temporal_idx = 0; |
| 950 packet_->codecSpecificHeader.codecHeader.VP9.ss_data_available = true; | 950 packet_->video_header.codecHeader.VP9.ss_data_available = true; |
| 951 packet_->codecSpecificHeader.codecHeader.VP9.gof.SetGofInfoVP9( | 951 packet_->video_header.codecHeader.VP9.gof.SetGofInfoVP9( |
| 952 kTemporalStructureMode3); // kTemporalStructureMode3: 0-2-1-2.. | 952 kTemporalStructureMode3); // kTemporalStructureMode3: 0-2-1-2.. |
| 953 EXPECT_EQ(kCompleteSession, jitter_buffer_->InsertPacket(*packet_, &re)); | 953 EXPECT_EQ(kCompleteSession, jitter_buffer_->InsertPacket(*packet_, &re)); |
| 954 | 954 |
| 955 // Insert next temporal layer 0. | 955 // Insert next temporal layer 0. |
| 956 packet_->seqNum = 65489; | 956 packet_->seqNum = 65489; |
| 957 packet_->timestamp = 13000; | 957 packet_->timestamp = 13000; |
| 958 packet_->frameType = kVideoFrameDelta; | 958 packet_->frameType = kVideoFrameDelta; |
| 959 packet_->codecSpecificHeader.codecHeader.VP9.picture_id = 9; | 959 packet_->video_header.codecHeader.VP9.picture_id = 9; |
| 960 packet_->codecSpecificHeader.codecHeader.VP9.tl0_pic_idx = 201; | 960 packet_->video_header.codecHeader.VP9.tl0_pic_idx = 201; |
| 961 packet_->codecSpecificHeader.codecHeader.VP9.temporal_idx = 0; | 961 packet_->video_header.codecHeader.VP9.temporal_idx = 0; |
| 962 packet_->codecSpecificHeader.codecHeader.VP9.ss_data_available = false; | 962 packet_->video_header.codecHeader.VP9.ss_data_available = false; |
| 963 EXPECT_EQ(kCompleteSession, jitter_buffer_->InsertPacket(*packet_, &re)); | 963 EXPECT_EQ(kCompleteSession, jitter_buffer_->InsertPacket(*packet_, &re)); |
| 964 | 964 |
| 965 VCMEncodedFrame* frame_out = DecodeCompleteFrame(); | 965 VCMEncodedFrame* frame_out = DecodeCompleteFrame(); |
| 966 EXPECT_EQ(1000U, frame_out->TimeStamp()); | 966 EXPECT_EQ(1000U, frame_out->TimeStamp()); |
| 967 EXPECT_EQ(kVideoFrameKey, frame_out->FrameType()); | 967 EXPECT_EQ(kVideoFrameKey, frame_out->FrameType()); |
| 968 jitter_buffer_->ReleaseFrame(frame_out); | 968 jitter_buffer_->ReleaseFrame(frame_out); |
| 969 | 969 |
| 970 frame_out = DecodeCompleteFrame(); | 970 frame_out = DecodeCompleteFrame(); |
| 971 EXPECT_EQ(13000U, frame_out->TimeStamp()); | 971 EXPECT_EQ(13000U, frame_out->TimeStamp()); |
| 972 EXPECT_EQ(kVideoFrameDelta, frame_out->FrameType()); | 972 EXPECT_EQ(kVideoFrameDelta, frame_out->FrameType()); |
| 973 jitter_buffer_->ReleaseFrame(frame_out); | 973 jitter_buffer_->ReleaseFrame(frame_out); |
| 974 } | 974 } |
| 975 | 975 |
| 976 TEST_P(TestBasicJitterBuffer, ReorderedVp9SsData_3TlLayers) { | 976 TEST_P(TestBasicJitterBuffer, ReorderedVp9SsData_3TlLayers) { |
| 977 // Verify that frames are updated with SS data when SS packet is reordered. | 977 // Verify that frames are updated with SS data when SS packet is reordered. |
| 978 // -------------------------------- | 978 // -------------------------------- |
| 979 // | 65486 | 65487 | 65485 |... | 979 // | 65486 | 65487 | 65485 |... |
| 980 // | pid:6 | pid:7 | pid:5 |... | 980 // | pid:6 | pid:7 | pid:5 |... |
| 981 // | tid:2 | tid:1 | tid:0 |... | 981 // | tid:2 | tid:1 | tid:0 |... |
| 982 // | | | ss | | 982 // | | | ss | |
| 983 // -------------------------------- | 983 // -------------------------------- |
| 984 // |<--------tl0idx:200--------->| | 984 // |<--------tl0idx:200--------->| |
| 985 | 985 |
| 986 bool re = false; | 986 bool re = false; |
| 987 packet_->codec = kVideoCodecVP9; | 987 packet_->codec = kVideoCodecVP9; |
| 988 packet_->codecSpecificHeader.codec = kRtpVideoVp9; | 988 packet_->video_header.codec = kRtpVideoVp9; |
| 989 packet_->isFirstPacket = true; | 989 packet_->isFirstPacket = true; |
| 990 packet_->markerBit = true; | 990 packet_->markerBit = true; |
| 991 packet_->codecSpecificHeader.codecHeader.VP9.flexible_mode = false; | 991 packet_->video_header.codecHeader.VP9.flexible_mode = false; |
| 992 packet_->codecSpecificHeader.codecHeader.VP9.spatial_idx = 0; | 992 packet_->video_header.codecHeader.VP9.spatial_idx = 0; |
| 993 packet_->codecSpecificHeader.codecHeader.VP9.beginning_of_frame = true; | 993 packet_->video_header.codecHeader.VP9.beginning_of_frame = true; |
| 994 packet_->codecSpecificHeader.codecHeader.VP9.end_of_frame = true; | 994 packet_->video_header.codecHeader.VP9.end_of_frame = true; |
| 995 packet_->codecSpecificHeader.codecHeader.VP9.tl0_pic_idx = 200; | 995 packet_->video_header.codecHeader.VP9.tl0_pic_idx = 200; |
| 996 | 996 |
| 997 packet_->seqNum = 65486; | 997 packet_->seqNum = 65486; |
| 998 packet_->timestamp = 6000; | 998 packet_->timestamp = 6000; |
| 999 packet_->frameType = kVideoFrameDelta; | 999 packet_->frameType = kVideoFrameDelta; |
| 1000 packet_->codecSpecificHeader.codecHeader.VP9.picture_id = 6; | 1000 packet_->video_header.codecHeader.VP9.picture_id = 6; |
| 1001 packet_->codecSpecificHeader.codecHeader.VP9.temporal_idx = 2; | 1001 packet_->video_header.codecHeader.VP9.temporal_idx = 2; |
| 1002 packet_->codecSpecificHeader.codecHeader.VP9.temporal_up_switch = true; | 1002 packet_->video_header.codecHeader.VP9.temporal_up_switch = true; |
| 1003 EXPECT_EQ(kCompleteSession, jitter_buffer_->InsertPacket(*packet_, &re)); | 1003 EXPECT_EQ(kCompleteSession, jitter_buffer_->InsertPacket(*packet_, &re)); |
| 1004 | 1004 |
| 1005 packet_->seqNum = 65487; | 1005 packet_->seqNum = 65487; |
| 1006 packet_->timestamp = 9000; | 1006 packet_->timestamp = 9000; |
| 1007 packet_->frameType = kVideoFrameDelta; | 1007 packet_->frameType = kVideoFrameDelta; |
| 1008 packet_->codecSpecificHeader.codecHeader.VP9.picture_id = 7; | 1008 packet_->video_header.codecHeader.VP9.picture_id = 7; |
| 1009 packet_->codecSpecificHeader.codecHeader.VP9.temporal_idx = 1; | 1009 packet_->video_header.codecHeader.VP9.temporal_idx = 1; |
| 1010 packet_->codecSpecificHeader.codecHeader.VP9.temporal_up_switch = true; | 1010 packet_->video_header.codecHeader.VP9.temporal_up_switch = true; |
| 1011 EXPECT_EQ(kCompleteSession, jitter_buffer_->InsertPacket(*packet_, &re)); | 1011 EXPECT_EQ(kCompleteSession, jitter_buffer_->InsertPacket(*packet_, &re)); |
| 1012 | 1012 |
| 1013 // Insert first frame with SS data. | 1013 // Insert first frame with SS data. |
| 1014 packet_->seqNum = 65485; | 1014 packet_->seqNum = 65485; |
| 1015 packet_->timestamp = 3000; | 1015 packet_->timestamp = 3000; |
| 1016 packet_->frameType = kVideoFrameKey; | 1016 packet_->frameType = kVideoFrameKey; |
| 1017 packet_->width = 352; | 1017 packet_->width = 352; |
| 1018 packet_->height = 288; | 1018 packet_->height = 288; |
| 1019 packet_->codecSpecificHeader.codecHeader.VP9.picture_id = 5; | 1019 packet_->video_header.codecHeader.VP9.picture_id = 5; |
| 1020 packet_->codecSpecificHeader.codecHeader.VP9.temporal_idx = 0; | 1020 packet_->video_header.codecHeader.VP9.temporal_idx = 0; |
| 1021 packet_->codecSpecificHeader.codecHeader.VP9.temporal_up_switch = false; | 1021 packet_->video_header.codecHeader.VP9.temporal_up_switch = false; |
| 1022 packet_->codecSpecificHeader.codecHeader.VP9.ss_data_available = true; | 1022 packet_->video_header.codecHeader.VP9.ss_data_available = true; |
| 1023 packet_->codecSpecificHeader.codecHeader.VP9.gof.SetGofInfoVP9( | 1023 packet_->video_header.codecHeader.VP9.gof.SetGofInfoVP9( |
| 1024 kTemporalStructureMode3); // kTemporalStructureMode3: 0-2-1-2.. | 1024 kTemporalStructureMode3); // kTemporalStructureMode3: 0-2-1-2.. |
| 1025 EXPECT_EQ(kCompleteSession, jitter_buffer_->InsertPacket(*packet_, &re)); | 1025 EXPECT_EQ(kCompleteSession, jitter_buffer_->InsertPacket(*packet_, &re)); |
| 1026 | 1026 |
| 1027 VCMEncodedFrame* frame_out = DecodeCompleteFrame(); | 1027 VCMEncodedFrame* frame_out = DecodeCompleteFrame(); |
| 1028 EXPECT_EQ(3000U, frame_out->TimeStamp()); | 1028 EXPECT_EQ(3000U, frame_out->TimeStamp()); |
| 1029 EXPECT_EQ(kVideoFrameKey, frame_out->FrameType()); | 1029 EXPECT_EQ(kVideoFrameKey, frame_out->FrameType()); |
| 1030 EXPECT_EQ(0, frame_out->CodecSpecific()->codecSpecific.VP9.temporal_idx); | 1030 EXPECT_EQ(0, frame_out->CodecSpecific()->codecSpecific.VP9.temporal_idx); |
| 1031 EXPECT_FALSE( | 1031 EXPECT_FALSE( |
| 1032 frame_out->CodecSpecific()->codecSpecific.VP9.temporal_up_switch); | 1032 frame_out->CodecSpecific()->codecSpecific.VP9.temporal_up_switch); |
| 1033 jitter_buffer_->ReleaseFrame(frame_out); | 1033 jitter_buffer_->ReleaseFrame(frame_out); |
| (...skipping 20 matching lines...) Expand all Loading... |
| 1054 // | pid:6 | pid:6 | pid:5 | pid:5 |... | 1054 // | pid:6 | pid:6 | pid:5 | pid:5 |... |
| 1055 // | tid:1 | tid:1 | tid:0 | tid:0 |... | 1055 // | tid:1 | tid:1 | tid:0 | tid:0 |... |
| 1056 // | sid:0 | sid:1 | sid:1 | sid:0 |... | 1056 // | sid:0 | sid:1 | sid:1 | sid:0 |... |
| 1057 // | t:6000 | t:6000 | t:3000 | t:3000 | | 1057 // | t:6000 | t:6000 | t:3000 | t:3000 | |
| 1058 // | | | | ss | | 1058 // | | | | ss | |
| 1059 // ----------------------------------------- | 1059 // ----------------------------------------- |
| 1060 // |<-----------tl0idx:200------------>| | 1060 // |<-----------tl0idx:200------------>| |
| 1061 | 1061 |
| 1062 bool re = false; | 1062 bool re = false; |
| 1063 packet_->codec = kVideoCodecVP9; | 1063 packet_->codec = kVideoCodecVP9; |
| 1064 packet_->codecSpecificHeader.codec = kRtpVideoVp9; | 1064 packet_->video_header.codec = kRtpVideoVp9; |
| 1065 packet_->codecSpecificHeader.codecHeader.VP9.flexible_mode = false; | 1065 packet_->video_header.codecHeader.VP9.flexible_mode = false; |
| 1066 packet_->codecSpecificHeader.codecHeader.VP9.beginning_of_frame = true; | 1066 packet_->video_header.codecHeader.VP9.beginning_of_frame = true; |
| 1067 packet_->codecSpecificHeader.codecHeader.VP9.end_of_frame = true; | 1067 packet_->video_header.codecHeader.VP9.end_of_frame = true; |
| 1068 packet_->codecSpecificHeader.codecHeader.VP9.tl0_pic_idx = 200; | 1068 packet_->video_header.codecHeader.VP9.tl0_pic_idx = 200; |
| 1069 | 1069 |
| 1070 packet_->isFirstPacket = true; | 1070 packet_->isFirstPacket = true; |
| 1071 packet_->markerBit = false; | 1071 packet_->markerBit = false; |
| 1072 packet_->seqNum = 65486; | 1072 packet_->seqNum = 65486; |
| 1073 packet_->timestamp = 6000; | 1073 packet_->timestamp = 6000; |
| 1074 packet_->frameType = kVideoFrameDelta; | 1074 packet_->frameType = kVideoFrameDelta; |
| 1075 packet_->codecSpecificHeader.codecHeader.VP9.spatial_idx = 0; | 1075 packet_->video_header.codecHeader.VP9.spatial_idx = 0; |
| 1076 packet_->codecSpecificHeader.codecHeader.VP9.picture_id = 6; | 1076 packet_->video_header.codecHeader.VP9.picture_id = 6; |
| 1077 packet_->codecSpecificHeader.codecHeader.VP9.temporal_idx = 1; | 1077 packet_->video_header.codecHeader.VP9.temporal_idx = 1; |
| 1078 packet_->codecSpecificHeader.codecHeader.VP9.temporal_up_switch = true; | 1078 packet_->video_header.codecHeader.VP9.temporal_up_switch = true; |
| 1079 EXPECT_EQ(kIncomplete, jitter_buffer_->InsertPacket(*packet_, &re)); | 1079 EXPECT_EQ(kIncomplete, jitter_buffer_->InsertPacket(*packet_, &re)); |
| 1080 | 1080 |
| 1081 packet_->isFirstPacket = false; | 1081 packet_->isFirstPacket = false; |
| 1082 packet_->markerBit = true; | 1082 packet_->markerBit = true; |
| 1083 packet_->seqNum = 65487; | 1083 packet_->seqNum = 65487; |
| 1084 packet_->frameType = kVideoFrameDelta; | 1084 packet_->frameType = kVideoFrameDelta; |
| 1085 packet_->codecSpecificHeader.codecHeader.VP9.spatial_idx = 1; | 1085 packet_->video_header.codecHeader.VP9.spatial_idx = 1; |
| 1086 packet_->codecSpecificHeader.codecHeader.VP9.picture_id = 6; | 1086 packet_->video_header.codecHeader.VP9.picture_id = 6; |
| 1087 packet_->codecSpecificHeader.codecHeader.VP9.temporal_idx = 1; | 1087 packet_->video_header.codecHeader.VP9.temporal_idx = 1; |
| 1088 packet_->codecSpecificHeader.codecHeader.VP9.temporal_up_switch = true; | 1088 packet_->video_header.codecHeader.VP9.temporal_up_switch = true; |
| 1089 EXPECT_EQ(kCompleteSession, jitter_buffer_->InsertPacket(*packet_, &re)); | 1089 EXPECT_EQ(kCompleteSession, jitter_buffer_->InsertPacket(*packet_, &re)); |
| 1090 | 1090 |
| 1091 packet_->isFirstPacket = false; | 1091 packet_->isFirstPacket = false; |
| 1092 packet_->markerBit = true; | 1092 packet_->markerBit = true; |
| 1093 packet_->seqNum = 65485; | 1093 packet_->seqNum = 65485; |
| 1094 packet_->timestamp = 3000; | 1094 packet_->timestamp = 3000; |
| 1095 packet_->frameType = kVideoFrameKey; | 1095 packet_->frameType = kVideoFrameKey; |
| 1096 packet_->codecSpecificHeader.codecHeader.VP9.spatial_idx = 1; | 1096 packet_->video_header.codecHeader.VP9.spatial_idx = 1; |
| 1097 packet_->codecSpecificHeader.codecHeader.VP9.picture_id = 5; | 1097 packet_->video_header.codecHeader.VP9.picture_id = 5; |
| 1098 packet_->codecSpecificHeader.codecHeader.VP9.temporal_idx = 0; | 1098 packet_->video_header.codecHeader.VP9.temporal_idx = 0; |
| 1099 packet_->codecSpecificHeader.codecHeader.VP9.temporal_up_switch = false; | 1099 packet_->video_header.codecHeader.VP9.temporal_up_switch = false; |
| 1100 EXPECT_EQ(kIncomplete, jitter_buffer_->InsertPacket(*packet_, &re)); | 1100 EXPECT_EQ(kIncomplete, jitter_buffer_->InsertPacket(*packet_, &re)); |
| 1101 | 1101 |
| 1102 // Insert first frame with SS data. | 1102 // Insert first frame with SS data. |
| 1103 packet_->isFirstPacket = true; | 1103 packet_->isFirstPacket = true; |
| 1104 packet_->markerBit = false; | 1104 packet_->markerBit = false; |
| 1105 packet_->seqNum = 65484; | 1105 packet_->seqNum = 65484; |
| 1106 packet_->frameType = kVideoFrameKey; | 1106 packet_->frameType = kVideoFrameKey; |
| 1107 packet_->width = 352; | 1107 packet_->width = 352; |
| 1108 packet_->height = 288; | 1108 packet_->height = 288; |
| 1109 packet_->codecSpecificHeader.codecHeader.VP9.spatial_idx = 0; | 1109 packet_->video_header.codecHeader.VP9.spatial_idx = 0; |
| 1110 packet_->codecSpecificHeader.codecHeader.VP9.picture_id = 5; | 1110 packet_->video_header.codecHeader.VP9.picture_id = 5; |
| 1111 packet_->codecSpecificHeader.codecHeader.VP9.temporal_idx = 0; | 1111 packet_->video_header.codecHeader.VP9.temporal_idx = 0; |
| 1112 packet_->codecSpecificHeader.codecHeader.VP9.temporal_up_switch = false; | 1112 packet_->video_header.codecHeader.VP9.temporal_up_switch = false; |
| 1113 packet_->codecSpecificHeader.codecHeader.VP9.ss_data_available = true; | 1113 packet_->video_header.codecHeader.VP9.ss_data_available = true; |
| 1114 packet_->codecSpecificHeader.codecHeader.VP9.gof.SetGofInfoVP9( | 1114 packet_->video_header.codecHeader.VP9.gof.SetGofInfoVP9( |
| 1115 kTemporalStructureMode2); // kTemporalStructureMode3: 0-1-0-1.. | 1115 kTemporalStructureMode2); // kTemporalStructureMode3: 0-1-0-1.. |
| 1116 EXPECT_EQ(kCompleteSession, jitter_buffer_->InsertPacket(*packet_, &re)); | 1116 EXPECT_EQ(kCompleteSession, jitter_buffer_->InsertPacket(*packet_, &re)); |
| 1117 | 1117 |
| 1118 VCMEncodedFrame* frame_out = DecodeCompleteFrame(); | 1118 VCMEncodedFrame* frame_out = DecodeCompleteFrame(); |
| 1119 EXPECT_EQ(3000U, frame_out->TimeStamp()); | 1119 EXPECT_EQ(3000U, frame_out->TimeStamp()); |
| 1120 EXPECT_EQ(kVideoFrameKey, frame_out->FrameType()); | 1120 EXPECT_EQ(kVideoFrameKey, frame_out->FrameType()); |
| 1121 EXPECT_EQ(0, frame_out->CodecSpecific()->codecSpecific.VP9.temporal_idx); | 1121 EXPECT_EQ(0, frame_out->CodecSpecific()->codecSpecific.VP9.temporal_idx); |
| 1122 EXPECT_FALSE( | 1122 EXPECT_FALSE( |
| 1123 frame_out->CodecSpecific()->codecSpecific.VP9.temporal_up_switch); | 1123 frame_out->CodecSpecific()->codecSpecific.VP9.temporal_up_switch); |
| 1124 jitter_buffer_->ReleaseFrame(frame_out); | 1124 jitter_buffer_->ReleaseFrame(frame_out); |
| (...skipping 1534 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2659 | 2659 |
| 2660 // Stream should be decodable from this point. | 2660 // Stream should be decodable from this point. |
| 2661 clock_->AdvanceTimeMilliseconds(kDefaultFramePeriodMs); | 2661 clock_->AdvanceTimeMilliseconds(kDefaultFramePeriodMs); |
| 2662 InsertFrame(kVideoFrameDelta); | 2662 InsertFrame(kVideoFrameDelta); |
| 2663 EXPECT_TRUE(DecodeCompleteFrame()); | 2663 EXPECT_TRUE(DecodeCompleteFrame()); |
| 2664 nack_list = jitter_buffer_->GetNackList(&extended); | 2664 nack_list = jitter_buffer_->GetNackList(&extended); |
| 2665 EXPECT_EQ(0u, nack_list.size()); | 2665 EXPECT_EQ(0u, nack_list.size()); |
| 2666 } | 2666 } |
| 2667 | 2667 |
| 2668 } // namespace webrtc | 2668 } // namespace webrtc |
| OLD | NEW |