Well, AVCaptureView is not very malleable.  I needed to use an 
AVCaptureVideoPreviewLayer, which needed quite a few more lines of code than 
the zero I reported yesterday :(  For the record, I have pasted in the working 
code below.

The only problem is that this silly warning prints to the console whenever my 
view loads:

CoreAnimation: Warning! CAImageQueueSetOwner() is deprecated and does nothing. 
Please stop calling this method.

I am doing no such thing.  This is built with the 10.10 SDK, running in 10.11.  
Can anyone explain?  Otherwise I’ll report as a bug in 10.11.

Jerry


*** Camera.h ***

@interface Camera : NSObject

+ (Camera*)sharedCamera ;

- (BOOL)startInView:(NSView*)view
            error_p:(NSError**)error_p ;

@end


*** Camera.m ***

#import <AVFoundation/AVFoundation.h>

static Camera* sharedCamera = nil ;

@interface Camera ()

@property AVCaptureSession* session ;

@end

@implementation Camera

+ (Camera*)sharedCamera {
    if (sharedCamera == nil) {
        sharedCamera = [[self alloc] init] ;
    }
    
    return sharedCamera ;
}

- (BOOL)startInView:(NSView*)view
            error_p:(NSError**)error_p {
    BOOL ok = NO ;
    NSError* error = nil ;
    
    AVCaptureDevice* device = nil ;
    for (device in [AVCaptureDevice devices]) {
        /* We want an external video camera.  Grab the first device which will
         do video and is not vended by Apple Inc.  This code could be improved
         if more properties of the intended camera were available. */
        if ([device hasMediaType:AVMediaTypeVideo]) {
            NSString* modelID = [device modelID] ;
            if ([modelID rangeOfString:@"VendorID_0x106B"].location == 
NSNotFound) {
                ok = YES ;
                break ;
            }
        }
    }
    
    if (!ok) {
        NSDictionary* info = @{
                               NSLocalizedDescriptionKey 
                                : NSLocalizedString(@"No external camera 
found", nil),
                               } ;
        error = [NSError errorWithDomain:kMyErrorDomain
                                    code:258740
                                userInfo:info] ;
    }
    
    AVCaptureDeviceInput* input = nil ;
    if (device) {
        input = [[AVCaptureDeviceInput alloc] initWithDevice:device
                                                       error:&error] ;
        if (!input) {
            ok = NO ;
        }
    }
    
    if (ok) {
        self.session = [[AVCaptureSession alloc] init] ;
        [self.session addInput:input] ;
        
        AVCaptureVideoPreviewLayer* layer ;
        layer = [AVCaptureVideoPreviewLayer layerWithSession:self.session] ;
        layer.contentsGravity = kCAGravityResizeAspectFill ;

        view.layer = layer ;
        [view setWantsLayer:YES] ;
        layer.contentsGravity = kCAGravityResizeAspectFill ;
        view.layerContentsRedrawPolicy = 
NSViewLayerContentsRedrawDuringViewResize ;
        view.layerContentsPlacement = NSViewLayerContentsPlacementCenter ;
        
        layer.frame = view.bounds ;

        [self.session startRunning] ;
    }
    
    
    if (error && error_p) {
        *error_p = error ;
    }
    
    return ok ;
}

@end


_______________________________________________

Cocoa-dev mailing list (Cocoa-dev@lists.apple.com)

Please do not post admin requests or moderator comments to the list.
Contact the moderators at cocoa-dev-admins(at)lists.apple.com

Help/Unsubscribe/Update your Subscription:
https://lists.apple.com/mailman/options/cocoa-dev/archive%40mail-archive.com

This email sent to arch...@mail-archive.com

Reply via email to