forked from FFmpeg/FFmpeg
lavd/avfoundation.m: Do not use transport controls for screen capture devices.
This commit is contained in:
parent
3c9185bf3a
commit
64b80cb04b
1 changed files with 11 additions and 9 deletions
|
@ -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,6 +546,7 @@ 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
|
||||||
|
if (!ctx->video_is_screen) {
|
||||||
int trans_ctrl = [video_device transportControlsSupported];
|
int trans_ctrl = [video_device transportControlsSupported];
|
||||||
AVCaptureDeviceTransportControlsPlaybackMode trans_mode = [video_device transportControlsPlaybackMode];
|
AVCaptureDeviceTransportControlsPlaybackMode trans_mode = [video_device transportControlsPlaybackMode];
|
||||||
|
|
||||||
|
@ -552,6 +554,7 @@ static int add_video_device(AVFormatContext *s, AVCaptureDevice *video_device)
|
||||||
ctx->observed_mode = trans_mode;
|
ctx->observed_mode = trans_mode;
|
||||||
ctx->observed_device = video_device;
|
ctx->observed_device = video_device;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
ctx->avf_delegate = [[AVFFrameReceiver alloc] initWithContext:ctx];
|
ctx->avf_delegate = [[AVFFrameReceiver alloc] initWithContext:ctx];
|
||||||
|
@ -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)
|
||||||
}
|
}
|
||||||
|
|
||||||
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)
|
||||||
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)
|
||||||
|
|
||||||
/* 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];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Add table
Reference in a new issue