[vlc-commits] qtsound: Explicitly ask for consent before using the audio device
David Fuhrmann
git at videolan.org
Sun Oct 21 16:19:12 CEST 2018
vlc | branch: master | David Fuhrmann <dfuhrmann at videolan.org> | Sun Oct 21 16:16:38 2018 +0200| [80282b5a8a7794dfb49056eadafc3fe62d33d59d] | committer: David Fuhrmann
qtsound: Explicitly ask for consent before using the audio device
Same reasoning as for avcapture module, see
ad372574e5e3ce5562dc10eedbb7e2a55de93ac4.
> http://git.videolan.org/gitweb.cgi/vlc.git/?a=commit;h=80282b5a8a7794dfb49056eadafc3fe62d33d59d
---
modules/access/Makefile.am | 2 +-
modules/access/qtsound.m | 19 +++++++++++++++++++
2 files changed, 20 insertions(+), 1 deletion(-)
diff --git a/modules/access/Makefile.am b/modules/access/Makefile.am
index fb6564b61f..222aa16c6b 100644
--- a/modules/access/Makefile.am
+++ b/modules/access/Makefile.am
@@ -72,7 +72,7 @@ access_LTLIBRARIES += libpulsesrc_plugin.la
endif
libaccess_qtsound_plugin_la_SOURCES = access/qtsound.m
-libaccess_qtsound_plugin_la_LDFLAGS = $(AM_LDFLAGS) -rpath '$(accessdir)' -Wl,-framework,Foundation -Wl,-framework,QTKit -Wl,-framework,CoreAudio
+libaccess_qtsound_plugin_la_LDFLAGS = $(AM_LDFLAGS) -rpath '$(accessdir)' -Wl,-framework,Foundation -Wl,-framework,QTKit -Wl,-framework,AVFoundation -Wl,-framework,CoreAudio
access_LTLIBRARIES += $(LTLIBaccess_qtsound)
EXTRA_LTLIBRARIES += libaccess_qtsound_plugin.la
diff --git a/modules/access/qtsound.m b/modules/access/qtsound.m
index e4ac1bc34c..6113518f84 100644
--- a/modules/access/qtsound.m
+++ b/modules/access/qtsound.m
@@ -42,6 +42,7 @@
#define QTKIT_VERSION_MIN_REQUIRED 70603
#import <QTKit/QTKit.h>
+#import <AVFoundation/AVFoundation.h>
/*****************************************************************************
* Local prototypes.
@@ -310,6 +311,24 @@ static int Open(vlc_object_t *p_this)
msg_Err(p_demux, "default audio capture device is exclusively in use by another application");
goto error;
}
+
+ if (@available(macOS 10.14, *)) {
+ msg_Dbg(p_demux, "Check user consent for access to the audio device");
+
+ dispatch_semaphore_t sema = dispatch_semaphore_create(0);
+ __block bool accessGranted = NO;
+ [AVCaptureDevice requestAccessForMediaType: AVMediaTypeAudio completionHandler:^(BOOL granted) {
+ accessGranted = granted;
+ dispatch_semaphore_signal(sema);
+ } ];
+ dispatch_semaphore_wait(sema, DISPATCH_TIME_FOREVER);
+ dispatch_release(sema);
+ if (!accessGranted) {
+ msg_Err(p_demux, "Can't use the audio device as access has not been granted by the user");
+ goto error;
+ }
+ }
+
audioInput = [[QTCaptureDeviceInput alloc] initWithDevice: p_sys->audiodevice];
if(!audioInput) {
msg_Err(p_demux, "can't create a valid audio capture input facility");
More information about the vlc-commits
mailing list