OLD | NEW |
1 /* | 1 /* |
2 * Copyright (c) 2016 The WebRTC project authors. All Rights Reserved. | 2 * Copyright (c) 2016 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 106 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
117 } | 117 } |
118 | 118 |
119 TEST(H264ProfileLevelId, TestToStringInvalid) { | 119 TEST(H264ProfileLevelId, TestToStringInvalid) { |
120 EXPECT_FALSE(ProfileLevelIdToString(ProfileLevelId(kProfileHigh, kLevel1_b))); | 120 EXPECT_FALSE(ProfileLevelIdToString(ProfileLevelId(kProfileHigh, kLevel1_b))); |
121 EXPECT_FALSE(ProfileLevelIdToString( | 121 EXPECT_FALSE(ProfileLevelIdToString( |
122 ProfileLevelId(kProfileConstrainedHigh, kLevel1_b))); | 122 ProfileLevelId(kProfileConstrainedHigh, kLevel1_b))); |
123 EXPECT_FALSE(ProfileLevelIdToString( | 123 EXPECT_FALSE(ProfileLevelIdToString( |
124 ProfileLevelId(static_cast<Profile>(255), kLevel3_1))); | 124 ProfileLevelId(static_cast<Profile>(255), kLevel3_1))); |
125 } | 125 } |
126 | 126 |
| 127 TEST(H264ProfileLevelId, TestParseSdpProfileLevelIdEmpty) { |
| 128 const rtc::Optional<ProfileLevelId> profile_level_id = |
| 129 ParseSdpProfileLevelId(CodecParameterMap()); |
| 130 EXPECT_TRUE(profile_level_id); |
| 131 EXPECT_EQ(kProfileConstrainedBaseline, profile_level_id->profile); |
| 132 EXPECT_EQ(kLevel3_1, profile_level_id->level); |
| 133 } |
| 134 |
| 135 TEST(H264ProfileLevelId, TestParseSdpProfileLevelIdConstrainedHigh) { |
| 136 CodecParameterMap params; |
| 137 params["profile-level-id"] = "640c2a"; |
| 138 const rtc::Optional<ProfileLevelId> profile_level_id = |
| 139 ParseSdpProfileLevelId(params); |
| 140 EXPECT_TRUE(profile_level_id); |
| 141 EXPECT_EQ(kProfileConstrainedHigh, profile_level_id->profile); |
| 142 EXPECT_EQ(kLevel4_2, profile_level_id->level); |
| 143 } |
| 144 |
| 145 TEST(H264ProfileLevelId, TestParseSdpProfileLevelIdInvalid) { |
| 146 CodecParameterMap params; |
| 147 params["profile-level-id"] = "foobar"; |
| 148 EXPECT_FALSE(ParseSdpProfileLevelId(params)); |
| 149 } |
| 150 |
| 151 TEST(H264ProfileLevelId, TestGenerateProfileLevelIdForAnswerEmpty) { |
| 152 CodecParameterMap answer_params; |
| 153 GenerateProfileLevelIdForAnswer(CodecParameterMap(), CodecParameterMap(), |
| 154 &answer_params); |
| 155 EXPECT_EQ("42e01f", answer_params["profile-level-id"]); |
| 156 } |
| 157 |
| 158 TEST(H264ProfileLevelId, |
| 159 TestGenerateProfileLevelIdForAnswerLevelSymmetryCapped) { |
| 160 CodecParameterMap low_level; |
| 161 low_level["profile-level-id"] = "42e015"; |
| 162 CodecParameterMap high_level; |
| 163 high_level["profile-level-id"] = "42e01f"; |
| 164 |
| 165 // Level asymmetry is not allowed; test that answer level is the lower of the |
| 166 // local and remote levels. |
| 167 CodecParameterMap answer_params; |
| 168 GenerateProfileLevelIdForAnswer(low_level /* local_supported */, |
| 169 high_level /* remote_offered */, |
| 170 &answer_params); |
| 171 EXPECT_EQ("42e015", answer_params["profile-level-id"]); |
| 172 |
| 173 CodecParameterMap answer_params2; |
| 174 GenerateProfileLevelIdForAnswer(high_level /* local_supported */, |
| 175 low_level /* remote_offered */, |
| 176 &answer_params2); |
| 177 EXPECT_EQ("42e015", answer_params2["profile-level-id"]); |
| 178 } |
| 179 |
| 180 TEST(H264ProfileLevelId, |
| 181 TestGenerateProfileLevelIdForAnswerConstrainedBaselineLevelAsymmetry) { |
| 182 CodecParameterMap local_params; |
| 183 local_params["profile-level-id"] = "42e01f"; |
| 184 local_params["level-asymmetry-allowed"] = "1"; |
| 185 CodecParameterMap remote_params; |
| 186 remote_params["profile-level-id"] = "42e015"; |
| 187 remote_params["level-asymmetry-allowed"] = "1"; |
| 188 CodecParameterMap answer_params; |
| 189 GenerateProfileLevelIdForAnswer(local_params, remote_params, &answer_params); |
| 190 // When level asymmetry is allowed, we can answer a higher level than what was |
| 191 // offered. |
| 192 EXPECT_EQ("42e01f", answer_params["profile-level-id"]); |
| 193 } |
| 194 |
127 } // namespace H264 | 195 } // namespace H264 |
128 } // namespace webrtc | 196 } // namespace webrtc |
OLD | NEW |