From patchwork Sat Dec 9 12:09:38 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: =?utf-8?b?5b6Q56aP6ZqG?= <839789740@qq.com> X-Patchwork-Id: 44983 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6a20:1225:b0:181:818d:5e7f with SMTP id v37csp1866577pzf; Sat, 9 Dec 2023 04:10:01 -0800 (PST) X-Google-Smtp-Source: AGHT+IHQ26+ZqLSvskA49ln0RNlq4KlNUUBQguMGrC9yArUGrXv6O/9GKvJJiVJZ9x3rjEJ1YzYZ X-Received: by 2002:a17:906:c116:b0:a12:63ba:64ca with SMTP id do22-20020a170906c11600b00a1263ba64camr856824ejc.4.1702123800925; Sat, 09 Dec 2023 04:10:00 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1702123800; cv=none; d=google.com; s=arc-20160816; b=odrSGRjvYnhttCW9lEdJ95UM3z25u0pDgwoiCXk7baMoJ+J/BdXR5ZhEqVJ1JntHqL EaP8kXLLJxtK/ChP8wYhSAnAeNFhGjNkhp86R3CezKgEQYXkEAtGq+027WW0Q3IvHtf+ BsI0W1S7sChI5u6T7hRUgJsvcYrnZ6hFp1Z4wjVlatBeXDDhhoVzg9k6S63GCjN1QzBq 5MZP/xePs/rGsCBH0AWQI8UfvONk3hPEyWF+QhI3yicEE22A9QK+ydLmxsK5q3IOrhpU ZO5VK0KQycVPEjwP/NIrXGagLkO2C/Bi2T/7jl7/3lnloeRAz5NJW3DSHBhVsjx9Q2h7 Y3Zg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to:content-transfer-encoding:cc:reply-to:from :list-subscribe:list-help:list-post:list-archive:list-unsubscribe :list-id:precedence:subject:mime-version:date:to:message-id :delivered-to; bh=Wp28k4hHbl1a9S4Kv80AsfHf8aEdpUqDeyd5l1H2oE0=; fh=/QvfVIDcib8YPugs5q/sxqF0zCx8M9migilS77PcQx8=; b=zpSxPVrP512uJf6EZcUBsB0te2n0qdAWnY4sNj7uXI0NwYjcDoRfy5y8aloJ80tpIP KuB1iQzLFWS43lBMbqOcAvafrqIQWheG2UGjVrjTSi4OSFdfdju4bvaZzDusrX/6euYR 7Xn39bzX1h6+hvCoDthi4IrREwkBeXRQGDZyArblakLn1SnSrpht+A1SrsjG88G/J+hg aHvO9A+7wZr0GEhJLHKfQnD4eJIGDFAC4397z5/e0TvehLtQf/R1N7vsKwiZXIE3b9UK 4aqJaDcfWPsYvPwZM+6R4EUlAEz/M1eOxE7Nli5zeVLX4b0q0/l/SjW64sGqFIEXaAx4 7oNQ== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: domain of ffmpeg-devel-bounces@ffmpeg.org designates 79.124.17.100 as permitted sender) smtp.mailfrom=ffmpeg-devel-bounces@ffmpeg.org Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org. [79.124.17.100]) by mx.google.com with ESMTP id xa15-20020a170907b9cf00b009dde7042844si1737641ejc.153.2023.12.09.04.10.00; Sat, 09 Dec 2023 04:10:00 -0800 (PST) Received-SPF: pass (google.com: domain of ffmpeg-devel-bounces@ffmpeg.org designates 79.124.17.100 as permitted sender) client-ip=79.124.17.100; Authentication-Results: mx.google.com; spf=pass (google.com: domain of ffmpeg-devel-bounces@ffmpeg.org designates 79.124.17.100 as permitted sender) smtp.mailfrom=ffmpeg-devel-bounces@ffmpeg.org Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 6FCAC68D09B; Sat, 9 Dec 2023 14:09:56 +0200 (EET) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from out203-205-221-173.mail.qq.com (out203-205-221-173.mail.qq.com [203.205.221.173]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id E436968D066 for ; Sat, 9 Dec 2023 14:09:47 +0200 (EET) Received: from localhost.localdomain ([14.145.2.45]) by newxmesmtplogicsvrszc5-0.qq.com (NewEsmtp) with SMTP id 26802489; Sat, 09 Dec 2023 20:09:40 +0800 X-QQ-mid: xmsmtpt1702123780t7o3k4a71 Message-ID: X-QQ-XMAILINFO: MyIXMys/8kCt6AcIFMNMH/PbFy4XUioccihA5BXCLofN6WrOVL6G39YrMPUgKa 4fZ72Me+CoMsqjSsaPPMy2xWvIuxjEoa+RhqHDkijdWHpbFrNJ/RZGJqGbQ33IUIk3MIOsxlPDtx aTozz5X4Vf+c6e56eVJr1dTLhMUz/nHhrBVNKlgX2W1wP6FlG8pVwzuXrqmO+P7bszfl+w90Vzvn 7FMu2eabmsAQj0y256vss6AOCUObYMd7yAQgj92ruAdyFSbfXwxCD8ys9SisU5WjI1vK/vibEeO1 wbLLsl6p6+spDxJeUx1q82HSHdvIkATTyhvwOZ0RYw1vEvFm8Jl7Vx/CJ2zn4biJnSDs1IoOXVWA vYbP1nOggJVF+xHsQd7pBYLkeBQGL1jnrY3WW51lbwyG8w2L1c8MlhsYZ71Ce/yYQcbXWShPu6D9 l39hmtJIY3YhSP8rlY71wUf0a2re3VmAgbUEyhua27/+/lS1RzCKSlCiz8pNjKsx88o85d1aA+15 PuZcmxukt+umM/HxTyzfWkw+LpDJobV577hZlhr4s6fwWYTeweHQaVPTSeXkJnYd9vl0rwX+dnSh fXRnOwF9fSQ4cDb2EzWIGERyNARI8b+I//kZNB8tsPjVsnhOacMjN4TAX6rlFL3ZkPO7Vua+c9tz qA1Y6BRgEFPmN+08R3AMLZ3cEmdUOJphb8t3+jM3EDFcCQ6BmcDIs+sdJ457znNZpodehL7HQFXJ mC1XDqOkuGPnRIBDYjrqmSxi8+XMelJLAi9jgdQDH8YkzTWADGbboDQ9l6P1YbJY00T0j5xBMLPJ oV1x2lBGhW28kWUwN8lRnHfp9ZucsNwgkXqboOsgSYq8sIrSPdi5Hx/j6FeWhbtAjv0hye/CsY5l /BSwfKPpMkxMfJ6mqngHqLd8xHhU8Bc7kr1twmt9vZXBDD6Mq8suOQMABe/IglfT3XoI21G7+D1o Jsa4xetwYwVo9iSgXFD1RKSY0HIWcF8zA0kGDhOrTcmCKgH4a94g== X-QQ-XMRINFO: NI4Ajvh11aEj8Xl/2s1/T8w= To: ffmpeg-devel@ffmpeg.org Date: Sat, 9 Dec 2023 20:09:38 +0800 X-OQ-MSGID: <20231209120938.32648-1-839789740@qq.com> X-Mailer: git-send-email 2.32.0 (Apple Git-132) MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH] avdevice/avfoundation: replace deprecated AVCaptureDevice X-BeenThere: ffmpeg-devel@ffmpeg.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: FFmpeg development discussions and patches List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-Patchwork-Original-From: xufuji456 via ffmpeg-devel From: =?utf-8?b?5b6Q56aP6ZqG?= <839789740@qq.com> Reply-To: FFmpeg development discussions and patches Cc: xufuji456 <839789740@qq.com> Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" X-TUID: r95XozzQKxpx Building with iOS platform, the compiler has a warning: "'devicesWithMediaType:' is deprecated: first deprecated in iOS 10.0 - Use AVCaptureDeviceDiscoverySession instead" Signed-off-by: xufuji456 <839789740@qq.com> --- libavdevice/avfoundation.m | 65 +++++++++++++++++++++++++++++++++++--- 1 file changed, 60 insertions(+), 5 deletions(-) diff --git a/libavdevice/avfoundation.m b/libavdevice/avfoundation.m index 36ad834753..aa892fae60 100644 --- a/libavdevice/avfoundation.m +++ b/libavdevice/avfoundation.m @@ -761,6 +761,61 @@ static int get_audio_config(AVFormatContext *s) return 0; } +static NSArray* getDevicesWithMediaType(AVMediaType mediaType) { +#if ((TARGET_OS_IPHONE && __IPHONE_OS_VERSION_MAX_ALLOWED >= 100000) || (TARGET_OS_OSX && __MAC_OS_X_VERSION_MAX_ALLOWED >= 101500)) + NSMutableArray *deviceTypes = nil; + if (mediaType == AVMediaTypeVideo) { + deviceTypes = [NSMutableArray arrayWithArray:@[AVCaptureDeviceTypeBuiltInWideAngleCamera]]; + #if (TARGET_OS_IPHONE && __IPHONE_OS_VERSION_MAX_ALLOWED >= 100000) + [deviceTypes addObject: AVCaptureDeviceTypeBuiltInDualCamera]; + [deviceTypes addObject: AVCaptureDeviceTypeBuiltInTelephotoCamera]; + #endif + #if (TARGET_OS_IPHONE && __IPHONE_OS_VERSION_MAX_ALLOWED >= 110100) + [deviceTypes addObject: AVCaptureDeviceTypeBuiltInTrueDepthCamera]; + #endif + #if (TARGET_OS_IPHONE && __IPHONE_OS_VERSION_MAX_ALLOWED >= 130000) + [deviceTypes addObject: AVCaptureDeviceTypeBuiltInTripleCamera]; + [deviceTypes addObject: AVCaptureDeviceTypeBuiltInDualWideCamera]; + [deviceTypes addObject: AVCaptureDeviceTypeBuiltInUltraWideCamera]; + #endif + #if (TARGET_OS_OSX && __MAC_OS_X_VERSION_MAX_ALLOWED >= 130000) + [deviceTypes addObject: AVCaptureDeviceTypeDeskViewCamera]; + #endif + #if (TARGET_OS_IPHONE && __IPHONE_OS_VERSION_MAX_ALLOWED >= 150400) + [deviceTypes addObject: AVCaptureDeviceTypeBuiltInLiDARDepthCamera]; + #endif + #if (TARGET_OS_IPHONE && __IPHONE_OS_VERSION_MAX_ALLOWED >= 170000 || (TARGET_OS_OSX && __MAC_OS_X_VERSION_MAX_ALLOWED >= 140000)) + [deviceTypes addObject: AVCaptureDeviceTypeContinuityCamera]; + #endif + } else if (mediaType == AVMediaTypeAudio) { + #if (TARGET_OS_IPHONE && __IPHONE_OS_VERSION_MAX_ALLOWED >= 170000 || (TARGET_OS_OSX && __MAC_OS_X_VERSION_MAX_ALLOWED >= 140000)) + deviceTypes = [NSMutableArray arrayWithArray:@[AVCaptureDeviceTypeMicrophone]]; + #else + deviceTypes = [NSMutableArray arrayWithArray:@[AVCaptureDeviceTypeBuiltInMicrophone]]; + #endif + } else if (mediaType == AVMediaTypeMuxed) { + #if (TARGET_OS_IPHONE && __IPHONE_OS_VERSION_MAX_ALLOWED >= 170000 || (TARGET_OS_OSX && __MAC_OS_X_VERSION_MAX_ALLOWED >= 140000)) + deviceTypes = [NSMutableArray arrayWithArray:@[AVCaptureDeviceTypeExternal]]; + #elseif (TARGET_OS_OSX && __MAC_OS_X_VERSION_MAX_ALLOWED < 140000) + deviceTypes = [NSMutableArray arrayWithArray:@[AVCaptureDeviceTypeExternalUnknown]]; + #else + return nil; + #endif + } else { + return nil; + } + + AVCaptureDeviceDiscoverySession *captureDeviceDiscoverySession = + [AVCaptureDeviceDiscoverySession + discoverySessionWithDeviceTypes:deviceTypes + mediaType:mediaType + position:AVCaptureDevicePositionUnspecified]; + return [captureDeviceDiscoverySession devices]; +#else + return [AVCaptureDevice devicesWithMediaType:mediaType]; +#endif +} + static int avf_read_header(AVFormatContext *s) { int ret = 0; @@ -770,8 +825,8 @@ static int avf_read_header(AVFormatContext *s) AVCaptureDevice *video_device = nil; AVCaptureDevice *audio_device = nil; // Find capture device - NSArray *devices = [AVCaptureDevice devicesWithMediaType:AVMediaTypeVideo]; - NSArray *devices_muxed = [AVCaptureDevice devicesWithMediaType:AVMediaTypeMuxed]; + NSArray *devices = getDevicesWithMediaType(AVMediaTypeVideo); + NSArray *devices_muxed = getDevicesWithMediaType(AVMediaTypeMuxed); ctx->num_video_devices = [devices count] + [devices_muxed count]; @@ -806,7 +861,7 @@ static int avf_read_header(AVFormatContext *s) #endif av_log(ctx, AV_LOG_INFO, "AVFoundation audio devices:\n"); - devices = [AVCaptureDevice devicesWithMediaType:AVMediaTypeAudio]; + devices = getDevicesWithMediaType(AVMediaTypeAudio); for (AVCaptureDevice *device in devices) { const char *name = [[device localizedName] UTF8String]; int index = [devices indexOfObject:device]; @@ -930,7 +985,7 @@ static int avf_read_header(AVFormatContext *s) // get audio device if (ctx->audio_device_index >= 0) { - NSArray *devices = [AVCaptureDevice devicesWithMediaType:AVMediaTypeAudio]; + NSArray *devices = getDevicesWithMediaType(AVMediaTypeAudio); if (ctx->audio_device_index >= [devices count]) { av_log(ctx, AV_LOG_ERROR, "Invalid audio device index\n"); @@ -943,7 +998,7 @@ static int avf_read_header(AVFormatContext *s) if (!strncmp(ctx->audio_filename, "default", 7)) { audio_device = [AVCaptureDevice defaultDeviceWithMediaType:AVMediaTypeAudio]; } else { - NSArray *devices = [AVCaptureDevice devicesWithMediaType:AVMediaTypeAudio]; + NSArray *devices = getDevicesWithMediaType(AVMediaTypeAudio); for (AVCaptureDevice *device in devices) { if (!strncmp(ctx->audio_filename, [[device localizedName] UTF8String], strlen(ctx->audio_filename))) {