From d8bbc7858622b6d9c278469aab701ca0b609cddf Mon Sep 17 00:00:00 2001 From: Daniel Baumann Date: Wed, 15 May 2024 05:35:49 +0200 Subject: Merging upstream version 126.0. Signed-off-by: Daniel Baumann --- .../test/h265_profile_tier_level_unittest.cc | 496 ++++++++++----------- 1 file changed, 248 insertions(+), 248 deletions(-) (limited to 'third_party/libwebrtc/api/video_codecs/test/h265_profile_tier_level_unittest.cc') diff --git a/third_party/libwebrtc/api/video_codecs/test/h265_profile_tier_level_unittest.cc b/third_party/libwebrtc/api/video_codecs/test/h265_profile_tier_level_unittest.cc index a9fdf966a5..85c0f09cd0 100644 --- a/third_party/libwebrtc/api/video_codecs/test/h265_profile_tier_level_unittest.cc +++ b/third_party/libwebrtc/api/video_codecs/test/h265_profile_tier_level_unittest.cc @@ -1,248 +1,248 @@ -/* - * Copyright (c) 2023 The WebRTC project authors. All Rights Reserved. - * - * Use of this source code is governed by a BSD-style license - * that can be found in the LICENSE file in the root of the source - * tree. An additional intellectual property rights grant can be found - * in the file PATENTS. All contributing project authors may - * be found in the AUTHORS file in the root of the source tree. - */ - -#include "api/video_codecs/h265_profile_tier_level.h" - -#include - -#include "absl/types/optional.h" -#include "test/gtest.h" - -namespace webrtc { - -TEST(H265ProfileTierLevel, TestLevelToString) { - EXPECT_EQ(H265LevelToString(H265Level::kLevel1), "30"); - EXPECT_EQ(H265LevelToString(H265Level::kLevel2), "60"); - EXPECT_EQ(H265LevelToString(H265Level::kLevel2_1), "63"); - EXPECT_EQ(H265LevelToString(H265Level::kLevel3), "90"); - EXPECT_EQ(H265LevelToString(H265Level::kLevel3_1), "93"); - EXPECT_EQ(H265LevelToString(H265Level::kLevel4), "120"); - EXPECT_EQ(H265LevelToString(H265Level::kLevel4_1), "123"); - EXPECT_EQ(H265LevelToString(H265Level::kLevel5), "150"); - EXPECT_EQ(H265LevelToString(H265Level::kLevel5_1), "153"); - EXPECT_EQ(H265LevelToString(H265Level::kLevel5_2), "156"); - EXPECT_EQ(H265LevelToString(H265Level::kLevel6), "180"); - EXPECT_EQ(H265LevelToString(H265Level::kLevel6_1), "183"); - EXPECT_EQ(H265LevelToString(H265Level::kLevel6_2), "186"); -} - -TEST(H265ProfileTierLevel, TestProfileToString) { - EXPECT_EQ(H265ProfileToString(H265Profile::kProfileMain), "1"); - EXPECT_EQ(H265ProfileToString(H265Profile::kProfileMain10), "2"); - EXPECT_EQ(H265ProfileToString(H265Profile::kProfileMainStill), "3"); - EXPECT_EQ(H265ProfileToString(H265Profile::kProfileRangeExtensions), "4"); - EXPECT_EQ(H265ProfileToString(H265Profile::kProfileHighThroughput), "5"); - EXPECT_EQ(H265ProfileToString(H265Profile::kProfileMultiviewMain), "6"); - EXPECT_EQ(H265ProfileToString(H265Profile::kProfileScalableMain), "7"); - EXPECT_EQ(H265ProfileToString(H265Profile::kProfile3dMain), "8"); - EXPECT_EQ(H265ProfileToString(H265Profile::kProfileScreenContentCoding), "9"); - EXPECT_EQ(H265ProfileToString(H265Profile::kProfileScalableRangeExtensions), - "10"); - EXPECT_EQ(H265ProfileToString( - H265Profile::kProfileHighThroughputScreenContentCoding), - "11"); -} - -TEST(H265ProfileTierLevel, TestTierToString) { - EXPECT_EQ(H265TierToString(H265Tier::kTier0), "0"); - EXPECT_EQ(H265TierToString(H265Tier::kTier1), "1"); -} - -TEST(H265ProfileTierLevel, TestStringToProfile) { - // Invalid profiles. - EXPECT_FALSE(StringToH265Profile("0")); - EXPECT_FALSE(StringToH265Profile("12")); - - // Malformed profiles - EXPECT_FALSE(StringToH265Profile("")); - EXPECT_FALSE(StringToH265Profile(" 1")); - EXPECT_FALSE(StringToH265Profile("12x")); - EXPECT_FALSE(StringToH265Profile("x12")); - EXPECT_FALSE(StringToH265Profile("gggg")); - - // Valid profiles. - EXPECT_EQ(StringToH265Profile("1"), H265Profile::kProfileMain); - EXPECT_EQ(StringToH265Profile("2"), H265Profile::kProfileMain10); - EXPECT_EQ(StringToH265Profile("4"), H265Profile::kProfileRangeExtensions); -} - -TEST(H265ProfileTierLevel, TestStringToLevel) { - // Invalid levels. - EXPECT_FALSE(StringToH265Level("0")); - EXPECT_FALSE(StringToH265Level("200")); - - // Malformed levels. - EXPECT_FALSE(StringToH265Level("")); - EXPECT_FALSE(StringToH265Level(" 30")); - EXPECT_FALSE(StringToH265Level("30x")); - EXPECT_FALSE(StringToH265Level("x30")); - EXPECT_FALSE(StringToH265Level("ggggg")); - - // Valid levels. - EXPECT_EQ(StringToH265Level("30"), H265Level::kLevel1); - EXPECT_EQ(StringToH265Level("93"), H265Level::kLevel3_1); - EXPECT_EQ(StringToH265Level("183"), H265Level::kLevel6_1); -} - -TEST(H265ProfileTierLevel, TestStringToTier) { - // Invalid tiers. - EXPECT_FALSE(StringToH265Tier("4")); - EXPECT_FALSE(StringToH265Tier("-1")); - - // Malformed tiers. - EXPECT_FALSE(StringToH265Tier("")); - EXPECT_FALSE(StringToH265Tier(" 1")); - EXPECT_FALSE(StringToH265Tier("t1")); - - // Valid tiers. - EXPECT_EQ(StringToH265Tier("0"), H265Tier::kTier0); - EXPECT_EQ(StringToH265Tier("1"), H265Tier::kTier1); -} - -TEST(H265ProfileTierLevel, TestParseSdpProfileTierLevelAllEmpty) { - const absl::optional profile_tier_level = - ParseSdpForH265ProfileTierLevel(SdpVideoFormat::Parameters()); - EXPECT_TRUE(profile_tier_level); - EXPECT_EQ(H265Profile::kProfileMain, profile_tier_level->profile); - EXPECT_EQ(H265Level::kLevel3_1, profile_tier_level->level); - EXPECT_EQ(H265Tier::kTier0, profile_tier_level->tier); -} - -TEST(H265ProfileTierLevel, TestParseSdpProfileTierLevelPartialEmpty) { - SdpVideoFormat::Parameters params; - params["profile-id"] = "1"; - params["tier-flag"] = "0"; - absl::optional profile_tier_level = - ParseSdpForH265ProfileTierLevel(params); - EXPECT_TRUE(profile_tier_level); - EXPECT_EQ(H265Profile::kProfileMain, profile_tier_level->profile); - EXPECT_EQ(H265Level::kLevel3_1, profile_tier_level->level); - EXPECT_EQ(H265Tier::kTier0, profile_tier_level->tier); - - params.clear(); - params["profile-id"] = "2"; - profile_tier_level = ParseSdpForH265ProfileTierLevel(params); - EXPECT_TRUE(profile_tier_level); - EXPECT_EQ(H265Profile::kProfileMain10, profile_tier_level->profile); - EXPECT_EQ(H265Level::kLevel3_1, profile_tier_level->level); - EXPECT_EQ(H265Tier::kTier0, profile_tier_level->tier); - - params.clear(); - params["level-id"] = "180"; - profile_tier_level = ParseSdpForH265ProfileTierLevel(params); - EXPECT_TRUE(profile_tier_level); - EXPECT_EQ(H265Profile::kProfileMain, profile_tier_level->profile); - EXPECT_EQ(H265Level::kLevel6, profile_tier_level->level); - EXPECT_EQ(H265Tier::kTier0, profile_tier_level->tier); -} - -TEST(H265ProfileTierLevel, TestParseSdpProfileTierLevelInvalid) { - SdpVideoFormat::Parameters params; - - // Invalid profile-tier-level combination. - params["profile-id"] = "1"; - params["tier-flag"] = "1"; - params["level-id"] = "93"; - absl::optional profile_tier_level = - ParseSdpForH265ProfileTierLevel(params); - EXPECT_FALSE(profile_tier_level); - params.clear(); - params["profile-id"] = "1"; - params["tier-flag"] = "4"; - params["level-id"] = "180"; - profile_tier_level = ParseSdpForH265ProfileTierLevel(params); - EXPECT_FALSE(profile_tier_level); - - // Valid profile-tier-level combination. - params.clear(); - params["profile-id"] = "1"; - params["tier-flag"] = "0"; - params["level-id"] = "153"; - profile_tier_level = ParseSdpForH265ProfileTierLevel(params); - EXPECT_TRUE(profile_tier_level); -} - -TEST(H265ProfileTierLevel, TestToStringRoundTrip) { - SdpVideoFormat::Parameters params; - params["profile-id"] = "1"; - params["tier-flag"] = "0"; - params["level-id"] = "93"; - absl::optional profile_tier_level = - ParseSdpForH265ProfileTierLevel(params); - EXPECT_TRUE(profile_tier_level); - EXPECT_EQ("1", H265ProfileToString(profile_tier_level->profile)); - EXPECT_EQ("0", H265TierToString(profile_tier_level->tier)); - EXPECT_EQ("93", H265LevelToString(profile_tier_level->level)); - - params.clear(); - params["profile-id"] = "2"; - params["tier-flag"] = "1"; - params["level-id"] = "180"; - profile_tier_level = ParseSdpForH265ProfileTierLevel(params); - EXPECT_TRUE(profile_tier_level); - EXPECT_EQ("2", H265ProfileToString(profile_tier_level->profile)); - EXPECT_EQ("1", H265TierToString(profile_tier_level->tier)); - EXPECT_EQ("180", H265LevelToString(profile_tier_level->level)); -} - -TEST(H265ProfileTierLevel, TestProfileTierLevelCompare) { - SdpVideoFormat::Parameters params1; - SdpVideoFormat::Parameters params2; - - // None of profile-id/tier-flag/level-id is specified, - EXPECT_TRUE(H265IsSameProfileTierLevel(params1, params2)); - - // Same non-empty PTL - params1["profile-id"] = "1"; - params1["tier-flag"] = "0"; - params1["level-id"] = "120"; - params2["profile-id"] = "1"; - params2["tier-flag"] = "0"; - params2["level-id"] = "120"; - EXPECT_TRUE(H265IsSameProfileTierLevel(params1, params2)); - - // Different profiles. - params1.clear(); - params2.clear(); - params1["profile-id"] = "1"; - params2["profile-id"] = "2"; - EXPECT_FALSE(H265IsSameProfileTierLevel(params1, params2)); - - // Different levels. - params1.clear(); - params2.clear(); - params1["profile-id"] = "1"; - params2["profile-id"] = "1"; - params1["level-id"] = "93"; - params2["level-id"] = "183"; - EXPECT_FALSE(H265IsSameProfileTierLevel(params1, params2)); - - // Different tiers. - params1.clear(); - params2.clear(); - params1["profile-id"] = "1"; - params2["profile-id"] = "1"; - params1["level-id"] = "93"; - params2["level-id"] = "93"; - params1["tier-flag"] = "0"; - params2["tier-flag"] = "1"; - EXPECT_FALSE(H265IsSameProfileTierLevel(params1, params2)); - - // One of the SdpVideoFormat::Parameters is invalid. - params1.clear(); - params2.clear(); - params1["profile-id"] = "1"; - params2["profile-id"] = "1"; - params1["tier-flag"] = "0"; - params2["tier-flag"] = "4"; - EXPECT_FALSE(H265IsSameProfileTierLevel(params1, params2)); -} - -} // namespace webrtc +/* + * Copyright (c) 2023 The WebRTC project authors. All Rights Reserved. + * + * Use of this source code is governed by a BSD-style license + * that can be found in the LICENSE file in the root of the source + * tree. An additional intellectual property rights grant can be found + * in the file PATENTS. All contributing project authors may + * be found in the AUTHORS file in the root of the source tree. + */ + +#include "api/video_codecs/h265_profile_tier_level.h" + +#include + +#include "absl/types/optional.h" +#include "test/gtest.h" + +namespace webrtc { + +TEST(H265ProfileTierLevel, TestLevelToString) { + EXPECT_EQ(H265LevelToString(H265Level::kLevel1), "30"); + EXPECT_EQ(H265LevelToString(H265Level::kLevel2), "60"); + EXPECT_EQ(H265LevelToString(H265Level::kLevel2_1), "63"); + EXPECT_EQ(H265LevelToString(H265Level::kLevel3), "90"); + EXPECT_EQ(H265LevelToString(H265Level::kLevel3_1), "93"); + EXPECT_EQ(H265LevelToString(H265Level::kLevel4), "120"); + EXPECT_EQ(H265LevelToString(H265Level::kLevel4_1), "123"); + EXPECT_EQ(H265LevelToString(H265Level::kLevel5), "150"); + EXPECT_EQ(H265LevelToString(H265Level::kLevel5_1), "153"); + EXPECT_EQ(H265LevelToString(H265Level::kLevel5_2), "156"); + EXPECT_EQ(H265LevelToString(H265Level::kLevel6), "180"); + EXPECT_EQ(H265LevelToString(H265Level::kLevel6_1), "183"); + EXPECT_EQ(H265LevelToString(H265Level::kLevel6_2), "186"); +} + +TEST(H265ProfileTierLevel, TestProfileToString) { + EXPECT_EQ(H265ProfileToString(H265Profile::kProfileMain), "1"); + EXPECT_EQ(H265ProfileToString(H265Profile::kProfileMain10), "2"); + EXPECT_EQ(H265ProfileToString(H265Profile::kProfileMainStill), "3"); + EXPECT_EQ(H265ProfileToString(H265Profile::kProfileRangeExtensions), "4"); + EXPECT_EQ(H265ProfileToString(H265Profile::kProfileHighThroughput), "5"); + EXPECT_EQ(H265ProfileToString(H265Profile::kProfileMultiviewMain), "6"); + EXPECT_EQ(H265ProfileToString(H265Profile::kProfileScalableMain), "7"); + EXPECT_EQ(H265ProfileToString(H265Profile::kProfile3dMain), "8"); + EXPECT_EQ(H265ProfileToString(H265Profile::kProfileScreenContentCoding), "9"); + EXPECT_EQ(H265ProfileToString(H265Profile::kProfileScalableRangeExtensions), + "10"); + EXPECT_EQ(H265ProfileToString( + H265Profile::kProfileHighThroughputScreenContentCoding), + "11"); +} + +TEST(H265ProfileTierLevel, TestTierToString) { + EXPECT_EQ(H265TierToString(H265Tier::kTier0), "0"); + EXPECT_EQ(H265TierToString(H265Tier::kTier1), "1"); +} + +TEST(H265ProfileTierLevel, TestStringToProfile) { + // Invalid profiles. + EXPECT_FALSE(StringToH265Profile("0")); + EXPECT_FALSE(StringToH265Profile("12")); + + // Malformed profiles + EXPECT_FALSE(StringToH265Profile("")); + EXPECT_FALSE(StringToH265Profile(" 1")); + EXPECT_FALSE(StringToH265Profile("12x")); + EXPECT_FALSE(StringToH265Profile("x12")); + EXPECT_FALSE(StringToH265Profile("gggg")); + + // Valid profiles. + EXPECT_EQ(StringToH265Profile("1"), H265Profile::kProfileMain); + EXPECT_EQ(StringToH265Profile("2"), H265Profile::kProfileMain10); + EXPECT_EQ(StringToH265Profile("4"), H265Profile::kProfileRangeExtensions); +} + +TEST(H265ProfileTierLevel, TestStringToLevel) { + // Invalid levels. + EXPECT_FALSE(StringToH265Level("0")); + EXPECT_FALSE(StringToH265Level("200")); + + // Malformed levels. + EXPECT_FALSE(StringToH265Level("")); + EXPECT_FALSE(StringToH265Level(" 30")); + EXPECT_FALSE(StringToH265Level("30x")); + EXPECT_FALSE(StringToH265Level("x30")); + EXPECT_FALSE(StringToH265Level("ggggg")); + + // Valid levels. + EXPECT_EQ(StringToH265Level("30"), H265Level::kLevel1); + EXPECT_EQ(StringToH265Level("93"), H265Level::kLevel3_1); + EXPECT_EQ(StringToH265Level("183"), H265Level::kLevel6_1); +} + +TEST(H265ProfileTierLevel, TestStringToTier) { + // Invalid tiers. + EXPECT_FALSE(StringToH265Tier("4")); + EXPECT_FALSE(StringToH265Tier("-1")); + + // Malformed tiers. + EXPECT_FALSE(StringToH265Tier("")); + EXPECT_FALSE(StringToH265Tier(" 1")); + EXPECT_FALSE(StringToH265Tier("t1")); + + // Valid tiers. + EXPECT_EQ(StringToH265Tier("0"), H265Tier::kTier0); + EXPECT_EQ(StringToH265Tier("1"), H265Tier::kTier1); +} + +TEST(H265ProfileTierLevel, TestParseSdpProfileTierLevelAllEmpty) { + const absl::optional profile_tier_level = + ParseSdpForH265ProfileTierLevel(CodecParameterMap()); + EXPECT_TRUE(profile_tier_level); + EXPECT_EQ(H265Profile::kProfileMain, profile_tier_level->profile); + EXPECT_EQ(H265Level::kLevel3_1, profile_tier_level->level); + EXPECT_EQ(H265Tier::kTier0, profile_tier_level->tier); +} + +TEST(H265ProfileTierLevel, TestParseSdpProfileTierLevelPartialEmpty) { + CodecParameterMap params; + params["profile-id"] = "1"; + params["tier-flag"] = "0"; + absl::optional profile_tier_level = + ParseSdpForH265ProfileTierLevel(params); + EXPECT_TRUE(profile_tier_level); + EXPECT_EQ(H265Profile::kProfileMain, profile_tier_level->profile); + EXPECT_EQ(H265Level::kLevel3_1, profile_tier_level->level); + EXPECT_EQ(H265Tier::kTier0, profile_tier_level->tier); + + params.clear(); + params["profile-id"] = "2"; + profile_tier_level = ParseSdpForH265ProfileTierLevel(params); + EXPECT_TRUE(profile_tier_level); + EXPECT_EQ(H265Profile::kProfileMain10, profile_tier_level->profile); + EXPECT_EQ(H265Level::kLevel3_1, profile_tier_level->level); + EXPECT_EQ(H265Tier::kTier0, profile_tier_level->tier); + + params.clear(); + params["level-id"] = "180"; + profile_tier_level = ParseSdpForH265ProfileTierLevel(params); + EXPECT_TRUE(profile_tier_level); + EXPECT_EQ(H265Profile::kProfileMain, profile_tier_level->profile); + EXPECT_EQ(H265Level::kLevel6, profile_tier_level->level); + EXPECT_EQ(H265Tier::kTier0, profile_tier_level->tier); +} + +TEST(H265ProfileTierLevel, TestParseSdpProfileTierLevelInvalid) { + CodecParameterMap params; + + // Invalid profile-tier-level combination. + params["profile-id"] = "1"; + params["tier-flag"] = "1"; + params["level-id"] = "93"; + absl::optional profile_tier_level = + ParseSdpForH265ProfileTierLevel(params); + EXPECT_FALSE(profile_tier_level); + params.clear(); + params["profile-id"] = "1"; + params["tier-flag"] = "4"; + params["level-id"] = "180"; + profile_tier_level = ParseSdpForH265ProfileTierLevel(params); + EXPECT_FALSE(profile_tier_level); + + // Valid profile-tier-level combination. + params.clear(); + params["profile-id"] = "1"; + params["tier-flag"] = "0"; + params["level-id"] = "153"; + profile_tier_level = ParseSdpForH265ProfileTierLevel(params); + EXPECT_TRUE(profile_tier_level); +} + +TEST(H265ProfileTierLevel, TestToStringRoundTrip) { + CodecParameterMap params; + params["profile-id"] = "1"; + params["tier-flag"] = "0"; + params["level-id"] = "93"; + absl::optional profile_tier_level = + ParseSdpForH265ProfileTierLevel(params); + EXPECT_TRUE(profile_tier_level); + EXPECT_EQ("1", H265ProfileToString(profile_tier_level->profile)); + EXPECT_EQ("0", H265TierToString(profile_tier_level->tier)); + EXPECT_EQ("93", H265LevelToString(profile_tier_level->level)); + + params.clear(); + params["profile-id"] = "2"; + params["tier-flag"] = "1"; + params["level-id"] = "180"; + profile_tier_level = ParseSdpForH265ProfileTierLevel(params); + EXPECT_TRUE(profile_tier_level); + EXPECT_EQ("2", H265ProfileToString(profile_tier_level->profile)); + EXPECT_EQ("1", H265TierToString(profile_tier_level->tier)); + EXPECT_EQ("180", H265LevelToString(profile_tier_level->level)); +} + +TEST(H265ProfileTierLevel, TestProfileTierLevelCompare) { + CodecParameterMap params1; + CodecParameterMap params2; + + // None of profile-id/tier-flag/level-id is specified, + EXPECT_TRUE(H265IsSameProfileTierLevel(params1, params2)); + + // Same non-empty PTL + params1["profile-id"] = "1"; + params1["tier-flag"] = "0"; + params1["level-id"] = "120"; + params2["profile-id"] = "1"; + params2["tier-flag"] = "0"; + params2["level-id"] = "120"; + EXPECT_TRUE(H265IsSameProfileTierLevel(params1, params2)); + + // Different profiles. + params1.clear(); + params2.clear(); + params1["profile-id"] = "1"; + params2["profile-id"] = "2"; + EXPECT_FALSE(H265IsSameProfileTierLevel(params1, params2)); + + // Different levels. + params1.clear(); + params2.clear(); + params1["profile-id"] = "1"; + params2["profile-id"] = "1"; + params1["level-id"] = "93"; + params2["level-id"] = "183"; + EXPECT_FALSE(H265IsSameProfileTierLevel(params1, params2)); + + // Different tiers. + params1.clear(); + params2.clear(); + params1["profile-id"] = "1"; + params2["profile-id"] = "1"; + params1["level-id"] = "93"; + params2["level-id"] = "93"; + params1["tier-flag"] = "0"; + params2["tier-flag"] = "1"; + EXPECT_FALSE(H265IsSameProfileTierLevel(params1, params2)); + + // One of the CodecParameterMap is invalid. + params1.clear(); + params2.clear(); + params1["profile-id"] = "1"; + params2["profile-id"] = "1"; + params1["tier-flag"] = "0"; + params2["tier-flag"] = "4"; + EXPECT_FALSE(H265IsSameProfileTierLevel(params1, params2)); +} + +} // namespace webrtc -- cgit v1.2.3