1 /* 2 * Copyright (c) 2021 The WebRTC project authors. All Rights Reserved. 3 * 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 6 * tree. An additional intellectual property rights grant can be found 7 * in the file PATENTS. All contributing project authors may 8 * be found in the AUTHORS file in the root of the source tree. 9 */ 10 11 #include "api/video_codecs/vp9_profile.h" 12 13 #include <map> 14 #include <utility> 15 16 #include "rtc_base/string_to_number.h" 17 18 namespace webrtc { 19 20 // Profile information for VP9 video. 21 const char kVP9FmtpProfileId[] = "profile-id"; 22 VP9ProfileToString(VP9Profile profile)23std::string VP9ProfileToString(VP9Profile profile) { 24 switch (profile) { 25 case VP9Profile::kProfile0: 26 return "0"; 27 case VP9Profile::kProfile1: 28 return "1"; 29 case VP9Profile::kProfile2: 30 return "2"; 31 case VP9Profile::kProfile3: 32 return "3"; 33 } 34 return "0"; 35 } 36 StringToVP9Profile(const std::string & str)37absl::optional<VP9Profile> StringToVP9Profile(const std::string& str) { 38 const absl::optional<int> i = rtc::StringToNumber<int>(str); 39 if (!i.has_value()) 40 return absl::nullopt; 41 42 switch (i.value()) { 43 case 0: 44 return VP9Profile::kProfile0; 45 case 1: 46 return VP9Profile::kProfile1; 47 case 2: 48 return VP9Profile::kProfile2; 49 case 3: 50 return VP9Profile::kProfile3; 51 default: 52 return absl::nullopt; 53 } 54 } 55 ParseSdpForVP9Profile(const SdpVideoFormat::Parameters & params)56absl::optional<VP9Profile> ParseSdpForVP9Profile( 57 const SdpVideoFormat::Parameters& params) { 58 const auto profile_it = params.find(kVP9FmtpProfileId); 59 if (profile_it == params.end()) 60 return VP9Profile::kProfile0; 61 const std::string& profile_str = profile_it->second; 62 return StringToVP9Profile(profile_str); 63 } 64 VP9IsSameProfile(const SdpVideoFormat::Parameters & params1,const SdpVideoFormat::Parameters & params2)65bool VP9IsSameProfile(const SdpVideoFormat::Parameters& params1, 66 const SdpVideoFormat::Parameters& params2) { 67 const absl::optional<VP9Profile> profile = ParseSdpForVP9Profile(params1); 68 const absl::optional<VP9Profile> other_profile = 69 ParseSdpForVP9Profile(params2); 70 return profile && other_profile && profile == other_profile; 71 } 72 73 } // namespace webrtc 74