Commit 64b80cb0 authored by Thilo Borgmann's avatar Thilo Borgmann

lavd/avfoundation.m: Do not use transport controls for screen capture devices.

parent 3c9185bf
...@@ -99,6 +99,7 @@ typedef struct ...@@ -99,6 +99,7 @@ typedef struct
int capture_raw_data; int capture_raw_data;
int drop_late_frames; int drop_late_frames;
int video_is_muxed; int video_is_muxed;
int video_is_screen;
int list_devices; int list_devices;
int video_device_index; int video_device_index;
...@@ -545,12 +546,14 @@ static int add_video_device(AVFormatContext *s, AVCaptureDevice *video_device) ...@@ -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 #if !TARGET_OS_IPHONE && __MAC_OS_X_VERSION_MIN_REQUIRED >= 1070
// check for transport control support and set observer device if supported // check for transport control support and set observer device if supported
int trans_ctrl = [video_device transportControlsSupported]; if (!ctx->video_is_screen) {
AVCaptureDeviceTransportControlsPlaybackMode trans_mode = [video_device transportControlsPlaybackMode]; int trans_ctrl = [video_device transportControlsSupported];
AVCaptureDeviceTransportControlsPlaybackMode trans_mode = [video_device transportControlsPlaybackMode];
if (trans_ctrl) { if (trans_ctrl) {
ctx->observed_mode = trans_mode; ctx->observed_mode = trans_mode;
ctx->observed_device = video_device; ctx->observed_device = video_device;
}
} }
#endif #endif
...@@ -750,7 +753,6 @@ static int get_audio_config(AVFormatContext *s) ...@@ -750,7 +753,6 @@ static int get_audio_config(AVFormatContext *s)
static int avf_read_header(AVFormatContext *s) static int avf_read_header(AVFormatContext *s)
{ {
NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init]; NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
int capture_screen = 0;
uint32_t num_screens = 0; uint32_t num_screens = 0;
AVFContext *ctx = (AVFContext*)s->priv_data; AVFContext *ctx = (AVFContext*)s->priv_data;
AVCaptureDevice *video_device = nil; AVCaptureDevice *video_device = nil;
...@@ -847,7 +849,7 @@ static int avf_read_header(AVFormatContext *s) ...@@ -847,7 +849,7 @@ static int avf_read_header(AVFormatContext *s)
} }
video_device = (AVCaptureDevice*) capture_screen_input; video_device = (AVCaptureDevice*) capture_screen_input;
capture_screen = 1; ctx->video_is_screen = 1;
#endif #endif
} else { } else {
av_log(ctx, AV_LOG_ERROR, "Invalid device index\n"); av_log(ctx, AV_LOG_ERROR, "Invalid device index\n");
...@@ -884,7 +886,7 @@ static int avf_read_header(AVFormatContext *s) ...@@ -884,7 +886,7 @@ static int avf_read_header(AVFormatContext *s)
AVCaptureScreenInput* capture_screen_input = [[[AVCaptureScreenInput alloc] initWithDisplayID:screens[idx]] autorelease]; AVCaptureScreenInput* capture_screen_input = [[[AVCaptureScreenInput alloc] initWithDisplayID:screens[idx]] autorelease];
video_device = (AVCaptureDevice*) capture_screen_input; video_device = (AVCaptureDevice*) capture_screen_input;
ctx->video_device_index = ctx->num_video_devices + idx; ctx->video_device_index = ctx->num_video_devices + idx;
capture_screen = 1; ctx->video_is_screen = 1;
if (ctx->framerate.num > 0) { if (ctx->framerate.num > 0) {
capture_screen_input.minFrameDuration = CMTimeMake(ctx->framerate.den, ctx->framerate.num); capture_screen_input.minFrameDuration = CMTimeMake(ctx->framerate.den, ctx->framerate.num);
...@@ -975,7 +977,7 @@ static int avf_read_header(AVFormatContext *s) ...@@ -975,7 +977,7 @@ static int avf_read_header(AVFormatContext *s)
/* Unlock device configuration only after the session is started so it /* Unlock device configuration only after the session is started so it
* does not reset the capture formats */ * does not reset the capture formats */
if (!capture_screen) { if (!ctx->video_is_screen) {
[video_device unlockForConfiguration]; [video_device unlockForConfiguration];
} }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment