aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorThilo Borgmann <thilo.borgmann@mail.de>2020-04-04 13:51:17 +0200
committerThilo Borgmann <thilo.borgmann@mail.de>2020-04-22 16:52:36 +0200
commit64b80cb04b124eaa979128f0b8557ee2a5ca239b (patch)
tree400d1fe8e3afba7f7e1f43d384b42e382c39a1f8
parent3c9185bf3a83395d12a987f626dbdb985eac4320 (diff)
downloadffmpeg-64b80cb04b124eaa979128f0b8557ee2a5ca239b.tar.gz
lavd/avfoundation.m: Do not use transport controls for screen capture devices.
-rw-r--r--libavdevice/avfoundation.m20
1 files changed, 11 insertions, 9 deletions
diff --git a/libavdevice/avfoundation.m b/libavdevice/avfoundation.m
index 9f8186b4d7..0b1888693f 100644
--- a/libavdevice/avfoundation.m
+++ b/libavdevice/avfoundation.m
@@ -99,6 +99,7 @@ typedef struct
int capture_raw_data;
int drop_late_frames;
int video_is_muxed;
+ int video_is_screen;
int list_devices;
int video_device_index;
@@ -545,12 +546,14 @@ static int add_video_device(AVFormatContext *s, AVCaptureDevice *video_device)
#if !TARGET_OS_IPHONE && __MAC_OS_X_VERSION_MIN_REQUIRED >= 1070
// check for transport control support and set observer device if supported
- int trans_ctrl = [video_device transportControlsSupported];
- AVCaptureDeviceTransportControlsPlaybackMode trans_mode = [video_device transportControlsPlaybackMode];
+ if (!ctx->video_is_screen) {
+ int trans_ctrl = [video_device transportControlsSupported];
+ AVCaptureDeviceTransportControlsPlaybackMode trans_mode = [video_device transportControlsPlaybackMode];
- if (trans_ctrl) {
- ctx->observed_mode = trans_mode;
- ctx->observed_device = video_device;
+ if (trans_ctrl) {
+ ctx->observed_mode = trans_mode;
+ ctx->observed_device = video_device;
+ }
}
#endif
@@ -750,7 +753,6 @@ static int get_audio_config(AVFormatContext *s)
static int avf_read_header(AVFormatContext *s)
{
NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
- int capture_screen = 0;
uint32_t num_screens = 0;
AVFContext *ctx = (AVFContext*)s->priv_data;
AVCaptureDevice *video_device = nil;
@@ -847,7 +849,7 @@ static int avf_read_header(AVFormatContext *s)
}
video_device = (AVCaptureDevice*) capture_screen_input;
- capture_screen = 1;
+ ctx->video_is_screen = 1;
#endif
} else {
av_log(ctx, AV_LOG_ERROR, "Invalid device index\n");
@@ -884,7 +886,7 @@ static int avf_read_header(AVFormatContext *s)
AVCaptureScreenInput* capture_screen_input = [[[AVCaptureScreenInput alloc] initWithDisplayID:screens[idx]] autorelease];
video_device = (AVCaptureDevice*) capture_screen_input;
ctx->video_device_index = ctx->num_video_devices + idx;
- capture_screen = 1;
+ ctx->video_is_screen = 1;
if (ctx->framerate.num > 0) {
capture_screen_input.minFrameDuration = CMTimeMake(ctx->framerate.den, ctx->framerate.num);
@@ -975,7 +977,7 @@ static int avf_read_header(AVFormatContext *s)
/* Unlock device configuration only after the session is started so it
* does not reset the capture formats */
- if (!capture_screen) {
+ if (!ctx->video_is_screen) {
[video_device unlockForConfiguration];
}