|
|
|
@ -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,6 +546,7 @@ 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 |
|
|
|
|
if (!ctx->video_is_screen) { |
|
|
|
|
int trans_ctrl = [video_device transportControlsSupported]; |
|
|
|
|
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_device = video_device; |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
#endif |
|
|
|
|
|
|
|
|
|
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) |
|
|
|
|
{ |
|
|
|
|
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]; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|