mirror of
https://github.com/mollyim/webrtc.git
synced 2025-05-15 14:50:39 +01:00

This is a refactor to simplify a follow-up CL of adding SdpVideoFormat::IsSameCodec. The original files media/base/h264_profile_level_id.* and media/base/vp9_profile.h must be kept until downstream projects stop using them. Bug: chroimium:1187565 Change-Id: Ib39eca095a3d61939a914d9bffaf4b891ddd222f Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/215236 Reviewed-by: Harald Alvestrand <hta@webrtc.org> Reviewed-by: Kári Helgason <kthelgason@webrtc.org> Reviewed-by: Niels Moller <nisse@webrtc.org> Reviewed-by: Mirko Bonadei <mbonadei@webrtc.org> Commit-Queue: Johannes Kron <kron@webrtc.org> Cr-Commit-Position: refs/heads/master@{#33782}
187 lines
9.9 KiB
Text
187 lines
9.9 KiB
Text
/*
|
|
* Copyright 2018 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.
|
|
*/
|
|
|
|
#import "UIDevice+H264Profile.h"
|
|
#import "helpers/UIDevice+RTCDevice.h"
|
|
|
|
#include <algorithm>
|
|
|
|
namespace {
|
|
|
|
using namespace webrtc;
|
|
|
|
struct SupportedH264Profile {
|
|
const RTCDeviceType deviceType;
|
|
const H264ProfileLevelId profile;
|
|
};
|
|
|
|
constexpr SupportedH264Profile kH264MaxSupportedProfiles[] = {
|
|
// iPhones with at least iOS 9
|
|
{RTCDeviceTypeIPhone12ProMax,
|
|
{H264Profile::kProfileHigh, H264Level::kLevel5_2}}, // https://support.apple.com/kb/SP832
|
|
{RTCDeviceTypeIPhone12Pro,
|
|
{H264Profile::kProfileHigh, H264Level::kLevel5_2}}, // https://support.apple.com/kb/SP831
|
|
{RTCDeviceTypeIPhone12,
|
|
{H264Profile::kProfileHigh, H264Level::kLevel5_2}}, // https://support.apple.com/kb/SP830
|
|
{RTCDeviceTypeIPhone12Mini,
|
|
{H264Profile::kProfileHigh, H264Level::kLevel5_2}}, // https://support.apple.com/kb/SP829
|
|
{RTCDeviceTypeIPhone11ProMax,
|
|
{H264Profile::kProfileHigh, H264Level::kLevel5_2}}, // https://support.apple.com/kb/SP806
|
|
{RTCDeviceTypeIPhone11Pro,
|
|
{H264Profile::kProfileHigh, H264Level::kLevel5_2}}, // https://support.apple.com/kb/SP805
|
|
{RTCDeviceTypeIPhone11,
|
|
{H264Profile::kProfileHigh, H264Level::kLevel5_2}}, // https://support.apple.com/kb/SP804
|
|
{RTCDeviceTypeIPhoneXS,
|
|
{H264Profile::kProfileHigh, H264Level::kLevel5_2}}, // https://support.apple.com/kb/SP779
|
|
{RTCDeviceTypeIPhoneXSMax,
|
|
{H264Profile::kProfileHigh, H264Level::kLevel5_2}}, // https://support.apple.com/kb/SP780
|
|
{RTCDeviceTypeIPhoneXR,
|
|
{H264Profile::kProfileHigh, H264Level::kLevel5_2}}, // https://support.apple.com/kb/SP781
|
|
{RTCDeviceTypeIPhoneX,
|
|
{H264Profile::kProfileHigh, H264Level::kLevel5_2}}, // https://support.apple.com/kb/SP770
|
|
{RTCDeviceTypeIPhone8,
|
|
{H264Profile::kProfileHigh, H264Level::kLevel5_2}}, // https://support.apple.com/kb/SP767
|
|
{RTCDeviceTypeIPhone8Plus,
|
|
{H264Profile::kProfileHigh, H264Level::kLevel5_2}}, // https://support.apple.com/kb/SP768
|
|
{RTCDeviceTypeIPhone7,
|
|
{H264Profile::kProfileHigh, H264Level::kLevel5_1}}, // https://support.apple.com/kb/SP743
|
|
{RTCDeviceTypeIPhone7Plus,
|
|
{H264Profile::kProfileHigh, H264Level::kLevel5_1}}, // https://support.apple.com/kb/SP744
|
|
{RTCDeviceTypeIPhoneSE,
|
|
{H264Profile::kProfileHigh, H264Level::kLevel4_2}}, // https://support.apple.com/kb/SP738
|
|
{RTCDeviceTypeIPhone6S,
|
|
{H264Profile::kProfileHigh, H264Level::kLevel4_2}}, // https://support.apple.com/kb/SP726
|
|
{RTCDeviceTypeIPhone6SPlus,
|
|
{H264Profile::kProfileHigh, H264Level::kLevel4_2}}, // https://support.apple.com/kb/SP727
|
|
{RTCDeviceTypeIPhone6,
|
|
{H264Profile::kProfileHigh, H264Level::kLevel4_2}}, // https://support.apple.com/kb/SP705
|
|
{RTCDeviceTypeIPhone6Plus,
|
|
{H264Profile::kProfileHigh, H264Level::kLevel4_2}}, // https://support.apple.com/kb/SP706
|
|
{RTCDeviceTypeIPhone5SGSM,
|
|
{H264Profile::kProfileHigh, H264Level::kLevel4_2}}, // https://support.apple.com/kb/SP685
|
|
{RTCDeviceTypeIPhone5SGSM_CDMA,
|
|
{H264Profile::kProfileHigh, H264Level::kLevel4_2}}, // https://support.apple.com/kb/SP685
|
|
{RTCDeviceTypeIPhone5GSM,
|
|
{H264Profile::kProfileHigh, H264Level::kLevel4_1}}, // https://support.apple.com/kb/SP655
|
|
{RTCDeviceTypeIPhone5GSM_CDMA,
|
|
{H264Profile::kProfileHigh, H264Level::kLevel4_1}}, // https://support.apple.com/kb/SP655
|
|
{RTCDeviceTypeIPhone5CGSM,
|
|
{H264Profile::kProfileHigh, H264Level::kLevel4_1}}, // https://support.apple.com/kb/SP684
|
|
{RTCDeviceTypeIPhone5CGSM_CDMA,
|
|
{H264Profile::kProfileHigh, H264Level::kLevel4_1}}, // https://support.apple.com/kb/SP684
|
|
{RTCDeviceTypeIPhone4S,
|
|
{H264Profile::kProfileHigh, H264Level::kLevel4_1}}, // https://support.apple.com/kb/SP643
|
|
|
|
// iPods with at least iOS 9
|
|
{RTCDeviceTypeIPodTouch7G,
|
|
{H264Profile::kProfileMain, H264Level::kLevel4_1}}, // https://support.apple.com/kb/SP796
|
|
{RTCDeviceTypeIPodTouch6G,
|
|
{H264Profile::kProfileMain, H264Level::kLevel4_1}}, // https://support.apple.com/kb/SP720
|
|
{RTCDeviceTypeIPodTouch5G,
|
|
{H264Profile::kProfileMain, H264Level::kLevel3_1}}, // https://support.apple.com/kb/SP657
|
|
|
|
// iPads with at least iOS 9
|
|
{RTCDeviceTypeIPadAir4Gen,
|
|
{H264Profile::kProfileHigh, H264Level::kLevel4_1}}, // https://support.apple.com/kb/SP828
|
|
{RTCDeviceTypeIPad8,
|
|
{H264Profile::kProfileHigh, H264Level::kLevel4_1}}, // https://support.apple.com/kb/SP822
|
|
{RTCDeviceTypeIPadPro4Gen12Inch,
|
|
{H264Profile::kProfileHigh, H264Level::kLevel4_1}}, // https://support.apple.com/kb/SP815
|
|
{RTCDeviceTypeIPadPro4Gen11Inch,
|
|
{H264Profile::kProfileHigh, H264Level::kLevel4_1}}, // https://support.apple.com/kb/SP814
|
|
{RTCDeviceTypeIPadAir3Gen,
|
|
{H264Profile::kProfileHigh, H264Level::kLevel4_1}}, // https://support.apple.com/kb/SP787
|
|
{RTCDeviceTypeIPadMini5Gen,
|
|
{H264Profile::kProfileHigh, H264Level::kLevel4_1}}, // https://support.apple.com/kb/SP788
|
|
{RTCDeviceTypeIPadPro3Gen12Inch,
|
|
{H264Profile::kProfileHigh, H264Level::kLevel5_2}}, // https://support.apple.com/kb/SP785
|
|
{RTCDeviceTypeIPadPro3Gen11Inch,
|
|
{H264Profile::kProfileHigh, H264Level::kLevel5_2}}, // https://support.apple.com/kb/SP784
|
|
{RTCDeviceTypeIPad7Gen10Inch,
|
|
{H264Profile::kProfileHigh, H264Level::kLevel4_1}}, // https://support.apple.com/kb/SP807
|
|
{RTCDeviceTypeIPad2Wifi,
|
|
{H264Profile::kProfileHigh, H264Level::kLevel4_1}}, // https://support.apple.com/kb/SP622
|
|
{RTCDeviceTypeIPad2GSM,
|
|
{H264Profile::kProfileHigh, H264Level::kLevel4_1}}, // https://support.apple.com/kb/SP622
|
|
{RTCDeviceTypeIPad2CDMA,
|
|
{H264Profile::kProfileHigh, H264Level::kLevel4_1}}, // https://support.apple.com/kb/SP622
|
|
{RTCDeviceTypeIPad2Wifi2,
|
|
{H264Profile::kProfileHigh, H264Level::kLevel4_1}}, // https://support.apple.com/kb/SP622
|
|
{RTCDeviceTypeIPadMiniWifi,
|
|
{H264Profile::kProfileHigh, H264Level::kLevel4_1}}, // https://support.apple.com/kb/SP661
|
|
{RTCDeviceTypeIPadMiniGSM,
|
|
{H264Profile::kProfileHigh, H264Level::kLevel4_1}}, // https://support.apple.com/kb/SP661
|
|
{RTCDeviceTypeIPadMiniGSM_CDMA,
|
|
{H264Profile::kProfileHigh, H264Level::kLevel4_1}}, // https://support.apple.com/kb/SP661
|
|
{RTCDeviceTypeIPad3Wifi,
|
|
{H264Profile::kProfileHigh, H264Level::kLevel4_1}}, // https://support.apple.com/kb/SP647
|
|
{RTCDeviceTypeIPad3GSM_CDMA,
|
|
{H264Profile::kProfileHigh, H264Level::kLevel4_1}}, // https://support.apple.com/kb/SP647
|
|
{RTCDeviceTypeIPad3GSM,
|
|
{H264Profile::kProfileHigh, H264Level::kLevel4_1}}, // https://support.apple.com/kb/SP647
|
|
{RTCDeviceTypeIPad4Wifi,
|
|
{H264Profile::kProfileHigh, H264Level::kLevel4_1}}, // https://support.apple.com/kb/SP662
|
|
{RTCDeviceTypeIPad4GSM,
|
|
{H264Profile::kProfileHigh, H264Level::kLevel4_1}}, // https://support.apple.com/kb/SP662
|
|
{RTCDeviceTypeIPad4GSM_CDMA,
|
|
{H264Profile::kProfileHigh, H264Level::kLevel4_1}}, // https://support.apple.com/kb/SP662
|
|
{RTCDeviceTypeIPad5,
|
|
{H264Profile::kProfileHigh, H264Level::kLevel4_2}}, // https://support.apple.com/kb/SP751
|
|
{RTCDeviceTypeIPad6,
|
|
{H264Profile::kProfileHigh, H264Level::kLevel4_2}}, // https://support.apple.com/kb/SP774
|
|
{RTCDeviceTypeIPadAirWifi,
|
|
{H264Profile::kProfileHigh, H264Level::kLevel4_2}}, // https://support.apple.com/kb/SP692
|
|
{RTCDeviceTypeIPadAirCellular,
|
|
{H264Profile::kProfileHigh, H264Level::kLevel4_2}}, // https://support.apple.com/kb/SP692
|
|
{RTCDeviceTypeIPadAirWifiCellular,
|
|
{H264Profile::kProfileHigh, H264Level::kLevel4_2}}, // https://support.apple.com/kb/SP692
|
|
{RTCDeviceTypeIPadAir2,
|
|
{H264Profile::kProfileHigh, H264Level::kLevel4_2}}, // https://support.apple.com/kb/SP708
|
|
{RTCDeviceTypeIPadMini2GWifi,
|
|
{H264Profile::kProfileHigh, H264Level::kLevel4_2}}, // https://support.apple.com/kb/SP693
|
|
{RTCDeviceTypeIPadMini2GCellular,
|
|
{H264Profile::kProfileHigh, H264Level::kLevel4_2}}, // https://support.apple.com/kb/SP693
|
|
{RTCDeviceTypeIPadMini2GWifiCellular,
|
|
{H264Profile::kProfileHigh, H264Level::kLevel4_2}}, // https://support.apple.com/kb/SP693
|
|
{RTCDeviceTypeIPadMini3,
|
|
{H264Profile::kProfileHigh, H264Level::kLevel4_2}}, // https://support.apple.com/kb/SP709
|
|
{RTCDeviceTypeIPadMini4,
|
|
{H264Profile::kProfileHigh, H264Level::kLevel4_2}}, // https://support.apple.com/kb/SP725
|
|
{RTCDeviceTypeIPadPro9Inch,
|
|
{H264Profile::kProfileHigh, H264Level::kLevel4_2}}, // https://support.apple.com/kb/SP739
|
|
{RTCDeviceTypeIPadPro12Inch,
|
|
{H264Profile::kProfileHigh, H264Level::kLevel4_2}}, // https://support.apple.com/kb/sp723
|
|
{RTCDeviceTypeIPadPro12Inch2,
|
|
{H264Profile::kProfileHigh, H264Level::kLevel4_2}}, // https://support.apple.com/kb/SP761
|
|
{RTCDeviceTypeIPadPro10Inch,
|
|
{H264Profile::kProfileHigh, H264Level::kLevel4_2}}, // https://support.apple.com/kb/SP762
|
|
};
|
|
|
|
absl::optional<H264ProfileLevelId> FindMaxSupportedProfileForDevice(RTCDeviceType deviceType) {
|
|
const auto* result = std::find_if(std::begin(kH264MaxSupportedProfiles),
|
|
std::end(kH264MaxSupportedProfiles),
|
|
[deviceType](const SupportedH264Profile& supportedProfile) {
|
|
return supportedProfile.deviceType == deviceType;
|
|
});
|
|
if (result != std::end(kH264MaxSupportedProfiles)) {
|
|
return result->profile;
|
|
}
|
|
return absl::nullopt;
|
|
}
|
|
|
|
} // namespace
|
|
|
|
@implementation UIDevice (H264Profile)
|
|
|
|
+ (absl::optional<webrtc::H264ProfileLevelId>)maxSupportedH264Profile {
|
|
return FindMaxSupportedProfileForDevice([self deviceType]);
|
|
}
|
|
|
|
@end
|