1 /* 2 * Copyright (c) 2018 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 "media/base/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 } 32 return "0"; 33 } 34 StringToVP9Profile(const std::string & str)35absl::optional<VP9Profile> StringToVP9Profile(const std::string& str) { 36 const absl::optional<int> i = rtc::StringToNumber<int>(str); 37 if (!i.has_value()) 38 return absl::nullopt; 39 40 switch (i.value()) { 41 case 0: 42 return VP9Profile::kProfile0; 43 case 1: 44 return VP9Profile::kProfile1; 45 case 2: 46 return VP9Profile::kProfile2; 47 default: 48 return absl::nullopt; 49 } 50 return absl::nullopt; 51 } 52 ParseSdpForVP9Profile(const SdpVideoFormat::Parameters & params)53absl::optional<VP9Profile> ParseSdpForVP9Profile( 54 const SdpVideoFormat::Parameters& params) { 55 const auto profile_it = params.find(kVP9FmtpProfileId); 56 if (profile_it == params.end()) 57 return VP9Profile::kProfile0; 58 const std::string& profile_str = profile_it->second; 59 return StringToVP9Profile(profile_str); 60 } 61 IsSameVP9Profile(const SdpVideoFormat::Parameters & params1,const SdpVideoFormat::Parameters & params2)62bool IsSameVP9Profile(const SdpVideoFormat::Parameters& params1, 63 const SdpVideoFormat::Parameters& params2) { 64 const absl::optional<VP9Profile> profile = ParseSdpForVP9Profile(params1); 65 const absl::optional<VP9Profile> other_profile = 66 ParseSdpForVP9Profile(params2); 67 return profile && other_profile && profile == other_profile; 68 } 69 70 } // namespace webrtc 71