如何检查iOS设备芯片是A9还是A10?

时间:2017-08-10 09:49:20

标签: ios

Apple宣布支持运行iOS 11的A10设备的HEVC编码,以及支持运行iOS 11的A9设备的HEVC解码。

在创建这些硬件编解码器之前,如何检查当前设备是否支持该功能?

什么是芯片? A8,A9或A10没有硬编码模型。

3 个答案:

答案 0 :(得分:3)

不要检查特定的SOC,检查您真正想要的功能。您需要传递视频工具箱VTIsHardwareDecodeSupported,并传递kCMVideoCodeType_HEVC密钥:

VTIsHardwareDecodeSupported(kCMVideoCodeType_HEVC)

但是,如果您需要,iOS会为HEVC提供软件解码器后备功能。

编辑:啊,对不起 - 我误读了,以为你在谈论解码。对于编码,您可以使用kCMVideoCodeType_HEVC并使用setSupportActionBar(toolbar);并指定要编码的参数来获得所需的VTCopySupportedPropertyDictionaryForEncoder。我不知道iOS是否有针对HEVC的回退软件编码器,因此可能会给出误报。

答案 1 :(得分:2)

对于编码器,我找不到正式方法,但这似乎适用于我的测试:

#import <AVFoundation/AVFoundation.h>
#import <VideoToolbox/VideoToolbox.h>


- (BOOL)videoCodecTypeHevcIsSuppored {
    if (@available(iOS 11, *)) {
        CFMutableDictionaryRef encoderSpecification = CFDictionaryCreateMutable( NULL,0, &kCFTypeDictionaryKeyCallBacks, &kCFTypeDictionaryValueCallBacks);
        CFDictionarySetValue(encoderSpecification, kVTCompressionPropertyKey_ProfileLevel, kVTProfileLevel_HEVC_Main_AutoLevel);
        CFDictionarySetValue(encoderSpecification, kVTCompressionPropertyKey_RealTime, kCFBooleanTrue);
        OSStatus status = VTCopySupportedPropertyDictionaryForEncoder(3840, 2160, kCMVideoCodecType_HEVC, encoderSpecification, nil, nil);
        if (status == kVTCouldNotFindVideoEncoderErr) {
            return NO;
        }
        return YES;
    }
    return NO;
}

答案 2 :(得分:0)

kanso在Swift 4中的绝佳答案。

假设我们仅定位iOS11或更高版本,并添加了额外的支票:

import AVFoundation
import VideoToolbox

@available (iOS 11, *)
func isHEVCHardwareEncodingSupported() -> Bool {
    let encoderSpecDict : [String : Any] =
        [kVTCompressionPropertyKey_ProfileLevel as String : kVTProfileLevel_HEVC_Main_AutoLevel,
         kVTCompressionPropertyKey_RealTime as String : true]

    let status = VTCopySupportedPropertyDictionaryForEncoder(3840, 2160,
                                                             kCMVideoCodecType_HEVC,
                                                             encoderSpecDict as CFDictionary,
                                                             nil, nil)
    if status == kVTCouldNotFindVideoEncoderErr {
        return false
    }

    if status != noErr {
        return false
    }

    return true
}