diff --git a/CapturedFrameProtocol.h b/CapturedFrameProtocol.h index cbc38430..7af2a055 100644 --- a/CapturedFrameProtocol.h +++ b/CapturedFrameProtocol.h @@ -12,5 +12,4 @@ -(void) newCapturedFrame:(IOSurfaceID)ioxpc reply:(void (^)())reply; - @end diff --git a/CocoaSplit.xcodeproj/project.pbxproj b/CocoaSplit.xcodeproj/project.pbxproj index e17317e0..b0576e14 100644 --- a/CocoaSplit.xcodeproj/project.pbxproj +++ b/CocoaSplit.xcodeproj/project.pbxproj @@ -820,7 +820,7 @@ HEADER_SEARCH_PATHS = /usr/local/include; MACOSX_DEPLOYMENT_TARGET = ""; ONLY_ACTIVE_ARCH = NO; - SDKROOT = macosx10.8; + SDKROOT = macosx; }; name = Debug; }; @@ -843,7 +843,7 @@ HEADER_SEARCH_PATHS = /usr/local/include; MACOSX_DEPLOYMENT_TARGET = ""; ONLY_ACTIVE_ARCH = NO; - SDKROOT = macosx10.8; + SDKROOT = macosx; }; name = Release; }; @@ -871,6 +871,7 @@ /usr/local/lib/libx264.a, ); PRODUCT_NAME = CocoaSplit; + SDKROOT = macosx; WRAPPER_EXTENSION = app; }; name = Debug; @@ -899,6 +900,7 @@ /usr/local/lib/libx264.a, ); PRODUCT_NAME = CocoaSplit; + SDKROOT = macosx; WRAPPER_EXTENSION = app; }; name = Release; @@ -958,6 +960,7 @@ /usr/local/lib/libx264.a, ); PRODUCT_NAME = "$(TARGET_NAME)"; + SDKROOT = macosx10.9; }; name = Debug; }; @@ -985,6 +988,7 @@ /usr/local/lib/libmp3lame.a, ); PRODUCT_NAME = "$(TARGET_NAME)"; + SDKROOT = macosx10.9; }; name = Release; }; @@ -1004,7 +1008,7 @@ MACOSX_DEPLOYMENT_TARGET = 10.8; ONLY_ACTIVE_ARCH = YES; PRODUCT_NAME = "zakk.lol.$(TARGET_NAME:rfc1034identifier)"; - SDKROOT = macosx10.8; + SDKROOT = macosx; VALID_ARCHS = "i386 x86_64"; WRAPPER_EXTENSION = xpc; }; @@ -1025,7 +1029,7 @@ MACH_O_TYPE = mh_execute; MACOSX_DEPLOYMENT_TARGET = 10.8; PRODUCT_NAME = "zakk.lol.$(TARGET_NAME:rfc1034identifier)"; - SDKROOT = macosx10.8; + SDKROOT = macosx; VALID_ARCHS = "i386 x86_64"; WRAPPER_EXTENSION = xpc; }; diff --git a/CocoaSplit/AVFAdvancedPanel.xib b/CocoaSplit/AVFAdvancedPanel.xib index ec47aa18..eb86697c 100644 --- a/CocoaSplit/AVFAdvancedPanel.xib +++ b/CocoaSplit/AVFAdvancedPanel.xib @@ -1,977 +1,122 @@ - - - - 1080 - 12D78 - 3084 - 1187.37 - 626.00 - - com.apple.InterfaceBuilder.CocoaPlugin - 3084 - - - IBNSLayoutConstraint - NSArrayController - NSButton - NSButtonCell - NSCustomObject - NSMenu - NSMenuItem - NSPopUpButton - NSPopUpButtonCell - NSTextField - NSTextFieldCell - NSView - NSWindowTemplate - - - com.apple.InterfaceBuilder.CocoaPlugin - - - PluginDependencyRecalculationVersion - - - - - CaptureController - - - FirstResponder - - - NSApplication - - - 15 - 2 - {{196, 240}, {480, 270}} - 544735232 - Window - NSWindow - - - - - 256 - - - - 268 - {{69, 226}, {99, 26}} - - - _NS:9 - YES - - -2076180416 - 2048 - - LucidaGrande - 13 - 1044 - - _NS:9 - - 109199360 - 129 - - - 400 - 75 - - - Item 1 - - 1048576 - 2147483647 - 1 - - NSImage - NSMenuCheckmark - - - NSImage - NSMenuMixedState - - _popUpItemAction: - - - YES - - OtherViews - - - - - Item 2 - - 1048576 - 2147483647 - - - _popUpItemAction: - - - - - Item 3 - - 1048576 - 2147483647 - - - _popUpItemAction: - - - - - - 1 - YES - YES - 2 - - NO - - - - 268 - {{69, 198}, {99, 26}} - - - _NS:9 - YES - - -2076180416 - 2048 - - _NS:9 - - 109199360 - 129 - - - 400 - 75 - - - Item 1 - - 1048576 - 2147483647 - 1 - - - _popUpItemAction: - - - YES - - OtherViews - - - - - Item 2 - - 1048576 - 2147483647 - - - _popUpItemAction: - - - - - Item 3 - - 1048576 - 2147483647 - - - _popUpItemAction: - - - - - - 1 - YES - YES - 2 - - NO - - - - 268 - {{17, 231}, {49, 17}} - - - _NS:1535 - YES - - 68157504 - 272630784 - Format - - _NS:1535 - - - 6 - System - controlColor - - 3 - MC42NjY2NjY2NjY3AA - - - - 6 - System - controlTextColor - - 3 - MAA - - - - NO - - - - 268 - {{17, 203}, {26, 17}} - - - _NS:1535 - YES - - 68157504 - 272630784 - FPS - - _NS:1535 - - - - - NO - - - - 268 - {{14, 13}, {58, 32}} - - - _NS:9 - YES - - 67108864 - 134217728 - Ok - - _NS:9 - - -2038284288 - 129 - - - 200 - 25 - - NO - - - {480, 270} - - - - {{0, 0}, {1920, 1058}} - {10000000000000, 10000000000000} - YES - - - YES - - YES - YES - YES - YES - YES - - - YES - - YES - YES - YES - YES - YES - - - - - - - closeAVFAdvanced: - - - - 50 - - - - avfPanel - - - - 51 - - - - content: arrangedObjects - - - - - - content: arrangedObjects - content - arrangedObjects - 2 - - - 31 - - - - contentValues: arrangedObjects.localizedName - - - - - - contentValues: arrangedObjects.localizedName - contentValues - arrangedObjects.localizedName - - 2 - - - 33 - - - - selectedObject: self.videoCaptureSession.activeVideoFormat - - - - - - selectedObject: self.videoCaptureSession.activeVideoFormat - selectedObject - self.videoCaptureSession.activeVideoFormat - - 2 - - - 37 - - - - content: arrangedObjects - - - - - - content: arrangedObjects - content - arrangedObjects - 2 - - - 38 - - - - contentValues: arrangedObjects.localizedName - - - - - - contentValues: arrangedObjects.localizedName - contentValues - arrangedObjects.localizedName - - 2 - - - 40 - - - - selectedObject: self.videoCaptureSession.activeVideoFramerate - - - - - - selectedObject: self.videoCaptureSession.activeVideoFramerate - selectedObject - self.videoCaptureSession.activeVideoFramerate - - 2 - - - 44 - - - - contentArray: self.videoCaptureSession.videoFramerates - - - - - - contentArray: self.videoCaptureSession.videoFramerates - contentArray - self.videoCaptureSession.videoFramerates - 2 - - - 56 - - - - contentArray: self.videoCaptureSession.videoFormats - - - - - - contentArray: self.videoCaptureSession.videoFormats - contentArray - self.videoCaptureSession.videoFormats - 2 - - - 57 - - - - - - 0 - - - - - - -2 - - - File's Owner - - - -1 - - - First Responder - - - -3 - - - Application - - - 1 - - - - - - - - 2 - - - - - - - - - 4 - 0 - - 4 - 1 - - 20 - - 1000 - - 8 - 29 - 3 - - - - 5 - 0 - - 5 - 1 - - 20 - - 1000 - - 8 - 29 - 3 - - - - 5 - 0 - - 5 - 1 - - 0.0 - - 1000 - - 6 - 24 - 2 - - - - 3 - 0 - - 3 - 1 - - 48 - - 1000 - - 3 - 9 - 3 - - - - 3 - 0 - - 3 - 1 - - 20 - - 1000 - - 8 - 29 - 3 - - - - 6 - 0 - - 6 - 1 - - 0.0 - - 1000 - - 6 - 24 - 2 - - - - 5 - 0 - - 6 - 1 - - 8 - - 1000 - - 6 - 24 - 3 - - - - 5 - 0 - - 5 - 1 - - 20 - - 1000 - - 8 - 29 - 3 - - - - 10 - 0 - - 10 - 1 - - 0.0 - - 1000 - - 6 - 24 - 2 - - - - 5 - 0 - - 5 - 1 - - 20 - - 1000 - - 8 - 29 - 3 - - - - 10 - 0 - - 10 - 1 - - 0.0 - - 1000 - - 6 - 24 - 2 - - - - - - - 3 - - - - - 7 - 0 - - 0 - 1 - - 94 - - 1000 - - 3 - 9 - 1 - - - - - - - 4 - - - - - - - - 5 - - - - - - - - 6 - - - - - - - - 7 - - - - - 8 - - - - - 9 - - - - - - - - 10 - - - - - - - - - - 11 - - - - - 12 - - - - - 13 - - - - - 14 - - - - - 15 - - - - - - - - 16 - - - - - - - - - - 17 - - - - - 18 - - - - - 19 - - - - - 20 - - - - - 21 - - - - - 22 - - - - - 23 - - - - - 24 - - - - - 25 - - - - - 26 - - - - - 27 - - - - - 28 - - - - - 29 - - - videoFrameratesArrayController - - - 30 - - - videoFormatArrayController - - - 45 - - - - - - - - 46 - - - - - 47 - - - - - 48 - - - - - - - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - {{357, 418}, {480, 270}} - - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - - - - - - - - - - - - - - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - - - - - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - - com.apple.InterfaceBuilder.CocoaPlugin - - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - - com.apple.InterfaceBuilder.CocoaPlugin - - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - - - - - - 57 - - - 0 - IBCocoaFramework - YES - 3 - - {11, 11} - {10, 3} - - YES - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/CocoaSplit/AVFCapture.h b/CocoaSplit/AVFCapture.h index 95f4c115..a3535f03 100644 --- a/CocoaSplit/AVFCapture.h +++ b/CocoaSplit/AVFCapture.h @@ -23,6 +23,9 @@ AVCaptureVideoDataOutput *_video_capture_output; AVCaptureAudioDataOutput *_audio_capture_output; + AVCaptureDeviceInput *_audio_capture_input; + AVCaptureDeviceInput *_video_capture_input; + CVImageBufferRef _currentFrame; AVCaptureDevice *_selectedVideoCaptureDevice; int _preroll_frame_cnt; @@ -62,7 +65,9 @@ -(bool) startCaptureSession:(NSError **)error; -(bool) stopCaptureSession; - +-(void) setupAudioPreview; +-(id) initForAudio; +-(void) setupAudioCompression; @end diff --git a/CocoaSplit/AVFCapture.m b/CocoaSplit/AVFCapture.m index 4112a9cf..1fea2bb0 100644 --- a/CocoaSplit/AVFCapture.m +++ b/CocoaSplit/AVFCapture.m @@ -16,6 +16,40 @@ @synthesize activeVideoDevice = _activeVideoDevice; @synthesize activeVideoFramerate = _activeVideoFramerate; @synthesize previewVolume = _previewVolume; +@synthesize activeAudioDevice = _activeAudioDevice; + + + +-(id) init +{ + if (self = [super init]) + { + _capture_session = [[AVCaptureSession alloc] init]; + [self setupVideoOutput]; + + + + [_capture_session startRunning]; + } + return self; +} + + +-(id) initForAudio +{ + + if (self = [super init]) + { + _capture_session = [[AVCaptureSession alloc] init]; + [self setupAudioPreview]; + _audio_capture_queue = dispatch_queue_create("AudioQueue", NULL); + + [_capture_session startRunning]; + + } + + return self; +} -(void) setVideoDimensions:(int)width height:(int)height @@ -53,7 +87,18 @@ /* [self.activeVideoDevice lockForConfiguration:nil]; self.activeVideoDevice.activeVideoMinFrameDuration = _activeVideoFramerate.minFrameDuration; [self.activeVideoDevice unlockForConfiguration]; - */ + */ + + + if([[[_selectedVideoCaptureDevice activeFormat] videoSupportedFrameRateRanges] containsObject:_activeVideoFramerate]) + { + if([_selectedVideoCaptureDevice lockForConfiguration:nil]) + { + [_selectedVideoCaptureDevice setActiveVideoMinFrameDuration:_activeVideoFramerate.minFrameDuration]; + [_selectedVideoCaptureDevice unlockForConfiguration]; + } + } + self.videoCaptureFPS = _activeVideoFramerate.minFrameRate; } @@ -72,11 +117,62 @@ /* [self.activeVideoDevice lockForConfiguration:nil]; self.activeVideoDevice.activeFormat = _activeVideoFormat; [self.activeVideoDevice unlockForConfiguration]; -*/ +*/ + + + if ([_selectedVideoCaptureDevice lockForConfiguration:nil]) + { + [_selectedVideoCaptureDevice setActiveFormat:_activeVideoFormat]; + [_selectedVideoCaptureDevice unlockForConfiguration]; + } + self.videoFramerates = self.activeVideoFormat.videoSupportedFrameRateRanges; } +-(id) activeAudioDevice +{ + return _activeAudioDevice; +} + +-(void) setActiveAudioDevice:(id)activeAudioDevice +{ + _activeAudioDevice = activeAudioDevice; + + if (!_capture_session) + { + return; + } + + [_capture_session beginConfiguration]; + if (_audio_capture_input) + { + [_capture_session removeInput:_audio_capture_input]; + _audio_capture_input = nil; + } + + + _audio_capture_input = [AVCaptureDeviceInput deviceInputWithDevice:self.activeAudioDevice error:nil]; + + if (!_audio_capture_input) + { + NSLog(@"No audio capture input?"); + } else { + + + if ([_capture_session canAddInput:_audio_capture_input]) + { + [_capture_session addInput:_audio_capture_input]; + + } else { + NSLog(@"Can't add audio input?"); + } + } + [_capture_session commitConfiguration]; +} + + + -(id) activeVideoDevice { return _activeVideoDevice; @@ -87,6 +183,33 @@ { _activeVideoDevice = newDev; _selectedVideoCaptureDevice = [newDev captureDevice]; + + if (!_capture_session) + { + return; + } + + [_capture_session beginConfiguration]; + + if (_video_capture_input) + { + [_capture_session removeInput:_video_capture_input]; + _video_capture_input = nil; + } + + + if (_selectedVideoCaptureDevice) + { + _video_capture_input = [AVCaptureDeviceInput deviceInputWithDevice:_selectedVideoCaptureDevice error:nil]; + + if (_video_capture_input) + { + [_capture_session addInput:_video_capture_input]; + } + } + + [_capture_session commitConfiguration]; + self.videoFormats = _selectedVideoCaptureDevice.formats; self.videoFramerates = _selectedVideoCaptureDevice.activeFormat.videoSupportedFrameRateRanges; @@ -158,14 +281,7 @@ return NO; } - _video_capture_queue = dispatch_queue_create("VideoQueue", NULL); - [_video_capture_output setSampleBufferDelegate:self queue:_video_capture_queue]; - - _audio_capture_queue = dispatch_queue_create("AudioQueue", NULL); - [_audio_capture_output setSampleBufferDelegate:self queue:_audio_capture_queue]; - - [_capture_session startRunning]; [_selectedVideoCaptureDevice lockForConfiguration:nil]; if (self.activeVideoFormat) @@ -319,7 +435,6 @@ *therror = [NSError errorWithDomain:@"audioCapture" code:230 userInfo:@{NSLocalizedDescriptionKey : @"Could not add audio output to capture session"}]; return NO; } - [self setupAudioPreview]; } else { NSLog(@"No audio device?"); @@ -349,22 +464,92 @@ } +-(void) setupAudioCompression +{ + + if (!_capture_session) + { + return; + } + + if (_audio_capture_output) + { + return; + } + + + _audio_capture_output = [[AVCaptureAudioDataOutput alloc] init]; + + + + _audio_capture_output.audioSettings = @{AVFormatIDKey: [NSNumber numberWithInt:kAudioFormatMPEG4AAC], + AVSampleRateKey: [NSNumber numberWithFloat: 44100.0], + AVEncoderBitRateKey: [NSNumber numberWithInt:_audioBitrate*1000 ], + AVNumberOfChannelsKey: @2 + + }; + + [_audio_capture_output setSampleBufferDelegate:self queue:_audio_capture_queue]; + + [_capture_session beginConfiguration]; + + if ([_capture_session canAddOutput:_audio_capture_output]) + { + [_capture_session addOutput:_audio_capture_output]; + } + + [_capture_session commitConfiguration]; + +} + + -(void) setupAudioPreview { if (_capture_session) { self.audioPreviewOutput = [[AVCaptureAudioPreviewOutput alloc] init]; - [_capture_session beginConfiguration]; if ([_capture_session canAddOutput:self.audioPreviewOutput]) { [_capture_session addOutput:self.audioPreviewOutput]; } - [_capture_session commitConfiguration]; self.audioPreviewOutput.volume = self.previewVolume; } } +-(void)setupVideoOutput +{ + if (_capture_session) + { + NSMutableDictionary *videoSettings = [[NSMutableDictionary alloc] init]; + + [videoSettings setValue:@[@(kCVPixelFormatType_422YpCbCr8FullRange), @(kCVPixelFormatType_420YpCbCr8BiPlanarVideoRange), @(kCVPixelFormatType_420YpCbCr8BiPlanarFullRange), @(kCVPixelFormatType_422YpCbCr8)] forKey:(NSString *)kCVPixelBufferPixelFormatTypeKey]; + NSDictionary *ioAttrs = [NSDictionary dictionaryWithObject: [NSNumber numberWithBool: YES] + forKey: (NSString *)kIOSurfaceIsGlobal]; + + [videoSettings setValue:ioAttrs forKey:(NSString *)kCVPixelBufferIOSurfacePropertiesKey]; + /* if (self.videoHeight && self.videoWidth) + { + [videoSettings setValue:@(self.videoHeight) forKey:(NSString *)kCVPixelBufferHeightKey]; + [videoSettings setValue:@(self.videoWidth) forKey:(NSString *)kCVPixelBufferWidthKey]; + } */ + + NSLog(@"SETTINGS DICT %@", videoSettings); + _video_capture_output = [[AVCaptureVideoDataOutput alloc] init]; + + if ([_capture_session canAddOutput:_video_capture_output]) + { + [_capture_session addOutput:_video_capture_output]; + _video_capture_output.videoSettings = videoSettings; + + _video_capture_queue = dispatch_queue_create("VideoQueue", NULL); + + [_video_capture_output setSampleBufferDelegate:self queue:_video_capture_queue]; + + } + } +} + - (CVImageBufferRef) getCurrentFrame { @@ -421,6 +606,7 @@ { if (connection.output == _video_capture_output) { + /* if (!self.did_preroll) { if (_preroll_frame_cnt < _preroll_needed_frames) @@ -438,6 +624,7 @@ return; } } + */ CVImageBufferRef videoFrame = CMSampleBufferGetImageBuffer(sampleBuffer); @@ -468,8 +655,10 @@ } else if (connection.output == _audio_capture_output) { - - [_audioDelegate captureOutputAudio:self didOutputSampleBuffer:sampleBuffer]; + if (_audioDelegate) + { + [_audioDelegate captureOutputAudio:self didOutputSampleBuffer:sampleBuffer]; + } } } diff --git a/CocoaSplit/AppleVTPanel.xib b/CocoaSplit/AppleVTPanel.xib index f94d93db..66635724 100644 --- a/CocoaSplit/AppleVTPanel.xib +++ b/CocoaSplit/AppleVTPanel.xib @@ -1,1692 +1,215 @@ - - - - 1080 - 12E55 - 3084 - 1187.39 - 626.00 - - com.apple.InterfaceBuilder.CocoaPlugin - 3084 - - - IBNSLayoutConstraint - NSArrayController - NSButton - NSButtonCell - NSCustomObject - NSMenu - NSMenuItem - NSNumberFormatter - NSPopUpButton - NSPopUpButtonCell - NSTextField - NSTextFieldCell - NSUserDefaultsController - NSView - NSWindowTemplate - - - com.apple.InterfaceBuilder.CocoaPlugin - - - PluginDependencyRecalculationVersion - - - - - CaptureController - - - FirstResponder - - - NSApplication - - - 15 - 2 - {{196, 240}, {480, 270}} - 544735232 - Window - NSWindow - - - - - 256 - - - - 268 - {{119, 228}, {46, 22}} - - - _NS:9 - YES - - -1804599231 - 272630784 - - LucidaGrande - 13 - 1044 - - - - - - - - - -∞ - - +∞ - - # - # - - - - - - - - NaN - - - - 0 - 0 - YES - NO - 1 - AAAAAAAAAAAAAAAAAAAAAA - - - - 3 - YES - YES - YES - - . - , - NO - NO - NO - - _NS:9 - - YES - - 6 - System - textBackgroundColor - - 3 - MQA - - - - 6 - System - textColor - - 3 - MAA - - - - NO - - - - 268 - {{15, 231}, {73, 17}} - - - _NS:1535 - YES - - 68157504 - 272630784 - Avg Bitrate - - _NS:1535 - - - 6 - System - controlColor - - 3 - MC42NjY2NjY2NjY3AA - - - - 6 - System - controlTextColor - - - - NO - - - - 268 - {{15, 199}, {76, 17}} - - - _NS:1535 - YES - - 68157504 - 272630784 - Max Bitrate - - _NS:1535 - - - - - NO - - - - 268 - {{119, 196}, {46, 22}} - - - _NS:9 - YES - - -1804599231 - 272630784 - - - - - - - # - -∞ - - - # - +∞ - - # - # - - - - - - - - NaN - - - - - - 3 - YES - YES - YES - - . - , - NO - NO - NO - - _NS:9 - - YES - - - - NO - - - - 268 - {{119, 164}, {46, 22}} - - - _NS:9 - YES - - -1804599231 - 272630784 - - - - - - - # - -∞ - - - # - +∞ - - - # - # - - - - - - - - NaN - - - - - - 3 - YES - YES - YES - - . - , - NO - NO - NO - - _NS:9 - - YES - - - - NO - - - - 268 - {{15, 167}, {101, 17}} - - - _NS:1535 - YES - - 68157504 - 272630784 - Keyframe every - - _NS:1535 - - - - - NO - - - - 268 - {{14, 13}, {58, 32}} - - - _NS:9 - YES - - 67108864 - 134217728 - Ok - - _NS:9 - - -2038284288 - 129 - - - 200 - 25 - - NO - - - - 268 - {{17, 137}, {44, 17}} - - - _NS:1535 - YES - - 68157504 - 272630784 - Profile - - _NS:1535 - - - - - NO - - - - 268 - {{117, 132}, {100, 26}} - - - _NS:9 - YES - - -2076180416 - 2048 - - _NS:9 - - 109199360 - 129 - - - 400 - 75 - - - Item 1 - - 1048576 - 2147483647 - 1 - - NSImage - NSMenuCheckmark - - - NSImage - NSMenuMixedState - - _popUpItemAction: - - - YES - - OtherViews - - - - - Item 2 - - 1048576 - 2147483647 - - - _popUpItemAction: - - - - - Item 3 - - 1048576 - 2147483647 - - - _popUpItemAction: - - - - - - 1 - YES - YES - 2 - - NO - - - - 268 - {{16, 59}, {113, 18}} - - - _NS:9 - YES - - -2080374784 - 268435456 - Use CBR Mode - - _NS:9 - - 1211912448 - 2 - - NSImage - NSSwitch - - - NSSwitch - - - - 200 - 25 - - NO - - - - 268 - {{130, 55}, {25, 25}} - - - _NS:1598 - YES - - 603979776 - 134217728 - - - _NS:1598 - - -2038415360 - 161 - - - 200 - 25 - - NO - - - - 268 - {{173, 167}, {56, 17}} - - - _NS:1535 - YES - - 68157504 - 272630784 - seconds - - _NS:1535 - - - - - NO - - - {480, 270} - - - - {{0, 0}, {1920, 1058}} - {10000000000000, 10000000000000} - YES - - - YES - - YES - YES - YES - YES - YES - - - YES - - - - - - - compressPanel - - - - 106 - - - - closeCompressPanel: - - - - 111 - - - - value: self.captureVideoAverageBitrate - - - - - - value: self.captureVideoAverageBitrate - value - self.captureVideoAverageBitrate - 2 - - - 46 - - - - value: self.captureVideoMaxBitrate - - - - - - value: self.captureVideoMaxBitrate - value - self.captureVideoMaxBitrate - 2 - - - 44 - - - - value: self.captureVideoMaxKeyframeInterval - - - - - - value: self.captureVideoMaxKeyframeInterval - value - self.captureVideoMaxKeyframeInterval - 2 - - - 40 - - - - contentArray: self.vtcompressor_profiles - - - - - - contentArray: self.vtcompressor_profiles - contentArray - self.vtcompressor_profiles - 2 - - - 149 - - - - content: arrangedObjects - - - - - - content: arrangedObjects - content - arrangedObjects - 2 - - - 142 - - - - selectedObject: self.vtcompressor_profile - - - - - - selectedObject: self.vtcompressor_profile - selectedObject - self.vtcompressor_profile - - 2 - - - 146 - - - - value: self.videoCBR - - - - - - value: self.videoCBR - value - self.videoCBR - 2 - - - 160 - - - - - - 0 - - - - - - -2 - - - File's Owner - - - -1 - - - First Responder - - - -3 - - - Application - - - 1 - - - - - - - - 2 - - - - - 9 - 0 - - 9 - 1 - - 0.0 - - 1000 - - 6 - 24 - 2 - - - - 10 - 0 - - 10 - 1 - - 0.0 - - 1000 - - 6 - 24 - 2 - - - - 3 - 0 - - 4 - 1 - - 20 - - 1000 - - 6 - 24 - 3 - - - - 5 - 0 - - 5 - 1 - - 20 - - 1000 - - 8 - 29 - 3 - - - - 4 - 0 - - 4 - 1 - - 20 - - 1000 - - 8 - 29 - 3 - - - - 5 - 0 - - 5 - 1 - - 0.0 - - 1000 - - 6 - 24 - 2 - - - - 10 - 0 - - 10 - 1 - - 0.0 - - 1000 - - 6 - 24 - 2 - - - - 11 - 0 - - 11 - 1 - - 0.0 - - 1000 - - 6 - 24 - 2 - - - - 5 - 0 - - 5 - 1 - - 176 - - 1000 - - 3 - 9 - 3 - - - - 5 - 0 - - 5 - 1 - - 0.0 - - 1000 - - 6 - 24 - 2 - - - - 3 - 0 - - 4 - 1 - - 8 - - 1000 - - 6 - 24 - 3 - - - - 5 - 0 - - 5 - 1 - - 0.0 - - 1000 - - 6 - 24 - 2 - - - - 3 - 0 - - 4 - 1 - - 10 - - 1000 - - 6 - 24 - 3 - - - - 6 - 0 - - 6 - 1 - - 0.0 - - 1000 - - 6 - 24 - 2 - - - - 3 - 0 - - 4 - 1 - - 10 - - 1000 - - 6 - 24 - 3 - - - - 10 - 0 - - 10 - 1 - - 0.0 - - 1000 - - 6 - 24 - 2 - - - - 5 - 0 - - 5 - 1 - - 0.0 - - 1000 - - 6 - 24 - 2 - - - - 6 - 0 - - 6 - 1 - - 0.0 - - 1000 - - 6 - 24 - 2 - - - - 3 - 0 - - 3 - 1 - - 20 - - 1000 - - 8 - 29 - 3 - - - - 5 - 0 - - 5 - 1 - - 119 - - 1000 - - 3 - 9 - 3 - - - - 5 - 0 - - 5 - 1 - - 20 - - 1000 - - 8 - 29 - 3 - - - - 10 - 0 - - 10 - 1 - - 0.0 - - 1000 - - 6 - 24 - 2 - - - - 5 - 0 - - 5 - 1 - - 0.0 - - 1000 - - 6 - 24 - 2 - - - - 5 - 0 - - 5 - 1 - - 18 - - 1000 - - 3 - 9 - 3 - - - - 10 - 0 - - 10 - 1 - - 0.0 - - 1000 - - 6 - 24 - 2 - - - - 5 - 0 - - 5 - 1 - - 0.0 - - 1000 - - 6 - 24 - 2 - - - - - - - - - - - - - - - - - - 3 - - - - - - 7 - 0 - - 0 - 1 - - 46 - - 1000 - - 3 - 9 - 1 - - - - - - 4 - - - - - - - - 5 - - - - - - - - 6 - - - - - - - - 7 - - - - - - - - 8 - - - - - - - - 9 - - - - - 10 - - - - - - - - 11 - - - - - 12 - - - - - - - - 13 - - - - - 14 - - - - - 15 - - - - - 16 - - - - - - - - 17 - - - - - 41 - - - - - 60 - - - - - 70 - - - - - 95 - - - - - 99 - - - - - 101 - - - - - 102 - - - - - 104 - - - - - 107 - - - - - - - - 108 - - - - - 109 - - - - - 110 - - - - - 115 - - - - - 116 - - - - - 119 - - - - - 121 - - - - - 122 - - - - - 124 - - - - - 125 - - - - - 126 - - - VTProfilesController - - - 127 - - - - - - - - 128 - - - - - 131 - - - - - - 7 - 0 - - 0 - 1 - - 95 - - 1000 - - 3 - 9 - 1 - - - - - - 132 - - - - - - - - 133 - - - - - - - - - - 134 - - - - - 135 - - - - - 136 - - - - - 137 - - - - - 138 - - - - - 139 - - - - - 140 - - - - - 141 - - - - - 150 - - - - - - - - 151 - - - - - 152 - - - - - 153 - - - - - 154 - - - - - - - - 155 - - - - - 156 - - - - - 157 - - - - - 161 - - - - - - - - 162 - - - - - 163 - - - - - 164 - - - - - 165 - - - - - - - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - {{357, 418}, {480, 270}} - - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - - - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - - - com.apple.InterfaceBuilder.CocoaPlugin - - - - - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - - ToolTip - - ToolTip - - Bitrate is set to 'Avg Bitrate'. 'Max Bitrate' is ignored. - - - - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - - - com.apple.InterfaceBuilder.CocoaPlugin - - - - - - - - - - - - - - - - - - - - - - - - - - - - - com.apple.InterfaceBuilder.CocoaPlugin - - - - - com.apple.InterfaceBuilder.CocoaPlugin - - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - - com.apple.InterfaceBuilder.CocoaPlugin - - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - - - - - - 165 - - - 0 - IBCocoaFramework - YES - 3 - - {11, 11} - {10, 3} - {15, 15} - - YES - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/CocoaSplit/CaptureController.h b/CocoaSplit/CaptureController.h index 50ab504c..8733ac6e 100644 --- a/CocoaSplit/CaptureController.h +++ b/CocoaSplit/CaptureController.h @@ -160,7 +160,7 @@ void VideoCompressorReceiveFrame(void *, void *, OSStatus , VTEncodeInfoFlags , @property (weak) AbstractCaptureDevice *selectedVideoCapture; -@property (weak) AVCaptureDevice *selectedAudioCapture; +@property (readonly) AVCaptureDevice *selectedAudioCapture; @property (readonly) double captureFPS; diff --git a/CocoaSplit/CaptureController.m b/CocoaSplit/CaptureController.m index 2c5ca945..f9653000 100644 --- a/CocoaSplit/CaptureController.m +++ b/CocoaSplit/CaptureController.m @@ -28,6 +28,7 @@ + -(void)loadTwitchIngest { @@ -187,9 +188,23 @@ self.createSheet = nil; } + + + +-(AVCaptureDevice *)selectedAudioCapture +{ + if (self.audioCaptureSession) + { + return self.audioCaptureSession.activeAudioDevice; + } + + return nil; +} + + -(void) selectedAudioCaptureFromID:(NSString *)uniqueID { - self.selectedAudioCapture = [AVCaptureDevice deviceWithUniqueID:uniqueID]; + self.audioCaptureSession.activeAudioDevice = [AVCaptureDevice deviceWithUniqueID:uniqueID]; } @@ -235,6 +250,16 @@ +- (void) observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context +{ + if ([keyPath isEqualToString:@"videoCaptureFPS"]) + { + [self setupFrameTimer]; + } +} + + + -(NSString *) selectedVideoType { return _selectedVideoType; @@ -245,6 +270,12 @@ -(void) setSelectedVideoType:(NSString *)selectedVideoType { + if (self.videoCaptureSession) + { + + [(NSObject *)self.videoCaptureSession removeObserver:self forKeyPath:@"videoCaptureFPS"]; + } + if ([selectedVideoType isEqualToString:@"Desktop"]) { self.videoCaptureSession = [[DesktopCapture alloc ] init]; @@ -258,20 +289,15 @@ self.videoCaptureSession = [[AVFCapture alloc] init]; } + if (!self.videoCaptureSession) { self.audioCaptureSession = nil; _selectedVideoType = nil; } - if ([self.videoCaptureSession providesAudio]) - { - self.audioCaptureSession = self.videoCaptureSession; - } else { - self.audioCaptureSession = [[AVFCapture alloc] init]; - } - - self.audioCaptureDevices = [AVCaptureDevice devicesWithMediaType:AVMediaTypeAudio]; + [(NSObject *)self.videoCaptureSession addObserver:self forKeyPath:@"videoCaptureFPS" options:NSKeyValueObservingOptionNew context:NULL]; + self.selectedVideoCapture = nil; _selectedVideoType = selectedVideoType; @@ -328,6 +354,14 @@ self.selectedVideoType = [self.videoTypes objectAtIndex:0]; + self.audioCaptureSession = [[AVFCapture alloc] initForAudio]; + [self.audioCaptureSession setAudioDelegate:self]; + + + + + self.audioCaptureDevices = [AVCaptureDevice devicesWithMediaType:AVMediaTypeAudio]; + } @@ -548,6 +582,7 @@ NSError *error; bool success; + id newCompressor; if (_cmdLineInfo) @@ -557,46 +592,24 @@ return YES; } - [self.audioCaptureSession setActiveAudioDevice:_selectedAudioCapture]; - [self.videoCaptureSession setVideoDelegate:self]; - [self.videoCaptureSession setVideoDimensions:_captureWidth height:_captureHeight]; - [self.audioCaptureSession setAudioDelegate:self]; - [self.audioCaptureSession setAudioBitrate:_audioBitrate]; - [self.audioCaptureSession setAudioSamplerate:_audioSamplerate]; - - - - success = [self.videoCaptureSession setupCaptureSession:&error]; - if (!success) - { - [NSApp presentError:error]; - return NO; - } - success = [self.audioCaptureSession setupCaptureSession:&error]; - if (!success) - { - [NSApp presentError:error]; - return NO; - } - if ([self.selectedCompressorType isEqualToString:@"x264"]) { - self.videoCompressor = [[x264Compressor alloc] init]; + newCompressor = [[x264Compressor alloc] init]; } else if ([self.selectedCompressorType isEqualToString:@"AppleVTCompressor"]) { - self.videoCompressor = [[AppleVTCompressor alloc] init]; + newCompressor = [[AppleVTCompressor alloc] init]; } else { - self.videoCompressor = nil; + newCompressor = nil; } - if (self.videoCompressor) + if (newCompressor) { - self.videoCompressor.settingsController = self; + newCompressor.settingsController = self; //if ([self.videoCompressor setupCompressor] == YES) //{ - self.videoCompressor.outputDelegate = self; + newCompressor.outputDelegate = self; //} @@ -610,7 +623,8 @@ } - success = [self.videoCaptureSession startCaptureSession:&error]; + + [self.audioCaptureSession setupAudioCompression]; _frameCount = 0; _firstAudioTime = 0; @@ -621,13 +635,6 @@ self.captureRunning = YES; - uint64_t frame_interval = (1.0/self.captureFPS)*NSEC_PER_SEC; - - _dispatch_timer = dispatch_source_create(DISPATCH_SOURCE_TYPE_TIMER, 0, 0, _main_capture_queue); - - dispatch_source_set_timer(_dispatch_timer, DISPATCH_TIME_NOW, frame_interval, 0); - dispatch_source_set_event_handler(_dispatch_timer, ^{ [self newFrame]; }); - dispatch_resume(_dispatch_timer); //dispatch_async(_main_capture_queue, ^{[self newFrame];}); @@ -635,38 +642,37 @@ //_captureTimer = [NSTimer timerWithTimeInterval:1.0/self.captureFPS target:self selector:@selector(newFrame) userInfo:nil repeats:YES]; //[[NSRunLoop currentRunLoop] addTimer:_captureTimer forMode:NSRunLoopCommonModes]; - if (!success) - { - self.captureRunning = NO; - NSLog(@"Failed start capture"); - [NSApp presentError:error]; - return NO; - } - if (self.audioCaptureSession != self.videoCaptureSession) - { - success = [self.audioCaptureSession startCaptureSession:&error]; - } - - - - - if (!success) - { - NSLog(@"Failed start capture"); - self.captureRunning = NO; - [NSApp presentError:error]; - return NO; - } - - _PMAssertionRet = IOPMAssertionCreateWithName(kIOPMAssertionTypePreventUserIdleDisplaySleep, kIOPMAssertionLevelOn, CFSTR("CocoaSplit is capturing video"), &_PMAssertionID); - + + self.videoCompressor = newCompressor; return YES; } +-(void) setupFrameTimer +{ + + uint64_t frame_interval = (1.0/self.captureFPS)*NSEC_PER_SEC; + + + NSLog(@"Setting up new frame timer %f", self.captureFPS); + if (_dispatch_timer) + { + dispatch_source_cancel(_dispatch_timer); + _dispatch_timer = nil; + + } + + _dispatch_timer = dispatch_source_create(DISPATCH_SOURCE_TYPE_TIMER, 0, 0, _main_capture_queue); + + dispatch_source_set_timer(_dispatch_timer, DISPATCH_TIME_NOW, frame_interval, 0); + dispatch_source_set_event_handler(_dispatch_timer, ^{ [self newFrame]; }); + dispatch_resume(_dispatch_timer); +} + + -(NSString *) buildCmdLineInfo { @@ -848,6 +854,7 @@ } */ + /* if (self.videoCaptureSession) { [self.videoCaptureSession stopCaptureSession]; @@ -857,6 +864,7 @@ { [self.audioCaptureSession stopCaptureSession]; } + */ @@ -901,7 +909,11 @@ - (void)captureOutputAudio:(id)fromDevice didOutputSampleBuffer:(CMSampleBufferRef)sampleBuffer { + + CFAbsoluteTime currentTime = CFAbsoluteTimeGetCurrent()*1000000; + + if (_firstFrameTime == 0) { //Don't start sending audio to the outputs until a video frame has arrived, with AVFoundation this can take 2+ seconds (!?) @@ -997,14 +1009,15 @@ if (self.videoCaptureSession) { + newFrame = [self.videoCaptureSession getCurrentFrame]; if (newFrame) { - if (_firstFrameTime == 0) + if (_firstFrameTime == 0 && self.videoCompressor) { NSError *error; BOOL success; - + NSLog(@"SETTING UP RESOLUTION"); success = [self setupResolution:newFrame error:&error]; if (!success) { @@ -1030,7 +1043,12 @@ //}); //dispatch_async(_main_capture_queue, ^{ - [self processVideoFrame:newFrame]; + + if (self.videoCompressor) + { + [self processVideoFrame:newFrame]; + } + //}); } @@ -1062,6 +1080,12 @@ //[self.previewCtx drawFrame:imageBuffer]; + if (!self.videoCompressor) + { + CVPixelBufferRelease(imageBuffer); + + return; + } CMTime pts; CMTime duration; @@ -1083,6 +1107,8 @@ + NSLog(@"FRAME COUNT %lld", _frameCount); + pts = CMTimeMake(_frameCount*(1.0f/self.captureFPS)*1000000,1000000); //NSLog(@"PTS IS %@", CMTimeCopyDescription(kCFAllocatorDefault, pts)); diff --git a/CocoaSplit/CaptureSessionProtocol.h b/CocoaSplit/CaptureSessionProtocol.h index a7fe03cc..5a054033 100644 --- a/CocoaSplit/CaptureSessionProtocol.h +++ b/CocoaSplit/CaptureSessionProtocol.h @@ -28,11 +28,8 @@ --(bool) stopCaptureSession; --(bool) startCaptureSession:(NSError **)error; -(bool) providesVideo; -(bool) providesAudio; --(bool) setupCaptureSession:(NSError **)therror; -(void) setVideoDimensions:(int)width height:(int)height; @@ -53,6 +50,8 @@ @property (assign) int audioSamplerate; @property (assign) float previewVolume; +-(void)setupAudioCompression; + diff --git a/CocoaSplit/DesktopCapture.m b/CocoaSplit/DesktopCapture.m index 246a06fd..09db78c9 100644 --- a/CocoaSplit/DesktopCapture.m +++ b/CocoaSplit/DesktopCapture.m @@ -15,6 +15,10 @@ @implementation DesktopCapture @synthesize activeVideoDevice = _activeVideoDevice; +@synthesize videoCaptureFPS = _videoCaptureFPS; + + + @@ -24,6 +28,22 @@ } + +-(id) init +{ + if (self = [super init]) + { + _capture_queue = dispatch_queue_create("Desktop Capture Queue", DISPATCH_QUEUE_SERIAL); + + self.videoCaptureFPS = 60; + + } + + return self; + +} + + -(AbstractCaptureDevice *)activeVideoDevice { return _activeVideoDevice; @@ -38,7 +58,8 @@ self.width = displaySize.size.width; self.height = displaySize.size.height; - + + [self setupDisplayStream]; } -(void) setVideoDimensions:(int)width height:(int)height @@ -49,40 +70,50 @@ } --(bool)setupCaptureSession:(NSError *__autoreleasing *)therror +-(double)videoCaptureFPS +{ + return _videoCaptureFPS; +} + + +-(void) setVideoCaptureFPS:(double)videoCaptureFPS +{ + _videoCaptureFPS = videoCaptureFPS; + + [self setupDisplayStream]; +} + + + +-(bool)setupDisplayStream { - if (!self.activeVideoDevice) + + if (_displayStreamRef) + { + [self stopDisplayStream]; + } + + + + if (!_currentDisplay) { - *therror = [NSError errorWithDomain:@"videoCapture" code:100 userInfo:@{NSLocalizedDescriptionKey : @"Must select video capture device first"}]; return NO; } - if (!(self.width > 0) || !(self.height > 0)) - { - *therror = [NSError errorWithDomain:@"videoCapture" code:150 userInfo:@{NSLocalizedDescriptionKey : @"Width and height must be set to greater than zero"}]; - return NO; - } - - - _capture_queue = dispatch_queue_create("Desktop Capture Queue", DISPATCH_QUEUE_SERIAL); - if (!_capture_queue) - { - *therror = [NSError errorWithDomain:@"videoCapture" code:160 userInfo:@{NSLocalizedDescriptionKey : @"Could not create desktop capture dispatch queue"}]; - return NO; - } - _currentFrameTime = 0; - - if (!self.videoCaptureFPS || self.videoCaptureFPS == 0) - { - self.videoCaptureFPS = 60.0; - } NSNumber *minframetime = [NSNumber numberWithFloat:(1000.0/(self.videoCaptureFPS*1000))]; + + _displayStreamRef = CGDisplayStreamCreateWithDispatchQueue(_currentDisplay, self.width, self.height, kCVPixelFormatType_420YpCbCr8BiPlanarVideoRange, (__bridge CFDictionaryRef)(@{(NSString *)kCGDisplayStreamQueueDepth : @20, (NSString *)kCGDisplayStreamMinimumFrameTime : minframetime, (NSString *)kCGDisplayStreamPreserveAspectRatio: @NO}), _capture_queue, ^(CGDisplayStreamFrameStatus status, uint64_t displayTime, IOSurfaceRef frameSurface, CGDisplayStreamUpdateRef updateRef) { + if (status == kCGDisplayStreamFrameStatusStopped) + { + return; + + } if (frameSurface) { @@ -97,22 +128,10 @@ } - /* - CVPixelBufferRef tmpbuf; - - if (self.videoDelegate) - { - CVPixelBufferCreateWithIOSurface(NULL, frameSurface, NULL, &tmpbuf); - if (tmpbuf) - { - [self.videoDelegate captureOutputVideo:nil didOutputSampleBuffer:nil didOutputImage:tmpbuf frameTime:0 ]; - CVPixelBufferRelease(tmpbuf); - } - } - */ } }); + CGDisplayStreamStart(_displayStreamRef); return YES; } @@ -136,18 +155,18 @@ } --(bool)startCaptureSession:(NSError *__autoreleasing *)error -{ - CGDisplayStreamStart(_displayStreamRef); - return YES; -} --(bool)stopCaptureSession +-(bool)stopDisplayStream { - CGDisplayStreamStop(_displayStreamRef); + + if (_displayStreamRef) + { + CGDisplayStreamStop(_displayStreamRef); + } + + _currentFrame = NULL; - _capture_queue = NULL; return YES; } diff --git a/CocoaSplit/QTCapture.m b/CocoaSplit/QTCapture.m index dc8e9ebf..0ec4ad78 100644 --- a/CocoaSplit/QTCapture.m +++ b/CocoaSplit/QTCapture.m @@ -42,6 +42,21 @@ } +-(AbstractCaptureDevice *)activeVideoDevice +{ + return _activeVideoDevice; +} + +-(void)setActiveVideoDevice:(AbstractCaptureDevice *)activeVideoDevice +{ + _activeVideoDevice = activeVideoDevice; + [self stopCaptureSession]; + [self startCaptureSession]; + +} + + + -(void) setVideoDimensions:(int)width height:(int)height { return; @@ -81,7 +96,7 @@ NSMutableArray *__block retArray; - [_xpcProxy testMethod]; + //[_xpcProxy testMethod]; [_xpcProxy listCaptureDevices:^(NSArray *r_devices) { retArray = [[NSMutableArray alloc] init]; @@ -90,6 +105,7 @@ { [retArray addObject:[[AbstractCaptureDevice alloc] initWithName:[devinstance valueForKey:@"name"] device:[devinstance valueForKey:@"id"] uniqueID:[devinstance valueForKey:@"id"]]]; } + [self willChangeValueForKey:@"availableVideoDevices"]; _availableVideoDevices = (NSArray *)retArray; [self didChangeValueForKey:@"availableVideoDevices"]; @@ -111,6 +127,7 @@ IOSurfaceIncrementUseCount(frameIOref); + if (frameIOref) { @synchronized(self) @@ -137,8 +154,10 @@ } */ - //ALWAYS REPLY + reply(); + + //ALWAYS REPLY } @@ -151,8 +170,9 @@ } --(bool) startCaptureSession:(NSError **)error +-(bool) startCaptureSession { + NSLog(@"STARTING CAPTURE SESSION?"); [_xpcProxy startXPCCaptureSession:self.activeVideoDevice.uniqueID]; @@ -160,13 +180,6 @@ } --(bool) setupCaptureSession:(NSError *__autoreleasing *)therror -{ - - return YES; - -} - void QTPixelBufferRelease(void *releaseRefCon, const void *baseAddress) { diff --git a/CocoaSplit/SyphonCapture.m b/CocoaSplit/SyphonCapture.m index 686874de..bfff9909 100644 --- a/CocoaSplit/SyphonCapture.m +++ b/CocoaSplit/SyphonCapture.m @@ -16,6 +16,24 @@ +@synthesize activeVideoDevice = _activeVideoDevice; + + + + +-(AbstractCaptureDevice *)activeVideoDevice +{ + return _activeVideoDevice; +} + +-(void)setActiveVideoDevice:(AbstractCaptureDevice *)activeVideoDevice +{ + _activeVideoDevice = activeVideoDevice; + [self startSyphon]; +} + + + -(void) setVideoDimensions:(int)width height:(int)height { self.width = width; @@ -65,44 +83,45 @@ } --(bool) setupCaptureSession:(NSError *__autoreleasing *)therror +-(id) init { - NSOpenGLPixelFormatAttribute glAttributes[] = { + if (self = [super init]) + { + NSOpenGLPixelFormatAttribute glAttributes[] = { + + NSOpenGLPFAPixelBuffer, + NSOpenGLPFANoRecovery, + NSOpenGLPFAAccelerated, + NSOpenGLPFADepthSize, 32, + (NSOpenGLPixelFormatAttribute) 0 + + }; + NSOpenGLPixelFormat *pixelFormat = [[NSOpenGLPixelFormat alloc] initWithAttributes:glAttributes]; + + if (!pixelFormat) + { + return NO; + } + + _ogl_ctx = [[NSOpenGLContext alloc] initWithFormat:pixelFormat shareContext:nil]; + + if (!_ogl_ctx) + { + return NO; + } + + CVReturn result; + + result = CVOpenGLTextureCacheCreate(kCFAllocatorDefault, NULL, [_ogl_ctx CGLContextObj], CGLGetPixelFormat([_ogl_ctx CGLContextObj]), NULL, &_texture_cache); + + if (result != kCVReturnSuccess) + { + return NO; + } - NSOpenGLPFAPixelBuffer, - NSOpenGLPFANoRecovery, - NSOpenGLPFAAccelerated, - NSOpenGLPFADepthSize, 32, - (NSOpenGLPixelFormatAttribute) 0 - - }; - NSOpenGLPixelFormat *pixelFormat = [[NSOpenGLPixelFormat alloc] initWithAttributes:glAttributes]; - - if (!pixelFormat) - { - return NO; } - - _ogl_ctx = [[NSOpenGLContext alloc] initWithFormat:pixelFormat shareContext:nil]; - - if (!_ogl_ctx) - { - return NO; - } - - CVReturn result; - - result = CVOpenGLTextureCacheCreate(kCFAllocatorDefault, NULL, [_ogl_ctx CGLContextObj], CGLGetPixelFormat([_ogl_ctx CGLContextObj]), NULL, &_texture_cache); - - if (result != kCVReturnSuccess) - { - return NO; - } - - return YES; - - + return self; } @@ -136,7 +155,6 @@ BOOL returnNow = NO; - BOOL changed = NO; if (frameSize.width == 0.0f || frameSize.height == 0.0f) { @@ -297,22 +315,32 @@ } --(bool) startCaptureSession:(NSError *__autoreleasing *)error +-(void) startSyphon { + + if (_syphon_client) + { + [_syphon_client stop]; + _syphon_client = nil; + } + + _syphonServer = [self.activeVideoDevice captureDevice]; - NSLog(@"STARTING SYPHON"); - _syphon_client = [[SyphonClient alloc] initWithServerDescription:_syphonServer options:nil newFrameHandler:nil]; + + if (_syphonServer) + { + NSLog(@"STARTING SYPHON"); + _syphon_client = [[SyphonClient alloc] initWithServerDescription:_syphonServer options:nil newFrameHandler:nil]; + } + /* _syphon_client = [[SyphonClient alloc] initWithServerDescription:_syphonServer options:nil newFrameHandler:^(SyphonClient *client) { [self renderNewFrame:client]; }]; */ - - return YES; - } diff --git a/CocoaSplit/advancedPrefPanel.xib b/CocoaSplit/advancedPrefPanel.xib index 52fcb745..dbea2fc5 100644 --- a/CocoaSplit/advancedPrefPanel.xib +++ b/CocoaSplit/advancedPrefPanel.xib @@ -1,626 +1,78 @@ - - - - 1080 - 12E55 - 3084 - 1187.39 - 626.00 - - com.apple.InterfaceBuilder.CocoaPlugin - 3084 - - - IBNSLayoutConstraint - NSButton - NSButtonCell - NSCustomObject - NSTextField - NSTextFieldCell - NSUserDefaultsController - NSView - NSWindowTemplate - - - com.apple.InterfaceBuilder.CocoaPlugin - - - PluginDependencyRecalculationVersion - - - - - CaptureController - - - FirstResponder - - - NSApplication - - - 15 - 2 - {{196, 240}, {480, 270}} - 544735232 - Window - NSWindow - - - - - 256 - - - - 268 - {{14, 13}, {59, 32}} - - - - _NS:9 - YES - - 67108864 - 134217728 - OK - - LucidaGrande - 13 - 1044 - - _NS:9 - - -2038284288 - 129 - - DQ - 200 - 25 - - NO - - - - 268 - {{222, 232}, {37, 22}} - - - - _NS:9 - YES - - -1804599231 - 272630784 - - - _NS:9 - - YES - - 6 - System - textBackgroundColor - - 3 - MQA - - - - 6 - System - textColor - - 3 - MAA - - - - NO - - - - 268 - {{20, 235}, {180, 17}} - - - - _NS:1535 - YES - - 68157504 - 272630784 - Max pending output frames - - _NS:1535 - - - 6 - System - controlColor - - 3 - MC42NjY2NjY2NjY3AA - - - - 6 - System - controlTextColor - - - - NO - - - {480, 270} - - - - - {{0, 0}, {1920, 1058}} - {10000000000000, 10000000000000} - YES - - - YES - - - - - - - advancedPrefPanel - - - - 7 - - - - closeAdvancedPrefPanel: - - - - 9 - - - - value: self.maxOutputPending - - - - - - value: self.maxOutputPending - value - self.maxOutputPending - - NSContinuouslyUpdatesValue - - - 2 - - - 94 - - - - - - 0 - - - - - - -2 - - - File's Owner - - - -1 - - - First Responder - - - -3 - - - Application - - - 1 - - - - - - - - 2 - - - - - - 5 - 0 - - 5 - 1 - - 20 - - 1000 - - 8 - 29 - 3 - - - - 4 - 0 - - 4 - 1 - - 20 - - 1000 - - 8 - 29 - 3 - - - - 9 - 0 - - 9 - 1 - - 0.0 - - 1000 - - 5 - 22 - 2 - - - - 10 - 0 - - 10 - 1 - - 0.0 - - 1000 - - 6 - 24 - 2 - - - - 3 - 0 - - 3 - 1 - - 16 - - 1000 - - 3 - 9 - 3 - - - - 5 - 0 - - 5 - 1 - - 23 - - 1000 - - 3 - 9 - 3 - - - - - - - - 3 - - - - - - - - 4 - - - - - 5 - - - - - 6 - - - - - 14 - - - - - - 7 - 0 - - 0 - 1 - - 37 - - 1000 - - 3 - 9 - 1 - - - - - - 15 - - - - - 19 - - - - - 60 - - - - - - - - 61 - - - - - 72 - - - - - 74 - - - - - 87 - - - - - 96 - - - - - 98 - - - - - - - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - {{357, 418}, {480, 270}} - - - - - - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - - - - - - - - - com.apple.InterfaceBuilder.CocoaPlugin - - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - - - - - - 98 - - - - - CaptureController - NSObject - - id - id - id - id - id - id - id - id - id - id - id - id - - - - addStreamingService: - id - - - closeAVFAdvanced: - id - - - closeAdvancedPrefPanel: - id - - - closeCompressPanel: - id - - - closeCreateSheet: - id - - - openAVFAdvanced: - id - - - openAdvancedPrefPanel: - id - - - openCompressPanel: - id - - - openCreateSheet: - id - - - removeDestination: - id - - - streamButtonPushed: - id - - - videoRefresh: - id - - - - NSWindow - NSWindow - NSWindow - NSWindow - PreviewView - - - - advancedPrefPanel - NSWindow - - - avfPanel - NSWindow - - - compressPanel - NSWindow - - - createSheet - NSWindow - - - previewCtx - PreviewView - - - - IBProjectSource - ./Classes/CaptureController.h - - - - NSLayoutConstraint - NSObject - - IBProjectSource - ./Classes/NSLayoutConstraint.h - - - - PreviewView - NSOpenGLView - - toggleFullscreen: - id - - - toggleFullscreen: - - toggleFullscreen: - id - - - - IBProjectSource - ./Classes/PreviewView.h - - - - - 0 - IBCocoaFramework - YES - 3 - YES - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/CocoaSplit/en.lproj/MainMenu.xib b/CocoaSplit/en.lproj/MainMenu.xib index 1248bc9a..b34eea3a 100644 --- a/CocoaSplit/en.lproj/MainMenu.xib +++ b/CocoaSplit/en.lproj/MainMenu.xib @@ -1,8167 +1,1173 @@ - - - - 1080 - 12E55 - 3084 - 1187.39 - 626.00 - - com.apple.InterfaceBuilder.CocoaPlugin - 3084 - - - IBNSLayoutConstraint - NSArrayController - NSBox - NSButton - NSButtonCell - NSCustomObject - NSCustomView - NSDictionaryController - NSDrawer - NSMenu - NSMenuItem - NSNumberFormatter - NSPopUpButton - NSPopUpButtonCell - NSScrollView - NSScroller - NSSlider - NSSliderCell - NSSplitView - NSTabView - NSTabViewItem - NSTableColumn - NSTableHeaderView - NSTableView - NSTextField - NSTextFieldCell - NSUserDefaultsController - NSView - NSWindowTemplate - - - com.apple.InterfaceBuilder.CocoaPlugin - - - PluginDependencyRecalculationVersion - - - - - NSApplication - - - FirstResponder - - - NSApplication - - - YES - - - AMainMenu - - - - CocoaSplit - - 1048576 - 2147483647 - - NSImage - NSMenuCheckmark - - - NSImage - NSMenuMixedState - - submenuAction: - - CocoaSplit - - - - About CocoaSplit - - 2147483647 - - - - - - YES - YES - - - 1048576 - 2147483647 - - - - - - Preferences… - , - 1048576 - 2147483647 - - - - - - YES - YES - - - 1048576 - 2147483647 - - - - - - Services - - 1048576 - 2147483647 - - - submenuAction: - - Services - - _NSServicesMenu - - - - - YES - YES - - - 1048576 - 2147483647 - - - - - - Hide CocoaSplit - h - 1048576 - 2147483647 - - - - - - Hide Others - h - 1572864 - 2147483647 - - - - - - Show All - - 1048576 - 2147483647 - - - - - - YES - YES - - - 1048576 - 2147483647 - - - - - - Quit CocoaSplit - q - 1048576 - 2147483647 - - - - - _NSAppleMenu - - - - - Edit - - 1048576 - 2147483647 - - - submenuAction: - - Edit - - - - Undo - z - 1048576 - 2147483647 - - - - - - Redo - Z - 1179648 - 2147483647 - - - - - - YES - YES - - - 1048576 - 2147483647 - - - - - - Cut - x - 1048576 - 2147483647 - - - - - - Copy - c - 1048576 - 2147483647 - - - - - - Paste - v - 1048576 - 2147483647 - - - - - - Paste and Match Style - V - 1572864 - 2147483647 - - - - - - Delete - - 1048576 - 2147483647 - - - - - - Select All - a - 1048576 - 2147483647 - - - - - - - - - View - - 1048576 - 2147483647 - - - submenuAction: - - View - - - - Full Screen - f - 1048576 - 2147483647 - - - - - - - - - Window - - 1048576 - 2147483647 - - - submenuAction: - - Window - - - - Minimize - m - 1048576 - 2147483647 - - - - - - Zoom - - 1048576 - 2147483647 - - - - - - YES - YES - - - 1048576 - 2147483647 - - - - - - Bring All to Front - - 1048576 - 2147483647 - - - - - _NSWindowsMenu - - - - - Help - - 2147483647 - - - submenuAction: - - Help - - - - CocoaSplit Help - ? - 1048576 - 2147483647 - - - - - _NSHelpMenu - - - - _NSMainMenu - - - 15 - 2 - {{683, 323}, {850, 703}} - 1954021376 - CocoaSplit - NSWindow - - - - - 256 - - - - 268 - - - - 256 - - - - 256 - - - - 268 - {{31, 189}, {847, 252}} - - - - _NS:9 - PreviewView - - - - 268 - {{41, 165}, {108, 18}} - - - - _NS:9 - YES - - -2080374784 - 268435456 - Show preview - - LucidaGrande - 13 - 1044 - - _NS:9 - - 1211912448 - 2 - - NSImage - NSSwitch - - - NSSwitch - - - - 200 - 25 - - NO - - - - 268 - {{275, 164}, {96, 21}} - - - - _NS:9 - YES - - 67371264 - 0 - - _NS:9 - - 1 - 0.0 - 0.21369791666666665 - 0.0 - 0 - 1 - NO - NO - - NO - - - - 268 - {{153, 165}, {111, 18}} - - - - _NS:9 - YES - - -2080374784 - 268435456 - Preview Vsync - - _NS:9 - - 1211912448 - 2 - - - - - 200 - 25 - - NO - - - {{-33, -154}, {1061, 641}} - - - - - - {850, 290} - - - - _NS:11 - NSView - - - - 256 - - - - 268 - {{384, 7}, {82, 32}} - - - - _NS:9 - YES - - 67108864 - 134217728 - Stream! - - _NS:9 - - -930988032 - 129 - - Stop! - - 200 - 25 - - NO - - - - 12 - {{13, 35}, {824, 363}} - - - - _NS:9 - - - 1 - - - 256 - - - - 268 - {{97, 240}, {145, 26}} - - - - _NS:9 - YES - - -2076180416 - 2048 - - _NS:9 - - 109199360 - 129 - - - 400 - 75 - - - Item 1 - - 1048576 - 2147483647 - 1 - - - _popUpItemAction: - - - YES - - OtherViews - - - - - Item 2 - - 1048576 - 2147483647 - - - _popUpItemAction: - - - - - Item 3 - - 1048576 - 2147483647 - - - _popUpItemAction: - - - - - - -1 - 1 - YES - YES - 2 - - NO - - - - 268 - {{14, 241}, {55, 26}} - - - - _NS:1535 - YES - - 68157504 - 272630784 - Source - - _NS:1535 - - - 6 - System - controlColor - - 3 - MC42NjY2NjY2NjY3AA - - - - 6 - System - controlTextColor - - 3 - MAA - - - - NO - - - - 268 - {{14, 192}, {71, 17}} - - - - _NS:1535 - YES - - 68157504 - 272630784 - Resolution - - _NS:1535 - - - - - NO - - - - 268 - {{14, 221}, {68, 17}} - - - - _NS:1535 - YES - - 68157504 - 272630784 - Compress - - _NS:1535 - - - - - NO - - - - 268 - {{99, 190}, {46, 22}} - - - - _NS:9 - YES - - -1804599231 - 272630784 - - - - - - - -∞ - - - +∞ - - # - # - - - - - - - - NaN - - - - 0 - 0 - YES - NO - 1 - AAAAAAAAAAAAAAAAAAAAAA - - - - 3 - YES - YES - YES - - . - , - NO - YES - NO - - _NS:9 - - YES - - 6 - System - textBackgroundColor - - 3 - MQA - - - - 6 - System - textColor - - - - NO - - - - 268 - {{165, 190}, {47, 22}} - - - - _NS:9 - YES - - -1804599231 - -1874852864 - - - - - - - - - - -∞ - - +∞ - - # - # - - - - - - - - NaN - - - - - - 3 - YES - YES - YES - - . - , - NO - NO - NO - - _NS:9 - - YES - - - - NO - - - - 268 - {{150, 192}, {12, 17}} - - - - _NS:1535 - YES - - 68157504 - 272630784 - x - - _NS:1535 - - - - - NO - - - - 268 - {{239, 245}, {26, 17}} - - - - _NS:9 - YES - - 67108864 - 134217728 - - - _NS:9 - - -2039726080 - 160 - - NSImage - NSRefreshTemplate - - Refresh - - 200 - 25 - - NO - - - - 268 - {{192, 221}, {26, 17}} - - - - _NS:9 - YES - - 67108864 - 134217728 - - - _NS:9 - - -2039726080 - 160 - - NSImage - NSAdvanced - - Refresh - - 200 - 25 - - NO - - - - 268 - {{192, 272}, {26, 17}} - - - - _NS:9 - YES - - 67108864 - 134217728 - - - _NS:9 - - -2039726080 - 160 - - Refresh - - 200 - 25 - - NO - - - - 268 - {{97, 266}, {99, 26}} - - - - _NS:9 - YES - - -2076180416 - 2048 - - _NS:9 - - 109199360 - 129 - - - 400 - 75 - - - Item 1 - - 1048576 - 2147483647 - 1 - - - _popUpItemAction: - - - YES - - OtherViews - - - - - Item 2 - - 1048576 - 2147483647 - - - _popUpItemAction: - - - - - Item 3 - - 1048576 - 2147483647 - - - _popUpItemAction: - - - - - - -1 - 1 - YES - YES - 2 - - NO - - - - 268 - {{97, 215}, {99, 26}} - - - - _NS:9 - YES - - -2076180416 - 2048 - - _NS:9 - - 109199360 - 129 - - - 400 - 75 - - - Item 1 - - 1048576 - 2147483647 - 1 - - - _popUpItemAction: - - - YES - - OtherViews - - - - - Item 2 - - 1048576 - 2147483647 - - - _popUpItemAction: - - - - - Item 3 - - 1048576 - 2147483647 - - - _popUpItemAction: - - - - - - -1 - 1 - YES - YES - 2 - - NO - - - - 268 - {{14, 272}, {35, 17}} - - - - _NS:1535 - YES - - 68157504 - 272630784 - Type - - _NS:1535 - - - - - NO - - - - 268 - {{14, 164}, {26, 17}} - - - - _NS:1535 - YES - - 68157504 - 272630784 - FPS - - _NS:1535 - - - - - NO - - - - 268 - {{99, 162}, {46, 22}} - - - - _NS:9 - YES - - -1804599231 - 272630784 - - - - - - - -∞ - - - +∞ - - #,##0.### - #,##0.### - - - - - - - - NaN - - - - - - 3 - YES - YES - YES - - . - , - YES - NO - YES - - _NS:9 - - YES - - - - NO - - - - 268 - {{97, 112}, {134, 26}} - - - - _NS:9 - YES - - -2076180416 - 2048 - - _NS:9 - - 109199360 - 129 - - - 400 - 75 - - - Item 1 - - 1048576 - 2147483647 - 1 - - - _popUpItemAction: - - - YES - - OtherViews - - - - - Item 2 - - 1048576 - 2147483647 - - - _popUpItemAction: - - - - - Item 3 - - 1048576 - 2147483647 - - - _popUpItemAction: - - - - - - -1 - 1 - YES - YES - 2 - - NO - - - - 268 - {{14, 117}, {47, 17}} - - - - _NS:1535 - YES - - 68157504 - 272630784 - Source - - _NS:1535 - - - - - NO - - - - 268 - {{99, 92}, {96, 22}} - - - - _NS:9 - YES - - -1804599231 - 272630784 - - - - - - - -∞ - - - +∞ - - #,##0.### - #,##0.### - - - - - - - - NaN - - - - - - 3 - YES - YES - YES - - . - , - YES - NO - YES - - _NS:9 - - YES - - - - NO - - - - 268 - {{14, 92}, {45, 17}} - - - - _NS:1535 - YES - - 68157504 - 272630784 - Bitrate - - _NS:1535 - - - - - NO - - - - 268 - {{14, 67}, {81, 17}} - - - - _NS:1535 - YES - - 68157504 - 272630784 - Sample Rate - - _NS:1535 - - - - - NO - - - - 268 - {{99, 64}, {96, 22}} - - - - _NS:9 - YES - - -1804599231 - 272630784 - - - - - - - -∞ - - - +∞ - - #,##0.### - #,##0.### - - - - - - - - NaN - - - - - - 3 - YES - YES - YES - - . - , - YES - NO - YES - - _NS:9 - - YES - - - - NO - - - - 268 - - - - 2304 - - - - 256 - - {412, 116} - - - - _NS:13 - YES - NO - YES - - - 256 - {412, 17} - - - - _NS:16 - - - - - -2147483392 - {{457, 0}, {16, 17}} - - - - _NS:19 - - - - 132 - 40 - 1000 - - 75497536 - 2048 - Active - - LucidaGrande - 11 - 3100 - - - 3 - MC4zMzMzMzI5ODU2AA - - - 6 - System - headerTextColor - - - - - 67108864 - 0 - - - _NS:9 - - 1211912448 - 2 - - - - - 200 - 25 - - 3 - YES - YES - - - - 118 - 40 - 1000 - - 75497536 - 2048 - Name - - - - - - 337641536 - 2048 - Text Cell - - - - 6 - System - controlBackgroundColor - - - - - 3 - YES - YES - - - - 82 - 10 - 3.4028234663852886e+38 - - 75497536 - 2048 - Type - - - 6 - System - headerColor - - - - - - 337641536 - 2048 - Text Cell - - - - - - 3 - YES - YES - - - - 68 - 10 - 3.4028234663852886e+38 - - 75497536 - 2048 - Destination - - - - - - 337641536 - 2048 - Text Cell - - - - - - 3 - YES - YES - - - - 3 - 2 - - - 6 - System - gridColor - - 3 - MC41AA - - - 34 - -566198272 - - - 1 - 15 - 0 - YES - 0 - 1 - - - {{1, 17}, {412, 116}} - - - - _NS:11 - - - 4 - - - - -2147483392 - {{455, 17}, {15, 35}} - - - - _NS:58 - NO - - _doScroller: - 0.88888888888888884 - - - - -2147483392 - {{1, 48}, {94, 15}} - - - - _NS:60 - NO - 1 - - _doScroller: - 0.8392857142857143 - - - - 2304 - - - - {{1, 0}, {412, 17}} - - - - _NS:15 - - - 4 - - - - {{373, 134}, {414, 134}} - - - - _NS:9 - {750, 750} - 133682 - - - - - - QSAAAEEgAABCEAAAQhAAAA - 0.25 - 4 - 1 - - - - 268 - {{535, 261}, {90, 32}} - - - - _NS:9 - YES - - 67108864 - 134217728 - Remove - - _NS:9 - - -2038284288 - 129 - - - 200 - 25 - - NO - - - - 268 - {{371, 265}, {99, 26}} - - - - _NS:9 - YES - - -2076180416 - 2048 - - _NS:9 - - 109199360 - 129 - - - 400 - 75 - - - Item 1 - - 1048576 - 2147483647 - 1 - - - _popUpItemAction: - - - YES - - OtherViews - - - - - Item 2 - - 1048576 - 2147483647 - - - _popUpItemAction: - - - - - Item 3 - - 1048576 - 2147483647 - - - _popUpItemAction: - - - - - - -1 - 1 - YES - YES - 2 - - NO - - - - 268 - {{469, 261}, {66, 32}} - - - - _NS:9 - YES - - 67108864 - 134217728 - Add - - _NS:9 - - -2038284288 - 129 - - - 200 - 25 - - NO - - - - 268 - {{14, 297}, {40, 17}} - - - - _NS:1535 - YES - - 68157504 - 272630784 - Video - - _NS:1535 - - - - - NO - - - - 268 - {{14, 142}, {41, 17}} - - - - _NS:1535 - YES - - 68157504 - 272630784 - Audio - - _NS:1535 - - - - - NO - - - - 12 - {{17, 295}, {248, 5}} - - - - _NS:9 - {0, 0} - - 67108864 - 0 - Box - - - - 3 - MCAwLjgwMDAwMDAxMTkAA - - - 3 - 2 - 0 - NO - - - - 12 - {{17, 140}, {248, 5}} - - - - _NS:9 - {0, 0} - - 67108864 - 0 - Box - - - - 3 - MCAwLjgwMDAwMDAxMTkAA - - - 3 - 2 - 0 - NO - - - - 268 - {{218, 187}, {100, 26}} - - - - _NS:9 - YES - - -2076180416 - 2048 - - _NS:9 - - 109199360 - 129 - - - 400 - 75 - - - Item 1 - - 1048576 - 2147483647 - 1 - - - _popUpItemAction: - - - YES - - OtherViews - - - - - Item 2 - - 1048576 - 2147483647 - - - _popUpItemAction: - - - - - Item 3 - - 1048576 - 2147483647 - - - _popUpItemAction: - - - - - - 1 - YES - YES - 2 - - NO - - - {{10, 33}, {804, 317}} - - - - _NS:11 - - Settings - - - - - 2 - - - 256 - - - - 268 - - - - 2304 - - - - 256 - - {968, 285} - - - _NS:13 - YES - NO - YES - - - 256 - {968, 17} - - - - - - - -2147483392 - {{224, 0}, {16, 17}} - - - _NS:19 - - - - 87.671875 - 40 - 1000 - - 75497536 - 2048 - Name - - - 3 - MC4zMzMzMzI5ODU2AA - - - - - 337641536 - 2048 - Text Cell - - - - - - 3 - YES - YES - - - - 60.984375 - 40 - 1000 - - 75497536 - 2048 - FPS In - - - - - - 337641536 - -2147481600 - Text Cell - - - - - - - - -∞ - - - +∞ - - #.## - #.## - - - - - - - - NaN - - - - - - 3 - YES - YES - YES - - . - , - NO - YES - YES - - - - - - 3 - YES - YES - - - - 77.69140625 - 10 - 3.4028234663852886e+38 - - 75497536 - 2048 - FPS Out - - - - - - 337641536 - -2147481600 - Text Cell - - - - - - - - -∞ - - +∞ - - #.## - #.## - - - - - - - - NaN - - - - - - 3 - YES - YES - YES - - . - , - NO - NO - YES - - - - - - 3 - YES - YES - - - - 105.2578125 - 10 - 3.4028234663852886e+38 - - 75497536 - 2048 - Pending Out - - - - - - 337641536 - 2048 - Text Cell - - - - - - 3 - YES - YES - - - - 92 - 10 - 3.4028234663852886e+38 - - 75497536 - 2048 - Pending Bytes - - - - - - 337641536 - 2048 - Text Cell - - - - - - 3 - YES - YES - - - - 64 - 10 - 3.4028234663852886e+38 - - 75497536 - 2048 - Dropped - - - - - - 337641536 - 2048 - Text Cell - - - - - - 3 - YES - YES - - - - 84 - 10 - 3.4028234663852886e+38 - - 75497536 - 2048 - Output bitrate - - - - - - 337641536 - -2147481600 - Text Cell - - - - - - - - - - - -∞ - - +∞ - - - - #,###.## - #,###.## - - - - - - - - NaN - - - - - - 3 - YES - YES - YES - - . - , - YES - NO - YES - - - - - - 3 - YES - YES - - - - 3 - 2 - - - 17 - 1109393408 - - - 0 - 15 - 0 - NO - 0 - 1 - - - {{1, 17}, {968, 285}} - - - _NS:11 - - - 4 - - - - -2147483392 - {{224, 17}, {15, 102}} - - - _NS:58 - NO - - _doScroller: - 0.94736842105263153 - - - - -2147483392 - {{1, 287}, {515, 15}} - - - _NS:60 - NO - 1 - - _doScroller: - 0.97908745247148288 - - - - 2304 - - - - {{1, 0}, {968, 17}} - - - - - 4 - - - - {{17, 16}, {970, 303}} - - - _NS:9 - 133682 - - - - - - QSAAAEEgAABBmAAAQZgAAA - 0.25 - 4 - 1 - - - {{10, 33}, {804, 317}} - - _NS:28 - - Status - - - - - - - 0 - YES - YES - - - - - - {{0, 291}, {850, 412}} - - - - _NS:13 - NSView - - - {850, 703} - - - - _NS:9 - 2 - - - {850, 703} - - - - - {{0, 0}, {1920, 1058}} - {10000000000000, 10000000000000} - YES - - - AppDelegate - - - NSFontManager - - - YES - - YES - YES - YES - YES - YES - - - CaptureController - - - YES - - YES - YES - YES - YES - YES - - - - {100, 100} - {0, 0} - {10000, 10000} - 2 - 0.0 - 15 - - - - - YES - - YES - YES - YES - YES - YES - - - - name - type_name - destination - active - - OutputDestination - YES - - YES - YES - YES - YES - YES - - - YES - YES - YES - YES - YES - - - key - YES - compare: - - - YES - key - value - - - YES - - YES - YES - YES - YES - YES - - - YES - - YES - YES - YES - YES - YES - - - - - - - terminate: - - - - 449 - - - - orderFrontStandardAboutPanel: - - - - 142 - - - - delegate - - - - 495 - - - - performMiniaturize: - - - - 37 - - - - arrangeInFront: - - - - 39 - - - - undo: - - - - 223 - - - - copy: - - - - 224 - - - - paste: - - - - 226 - - - - cut: - - - - 228 - - - - redo: - - - - 231 - - - - selectAll: - - - - 232 - - - - delete: - - - - 235 - - - - performZoom: - - - - 240 - - - - hide: - - - - 367 - - - - hideOtherApplications: - - - - 368 - - - - unhideAllApplications: - - - - 370 - - - - pasteAsPlainText: - - - - 486 - - - - showHelp: - - - - 493 - - - - window - - - - 532 - - - - captureController - - - - 1732 - - - - selectedObject: self.videoCaptureSession.activeVideoDevice - - - - - - selectedObject: self.videoCaptureSession.activeVideoDevice - selectedObject - self.videoCaptureSession.activeVideoDevice - - 2 - - - 2108 - - - - contentValues: arrangedObjects.captureName - - - - - - contentValues: arrangedObjects.captureName - contentValues - arrangedObjects.captureName - - 2 - - - 1053 - - - - content: arrangedObjects - - - - - - content: arrangedObjects - content - arrangedObjects - 2 - - - 1027 - - - - contentArray: self.videoCaptureSession.availableVideoDevices - - - - - - contentArray: self.videoCaptureSession.availableVideoDevices - contentArray - self.videoCaptureSession.availableVideoDevices - 2 - - - 2047 - - - - value: captureWidth - - - - - - value: captureWidth - value - captureWidth - - NSContinuouslyUpdatesValue - - - 2 - - - 1737 - - - - value: captureHeight - - - - - - value: captureHeight - value - captureHeight - 2 - - - 1723 - - - - videoRefresh: - - - - 1059 - - - - removeDestination: - - - - 1750 - - - - openCreateSheet: - - - - 1503 - - - - streamButtonPushed: - - - - 825 - - - - previewCtx - - - - 3493 - - - - openAVFAdvanced: - - - - 3639 - - - - openCompressPanel: - - - - 3643 - - - - openAdvancedPrefPanel: - - - - 3892 - - - - contentArray: self.audioCaptureDevices - - - - - - contentArray: self.audioCaptureDevices - contentArray - self.audioCaptureDevices - 2 - - - 898 - - - - selectedObject: self.selectedAudioCapture - - - - - - selectedObject: self.selectedAudioCapture - selectedObject - self.selectedAudioCapture - - 2 - - - 935 - - - - contentValues: arrangedObjects.localizedName - - - - - - contentValues: arrangedObjects.localizedName - contentValues - arrangedObjects.localizedName - - 2 - - - 934 - - - - content: arrangedObjects - - - - - - content: arrangedObjects - content - arrangedObjects - 2 - - - 929 - - - - value: self.videoCaptureSession.videoCaptureFPS - - - - - - value: self.videoCaptureSession.videoCaptureFPS - value - self.videoCaptureSession.videoCaptureFPS - - - - - 2 - - - 2134 - - - - value: self.audioBitrate - - - - - - value: self.audioBitrate - value - self.audioBitrate - 2 - - - 1729 - - - - value: self.audioSamplerate - - - - - - value: self.audioSamplerate - value - self.audioSamplerate - 2 - - - 1731 - - - - selectionIndexes: selectionIndexes - - - - - - selectionIndexes: selectionIndexes - selectionIndexes - selectionIndexes - - 2 - - - 1741 - - - - content: arrangedObjects - - - - - - content: arrangedObjects - content - arrangedObjects - 2 - - - 1526 - - - - value: arrangedObjects.active - - - - - - value: arrangedObjects.active - value - arrangedObjects.active - 2 - - - 1926 - - - - value: arrangedObjects.name - - - - - - value: arrangedObjects.name - value - arrangedObjects.name - 2 - - - 1917 - - - - value: arrangedObjects.type_name - - - - - - value: arrangedObjects.type_name - value - arrangedObjects.type_name - 2 - - - 1921 - - - - contentArray: captureDestinations - - - - - - contentArray: captureDestinations - contentArray - captureDestinations - 2 - - - 1527 - - - - selectionIndexes: selectedCaptureDestinations - - - - - - selectionIndexes: selectedCaptureDestinations - selectionIndexes - selectedCaptureDestinations - 2 - - - 1743 - - - - contentValues: arrangedObjects.value - - - - - - contentValues: arrangedObjects.value - contentValues - arrangedObjects.value - - 2 - - - 1520 - - - - contentObjects: arrangedObjects.key - - - - - - contentObjects: arrangedObjects.key - contentObjects - arrangedObjects.key - - 2 - - - 1519 - - - - content: arrangedObjects - - - - - - content: arrangedObjects - content - arrangedObjects - 2 - - - 1512 - - - - selectedObject: selectedDestinationType - - - - - - selectedObject: selectedDestinationType - selectedObject - selectedDestinationType - - 2 - - - 1525 - - - - contentDictionary: self.destinationTypes - - - - - - contentDictionary: self.destinationTypes - contentDictionary - self.destinationTypes - 2 - - - 1506 - - - - selectedObject: self.selectedVideoType - - - - - - selectedObject: self.selectedVideoType - selectedObject - self.selectedVideoType - - 2 - - - 1791 - - - - content: self.videoTypes - - - - - - content: self.videoTypes - content - self.videoTypes - 2 - - - 1789 - - - - value: arrangedObjects.destination - - - - - - value: arrangedObjects.destination - value - arrangedObjects.destination - 2 - - - 1920 - - - - contentArray: self.videoCaptureSession.videoFormats - - - - - - contentArray: self.videoCaptureSession.videoFormats - contentArray - self.videoCaptureSession.videoFormats - - NSRaisesForNotApplicableKeys - - - 2 - - - 2203 - - - - contentArray: self.videoCaptureSession.videoFramerates - - - - - - contentArray: self.videoCaptureSession.videoFramerates - contentArray - self.videoCaptureSession.videoFramerates - - NSRaisesForNotApplicableKeys - - - 2 - - - 2202 - - - - content: arrangedObjects - - - - - - content: arrangedObjects - content - arrangedObjects - 2 - - - 2262 - - - - value: arrangedObjects.name - - - - - - value: arrangedObjects.name - value - arrangedObjects.name - 2 - - - 2264 - - - - value: arrangedObjects.ffmpeg_out.input_framerate - - - - - - value: arrangedObjects.ffmpeg_out.input_framerate - value - arrangedObjects.ffmpeg_out.input_framerate - 2 - - - 2270 - - - - value: arrangedObjects.ffmpeg_out.output_framerate - - - - - - value: arrangedObjects.ffmpeg_out.output_framerate - value - arrangedObjects.ffmpeg_out.output_framerate - 2 - - - 2272 - - - - value: arrangedObjects.ffmpeg_out.buffered_frame_count - - - - - - value: arrangedObjects.ffmpeg_out.buffered_frame_count - value - arrangedObjects.ffmpeg_out.buffered_frame_count - 2 - - - 2273 - - - - value: arrangedObjects.ffmpeg_out.buffered_frame_size - - - - - - value: arrangedObjects.ffmpeg_out.buffered_frame_size - value - arrangedObjects.ffmpeg_out.buffered_frame_size - 2 - - - 2274 - - - - value: arrangedObjects.ffmpeg_out.output_bitrate - - - - - - value: arrangedObjects.ffmpeg_out.output_bitrate - value - arrangedObjects.ffmpeg_out.output_bitrate - 2 - - - 2278 - - - - hidden: self.showPreview - - - - - - hidden: self.showPreview - hidden - self.showPreview - - NSValueTransformerName - NSNegateBoolean - - 2 - - - 3508 - - - - toggleFullscreen: - - - - 3821 - - - - selectedIndex: self.selectedTabIndex - - - - - - selectedIndex: self.selectedTabIndex - selectedIndex - self.selectedTabIndex - 2 - - - 3817 - - - - value: self.showPreview - - - - - - value: self.showPreview - value - self.showPreview - 2 - - - 3504 - - - - content: self.compressorTypes - - - - - - content: self.compressorTypes - content - self.compressorTypes - 2 - - - 3644 - - - - selectedObject: self.selectedCompressorType - - - - - - selectedObject: self.selectedCompressorType - selectedObject - self.selectedCompressorType - - 2 - - - 3646 - - - - hidden: self.videoCaptureSession.needsAdvancedVideo - - - - - - hidden: self.videoCaptureSession.needsAdvancedVideo - hidden - self.videoCaptureSession.needsAdvancedVideo - - NSValueTransformerName - NSNegateBoolean - - 2 - - - 3642 - - - - value: self.audioCaptureSession.previewVolume - - - - - - value: self.audioCaptureSession.previewVolume - value - self.audioCaptureSession.previewVolume - 2 - - - 3891 - - - - value: self.previewCtx.vsync - - - - - - value: self.previewCtx.vsync - value - self.previewCtx.vsync - 2 - - - 3879 - - - - value: arrangedObjects.ffmpeg_out.dropped_frame_count - - - - - - value: arrangedObjects.ffmpeg_out.dropped_frame_count - value - arrangedObjects.ffmpeg_out.dropped_frame_count - 2 - - - 3896 - - - - contentArray: self.arOptions - - - - - - contentArray: self.arOptions - contentArray - self.arOptions - 2 - - - 3900 - - - - content: self.arOptions - - - - - - content: self.arOptions - content - self.arOptions - 2 - - - 3917 - - - - selectedObject: self.resolutionOption - - - - - - selectedObject: self.resolutionOption - selectedObject - self.resolutionOption - - 2 - - - 3918 - - - - - - 0 - - - - - - -2 - - - File's Owner - - - -1 - - - First Responder - - - -3 - - - Application - - - 29 - - - - - - - - - - - - 19 - - - - - - - - 56 - - - - - - - - 217 - - - - - - - - 205 - - - - - - - - - - - - - - - - 202 - - - - - 198 - - - - - 207 - - - - - 199 - - - - - 203 - - - - - 197 - - - - - 206 - - - - - 215 - - - - - 57 - - - - - - - - - - - - - - - - - - 58 - - - - - 134 - - - - - 150 - - - - - 136 - - - - - 144 - - - - - 129 - - - - - 143 - - - - - 236 - - - - - 131 - - - - - - - - 149 - - - - - 145 - - - - - 130 - - - - - 24 - - - - - - - - - - - 92 - - - - - 5 - - - - - 239 - - - - - 23 - - - - - 295 - - - - - - - - 296 - - - - - - - - 371 - - - - - - - - 372 - - - - - 6 - 0 - - 6 - 1 - - 0.0 - - 1000 - - 8 - 29 - 3 - - - - 5 - 0 - - 5 - 1 - - 0.0 - - 1000 - - 8 - 29 - 3 - - - - 4 - 0 - - 4 - 1 - - 0.0 - - 1000 - - 8 - 29 - 3 - - - - 3 - 0 - - 3 - 1 - - 0.0 - - 1000 - - 8 - 29 - 3 - - - - - - - 420 - - - - - 485 - - - - - 490 - - - - - - - - 491 - - - - - - - - 492 - - - - - 494 - - - - - 548 - - - VideoDeviceArrayController - - - 555 - - - - - 816 - - - - - 896 - - - AudioDeviceArrayController - - - 1235 - - - - - 1431 - - - OutputDestinationArrayController - - - 1504 - - - destinationTypesController - - - 2102 - - - videoFormatArrayController - - - 2109 - - - videoFrameratesArrayController - - - 2368 - - - - - - - - - 2369 - - - - - - 5 - 0 - - 5 - 1 - - -33 - - 1000 - - 3 - 9 - 3 - - - - 6 - 0 - - 6 - 1 - - -178 - - 1000 - - 3 - 9 - 3 - - - - 4 - 0 - - 4 - 1 - - -154 - - 1000 - - 3 - 9 - 3 - - - - 3 - 0 - - 3 - 1 - - -197 - - 1000 - - 3 - 9 - 3 - - - - - - 2379 - - - - - 2381 - - - - - 2383 - - - - - 2411 - - - - - 5 - 0 - - 5 - 1 - - 277 - - 1000 - - 3 - 9 - 3 - - - - 4 - 0 - - 4 - 1 - - 166 - - 1000 - - 3 - 9 - 3 - - - - 11 - 0 - - 11 - 1 - - 0.0 - - 1000 - - 6 - 24 - 2 - - - - 5 - 0 - - 6 - 1 - - 8 - - 1000 - - 6 - 24 - 3 - - - - 11 - 0 - - 11 - 1 - - 0.0 - - 1000 - - 6 - 24 - 2 - - - - 3 - 0 - - 4 - 1 - - 8 - - 1000 - - 6 - 24 - 3 - - - - 5 - 0 - - 5 - 1 - - 43 - - 1000 - - 3 - 9 - 3 - - - - 3 - 0 - - 3 - 1 - - 200 - - 1000 - - 3 - 9 - 3 - - - - 6 - 0 - - 6 - 1 - - 183 - - 1000 - - 3 - 9 - 3 - - - - 5 - 0 - - 5 - 1 - - 31 - - 1000 - - 3 - 9 - 3 - - - - - - - - - - 2418 - - - - - 2419 - - - - - 2420 - - - - - 2417 - - - - - 2370 - - - - - 9 - 0 - - 9 - 1 - - 0.0 - - 1000 - - 6 - 24 - 2 - - - - 4 - 0 - - 4 - 1 - - 14 - - 1000 - - 3 - 9 - 3 - - - - 3 - 0 - - 4 - 1 - - 10 - - 1000 - - 6 - 24 - 3 - - - - 3 - 0 - - 3 - 1 - - 20 - - 1000 - - 8 - 29 - 3 - - - - 5 - 0 - - 5 - 1 - - 20 - - 1000 - - 8 - 29 - 3 - - - - 6 - 0 - - 6 - 1 - - 20 - - 1000 - - 8 - 29 - 3 - - - - - - - - 3218 - - - - - 3286 - - - - - - - - - 3287 - - - - - - - - 3288 - - - - - - - - 3289 - - - - - - 6 - 0 - - 6 - 1 - - -183 - - 1000 - - 3 - 9 - 3 - - - - 4 - 0 - - 4 - 1 - - 16 - - 1000 - - 3 - 9 - 3 - - - - 5 - 0 - - 5 - 1 - - 17 - - 1000 - - 8 - 29 - 3 - - - - 3 - 0 - - 3 - 1 - - -2 - - 1000 - - 3 - 9 - 3 - - - - - - 3290 - - - - - 5 - 0 - - 6 - 1 - - 12 - - 1000 - - 6 - 24 - 3 - - - - 5 - 0 - - 6 - 1 - - 8 - - 1000 - - 6 - 24 - 3 - - - - 11 - 0 - - 11 - 1 - - 0.0 - - 1000 - - 6 - 24 - 2 - - - - 10 - 0 - - 10 - 1 - - 0.0 - - 1000 - - 6 - 24 - 2 - - - - 3 - 0 - - 3 - 1 - - 49 - - 1000 - - 3 - 9 - 3 - - - - 6 - 0 - - 6 - 1 - - 17 - - 1000 - - 8 - 29 - 3 - - - - 5 - 0 - - 5 - 1 - - 0.0 - - 1000 - - 6 - 24 - 2 - - - - 3 - 0 - - 3 - 1 - - 0.0 - - 1000 - - 6 - 24 - 2 - - - - 5 - 0 - - 5 - 1 - - 373 - - 1000 - - 3 - 9 - 3 - - - - 11 - 0 - - 11 - 1 - - 0.0 - - 1000 - - 6 - 24 - 2 - - - - 10 - 0 - - 10 - 1 - - 0.0 - - 1000 - - 6 - 24 - 2 - - - - 6 - 0 - - 6 - 1 - - 0.0 - - 1000 - - 6 - 24 - 2 - - - - 5 - 0 - - 5 - 1 - - 239 - - 1000 - - 3 - 9 - 3 - - - - 4 - 0 - - 4 - 1 - - 0.0 - - 1000 - - 6 - 24 - 2 - - - - 5 - 0 - - 6 - 1 - - 8 - - 1000 - - 6 - 24 - 3 - - - - 3 - 0 - - 4 - 1 - - 8 - - 1000 - - 6 - 24 - 3 - - - - 5 - 0 - - 5 - 1 - - 17 - - 1000 - - 8 - 29 - 3 - - - - 5 - 0 - - 5 - 1 - - 0.0 - - 1000 - - 6 - 24 - 2 - - - - 6 - 0 - - 6 - 1 - - 0.0 - - 1000 - - 6 - 24 - 2 - - - - 4 - 0 - - 4 - 1 - - 0.0 - - 1000 - - 6 - 24 - 2 - - - - 3 - 0 - - 4 - 1 - - 8 - - 1000 - - 6 - 24 - 3 - - - - 5 - 0 - - 5 - 1 - - 17 - - 1000 - - 8 - 29 - 3 - - - - 3 - 0 - - 3 - 1 - - 0.0 - - 1000 - - 6 - 24 - 2 - - - - 11 - 0 - - 11 - 1 - - 0.0 - - 1000 - - 6 - 24 - 2 - - - - 5 - 0 - - 5 - 1 - - 0.0 - - 1000 - - 6 - 24 - 2 - - - - 10 - 0 - - 10 - 1 - - 0.0 - - 1000 - - 6 - 24 - 2 - - - - 5 - 0 - - 5 - 1 - - 165 - - 1000 - - 3 - 9 - 3 - - - - 6 - 0 - - 6 - 1 - - 0.0 - - 1000 - - 6 - 24 - 2 - - - - 5 - 0 - - 5 - 1 - - 192 - - 1000 - - 3 - 9 - 3 - - - - 5 - 0 - - 5 - 1 - - 0.0 - - 1000 - - 6 - 24 - 2 - - - - 3 - 0 - - 4 - 1 - - 8 - - 1000 - - 6 - 24 - 3 - - - - 11 - 0 - - 11 - 1 - - 0.0 - - 1000 - - 6 - 24 - 2 - - - - 11 - 0 - - 11 - 1 - - 0.0 - - 1000 - - 6 - 24 - 2 - - - - 5 - 0 - - 6 - 1 - - 8 - - 1000 - - 6 - 24 - 3 - - - - 3 - 0 - - 4 - 1 - - 8 - - 1000 - - 6 - 24 - 3 - - - - 3 - 0 - - 4 - 1 - - 8 - - 1000 - - 6 - 24 - 3 - - - - 5 - 0 - - 5 - 1 - - 17 - - 1000 - - 8 - 29 - 3 - - - - 5 - 0 - - 5 - 1 - - 0.0 - - 1000 - - 6 - 24 - 2 - - - - 11 - 0 - - 11 - 1 - - 0.0 - - 1000 - - 6 - 24 - 2 - - - - 5 - 0 - - 5 - 1 - - 0.0 - - 1000 - - 6 - 24 - 2 - - - - 3 - 0 - - 4 - 1 - - 8 - - 1000 - - 6 - 24 - 3 - - - - 3 - 0 - - 3 - 1 - - 158 - - 1000 - - 3 - 9 - 3 - - - - 5 - 0 - - 5 - 1 - - 17 - - 1000 - - 8 - 29 - 3 - - - - 5 - 0 - - 5 - 1 - - 0.0 - - 1000 - - 6 - 24 - 2 - - - - 6 - 0 - - 6 - 1 - - 0.0 - - 1000 - - 6 - 24 - 2 - - - - 3 - 0 - - 3 - 1 - - 105 - - 1000 - - 3 - 9 - 3 - - - - 11 - 0 - - 11 - 1 - - 0.0 - - 1000 - - 6 - 24 - 2 - - - - 5 - 0 - - 5 - 1 - - 17 - - 1000 - - 8 - 29 - 3 - - - - 5 - 0 - - 5 - 1 - - 0.0 - - 1000 - - 6 - 24 - 2 - - - - 3 - 0 - - 3 - 1 - - 78 - - 1000 - - 3 - 9 - 3 - - - - 3 - 0 - - 4 - 1 - - 8 - - 1000 - - 6 - 24 - 3 - - - - 5 - 0 - - 5 - 1 - - 0.0 - - 1000 - - 6 - 24 - 2 - - - - 10 - 0 - - 10 - 1 - - 0.0 - - 1000 - - 6 - 24 - 2 - - - - 11 - 0 - - 11 - 1 - - 0.0 - - 1000 - - 6 - 24 - 2 - - - - 5 - 0 - - 5 - 1 - - 17 - - 1000 - - 8 - 29 - 3 - - - - 6 - 0 - - 6 - 1 - - 0.0 - - 1000 - - 6 - 24 - 2 - - - - 5 - 0 - - 5 - 1 - - 0.0 - - 1000 - - 6 - 24 - 2 - - - - 5 - 0 - - 5 - 1 - - 99 - - 1000 - - 3 - 9 - 3 - - - - 11 - 0 - - 11 - 1 - - 0.0 - - 1000 - - 6 - 24 - 2 - - - - 5 - 0 - - 5 - 1 - - 17 - - 1000 - - 8 - 29 - 3 - - - - 3 - 0 - - 3 - 1 - - 50 - - 1000 - - 3 - 9 - 3 - - - - 5 - 0 - - 5 - 1 - - 17 - - 1000 - - 8 - 29 - 3 - - - - 3 - 0 - - 4 - 1 - - 8 - - 1000 - - 6 - 24 - 3 - - - - 3 - 0 - - 4 - 1 - - 8 - - 1000 - - 6 - 24 - 3 - - - - 11 - 0 - - 11 - 1 - - 0.0 - - 1000 - - 6 - 24 - 2 - - - - 5 - 0 - - 5 - 1 - - 17 - - 1000 - - 8 - 29 - 3 - - - - 6 - 0 - - 6 - 1 - - 0.0 - - 1000 - - 6 - 24 - 2 - - - - 5 - 0 - - 5 - 1 - - 0.0 - - 1000 - - 6 - 24 - 2 - - - - 3 - 0 - - 3 - 1 - - 3 - - 1000 - - 8 - 29 - 3 - - - - 5 - 0 - - 5 - 1 - - 17 - - 1000 - - 8 - 29 - 3 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 536 - - - - - - 7 - 0 - - 0 - 1 - - 140 - - 1000 - - 3 - 9 - 1 - - - - - - 537 - - - - - - - - 710 - - - - - 538 - - - - - - - - - - 539 - - - - - 540 - - - - - 541 - - - - - 613 - - - - - - 8 - 0 - - 0 - 1 - - 26 - - 1000 - - 3 - 9 - 1 - - - - 7 - 0 - - 0 - 1 - - 49 - - 1000 - - 3 - 9 - 1 - - - - - - 614 - - - - - 738 - - - - - 648 - - - - - - - - 649 - - - - - 620 - - - - - - 7 - 0 - - 0 - 1 - - 46 - - 1000 - - 3 - 9 - 1 - - - - - - 621 - - - - - - - - 2665 - - - - - 811 - - - - - 625 - - - - - - 7 - 0 - - 0 - 1 - - 47 - - 1000 - - 3 - 9 - 1 - - - - - - 626 - - - - - - - - 724 - - - - - 812 - - - - - 639 - - - - - - - - 640 - - - - - 1055 - - - - - - 7 - 0 - - 0 - 1 - - 26 - - 1000 - - 3 - 9 - 1 - - - - 8 - 0 - - 0 - 1 - - 17 - - 1000 - - 3 - 9 - 1 - - - - - - 1056 - - - - - 1774 - - - - - - 7 - 0 - - 0 - 1 - - 94 - - 1000 - - 3 - 9 - 1 - - - - - - 1775 - - - - - - - - 1776 - - - - - - - - - - 1777 - - - - - 1778 - - - - - 1779 - - - - - 1784 - - - - - - 8 - 0 - - 0 - 1 - - 17 - - 1000 - - 3 - 9 - 1 - - - - - - 1785 - - - - - 1987 - - - - - - - - 1988 - - - - - 2587 - - - - - - - - 2588 - - - - - 2597 - - - - - - - - 2598 - - - - - 951 - - - - - - - - 952 - - - - - - - - 953 - - - - - 899 - - - - - - 7 - 0 - - 0 - 1 - - 129 - - 1000 - - 3 - 9 - 1 - - - - - - 900 - - - - - - - - 928 - - - - - 901 - - - - - - - - - - 902 - - - - - 903 - - - - - 904 - - - - - 919 - - - - - - - - 920 - - - - - 1098 - - - - - - 7 - 0 - - 0 - 1 - - 96 - - 1000 - - 3 - 9 - 1 - - - - - - 1099 - - - - - - - - 1101 - - - - - 1100 - - - - - 1104 - - - - - - - - 1105 - - - - - 1108 - - - - - - 7 - 0 - - 0 - 1 - - 75 - - 1000 - - 3 - 9 - 1 - - - - - - 1109 - - - - - 2593 - - - - - 1112 - - - - - - - - 1113 - - - - - - - - 1114 - - - - - 1239 - - - - - - - - - - - 1240 - - - - - - - - - - - 1241 - - - - - 1242 - - - - - 1243 - - - - - 1244 - - - - - - - - 1245 - - - - - - - - 1290 - - - - - - - - 1910 - - - - - - - - 1911 - - - - - 1291 - - - - - 1246 - - - - - 1922 - - - - - 1744 - - - - - - - - 1745 - - - - - 1471 - - - - - - 7 - 0 - - 0 - 1 - - 94 - - 1000 - - 3 - 9 - 1 - - - - - - 1472 - - - - - - - - 1479 - - - - - 1473 - - - - - - - - - - 1474 - - - - - 1475 - - - - - 1476 - - - - - 1499 - - - - - - - - 1500 - - - - - 3315 - - - - - 3323 - - - - - 3330 - - - - - 3332 - - - - - 3349 - - - - - 3356 - - - - - 3357 - - - - - 3362 - - - - - 3366 - - - - - 597 - - - - - 7 - 0 - - 0 - 1 - - 70 - - 1000 - - 3 - 9 - 1 - - - - - - - 603 - - - - - 598 - - - - - 3383 - - - - - 3405 - - - - - 3406 - - - - - 3457 - - - - - 2212 - - - - - - - - - - - 2213 - - - - - - - - - - - - - - 2214 - - - - - 2216 - - - - - 2261 - - - - - 2217 - - - - - - - - 2218 - - - - - - - - 2255 - - - - - - - - 2257 - - - - - - - - 2259 - - - - - - - - 2275 - - - - - - - - 2276 - - - - - - - - 2260 - - - - - 2258 - - - - - 2256 - - - - - - - - 2219 - - - - - - - - 2220 - - - - - 3463 - - - - - 3492 - - - - - 3495 - - - - - - - - 3496 - - - - - 3499 - - - - - 3525 - - - - - 3526 - - - - - 3533 - - - - - 3553 - - - - - - 8 - 0 - - 0 - 1 - - 17 - - 1000 - - 3 - 9 - 1 - - - - - - 3554 - - - - - 3558 - - - - - 3559 - - - - - - - - 3561 - - - - - - - - 3562 - - - - - - - - - - 3563 - - - - - 3564 - - - - - 3565 - - - - - 3602 - - - - - - - - 3605 - - - - - 3613 - - - - - - 7 - 0 - - 0 - 1 - - 26 - - 1000 - - 3 - 9 - 1 - - - - - - 3614 - - - - - 3615 - - - - - 3618 - - - - - 3619 - - - - - 3623 - - - - - 3630 - - - - - 3303 - - - - - 3382 - - - - - 3304 - - - - - 3305 - - - - - 3648 - - - - - 3652 - - - - - 3653 - - - - - 3656 - - - - - 3657 - - - - - 3658 - - - - - 3675 - - - - - 3677 - - - - - 3692 - - - - - 3700 - - - - - 3702 - - - - - 3711 - - - - - 3714 - - - - - 3715 - - - - - 3716 - - - - - 3724 - - - - - 3727 - - - - - 3730 - - - - - 3731 - - - - - 3733 - - - - - 3735 - - - - - 3736 - - - - - 3748 - - - - - 3749 - - - - - 3755 - - - - - 3758 - - - - - 3759 - - - - - 3761 - - - - - 3762 - - - - - 3765 - - - - - 3767 - - - - - 3768 - - - - - 3769 - - - - - 3770 - - - - - 3771 - - - - - 3774 - - - - - 3775 - - - - - 3776 - - - - - 3779 - - - - - 3783 - - - - - 3785 - - - - - 3788 - - - - - 3795 - - - - - 3796 - - - - - 3797 - - - - - 3798 - - - - - 3799 - - - - - 3800 - - - - - 3802 - - - - - 3804 - - - - - 3806 - - - - - 3807 - - - - - 3809 - - - - - 3810 - - - - - 3811 - - - - - 3812 - - - - - 3814 - - - - - 3818 - - - - - 3819 - - - - - 2416 - - - - - 3500 - - - - - 2451 - - - - - 2448 - - - - - 3870 - - - - - 3871 - - - - - 3873 - - - - - 3874 - - - - - - - - 3875 - - - - - 3876 - - - - - 3877 - - - - - 3861 - - - - - - 7 - 0 - - 0 - 1 - - 92 - - 1000 - - 3 - 9 - 1 - - - - - - 3865 - - - - - 3862 - - - - - 3707 - - - - - 2449 - - - - - 3888 - - - - - 3889 - - - - - 3890 - - - - - 3893 - - - - - - - - 3894 - - - - - 3897 - - - AspectOptionsController - - - 3901 - - - - - - 7 - 0 - - 0 - 1 - - 95 - - 1000 - - 3 - 9 - 1 - - - - - - 3902 - - - - - - - - 3903 - - - - - - - - - - 3904 - - - - - 3905 - - - - - 3906 - - - - - 3907 - - - - - 3908 - - - - - 3909 - - - - - - - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - - - - - - com.apple.InterfaceBuilder.CocoaPlugin - - - - - - com.apple.InterfaceBuilder.CocoaPlugin - - - - - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - - - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - - - - - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - - - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - - - - - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - - - - - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - - - - - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - - com.apple.InterfaceBuilder.CocoaPlugin - - - - - - - com.apple.InterfaceBuilder.CocoaPlugin - - - - - - - - - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - - - - - - - - - - - - - - com.apple.InterfaceBuilder.CocoaPlugin - - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - - InitialTabViewItem - - InitialTabViewItem - - - - - - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - - - - - - - com.apple.InterfaceBuilder.CocoaPlugin - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - com.apple.InterfaceBuilder.CocoaPlugin - - - - - - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - - - - - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - - com.apple.InterfaceBuilder.CocoaPlugin - - - - - - com.apple.InterfaceBuilder.CocoaPlugin - - - - - com.apple.InterfaceBuilder.CocoaPlugin - - - - - - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - {{380, 496}, {480, 360}} - - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - - - - - - - com.apple.InterfaceBuilder.CocoaPlugin - - - - - - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - - - - - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - - - com.apple.InterfaceBuilder.CocoaPlugin - - - com.apple.InterfaceBuilder.CocoaPlugin - - - com.apple.InterfaceBuilder.CocoaPlugin - - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - - - - - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - - - - - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - - - - - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - - - - - - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - - - - - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - - - - - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - - com.apple.InterfaceBuilder.CocoaPlugin - - - - - - com.apple.InterfaceBuilder.CocoaPlugin - - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - - - com.apple.InterfaceBuilder.CocoaPlugin - - - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - - - - - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - - - com.apple.InterfaceBuilder.CocoaPlugin - - - - - - 3918 - - - - - AppDelegate - NSObject - - CaptureController - NSWindow - - - - captureController - CaptureController - - - window - NSWindow - - - - IBProjectSource - ./Classes/AppDelegate.h - - - - CaptureController - NSObject - - id - id - id - id - id - id - id - id - id - id - id - id - id - - - - addStreamingService: - id - - - closeAVFAdvanced: - id - - - closeAdvancedPrefPanel: - id - - - closeCompressPanel: - id - - - closeCreateSheet: - id - - - ffmpegPathPushed: - id - - - openAVFAdvanced: - id - - - openAdvancedPrefPanel: - id - - - openCompressPanel: - id - - - openCreateSheet: - id - - - removeDestination: - id - - - streamButtonPushed: - id - - - videoRefresh: - id - - - - NSWindow - NSWindow - NSWindow - NSWindow - PreviewView - - - - advancedPrefPanel - NSWindow - - - avfPanel - NSWindow - - - compressPanel - NSWindow - - - createSheet - NSWindow - - - previewCtx - PreviewView - - - - IBProjectSource - ./Classes/CaptureController.h - - - - NSLayoutConstraint - NSObject - - IBProjectSource - ./Classes/NSLayoutConstraint.h - - - - PreviewView - NSOpenGLView - - toggleFullscreen: - id - - - toggleFullscreen: - - toggleFullscreen: - id - - - - IBProjectSource - ./Classes/PreviewView.h - - - - - 0 - IBCocoaFramework - YES - 3 - - {32, 32} - {11, 11} - {10, 3} - {10, 12} - {15, 15} - - YES - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + NSNegateBoolean + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + name + type_name + destination + active + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/QTCaptureHelper/QTCaptureHelper-Info.plist b/QTCaptureHelper/QTCaptureHelper-Info.plist index 9dc45c8c..b96d3b18 100644 --- a/QTCaptureHelper/QTCaptureHelper-Info.plist +++ b/QTCaptureHelper/QTCaptureHelper-Info.plist @@ -26,6 +26,8 @@ XPCService + ProcessType + Adaptive RunLoopType NSRunLoop ServiceType diff --git a/QTCaptureHelper/XPCListenerDelegate.h b/QTCaptureHelper/XPCListenerDelegate.h index 13aee41a..db9f3495 100644 --- a/QTCaptureHelper/XPCListenerDelegate.h +++ b/QTCaptureHelper/XPCListenerDelegate.h @@ -19,6 +19,8 @@ QTCaptureDecompressedVideoOutput *captureOutput; id xpcProxy; dispatch_queue_t frameQueue; + CVImageBufferRef _currentFrame; + } diff --git a/QTCaptureHelper/XPCListenerDelegate.m b/QTCaptureHelper/XPCListenerDelegate.m index c19ec542..97a76f96 100644 --- a/QTCaptureHelper/XPCListenerDelegate.m +++ b/QTCaptureHelper/XPCListenerDelegate.m @@ -31,6 +31,7 @@ - (void) dealloc { + NSLog(@"HOLY SHIT DEALLOC"); if (self.xpcProxy) { [self.xpcProxy release]; @@ -45,6 +46,7 @@ - (BOOL) listener:(NSXPCListener *)listener shouldAcceptNewConnection:(NSXPCConnection *)newConnection { + NSLog(@"SHOULD ACCEPT NEW CONNECTION\n"); NSXPCInterface *helperInterface = [[NSXPCInterface interfaceWithProtocol:@protocol(QTHelperProtocol)] retain]; NSXPCInterface *masterInterface = [[NSXPCInterface interfaceWithProtocol:@protocol(CapturedFrameProtocol)] retain]; @@ -66,6 +68,7 @@ - (void) listCaptureDevices:(void (^)(NSArray *r_devices))reply { + NSArray *devices = [QTCaptureDevice inputDevicesWithMediaType:QTMediaTypeVideo]; NSLog(@"DEVICES IN HELPER %@", devices); @@ -79,7 +82,7 @@ } - [devices release]; + reply((NSArray *)retArray); [retArray release]; } @@ -141,7 +144,7 @@ NSMutableDictionary *pbAttrs = [NSMutableDictionary dictionaryWithObject:ioAttrs forKey: (NSString*)kCVPixelBufferIOSurfacePropertiesKey]; - [pbAttrs setObject: @[@(kCVPixelFormatType_422YpCbCr8), @(kCVPixelFormatType_420YpCbCr8BiPlanarVideoRange), @(kCVPixelFormatType_420YpCbCr8BiPlanarFullRange)] + [pbAttrs setObject: @[@(kCVPixelFormatType_422YpCbCr8), @(kCVPixelFormatType_420YpCbCr8BiPlanarVideoRange), @(kCVPixelFormatType_420YpCbCr8BiPlanarFullRange)] forKey:(NSString *)kCVPixelBufferPixelFormatTypeKey]; [self.captureOutput setPixelBufferAttributes:pbAttrs]; @@ -177,7 +180,10 @@ - (void)captureOutput:(QTCaptureOutput *)captureOutput didOutputVideoFrame:(CVImageBufferRef)videoFrame withSampleBuffer:(QTSampleBuffer *)sampleBuffer fromConnection:(QTCaptureConnection *)connection { + CVPixelBufferRetain(videoFrame); + + dispatch_async(frameQueue, ^{ [self sendFrame:videoFrame]; }); diff --git a/StreamServicePanel.xib b/StreamServicePanel.xib index 8ee83766..51b912d3 100644 --- a/StreamServicePanel.xib +++ b/StreamServicePanel.xib @@ -1,1167 +1,146 @@ - - - - 1080 - 12C54 - 2840 - 1187.34 - 625.00 - - com.apple.InterfaceBuilder.CocoaPlugin - 2840 - - - IBNSLayoutConstraint - NSArrayController - NSButton - NSButtonCell - NSCustomObject - NSMenu - NSMenuItem - NSPopUpButton - NSPopUpButtonCell - NSTextField - NSTextFieldCell - NSUserDefaultsController - NSView - NSWindowTemplate - - - com.apple.InterfaceBuilder.CocoaPlugin - - - PluginDependencyRecalculationVersion - - - - - CaptureController - - - FirstResponder - - - NSApplication - - - 15 - 2 - {{196, 240}, {333, 186}} - 544735232 - Window - NSWindow - - - - - 256 - - - - 268 - {{14, 13}, {66, 32}} - - - - _NS:9 - YES - - 67108864 - 134217728 - Add - - LucidaGrande - 13 - 1044 - - _NS:9 - - -2038284288 - 129 - - - 200 - 25 - - NO - - - - 268 - {{80, 13}, {82, 32}} - - - - _NS:9 - YES - - 67108864 - 134217728 - Cancel - - _NS:9 - - -2038284288 - 129 - - Gw - 200 - 25 - - NO - - - - 268 - {{17, 149}, {43, 17}} - - - - _NS:1535 - YES - - 68157504 - 272630784 - Server - - _NS:1535 - - - 6 - System - controlColor - - 3 - MC42NjY2NjY2NjY3AA - - - - 6 - System - controlTextColor - - 3 - MAA - - - - NO - - - - 268 - {{17, 111}, {27, 17}} - - - - _NS:1535 - YES - - 68157504 - 272630784 - Key - - _NS:1535 - - - - - NO - - - - 268 - {{75, 108}, {183, 22}} - - - - _NS:9 - YES - - -1804599231 - 272630784 - - - _NS:9 - - YES - - 6 - System - textBackgroundColor - - 3 - MQA - - - - 6 - System - textColor - - - - NO - - - - 268 - {{71, 142}, {190, 26}} - - - - _NS:9 - YES - - -2076180416 - 2048 - - _NS:9 - - 109199360 - 129 - - - 400 - 75 - - - Item 1 - - 1048576 - 2147483647 - 1 - - NSImage - NSMenuCheckmark - - - NSImage - NSMenuMixedState - - _popUpItemAction: - - - YES - - OtherViews - - - - - Item 2 - - 1048576 - 2147483647 - - - _popUpItemAction: - - - - - Item 3 - - 1048576 - 2147483647 - - - _popUpItemAction: - - - - - - 1 - YES - YES - 2 - - NO - - - {333, 186} - - - - - {{0, 0}, {1920, 1178}} - {10000000000000, 10000000000000} - YES - - - - 268 - {100, 26} - - _NS:9 - YES - - -2076180416 - 2048 - - _NS:9 - - 109199360 - 129 - - - 400 - 75 - - - Item 1 - - 1048576 - 2147483647 - 1 - - - _popUpItemAction: - - - YES - - OtherViews - - - - - Item 2 - - 1048576 - 2147483647 - - - _popUpItemAction: - - - - - Item 3 - - 1048576 - 2147483647 - - - _popUpItemAction: - - - - - - 1 - YES - YES - 2 - - NO - - - YES - - YES - YES - YES - YES - YES - - - YES - - - - - - - createSheet - - - - 13 - - - - closeCreateSheet: - - - - 14 - - - - addStreamingService: - - - - 46 - - - - value: streamingServiceKey - - - - - - value: streamingServiceKey - value - streamingServiceKey - - NSContinuouslyUpdatesValue - - - 2 - - - 48 - - - - content: arrangedObjects - - - - - - content: arrangedObjects - content - arrangedObjects - 2 - - - 88 - - - - contentObjects: arrangedObjects.destination - - - - - - contentObjects: arrangedObjects.destination - contentObjects - arrangedObjects.destination - - 2 - - - 110 - - - - contentValues: arrangedObjects.name - - - - - - contentValues: arrangedObjects.name - contentValues - arrangedObjects.name - - 2 - - - 111 - - - - selectedObject: self.streamingDestination - - - - - - selectedObject: self.streamingDestination - selectedObject - self.streamingDestination - - 2 - - - 112 - - - - contentArray: self.streamPanelDestinations - - - - - - contentArray: self.streamPanelDestinations - contentArray - self.streamPanelDestinations - 2 - - - 87 - - - - - - 0 - - - - - - -2 - - - File's Owner - - - -1 - - - First Responder - - - -3 - - - Application - - - 1 - - - - - - - - 2 - - - - - - 5 - 0 - - 6 - 1 - - 12 - - 1000 - - 6 - 24 - 3 - - - - 4 - 0 - - 4 - 1 - - 20 - - 1000 - - 8 - 29 - 3 - - - - 5 - 0 - - 5 - 1 - - 20 - - 1000 - - 8 - 29 - 3 - - - - 4 - 0 - - 4 - 1 - - 20 - - 1000 - - 8 - 29 - 3 - - - - 9 - 0 - - 9 - 1 - - 0.0 - - 1000 - - 6 - 24 - 2 - - - - 10 - 0 - - 10 - 1 - - 0.0 - - 1000 - - 6 - 24 - 2 - - - - 3 - 0 - - 3 - 1 - - 56 - - 1000 - - 3 - 9 - 3 - - - - 9 - 0 - - 9 - 1 - - 0.0 - - 1000 - - 5 - 22 - 2 - - - - 6 - 0 - - 6 - 1 - - 0.0 - - 1000 - - 6 - 24 - 2 - - - - 3 - 0 - - 3 - 1 - - 20 - - 1000 - - 8 - 29 - 3 - - - - 5 - 0 - - 5 - 1 - - 20 - - 1000 - - 8 - 29 - 3 - - - - 5 - 0 - - 5 - 1 - - 20 - - 1000 - - 8 - 29 - 3 - - - - 3 - 0 - - 3 - 1 - - 20 - - 1000 - - 8 - 29 - 3 - - - - - - - - - - - 3 - - - - - - - - 4 - - - - - 5 - - - - - 6 - - - - - 7 - - - - - - - - 8 - - - - - 9 - - - - - 12 - - - - - 15 - - - - - - - - 16 - - - - - 17 - - - - - 19 - - - - - - - - 20 - - - - - 24 - - - - - 25 - - - - - 33 - - - - - - 7 - 0 - - 0 - 1 - - 183 - - 1000 - - 3 - 9 - 1 - - - - - - 34 - - - - - 62 - - - - - 63 - - - - - 64 - - - - - - - - 65 - - - - - - - - 66 - - - - - - - - - - 67 - - - - - 68 - - - - - 69 - - - - - 70 - - - - - 71 - - - - - - - - 72 - - - - - - - - 73 - - - - - - - - - - 74 - - - - - 75 - - - - - 76 - - - - - 79 - - - - - 80 - - - - - 81 - - - - - 82 - - - - - 83 - - - SteamDestinationsArrayController - - - 84 - - - - - - - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - {{357, 418}, {480, 270}} - - com.apple.InterfaceBuilder.CocoaPlugin - - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - - com.apple.InterfaceBuilder.CocoaPlugin - - - - - - - - - - - - - - - - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - - com.apple.InterfaceBuilder.CocoaPlugin - - - - - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - - - - - - 112 - - - - - CaptureController - NSObject - - id - id - id - id - id - id - - - - addStreamingService: - id - - - closeCreateSheet: - id - - - openCreateSheet: - id - - - removeDestination: - id - - - streamButtonPushed: - id - - - videoRefresh: - id - - - - NSWindow - PreviewView - - - - createSheet - NSWindow - - - previewCtx - PreviewView - - - - IBProjectSource - ./Classes/CaptureController.h - - - - NSLayoutConstraint - NSObject - - IBProjectSource - ./Classes/NSLayoutConstraint.h - - - - PreviewView - NSOpenGLView - - IBProjectSource - ./Classes/PreviewView.h - - - - - 0 - IBCocoaFramework - YES - 3 - - {11, 11} - {10, 3} - - YES - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file