mirror of
https://github.com/obsproject/obs-studio.git
synced 2024-07-15 07:44:10 +00:00
mac-avcapture: Fix deprecation warning for AVCaptureDevice list
Direct access to `[AVCaptureDevice devices]` is deprecated since macOS 10.15. An `AVCaptureDeviceDiscoverySession` is to be used instead, which this PR implements. When running on older macOS versions or compiling against older platform SDKs, the deprecated method is used. PS: The formatting is not proper ObjC style, but that's clang-format's doing with our current settings.
This commit is contained in:
parent
97756861b4
commit
c61d523d58
|
@ -3,6 +3,7 @@
|
|||
#import <CoreMedia/CoreMedia.h>
|
||||
#import <CoreVideo/CoreVideo.h>
|
||||
#import <CoreMediaIO/CMIOHardware.h>
|
||||
#include <AvailabilityMacros.h>
|
||||
|
||||
#include <obs-module.h>
|
||||
#include <obs.hpp>
|
||||
|
@ -2241,7 +2242,41 @@ static obs_properties_t *av_capture_properties(void *data)
|
|||
OBS_COMBO_FORMAT_STRING);
|
||||
obs_property_list_add_string(dev_list, "", "");
|
||||
|
||||
for (AVCaptureDevice *dev in [AVCaptureDevice devices]) {
|
||||
NSArray *devices = nil;
|
||||
#if (__MAC_OS_X_VERSION_MAX_ALLOWED >= MAC_OS_X_VERSION_10_15)
|
||||
if (@available(macOS 10.15, *)) {
|
||||
AVCaptureDeviceDiscoverySession *mediaDeviceDiscoverySession =
|
||||
[AVCaptureDeviceDiscoverySession
|
||||
discoverySessionWithDeviceTypes:@[
|
||||
AVCaptureDeviceTypeBuiltInWideAngleCamera,
|
||||
AVCaptureDeviceTypeExternalUnknown
|
||||
]
|
||||
mediaType:AVMediaTypeVideo
|
||||
position:AVCaptureDevicePositionUnspecified];
|
||||
NSArray *mediaDevices = [mediaDeviceDiscoverySession devices];
|
||||
|
||||
AVCaptureDeviceDiscoverySession *muxedDeviceDiscoverySession =
|
||||
[AVCaptureDeviceDiscoverySession
|
||||
discoverySessionWithDeviceTypes:@[
|
||||
AVCaptureDeviceTypeExternalUnknown
|
||||
]
|
||||
mediaType:AVMediaTypeMuxed
|
||||
position:AVCaptureDevicePositionUnspecified];
|
||||
NSArray *muxedDevices = [muxedDeviceDiscoverySession devices];
|
||||
|
||||
devices = [mediaDevices
|
||||
arrayByAddingObjectsFromArray:muxedDevices];
|
||||
} else {
|
||||
#pragma clang diagnostic push
|
||||
#pragma clang diagnostic ignored "-Wdeprecated-declarations"
|
||||
devices = [AVCaptureDevice devices];
|
||||
#pragma clang diagnostic pop
|
||||
}
|
||||
#else
|
||||
devices = [AVCaptureDevice devices];
|
||||
#endif
|
||||
|
||||
for (AVCaptureDevice *dev in devices) {
|
||||
if ([dev hasMediaType:AVMediaTypeVideo] ||
|
||||
[dev hasMediaType:AVMediaTypeMuxed]) {
|
||||
obs_property_list_add_string(
|
||||
|
|
Loading…
Reference in a new issue