From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org [79.124.17.100]) by master.gitmailbox.com (Postfix) with ESMTP id 5AEBA4030F for ; Wed, 19 Jan 2022 14:39:24 +0000 (UTC) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id AA7B168B0DD; Wed, 19 Jan 2022 16:39:23 +0200 (EET) Received: from mail-qt1-f182.google.com (mail-qt1-f182.google.com [209.85.160.182]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 7DEF468B02E for ; Wed, 19 Jan 2022 16:39:17 +0200 (EET) Received: by mail-qt1-f182.google.com with SMTP id v7so2435563qtw.13 for ; Wed, 19 Jan 2022 06:39:17 -0800 (PST) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:message-id:mime-version:subject:date :in-reply-to:cc:to:references; bh=kodXphtstlOpYyEYBPjM6bSsJe4hB/R+gIoRWEKJjyU=; b=3PRhTWWwv4Vo4Tu0J19wKvxSRyTtBOpdjyFAf8lLZxpu8vgEJe4DZ8u1yUQdrch1xF OATfAMTNQZ8ueD/LAgq/Hz4NxdTcoOhxMyjMrizy3kCKd9x0WRRSf5+7SlARePJ1G1m4 ZuNtaylqYYi2aYycMhmSAyiSlK7P7YYXlBDvCE7UUMPXp4i2f761AgfkbTlDtk8+AZ8u p/dQeGqHTEVvUXTwB71D/s9FIziJcT9j2xAYLFdVhLjF5Ve7r3Kcs6ulKwMgkdkRde+P rNL8DJmDLQgkQKreDHoo45nLwhkXDQQ5HyMW8y5SRXqPh2XjNYEw7ZkwxlVLByiTSuiU 5dLw== X-Gm-Message-State: AOAM530UGfxebCROjCWG+nDfs0VD2oNyqsQp7RhxoPrNPpKS1G4ROB+G ATRf7kaooJeNI/7Fl7pbGqZ1Rq1syei1DZE+ X-Google-Smtp-Source: ABdhPJyPsC2HNz8M6PbR2Za9ruZJpnttJxUTUQj4UbkWNBSOUNITp+I1sW5bz2UZNpM0V9B6C/Mr2w== X-Received: by 2002:ac8:5e4e:: with SMTP id i14mr24221124qtx.221.1642603155805; Wed, 19 Jan 2022 06:39:15 -0800 (PST) Received: from smtpclient.apple ([172.58.4.135]) by smtp.gmail.com with ESMTPSA id c6sm11451940qko.92.2022.01.19.06.39.14 (version=TLS1_2 cipher=ECDHE-ECDSA-AES128-GCM-SHA256 bits=128/128); Wed, 19 Jan 2022 06:39:15 -0800 (PST) From: Romain Beauxis Message-Id: <9F7D41CF-39F8-4ECC-A369-88F5CB311601@rastageeks.org> Content-Type: multipart/mixed; boundary="Apple-Mail=_FC534AC6-3711-4280-87A9-9ED65862B155" Mime-Version: 1.0 (Mac OS X Mail 15.0 \(3693.40.0.1.81\)) Date: Wed, 19 Jan 2022 08:39:13 -0600 In-Reply-To: To: FFmpeg development discussions and patches References: X-Mailer: Apple Mail (2.3693.40.0.1.81) Subject: [FFmpeg-devel] [PATCH 4/5] Use appropriate method for device discovery. 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: , Reply-To: FFmpeg development discussions and patches Cc: Thilo Borgmann , Marvin Scholz Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" Archived-At: List-Archive: List-Post: --Apple-Mail=_FC534AC6-3711-4280-87A9-9ED65862B155 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset=us-ascii This adds support for the non-deprecated methods for selecting devices, = when available. --Apple-Mail=_FC534AC6-3711-4280-87A9-9ED65862B155 Content-Disposition: attachment; filename=0001-Use-appropriate-method-for-device-discovery.eml Content-Type: message/rfc822; x-unix-mode=0644; name="0001-Use-appropriate-method-for-device-discovery.eml" Content-Transfer-Encoding: quoted-printable =46rom=20c42612b455289622edb638436b1892e43279d8ac=20Mon=20Sep=2017=20= 00:00:00=202001=0AFrom:=20Romain=20Beauxis=20=0A= Date:=20Fri,=2014=20Jan=202022=2010:06:08=20-0600=0ASubject:=20[PATCH]=20= Use=20appropriate=20method=20for=20device=20discovery.=0AX-Unsent:=201=0A= To:=20ffmpeg-devel@ffmpeg.org=0A=0ASigned-off-by:=20Romain=20Beauxis=20= =0A---=0A=20libavdevice/avfoundation.m=20|=2077=20= ++++++++++++++++++++++++++++----------=0A=201=20file=20changed,=2057=20= insertions(+),=2020=20deletions(-)=0A=0Adiff=20--git=20= a/libavdevice/avfoundation.m=20b/libavdevice/avfoundation.m=0Aindex=20= 5d013cc0eb..03ec49df86=20100644=0A---=20a/libavdevice/avfoundation.m=0A= +++=20b/libavdevice/avfoundation.m=0A@@=20-27,6=20+27,7=20@@=0A=20=0A=20= #import=20=0A=20#import=20= =0A+#include=20=0A=20=0A=20= #include=20"libavutil/channel_layout.h"=0A=20#include=20= "libavutil/pixdesc.h"=0A@@=20-698,8=20+699,34=20@@=20static=20int=20= avf_read_header(AVFormatContext=20*s)=0A=20=20=20=20=20AVCaptureDevice=20= *video_device=20=3D=20nil;=0A=20=20=20=20=20AVCaptureDevice=20= *audio_device=20=3D=20nil;=0A=20=20=20=20=20//=20Find=20capture=20device=0A= -=20=20=20=20NSArray=20*devices=20=3D=20[AVCaptureDevice=20= devicesWithMediaType:AVMediaTypeVideo];=0A-=20=20=20=20NSArray=20= *devices_muxed=20=3D=20[AVCaptureDevice=20= devicesWithMediaType:AVMediaTypeMuxed];=0A+#if=20defined(__MAC_10_15)=20= ||=20(TARGET_OS_IPHONE=20&&=20defined(__IPHONE_10_0))=0A+=20=20=20=20=20=20= =20AVCaptureDeviceDiscoverySession=20*discoverySession=20=3D=0A+=20=20=20= =20=20=20=20=20=20=20=20=20[AVCaptureDeviceDiscoverySession=20= discoverySessionWithDeviceTypes:@[=0A+#if=20TARGET_OS_IPHONE=0A+=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= AVCaptureDeviceTypeBuiltInDualCamera,=0A+=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20= AVCaptureDeviceTypeBuiltInDualWideCamera,=0A+=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20= AVCaptureDeviceTypeBuiltInUltraWideCamera,=0A+=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= AVCaptureDeviceTypeBuiltInTrueDepthCamera,=0A+=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= AVCaptureDeviceTypeBuiltInTelephotoCamera,=0A+#endif=0A+=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= AVCaptureDeviceTypeBuiltInWideAngleCamera,=0A+=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= AVCaptureDeviceTypeExternalUnknown=0A+=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20]=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20mediaType:NULL=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20position:AVCaptureDevicePositionUnspecified];=0A+=0A+=20= =20=20=20=20=20=20NSMutableArray=20*devices=20=20=20=20=20=20=20=3D=20= [NSMutableArray=20array];=0A+=20=20=20=20=20=20=20NSMutableArray=20= *devices_muxed=20=3D=20[NSMutableArray=20array];=0A+=20=20=20=20=20=20=20= for=20(AVCaptureDevice=20*device=20in=20[discoverySession=20devices])=20= {=0A+=20=20=20=20=20=20=20=20=20=20=20if=20([device=20= hasMediaType:AVMediaTypeVideo])=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20[devices=20addObject:device];=0A+=20=20=20=20=20=20=20=20=20=20=20= else=20if=20([device=20hasMediaType:AVMediaTypeMuxed])=0A+=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20[devices_muxed=20addObject:device];=0A+=20=20= =20=20=20=20=20}=0A+#else=0A+=20=20=20=20=20=20=20NSArray=20*devices=20=3D= =20[AVCaptureDevice=20devicesWithMediaType:AVMediaTypeVideo];=0A+=20=20=20= =20=20=20=20NSArray=20*devices_muxed=20=3D=20[AVCaptureDevice=20= devicesWithMediaType:AVMediaTypeMuxed];=0A+#endif=0A=20=0A=20=20=20=20=20= ctx->num_video_devices=20=3D=20[devices=20count]=20+=20[devices_muxed=20= count];=0A=20=0A@@=20-707,6=20+734,21=20@@=20static=20int=20= avf_read_header(AVFormatContext=20*s)=0A=20=20=20=20=20= CGGetActiveDisplayList(0,=20NULL,=20&num_screens);=0A=20#endif=0A=20=0A+=20= =20=20=20NSArray=20*audio_devices;=0A+#if=20defined(__MAC_10_15)=20||=20= (TARGET_OS_IPHONE=20&&=20defined(__IPHONE_10_0))=0A+=20=20=20=20= discoverySession=20=3D=0A+=20=20=20=20=20=20=20=20= [AVCaptureDeviceDiscoverySession=20discoverySessionWithDeviceTypes:@[=0A= +=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= AVCaptureDeviceTypeBuiltInMicrophone,=0A+=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20AVCaptureDeviceTypeExternalUnknown=0A+=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20]=0A+=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20mediaType:AVMediaTypeAudio=0A+=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20position:AVCaptureDevicePositionUnspecified];=0A+=0A= +=20=20=20=20audio_devices=20=3D=20[discoverySession=20devices];=0A= +#else=0A+=20=20=20=20audio_devices=20=3D=20[AVCaptureDevice=20= devicesWithMediaType:AVMediaTypeAudio];=0A+#endif=0A+=0A=20=20=20=20=20= //=20List=20devices=20if=20requested=0A=20=20=20=20=20if=20= (ctx->list_devices)=20{=0A=20=20=20=20=20=20=20=20=20int=20index=20=3D=20= 0;=0A@@=20-734,8=20+776,7=20@@=20static=20int=20= avf_read_header(AVFormatContext=20*s)=0A=20#endif=0A=20=0A=20=20=20=20=20= =20=20=20=20av_log(ctx,=20AV_LOG_INFO,=20"AVFoundation=20audio=20= devices:\n");=0A-=20=20=20=20=20=20=20=20devices=20=3D=20= [AVCaptureDevice=20devicesWithMediaType:AVMediaTypeAudio];=0A-=20=20=20=20= =20=20=20=20for=20(AVCaptureDevice=20*device=20in=20devices)=20{=0A+=20=20= =20=20=20=20=20=20for=20(AVCaptureDevice=20*device=20in=20audio_devices)=20= {=0A=20=20=20=20=20=20=20=20=20=20=20=20=20const=20char=20*name=20=20=20=20= =20=3D=20[[device=20localizedName]=20UTF8String];=0A=20=20=20=20=20=20=20= =20=20=20=20=20=20const=20char=20*uniqueId=20=3D=20= CLEANUP_DEVICE_ID([device=20uniqueID]);=0A=20=20=20=20=20=20=20=20=20=20=20= =20=20int=20index=20=20=20=20=20=20=20=20=20=20=20=20=3D=20[devices=20= indexOfObject:device];=0A@@=20-885,9=20+926,7=20@@=20static=20int=20= avf_read_header(AVFormatContext=20*s)=0A=20=0A=20=20=20=20=20//=20get=20= audio=20device=0A=20=20=20=20=20if=20(ctx->audio_device_index=20>=3D=20= 0)=20{=0A-=20=20=20=20=20=20=20=20NSArray=20*devices=20=3D=20= [AVCaptureDevice=20devicesWithMediaType:AVMediaTypeAudio];=0A-=0A-=20=20=20= =20=20=20=20=20if=20(ctx->audio_device_index=20>=3D=20[devices=20count])=20= {=0A+=20=20=20=20=20=20=20=20if=20(ctx->audio_device_index=20>=3D=20= [audio_devices=20count])=20{=0A=20=20=20=20=20=20=20=20=20=20=20=20=20= av_log(ctx,=20AV_LOG_ERROR,=20"Invalid=20audio=20device=20index\n");=0A=20= =20=20=20=20=20=20=20=20=20=20=20=20goto=20fail;=0A=20=20=20=20=20=20=20=20= =20}=0A@@=20-898,22=20+937,20=20@@=20static=20int=20= avf_read_header(AVFormatContext=20*s)=0A=20=20=20=20=20=20=20=20=20if=20= (!strncmp(ctx->audio_filename,=20"default",=207))=20{=0A=20=20=20=20=20=20= =20=20=20=20=20=20=20audio_device=20=3D=20[AVCaptureDevice=20= defaultDeviceWithMediaType:AVMediaTypeAudio];=0A=20=20=20=20=20=20=20=20=20= }=20else=20{=0A-=20=20=20=20=20=20=20=20NSArray=20*devices=20=3D=20= [AVCaptureDevice=20devicesWithMediaType:AVMediaTypeAudio];=0A-=0A-=20=20=20= =20=20=20=20=20for=20(AVCaptureDevice=20*device=20in=20devices)=20{=0A-=20= =20=20=20=20=20=20=20=20=20=20=20const=20char=20*name=20=3D=20[[device=20= localizedName]=20UTF8String];=0A-=20=20=20=20=20=20=20=20=20=20=20=20if=20= (!strncmp(ctx->audio_filename,=20name,=20strlen(ctx->audio_filename)))=20= {=0A-=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20audio_device=20=3D=20= device;=0A-=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20break;=0A-=20=20= =20=20=20=20=20=20=20=20=20=20}=0A+=20=20=20=20=20=20=20=20=20=20=20=20= for=20(AVCaptureDevice=20*device=20in=20audio_devices)=20{=0A+=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20const=20char=20*name=20=3D=20= [[device=20localizedName]=20UTF8String];=0A+=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20if=20(!strncmp(ctx->audio_filename,=20name,=20= strlen(ctx->audio_filename)))=20{=0A+=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20audio_device=20=3D=20device;=0A+=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20break;=0A+=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20}=0A=20=0A-=20=20=20=20=20=20=20=20=20=20=20=20= const=20char=20*uniqueId=20=3D=20CLEANUP_DEVICE_ID([device=20uniqueID]);=0A= -=20=20=20=20=20=20=20=20=20=20=20=20if=20(!strncmp(ctx->audio_filename,=20= uniqueId,=20strlen(ctx->audio_filename)))=20{=0A-=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20audio_device=20=3D=20device;=0A-=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20break;=0A+=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20const=20char=20*uniqueId=20=3D=20= CLEANUP_DEVICE_ID([device=20uniqueID]);=0A+=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20if=20(!strncmp(ctx->audio_filename,=20uniqueId,=20= strlen(ctx->audio_filename)))=20{=0A+=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20audio_device=20=3D=20device;=0A+=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20break;=0A+=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20}=0A=20=20=20=20=20=20=20=20=20=20=20=20=20}=0A= =20=20=20=20=20=20=20=20=20}=0A-=20=20=20=20=20=20=20=20}=0A=20=0A=20=20=20= =20=20=20=20=20=20if=20(!audio_device)=20{=0A=20=20=20=20=20=20=20=20=20=20= =20=20=20av_log(ctx,=20AV_LOG_ERROR,=20"Audio=20device=20not=20= found\n");=0A--=20=0A2.32.0=20(Apple=20Git-132)=0A=0A= --Apple-Mail=_FC534AC6-3711-4280-87A9-9ED65862B155 Content-Type: text/plain; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Content-Disposition: inline _______________________________________________ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org https://ffmpeg.org/mailman/listinfo/ffmpeg-devel To unsubscribe, visit link above, or email ffmpeg-devel-request@ffmpeg.org with subject "unsubscribe". --Apple-Mail=_FC534AC6-3711-4280-87A9-9ED65862B155--