int capture_raw_data;
int drop_late_frames;
int video_is_muxed;
+ int video_is_screen;
int list_devices;
int video_device_index;
CMSampleBufferRef current_audio_frame;
AVCaptureDevice *observed_device;
+#if !TARGET_OS_IPHONE && __MAC_OS_X_VERSION_MIN_REQUIRED >= 1070
AVCaptureDeviceTransportControlsPlaybackMode observed_mode;
+#endif
int observed_quit;
} AVFContext;
_context = context;
// start observing if a device is set for it
+#if !TARGET_OS_IPHONE && __MAC_OS_X_VERSION_MIN_REQUIRED >= 1070
if (_context->observed_device) {
NSString *keyPath = NSStringFromSelector(@selector(transportControlsPlaybackMode));
NSKeyValueObservingOptions options = NSKeyValueObservingOptionNew;
options: options
context: _context];
}
+#endif
}
return self;
}
- (void)dealloc {
// stop observing if a device is set for it
- NSString *keyPath = NSStringFromSelector(@selector(transportControlsPlaybackMode));
- [_context->observed_device removeObserver: self forKeyPath: keyPath];
+#if !TARGET_OS_IPHONE && __MAC_OS_X_VERSION_MIN_REQUIRED >= 1070
+ if (_context->observed_device) {
+ NSString *keyPath = NSStringFromSelector(@selector(transportControlsPlaybackMode));
+ [_context->observed_device removeObserver: self forKeyPath: keyPath];
+ }
+#endif
[super dealloc];
}
change:(NSDictionary *)change
context:(void *)context {
if (context == _context) {
+#if !TARGET_OS_IPHONE && __MAC_OS_X_VERSION_MIN_REQUIRED >= 1070
AVCaptureDeviceTransportControlsPlaybackMode mode =
[change[NSKeyValueChangeNewKey] integerValue];
}
_context->observed_mode = mode;
}
+#endif
} else {
[super observeValueForKeyPath: keyPath
ofObject: object
}
[ctx->video_output setAlwaysDiscardsLateVideoFrames:ctx->drop_late_frames];
+#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
ctx->avf_delegate = [[AVFFrameReceiver alloc] initWithContext:ctx];
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;
}
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");
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);
/* 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];
}
.category = AV_CLASS_CATEGORY_DEVICE_VIDEO_INPUT,
};
-AVInputFormat ff_avfoundation_demuxer = {
+const AVInputFormat ff_avfoundation_demuxer = {
.name = "avfoundation",
.long_name = NULL_IF_CONFIG_SMALL("AVFoundation input device"),
.priv_data_size = sizeof(AVFContext),