SlideShare a Scribd company logo
1 of 52
Download to read offline
Building Native Camera Access - Part III
#import <Foundation/Foundation.h>
@interface com_codename1_camerakit_impl_CameraNativeAccessImpl :
NSObject {
}
-(void)start;
-(void)stop;
-(void)setVideoBitRate:(int)param;
-(int)getPreviewWidth;
-(BOOL)isStarted;
-(void)setMethod:(int)param;
-(void*)getView;
-(void)setPermissions:(int)param;
-(int)getFacing;
-(void)setZoom:(float)param;
-(int)toggleFacing;
-(int)getCaptureWidth;
-(float)getHorizontalViewingAngle;
-(void)setJpegQuality:(int)param;
-(void)stopVideo;
-(BOOL)isFacingBack;
-(int)getFlash;
-(void)captureImage;
-(int)getPreviewHeight;
-(void)captureVideoFile:(NSString*)param;
-(void)setLockVideoAspectRatio:(BOOL)param;
-(void)setFocus:(int)param;
com_codename1_camerakit_impl_CameraNativeAccessImpl.h
#import <Foundation/Foundation.h>
@interface com_codename1_camerakit_impl_CameraNativeAccessImpl :
NSObject {
}
-(void)start;
-(void)stop;
-(void)setVideoBitRate:(int)param;
-(int)getPreviewWidth;
-(BOOL)isStarted;
-(void)setMethod:(int)param;
-(void*)getView;
-(void)setPermissions:(int)param;
-(int)getFacing;
-(void)setZoom:(float)param;
-(int)toggleFacing;
-(int)getCaptureWidth;
-(float)getHorizontalViewingAngle;
-(void)setJpegQuality:(int)param;
-(void)stopVideo;
-(BOOL)isFacingBack;
-(int)getFlash;
-(void)captureImage;
-(int)getPreviewHeight;
-(void)captureVideoFile:(NSString*)param;
-(void)setLockVideoAspectRatio:(BOOL)param;
-(void)setFocus:(int)param;
com_codename1_camerakit_impl_CameraNativeAccessImpl.h
#import <Foundation/Foundation.h>
@interface com_codename1_camerakit_impl_CameraNativeAccessImpl :
NSObject {
}
-(void)start;
-(void)stop;
-(void)setVideoBitRate:(int)param;
-(int)getPreviewWidth;
-(BOOL)isStarted;
-(void)setMethod:(int)param;
-(void*)getView;
-(void)setPermissions:(int)param;
-(int)getFacing;
-(void)setZoom:(float)param;
-(int)toggleFacing;
-(int)getCaptureWidth;
-(float)getHorizontalViewingAngle;
-(void)setJpegQuality:(int)param;
-(void)stopVideo;
-(BOOL)isFacingBack;
-(int)getFlash;
-(void)captureImage;
-(int)getPreviewHeight;
-(void)captureVideoFile:(NSString*)param;
-(void)setLockVideoAspectRatio:(BOOL)param;
-(void)setFocus:(int)param;
com_codename1_camerakit_impl_CameraNativeAccessImpl.h
#import <Foundation/Foundation.h>
@interface com_codename1_camerakit_impl_CameraNativeAccessImpl :
NSObject {
}
-(void)start;
-(void)stop;
-(void)setVideoBitRate:(int)param;
-(int)getPreviewWidth;
-(BOOL)isStarted;
-(void)setMethod:(int)param;
-(void*)getView;
-(void)setPermissions:(int)param;
-(int)getFacing;
-(void)setZoom:(float)param;
-(int)toggleFacing;
-(int)getCaptureWidth;
-(float)getHorizontalViewingAngle;
-(void)setJpegQuality:(int)param;
-(void)stopVideo;
-(BOOL)isFacingBack;
-(int)getFlash;
-(void)captureImage;
-(int)getPreviewHeight;
-(void)captureVideoFile:(NSString*)param;
-(void)setLockVideoAspectRatio:(BOOL)param;
-(void)setFocus:(int)param;
com_codename1_camerakit_impl_CameraNativeAccessImpl.h
#import "com_codename1_camerakit_impl_CameraNativeAccessImpl.h"
@implementation com_codename1_camerakit_impl_CameraNativeAccessImpl
-(void)start{}
-(void)stop{}
-(void)setVideoBitRate:(int)param{}
-(int)getPreviewWidth{
return 0;
}
-(BOOL)isStarted{
return NO;
}
-(void)setMethod:(int)param{}
-(void*)getView{
return nil;
}
-(void)setPermissions:(int)param{}
-(int)getFacing{
return 0;
}
-(void)setZoom:(float)param{}
-(int)toggleFacing{
return 0;
}
com_codename1_camerakit_impl_CameraNativeAccessImpl.m
#import "com_codename1_camerakit_impl_CameraNativeAccessImpl.h"
@implementation com_codename1_camerakit_impl_CameraNativeAccessImpl
-(void)start{}
-(void)stop{}
-(void)setVideoBitRate:(int)param{}
-(int)getPreviewWidth{
return 0;
}
-(BOOL)isStarted{
return NO;
}
-(void)setMethod:(int)param{}
-(void*)getView{
return nil;
}
-(void)setPermissions:(int)param{}
-(int)getFacing{
return 0;
}
-(void)setZoom:(float)param{}
-(int)toggleFacing{
return 0;
}
com_codename1_camerakit_impl_CameraNativeAccessImpl.m
#import "com_codename1_camerakit_impl_CameraNativeAccessImpl.h"
@implementation com_codename1_camerakit_impl_CameraNativeAccessImpl
-(void)start{}
-(void)stop{}
-(void)setVideoBitRate:(int)param{}
-(int)getPreviewWidth{
return 0;
}
-(BOOL)isStarted{
return NO;
}
-(void)setMethod:(int)param{}
-(void*)getView{
return nil;
}
-(void)setPermissions:(int)param{}
-(int)getFacing{
return 0;
}
-(void)setZoom:(float)param{}
-(int)toggleFacing{
return 0;
}
com_codename1_camerakit_impl_CameraNativeAccessImpl.m
#import "com_codename1_camerakit_impl_CameraNativeAccessImpl.h"
@implementation com_codename1_camerakit_impl_CameraNativeAccessImpl
-(void)start{}
-(void)stop{}
-(void)setVideoBitRate:(int)param{}
-(int)getPreviewWidth{
return 0;
}
-(BOOL)isStarted{
return NO;
}
-(void)setMethod:(int)param{}
-(void*)getView{
return nil;
}
-(void)setPermissions:(int)param{}
-(int)getFacing{
return 0;
}
-(void)setZoom:(float)param{}
-(int)toggleFacing{
return 0;
}
com_codename1_camerakit_impl_CameraNativeAccessImpl.m
#import "com_codename1_camerakit_impl_CameraNativeAccessImpl.h"
@implementation com_codename1_camerakit_impl_CameraNativeAccessImpl
-(void)start{}
-(void)stop{}
-(void)setVideoBitRate:(int)param{}
-(int)getPreviewWidth{
return 0;
}
-(BOOL)isStarted{
return NO;
}
-(void)setMethod:(int)param{}
-(void*)getView{
return nil;
}
-(void)setPermissions:(int)param{}
-(int)getFacing{
return 0;
}
-(void)setZoom:(float)param{}
-(int)toggleFacing{
return 0;
}
com_codename1_camerakit_impl_CameraNativeAccessImpl.m
#import <AVFoundation/AVFoundation.h>
const int FACING_BACK = 0;
const int FACING_FRONT = 1;
const int FLASH_OFF = 0;
const int FLASH_ON = 1;
const int FLASH_AUTO = 2;
const int FLASH_TORCH = 3;
const int FOCUS_OFF = 0;
const int FOCUS_CONTINUOUS = 1;
const int FOCUS_TAP = 2;
const int FOCUS_TAP_WITH_MARKER = 3;
const int METHOD_STANDARD = 0;
const int METHOD_STILL = 1;
const int VIDEO_QUALITY_480P = 0;
const int VIDEO_QUALITY_720P = 1;
const int VIDEO_QUALITY_1080P = 2;
const int VIDEO_QUALITY_2160P = 3;
const int VIDEO_QUALITY_HIGHEST = 4;
const int VIDEO_QUALITY_LOWEST = 5;
const int VIDEO_QUALITY_QVGA = 6;
com_codename1_camerakit_impl_CameraNativeAccessImpl.h
BOOL firstTimeCameraKitLaunch = YES;
@implementation com_codename1_camerakit_impl_CameraNativeAccessImpl
-(void)start{
if(firstTimeCameraKitLaunch) {
direction = FACING_BACK;
flash = FLASH_OFF;
focus = FOCUS_CONTINUOUS;
method = METHOD_STANDARD;
videoQuality = VIDEO_QUALITY_480P;
previewLayer = nil;
device = nil;
photoOutput = nil;
captureSession = nil;
stillImageOutput = nil;
firstTimeCameraKitLaunch = NO;
zoom = 1;
[self lazyInit];
} else {
dispatch_sync(dispatch_get_main_queue(), ^{
[captureSession startRunning];
});
}
}
com_codename1_camerakit_impl_CameraNativeAccessImpl.m
BOOL firstTimeCameraKitLaunch = YES;
@implementation com_codename1_camerakit_impl_CameraNativeAccessImpl
-(void)start{
if(firstTimeCameraKitLaunch) {
direction = FACING_BACK;
flash = FLASH_OFF;
focus = FOCUS_CONTINUOUS;
method = METHOD_STANDARD;
videoQuality = VIDEO_QUALITY_480P;
previewLayer = nil;
device = nil;
photoOutput = nil;
captureSession = nil;
stillImageOutput = nil;
firstTimeCameraKitLaunch = NO;
zoom = 1;
[self lazyInit];
} else {
dispatch_sync(dispatch_get_main_queue(), ^{
[captureSession startRunning];
});
}
}
com_codename1_camerakit_impl_CameraNativeAccessImpl.m
BOOL firstTimeCameraKitLaunch = YES;
@implementation com_codename1_camerakit_impl_CameraNativeAccessImpl
-(void)start{
if(firstTimeCameraKitLaunch) {
direction = FACING_BACK;
flash = FLASH_OFF;
focus = FOCUS_CONTINUOUS;
method = METHOD_STANDARD;
videoQuality = VIDEO_QUALITY_480P;
previewLayer = nil;
device = nil;
photoOutput = nil;
captureSession = nil;
stillImageOutput = nil;
firstTimeCameraKitLaunch = NO;
zoom = 1;
[self lazyInit];
} else {
dispatch_sync(dispatch_get_main_queue(), ^{
[captureSession startRunning];
});
}
}
com_codename1_camerakit_impl_CameraNativeAccessImpl.m
BOOL firstTimeCameraKitLaunch = YES;
@implementation com_codename1_camerakit_impl_CameraNativeAccessImpl
-(void)start{
if(firstTimeCameraKitLaunch) {
direction = FACING_BACK;
flash = FLASH_OFF;
focus = FOCUS_CONTINUOUS;
method = METHOD_STANDARD;
videoQuality = VIDEO_QUALITY_480P;
previewLayer = nil;
device = nil;
photoOutput = nil;
captureSession = nil;
stillImageOutput = nil;
firstTimeCameraKitLaunch = NO;
zoom = 1;
[self lazyInit];
} else {
dispatch_sync(dispatch_get_main_queue(), ^{
[captureSession startRunning];
});
}
}
com_codename1_camerakit_impl_CameraNativeAccessImpl.m
BOOL firstTimeCameraKitLaunch = YES;
@implementation com_codename1_camerakit_impl_CameraNativeAccessImpl
-(void)start{
if(firstTimeCameraKitLaunch) {
direction = FACING_BACK;
flash = FLASH_OFF;
focus = FOCUS_CONTINUOUS;
method = METHOD_STANDARD;
videoQuality = VIDEO_QUALITY_480P;
previewLayer = nil;
device = nil;
photoOutput = nil;
captureSession = nil;
stillImageOutput = nil;
firstTimeCameraKitLaunch = NO;
zoom = 1;
[self lazyInit];
} else {
dispatch_sync(dispatch_get_main_queue(), ^{
[captureSession startRunning];
});
}
}
com_codename1_camerakit_impl_CameraNativeAccessImpl.m
#import "CameraKitView.h"
@interface com_codename1_camerakit_impl_CameraNativeAccessImpl :
NSObject {
int direction;
int flash;
int focus;
int method;
int videoQuality;
float zoom;
BOOL authorized;
BOOL capturingVideo;
CameraKitView* container;
AVCaptureDevice* device;
AVCaptureSession* captureSession;
AVCaptureVideoPreviewLayer* previewLayer;
AVCaptureMovieFileOutput* movieOutput;
AVCapturePhotoOutput* photoOutput;
AVCaptureStillImageOutput* stillImageOutput;
}
com_codename1_camerakit_impl_CameraNativeAccessImpl.h
#import "CameraKitView.h"
@interface com_codename1_camerakit_impl_CameraNativeAccessImpl :
NSObject {
int direction;
int flash;
int focus;
int method;
int videoQuality;
float zoom;
BOOL authorized;
BOOL capturingVideo;
CameraKitView* container;
AVCaptureDevice* device;
AVCaptureSession* captureSession;
AVCaptureVideoPreviewLayer* previewLayer;
AVCaptureMovieFileOutput* movieOutput;
AVCapturePhotoOutput* photoOutput;
AVCaptureStillImageOutput* stillImageOutput;
}
com_codename1_camerakit_impl_CameraNativeAccessImpl.h
#import "CameraKitView.h"
@interface com_codename1_camerakit_impl_CameraNativeAccessImpl :
NSObject {
int direction;
int flash;
int focus;
int method;
int videoQuality;
float zoom;
BOOL authorized;
BOOL capturingVideo;
CameraKitView* container;
AVCaptureDevice* device;
AVCaptureSession* captureSession;
AVCaptureVideoPreviewLayer* previewLayer;
AVCaptureMovieFileOutput* movieOutput;
AVCapturePhotoOutput* photoOutput;
AVCaptureStillImageOutput* stillImageOutput;
}
com_codename1_camerakit_impl_CameraNativeAccessImpl.h
#import "CameraKitView.h"
@interface com_codename1_camerakit_impl_CameraNativeAccessImpl :
NSObject {
int direction;
int flash;
int focus;
int method;
int videoQuality;
float zoom;
BOOL authorized;
BOOL capturingVideo;
CameraKitView* container;
AVCaptureDevice* device;
AVCaptureSession* captureSession;
AVCaptureVideoPreviewLayer* previewLayer;
AVCaptureMovieFileOutput* movieOutput;
AVCapturePhotoOutput* photoOutput;
AVCaptureStillImageOutput* stillImageOutput;
}
com_codename1_camerakit_impl_CameraNativeAccessImpl.h
#import "CameraKitView.h"
@interface com_codename1_camerakit_impl_CameraNativeAccessImpl :
NSObject {
int direction;
int flash;
int focus;
int method;
int videoQuality;
float zoom;
BOOL authorized;
BOOL capturingVideo;
CameraKitView* container;
AVCaptureDevice* device;
AVCaptureSession* captureSession;
AVCaptureVideoPreviewLayer* previewLayer;
AVCaptureMovieFileOutput* movieOutput;
AVCapturePhotoOutput* photoOutput;
AVCaptureStillImageOutput* stillImageOutput;
}
com_codename1_camerakit_impl_CameraNativeAccessImpl.h
#import "CameraKitView.h"
@interface com_codename1_camerakit_impl_CameraNativeAccessImpl :
NSObject {
int direction;
int flash;
int focus;
int method;
int videoQuality;
float zoom;
BOOL authorized;
BOOL capturingVideo;
CameraKitView* container;
AVCaptureDevice* device;
AVCaptureSession* captureSession;
AVCaptureVideoPreviewLayer* previewLayer;
AVCaptureMovieFileOutput* movieOutput;
AVCapturePhotoOutput* photoOutput;
AVCaptureStillImageOutput* stillImageOutput;
}
com_codename1_camerakit_impl_CameraNativeAccessImpl.h
#import "CameraKitView.h"
@interface com_codename1_camerakit_impl_CameraNativeAccessImpl :
NSObject {
int direction;
int flash;
int focus;
int method;
int videoQuality;
float zoom;
BOOL authorized;
BOOL capturingVideo;
CameraKitView* container;
AVCaptureDevice* device;
AVCaptureSession* captureSession;
AVCaptureVideoPreviewLayer* previewLayer;
AVCaptureMovieFileOutput* movieOutput;
AVCapturePhotoOutput* photoOutput;
AVCaptureStillImageOutput* stillImageOutput;
}
com_codename1_camerakit_impl_CameraNativeAccessImpl.h
#import "CameraKitView.h"
@interface com_codename1_camerakit_impl_CameraNativeAccessImpl :
NSObject {
int direction;
int flash;
int focus;
int method;
int videoQuality;
float zoom;
BOOL authorized;
BOOL capturingVideo;
CameraKitView* container;
AVCaptureDevice* device;
AVCaptureSession* captureSession;
AVCaptureVideoPreviewLayer* previewLayer;
AVCaptureMovieFileOutput* movieOutput;
AVCapturePhotoOutput* photoOutput;
AVCaptureStillImageOutput* stillImageOutput;
}
com_codename1_camerakit_impl_CameraNativeAccessImpl.h
#import "CameraKitView.h"
@interface com_codename1_camerakit_impl_CameraNativeAccessImpl :
NSObject {
int direction;
int flash;
int focus;
int method;
int videoQuality;
float zoom;
BOOL authorized;
BOOL capturingVideo;
CameraKitView* container;
AVCaptureDevice* device;
AVCaptureSession* captureSession;
AVCaptureVideoPreviewLayer* previewLayer;
AVCaptureMovieFileOutput* movieOutput;
AVCapturePhotoOutput* photoOutput;
AVCaptureStillImageOutput* stillImageOutput;
}
com_codename1_camerakit_impl_CameraNativeAccessImpl.h
#import "CameraKitView.h"
@interface com_codename1_camerakit_impl_CameraNativeAccessImpl :
NSObject {
int direction;
int flash;
int focus;
int method;
int videoQuality;
float zoom;
BOOL authorized;
BOOL capturingVideo;
CameraKitView* container;
AVCaptureDevice* device;
AVCaptureSession* captureSession;
AVCaptureVideoPreviewLayer* previewLayer;
AVCaptureMovieFileOutput* movieOutput;
AVCapturePhotoOutput* photoOutput;
AVCaptureStillImageOutput* stillImageOutput;
}
com_codename1_camerakit_impl_CameraNativeAccessImpl.h
#import "CameraKitView.h"
@interface com_codename1_camerakit_impl_CameraNativeAccessImpl :
NSObject {
int direction;
int flash;
int focus;
int method;
int videoQuality;
float zoom;
BOOL authorized;
BOOL capturingVideo;
CameraKitView* container;
AVCaptureDevice* device;
AVCaptureSession* captureSession;
AVCaptureVideoPreviewLayer* previewLayer;
AVCaptureMovieFileOutput* movieOutput;
AVCapturePhotoOutput* photoOutput;
AVCaptureStillImageOutput* stillImageOutput;
}
com_codename1_camerakit_impl_CameraNativeAccessImpl.h
#import "CameraKitView.h"
@interface com_codename1_camerakit_impl_CameraNativeAccessImpl :
NSObject {
int direction;
int flash;
int focus;
int method;
int videoQuality;
float zoom;
BOOL authorized;
BOOL capturingVideo;
CameraKitView* container;
AVCaptureDevice* device;
AVCaptureSession* captureSession;
AVCaptureVideoPreviewLayer* previewLayer;
AVCaptureMovieFileOutput* movieOutput;
AVCapturePhotoOutput* photoOutput;
AVCaptureStillImageOutput* stillImageOutput;
}
com_codename1_camerakit_impl_CameraNativeAccessImpl.h
#import "CameraKitView.h"
@interface com_codename1_camerakit_impl_CameraNativeAccessImpl :
NSObject {
int direction;
int flash;
int focus;
int method;
int videoQuality;
float zoom;
BOOL authorized;
BOOL capturingVideo;
CameraKitView* container;
AVCaptureDevice* device;
AVCaptureSession* captureSession;
AVCaptureVideoPreviewLayer* previewLayer;
AVCaptureMovieFileOutput* movieOutput;
AVCapturePhotoOutput* photoOutput;
AVCaptureStillImageOutput* stillImageOutput;
}
com_codename1_camerakit_impl_CameraNativeAccessImpl.h
#import "CameraKitView.h"
@interface com_codename1_camerakit_impl_CameraNativeAccessImpl :
NSObject {
int direction;
int flash;
int focus;
int method;
int videoQuality;
float zoom;
BOOL authorized;
BOOL capturingVideo;
CameraKitView* container;
AVCaptureDevice* device;
AVCaptureSession* captureSession;
AVCaptureVideoPreviewLayer* previewLayer;
AVCaptureMovieFileOutput* movieOutput;
AVCapturePhotoOutput* photoOutput;
AVCaptureStillImageOutput* stillImageOutput;
}
com_codename1_camerakit_impl_CameraNativeAccessImpl.h
#import "CameraKitView.h"
@interface com_codename1_camerakit_impl_CameraNativeAccessImpl :
NSObject {
int direction;
int flash;
int focus;
int method;
int videoQuality;
float zoom;
BOOL authorized;
BOOL capturingVideo;
CameraKitView* container;
AVCaptureDevice* device;
AVCaptureSession* captureSession;
AVCaptureVideoPreviewLayer* previewLayer;
AVCaptureMovieFileOutput* movieOutput;
AVCapturePhotoOutput* photoOutput;
AVCaptureStillImageOutput* stillImageOutput;
}
com_codename1_camerakit_impl_CameraNativeAccessImpl.h
-(void)lazyInit {
dispatch_sync(dispatch_get_main_queue(), ^{
container = [[CameraKitView alloc] init];
switch ([AVCaptureDevice authorizationStatusForMediaType:AVMediaTypeVideo]) {
case AVAuthorizationStatusNotDetermined:
[AVCaptureDevice requestAccessForMediaType:AVMediaTypeVideo
completionHandler:^( BOOL granted ) {
if ( ! granted ) {
authorized = NO;
return;
}
authorized = YES;
[self lazyInitPostAuthorization];
}];
break;
case AVAuthorizationStatusDenied:
case AVAuthorizationStatusRestricted:
authorized = NO;
break;
case AVAuthorizationStatusAuthorized:
authorized = YES;
[self lazyInitPostAuthorization];
break;
}
});
}
com_codename1_camerakit_impl_CameraNativeAccessImpl.m
-(void)lazyInit {
dispatch_sync(dispatch_get_main_queue(), ^{
container = [[CameraKitView alloc] init];
switch ([AVCaptureDevice authorizationStatusForMediaType:AVMediaTypeVideo]) {
case AVAuthorizationStatusNotDetermined:
[AVCaptureDevice requestAccessForMediaType:AVMediaTypeVideo
completionHandler:^( BOOL granted ) {
if ( ! granted ) {
authorized = NO;
return;
}
authorized = YES;
[self lazyInitPostAuthorization];
}];
break;
case AVAuthorizationStatusDenied:
case AVAuthorizationStatusRestricted:
authorized = NO;
break;
case AVAuthorizationStatusAuthorized:
authorized = YES;
[self lazyInitPostAuthorization];
break;
}
});
}
com_codename1_camerakit_impl_CameraNativeAccessImpl.m
-(void)lazyInit {
dispatch_sync(dispatch_get_main_queue(), ^{
container = [[CameraKitView alloc] init];
switch ([AVCaptureDevice authorizationStatusForMediaType:AVMediaTypeVideo]) {
case AVAuthorizationStatusNotDetermined:
[AVCaptureDevice requestAccessForMediaType:AVMediaTypeVideo
completionHandler:^( BOOL granted ) {
if ( ! granted ) {
authorized = NO;
return;
}
authorized = YES;
[self lazyInitPostAuthorization];
}];
break;
case AVAuthorizationStatusDenied:
case AVAuthorizationStatusRestricted:
authorized = NO;
break;
case AVAuthorizationStatusAuthorized:
authorized = YES;
[self lazyInitPostAuthorization];
break;
}
});
}
com_codename1_camerakit_impl_CameraNativeAccessImpl.m
-(void)lazyInit {
dispatch_sync(dispatch_get_main_queue(), ^{
container = [[CameraKitView alloc] init];
switch ([AVCaptureDevice authorizationStatusForMediaType:AVMediaTypeVideo]) {
case AVAuthorizationStatusNotDetermined:
[AVCaptureDevice requestAccessForMediaType:AVMediaTypeVideo
completionHandler:^( BOOL granted ) {
if ( ! granted ) {
authorized = NO;
return;
}
authorized = YES;
[self lazyInitPostAuthorization];
}];
break;
case AVAuthorizationStatusDenied:
case AVAuthorizationStatusRestricted:
authorized = NO;
break;
case AVAuthorizationStatusAuthorized:
authorized = YES;
[self lazyInitPostAuthorization];
break;
}
});
}
com_codename1_camerakit_impl_CameraNativeAccessImpl.m
-(void)lazyInit {
dispatch_sync(dispatch_get_main_queue(), ^{
container = [[CameraKitView alloc] init];
switch ([AVCaptureDevice authorizationStatusForMediaType:AVMediaTypeVideo]) {
case AVAuthorizationStatusNotDetermined:
[AVCaptureDevice requestAccessForMediaType:AVMediaTypeVideo
completionHandler:^( BOOL granted ) {
if ( ! granted ) {
authorized = NO;
return;
}
authorized = YES;
[self lazyInitPostAuthorization];
}];
break;
case AVAuthorizationStatusDenied:
case AVAuthorizationStatusRestricted:
authorized = NO;
break;
case AVAuthorizationStatusAuthorized:
authorized = YES;
[self lazyInitPostAuthorization];
break;
}
});
}
com_codename1_camerakit_impl_CameraNativeAccessImpl.m
-(void)lazyInit {
dispatch_sync(dispatch_get_main_queue(), ^{
container = [[CameraKitView alloc] init];
switch ([AVCaptureDevice authorizationStatusForMediaType:AVMediaTypeVideo]) {
case AVAuthorizationStatusNotDetermined:
[AVCaptureDevice requestAccessForMediaType:AVMediaTypeVideo
completionHandler:^( BOOL granted ) {
if ( ! granted ) {
authorized = NO;
return;
}
authorized = YES;
[self lazyInitPostAuthorization];
}];
break;
case AVAuthorizationStatusDenied:
case AVAuthorizationStatusRestricted:
authorized = NO;
break;
case AVAuthorizationStatusAuthorized:
authorized = YES;
[self lazyInitPostAuthorization];
break;
}
});
}
com_codename1_camerakit_impl_CameraNativeAccessImpl.m
-(void)lazyInit {
dispatch_sync(dispatch_get_main_queue(), ^{
container = [[CameraKitView alloc] init];
switch ([AVCaptureDevice authorizationStatusForMediaType:AVMediaTypeVideo]) {
case AVAuthorizationStatusNotDetermined:
[AVCaptureDevice requestAccessForMediaType:AVMediaTypeVideo
completionHandler:^( BOOL granted ) {
if ( ! granted ) {
authorized = NO;
return;
}
authorized = YES;
[self lazyInitPostAuthorization];
}];
break;
case AVAuthorizationStatusDenied:
case AVAuthorizationStatusRestricted:
authorized = NO;
break;
case AVAuthorizationStatusAuthorized:
authorized = YES;
[self lazyInitPostAuthorization];
break;
}
});
}
com_codename1_camerakit_impl_CameraNativeAccessImpl.m
-(void)lazyInit {
dispatch_sync(dispatch_get_main_queue(), ^{
container = [[CameraKitView alloc] init];
switch ([AVCaptureDevice authorizationStatusForMediaType:AVMediaTypeVideo]) {
case AVAuthorizationStatusNotDetermined:
[AVCaptureDevice requestAccessForMediaType:AVMediaTypeVideo
completionHandler:^( BOOL granted ) {
if ( ! granted ) {
authorized = NO;
return;
}
authorized = YES;
[self lazyInitPostAuthorization];
}];
break;
case AVAuthorizationStatusDenied:
case AVAuthorizationStatusRestricted:
authorized = NO;
break;
case AVAuthorizationStatusAuthorized:
authorized = YES;
[self lazyInitPostAuthorization];
break;
}
});
}
com_codename1_camerakit_impl_CameraNativeAccessImpl.m
-(void)lazyInitPostAuthorization {
if ([AVCaptureDeviceDiscoverySession class]) {
if(direction == FACING_FRONT) {
device = [AVCaptureDevice
defaultDeviceWithDeviceType:
AVCaptureDeviceTypeBuiltInWideAngleCamera
mediaType:AVMediaTypeVideo
position:AVCaptureDevicePositionFront];
} else {
device = [AVCaptureDevice
defaultDeviceWithDeviceType:
AVCaptureDeviceTypeBuiltInWideAngleCamera
mediaType:AVMediaTypeVideo
position:AVCaptureDevicePositionBack];
}
} else {
if(direction == FACING_FRONT) {
for(AVCaptureDevice* d in [AVCaptureDevice devices]) {
if(d.position == AVCaptureDevicePositionFront) {
device = d;
break;
}
com_codename1_camerakit_impl_CameraNativeAccessImpl.m
-(void)lazyInitPostAuthorization {
if ([AVCaptureDeviceDiscoverySession class]) {
if(direction == FACING_FRONT) {
device = [AVCaptureDevice
defaultDeviceWithDeviceType:
AVCaptureDeviceTypeBuiltInWideAngleCamera
mediaType:AVMediaTypeVideo
position:AVCaptureDevicePositionFront];
} else {
device = [AVCaptureDevice
defaultDeviceWithDeviceType:
AVCaptureDeviceTypeBuiltInWideAngleCamera
mediaType:AVMediaTypeVideo
position:AVCaptureDevicePositionBack];
}
} else {
if(direction == FACING_FRONT) {
for(AVCaptureDevice* d in [AVCaptureDevice devices]) {
if(d.position == AVCaptureDevicePositionFront) {
device = d;
break;
}
com_codename1_camerakit_impl_CameraNativeAccessImpl.m
-(void)lazyInitPostAuthorization {
if ([AVCaptureDeviceDiscoverySession class]) {
if(direction == FACING_FRONT) {
device = [AVCaptureDevice
defaultDeviceWithDeviceType:
AVCaptureDeviceTypeBuiltInWideAngleCamera
mediaType:AVMediaTypeVideo
position:AVCaptureDevicePositionFront];
} else {
device = [AVCaptureDevice
defaultDeviceWithDeviceType:
AVCaptureDeviceTypeBuiltInWideAngleCamera
mediaType:AVMediaTypeVideo
position:AVCaptureDevicePositionBack];
}
} else {
if(direction == FACING_FRONT) {
for(AVCaptureDevice* d in [AVCaptureDevice devices]) {
if(d.position == AVCaptureDevicePositionFront) {
device = d;
break;
}
com_codename1_camerakit_impl_CameraNativeAccessImpl.m
mediaType:AVMediaTypeVideo
position:AVCaptureDevicePositionBack];
}
} else {
if(direction == FACING_FRONT) {
for(AVCaptureDevice* d in [AVCaptureDevice devices]) {
if(d.position == AVCaptureDevicePositionFront) {
device = d;
break;
}
}
} else {
for(AVCaptureDevice* d in [AVCaptureDevice devices]) {
if(d.position == AVCaptureDevicePositionBack) {
device = d;
break;
}
}
}
}
// ... common device code ...
}
com_codename1_camerakit_impl_CameraNativeAccessImpl.m
mediaType:AVMediaTypeVideo
position:AVCaptureDevicePositionBack];
}
} else {
if(direction == FACING_FRONT) {
for(AVCaptureDevice* d in [AVCaptureDevice devices]) {
if(d.position == AVCaptureDevicePositionFront) {
device = d;
break;
}
}
} else {
for(AVCaptureDevice* d in [AVCaptureDevice devices]) {
if(d.position == AVCaptureDevicePositionBack) {
device = d;
break;
}
}
}
}
// ... common device code ...
}
com_codename1_camerakit_impl_CameraNativeAccessImpl.m
NSError *error = nil;
AVCaptureDeviceInput *input = [AVCaptureDeviceInput
deviceInputWithDevice:device error:&error];
captureSession = [[AVCaptureSession alloc] init];
[captureSession addInput:input];
previewLayer = [AVCaptureVideoPreviewLayer
layerWithSession:captureSession];
previewLayer.videoGravity = AVLayerVideoGravityResizeAspectFill;
[container setLayer:previewLayer];
[container.layer addSublayer:previewLayer];
[self updateFlash];
[self updateZoom];
[self updateFocus];
[self updateVideoQuality];
[captureSession startRunning];
com_codename1_camerakit_impl_CameraNativeAccessImpl.m
NSError *error = nil;
AVCaptureDeviceInput *input = [AVCaptureDeviceInput
deviceInputWithDevice:device error:&error];
captureSession = [[AVCaptureSession alloc] init];
[captureSession addInput:input];
previewLayer = [AVCaptureVideoPreviewLayer
layerWithSession:captureSession];
previewLayer.videoGravity = AVLayerVideoGravityResizeAspectFill;
[container setLayer:previewLayer];
[container.layer addSublayer:previewLayer];
[self updateFlash];
[self updateZoom];
[self updateFocus];
[self updateVideoQuality];
[captureSession startRunning];
com_codename1_camerakit_impl_CameraNativeAccessImpl.m
NSError *error = nil;
AVCaptureDeviceInput *input = [AVCaptureDeviceInput
deviceInputWithDevice:device error:&error];
captureSession = [[AVCaptureSession alloc] init];
[captureSession addInput:input];
previewLayer = [AVCaptureVideoPreviewLayer
layerWithSession:captureSession];
previewLayer.videoGravity = AVLayerVideoGravityResizeAspectFill;
[container setLayer:previewLayer];
[container.layer addSublayer:previewLayer];
[self updateFlash];
[self updateZoom];
[self updateFocus];
[self updateVideoQuality];
[captureSession startRunning];
com_codename1_camerakit_impl_CameraNativeAccessImpl.m
NSError *error = nil;
AVCaptureDeviceInput *input = [AVCaptureDeviceInput
deviceInputWithDevice:device error:&error];
captureSession = [[AVCaptureSession alloc] init];
[captureSession addInput:input];
previewLayer = [AVCaptureVideoPreviewLayer
layerWithSession:captureSession];
previewLayer.videoGravity = AVLayerVideoGravityResizeAspectFill;
[container setLayer:previewLayer];
[container.layer addSublayer:previewLayer];
[self updateFlash];
[self updateZoom];
[self updateFocus];
[self updateVideoQuality];
[captureSession startRunning];
com_codename1_camerakit_impl_CameraNativeAccessImpl.m
NSError *error = nil;
AVCaptureDeviceInput *input = [AVCaptureDeviceInput
deviceInputWithDevice:device error:&error];
captureSession = [[AVCaptureSession alloc] init];
[captureSession addInput:input];
previewLayer = [AVCaptureVideoPreviewLayer
layerWithSession:captureSession];
previewLayer.videoGravity = AVLayerVideoGravityResizeAspectFill;
[container setLayer:previewLayer];
[container.layer addSublayer:previewLayer];
[self updateFlash];
[self updateZoom];
[self updateFocus];
[self updateVideoQuality];
[captureSession startRunning];
com_codename1_camerakit_impl_CameraNativeAccessImpl.m
NSError *error = nil;
AVCaptureDeviceInput *input = [AVCaptureDeviceInput
deviceInputWithDevice:device error:&error];
captureSession = [[AVCaptureSession alloc] init];
[captureSession addInput:input];
previewLayer = [AVCaptureVideoPreviewLayer
layerWithSession:captureSession];
previewLayer.videoGravity = AVLayerVideoGravityResizeAspectFill;
[container setLayer:previewLayer];
[container.layer addSublayer:previewLayer];
[self updateFlash];
[self updateZoom];
[self updateFocus];
[self updateVideoQuality];
[captureSession startRunning];
com_codename1_camerakit_impl_CameraNativeAccessImpl.m
NSError *error = nil;
AVCaptureDeviceInput *input = [AVCaptureDeviceInput
deviceInputWithDevice:device error:&error];
captureSession = [[AVCaptureSession alloc] init];
[captureSession addInput:input];
previewLayer = [AVCaptureVideoPreviewLayer
layerWithSession:captureSession];
previewLayer.videoGravity = AVLayerVideoGravityResizeAspectFill;
[container setLayer:previewLayer];
[container.layer addSublayer:previewLayer];
[self updateFlash];
[self updateZoom];
[self updateFocus];
[self updateVideoQuality];
[captureSession startRunning];
com_codename1_camerakit_impl_CameraNativeAccessImpl.m
NSError *error = nil;
AVCaptureDeviceInput *input = [AVCaptureDeviceInput
deviceInputWithDevice:device error:&error];
captureSession = [[AVCaptureSession alloc] init];
[captureSession addInput:input];
previewLayer = [AVCaptureVideoPreviewLayer
layerWithSession:captureSession];
previewLayer.videoGravity = AVLayerVideoGravityResizeAspectFill;
[container setLayer:previewLayer];
[container.layer addSublayer:previewLayer];
[self updateFlash];
[self updateZoom];
[self updateFocus];
[self updateVideoQuality];
[captureSession startRunning];
com_codename1_camerakit_impl_CameraNativeAccessImpl.m

More Related Content

Similar to Building a Native Camera Access Library - Part III.pdf

Boost statechart library
Boost statechart libraryBoost statechart library
Boost statechart libraryJan Rüegg
 
Курсы по мобильной разработке под iOS. 4 лекция. Возможности телефона
Курсы по мобильной разработке под iOS. 4 лекция. Возможности телефонаКурсы по мобильной разработке под iOS. 4 лекция. Возможности телефона
Курсы по мобильной разработке под iOS. 4 лекция. Возможности телефонаГлеб Тарасов
 
Creating a Facebook Clone - Part XXXIX - Transcript.pdf
Creating a Facebook Clone - Part XXXIX - Transcript.pdfCreating a Facebook Clone - Part XXXIX - Transcript.pdf
Creating a Facebook Clone - Part XXXIX - Transcript.pdfShaiAlmog1
 
openFrameworks 007 - video
openFrameworks 007 - videoopenFrameworks 007 - video
openFrameworks 007 - videoroxlu
 
Vue JS @ MindDoc. The progressive road to online therapy
Vue JS @ MindDoc. The progressive road to online therapyVue JS @ MindDoc. The progressive road to online therapy
Vue JS @ MindDoc. The progressive road to online therapyDarío Blanco Iturriaga
 
SIMBLでCocoaアプリをパワーアップ
SIMBLでCocoaアプリをパワーアップSIMBLでCocoaアプリをパワーアップ
SIMBLでCocoaアプリをパワーアップWataru Kimura
 
Capture image on eye blink
Capture image on eye blinkCapture image on eye blink
Capture image on eye blinkInnovationM
 
Android Camera Architecture
Android Camera ArchitectureAndroid Camera Architecture
Android Camera ArchitecturePicker Weng
 
Tricks to Making a Realtime SurfaceView Actually Perform in Realtime - Maarte...
Tricks to Making a Realtime SurfaceView Actually Perform in Realtime - Maarte...Tricks to Making a Realtime SurfaceView Actually Perform in Realtime - Maarte...
Tricks to Making a Realtime SurfaceView Actually Perform in Realtime - Maarte...DroidConTLV
 
Building a Native Camera Access Library - Part II - Transcript.pdf
Building a Native Camera Access Library - Part II - Transcript.pdfBuilding a Native Camera Access Library - Part II - Transcript.pdf
Building a Native Camera Access Library - Part II - Transcript.pdfShaiAlmog1
 
1032 practical linux system administration
1032 practical linux system administration1032 practical linux system administration
1032 practical linux system administrationNoel Ng
 
Desmistificando o Phonegap (Cordova)
Desmistificando o Phonegap (Cordova)Desmistificando o Phonegap (Cordova)
Desmistificando o Phonegap (Cordova)Loiane Groner
 
Unit Testing: Special Cases
Unit Testing: Special CasesUnit Testing: Special Cases
Unit Testing: Special CasesCiklum Ukraine
 
MobileConf 2015: Desmistificando o Phonegap (Cordova)
MobileConf 2015: Desmistificando o Phonegap (Cordova)MobileConf 2015: Desmistificando o Phonegap (Cordova)
MobileConf 2015: Desmistificando o Phonegap (Cordova)Loiane Groner
 
Open Cv 2005 Q4 Tutorial
Open Cv 2005 Q4 TutorialOpen Cv 2005 Q4 Tutorial
Open Cv 2005 Q4 Tutorialantiw
 
I wanted to change the cloudsrectangles into an actuall image it do.pdf
I wanted to change the cloudsrectangles into an actuall image it do.pdfI wanted to change the cloudsrectangles into an actuall image it do.pdf
I wanted to change the cloudsrectangles into an actuall image it do.pdffeelinggifts
 

Similar to Building a Native Camera Access Library - Part III.pdf (20)

Boost statechart library
Boost statechart libraryBoost statechart library
Boost statechart library
 
Курсы по мобильной разработке под iOS. 4 лекция. Возможности телефона
Курсы по мобильной разработке под iOS. 4 лекция. Возможности телефонаКурсы по мобильной разработке под iOS. 4 лекция. Возможности телефона
Курсы по мобильной разработке под iOS. 4 лекция. Возможности телефона
 
Creating a Facebook Clone - Part XXXIX - Transcript.pdf
Creating a Facebook Clone - Part XXXIX - Transcript.pdfCreating a Facebook Clone - Part XXXIX - Transcript.pdf
Creating a Facebook Clone - Part XXXIX - Transcript.pdf
 
openFrameworks 007 - video
openFrameworks 007 - videoopenFrameworks 007 - video
openFrameworks 007 - video
 
Vue JS @ MindDoc. The progressive road to online therapy
Vue JS @ MindDoc. The progressive road to online therapyVue JS @ MindDoc. The progressive road to online therapy
Vue JS @ MindDoc. The progressive road to online therapy
 
SIMBLでCocoaアプリをパワーアップ
SIMBLでCocoaアプリをパワーアップSIMBLでCocoaアプリをパワーアップ
SIMBLでCocoaアプリをパワーアップ
 
Capture image on eye blink
Capture image on eye blinkCapture image on eye blink
Capture image on eye blink
 
Android Camera Architecture
Android Camera ArchitectureAndroid Camera Architecture
Android Camera Architecture
 
Li How To2 10
Li How To2 10Li How To2 10
Li How To2 10
 
Tricks to Making a Realtime SurfaceView Actually Perform in Realtime - Maarte...
Tricks to Making a Realtime SurfaceView Actually Perform in Realtime - Maarte...Tricks to Making a Realtime SurfaceView Actually Perform in Realtime - Maarte...
Tricks to Making a Realtime SurfaceView Actually Perform in Realtime - Maarte...
 
Building a Native Camera Access Library - Part II - Transcript.pdf
Building a Native Camera Access Library - Part II - Transcript.pdfBuilding a Native Camera Access Library - Part II - Transcript.pdf
Building a Native Camera Access Library - Part II - Transcript.pdf
 
Open Cv Tutorial Ii
Open Cv Tutorial IiOpen Cv Tutorial Ii
Open Cv Tutorial Ii
 
Open Cv Tutorial Ii
Open Cv Tutorial IiOpen Cv Tutorial Ii
Open Cv Tutorial Ii
 
1032 practical linux system administration
1032 practical linux system administration1032 practical linux system administration
1032 practical linux system administration
 
Desmistificando o Phonegap (Cordova)
Desmistificando o Phonegap (Cordova)Desmistificando o Phonegap (Cordova)
Desmistificando o Phonegap (Cordova)
 
Android workshop
Android workshopAndroid workshop
Android workshop
 
Unit Testing: Special Cases
Unit Testing: Special CasesUnit Testing: Special Cases
Unit Testing: Special Cases
 
MobileConf 2015: Desmistificando o Phonegap (Cordova)
MobileConf 2015: Desmistificando o Phonegap (Cordova)MobileConf 2015: Desmistificando o Phonegap (Cordova)
MobileConf 2015: Desmistificando o Phonegap (Cordova)
 
Open Cv 2005 Q4 Tutorial
Open Cv 2005 Q4 TutorialOpen Cv 2005 Q4 Tutorial
Open Cv 2005 Q4 Tutorial
 
I wanted to change the cloudsrectangles into an actuall image it do.pdf
I wanted to change the cloudsrectangles into an actuall image it do.pdfI wanted to change the cloudsrectangles into an actuall image it do.pdf
I wanted to change the cloudsrectangles into an actuall image it do.pdf
 

More from ShaiAlmog1

The Duck Teaches Learn to debug from the masters. Local to production- kill ...
The Duck Teaches  Learn to debug from the masters. Local to production- kill ...The Duck Teaches  Learn to debug from the masters. Local to production- kill ...
The Duck Teaches Learn to debug from the masters. Local to production- kill ...ShaiAlmog1
 
create-netflix-clone-06-client-ui.pdf
create-netflix-clone-06-client-ui.pdfcreate-netflix-clone-06-client-ui.pdf
create-netflix-clone-06-client-ui.pdfShaiAlmog1
 
create-netflix-clone-01-introduction_transcript.pdf
create-netflix-clone-01-introduction_transcript.pdfcreate-netflix-clone-01-introduction_transcript.pdf
create-netflix-clone-01-introduction_transcript.pdfShaiAlmog1
 
create-netflix-clone-02-server_transcript.pdf
create-netflix-clone-02-server_transcript.pdfcreate-netflix-clone-02-server_transcript.pdf
create-netflix-clone-02-server_transcript.pdfShaiAlmog1
 
create-netflix-clone-04-server-continued_transcript.pdf
create-netflix-clone-04-server-continued_transcript.pdfcreate-netflix-clone-04-server-continued_transcript.pdf
create-netflix-clone-04-server-continued_transcript.pdfShaiAlmog1
 
create-netflix-clone-01-introduction.pdf
create-netflix-clone-01-introduction.pdfcreate-netflix-clone-01-introduction.pdf
create-netflix-clone-01-introduction.pdfShaiAlmog1
 
create-netflix-clone-06-client-ui_transcript.pdf
create-netflix-clone-06-client-ui_transcript.pdfcreate-netflix-clone-06-client-ui_transcript.pdf
create-netflix-clone-06-client-ui_transcript.pdfShaiAlmog1
 
create-netflix-clone-03-server.pdf
create-netflix-clone-03-server.pdfcreate-netflix-clone-03-server.pdf
create-netflix-clone-03-server.pdfShaiAlmog1
 
create-netflix-clone-04-server-continued.pdf
create-netflix-clone-04-server-continued.pdfcreate-netflix-clone-04-server-continued.pdf
create-netflix-clone-04-server-continued.pdfShaiAlmog1
 
create-netflix-clone-05-client-model_transcript.pdf
create-netflix-clone-05-client-model_transcript.pdfcreate-netflix-clone-05-client-model_transcript.pdf
create-netflix-clone-05-client-model_transcript.pdfShaiAlmog1
 
create-netflix-clone-03-server_transcript.pdf
create-netflix-clone-03-server_transcript.pdfcreate-netflix-clone-03-server_transcript.pdf
create-netflix-clone-03-server_transcript.pdfShaiAlmog1
 
create-netflix-clone-02-server.pdf
create-netflix-clone-02-server.pdfcreate-netflix-clone-02-server.pdf
create-netflix-clone-02-server.pdfShaiAlmog1
 
create-netflix-clone-05-client-model.pdf
create-netflix-clone-05-client-model.pdfcreate-netflix-clone-05-client-model.pdf
create-netflix-clone-05-client-model.pdfShaiAlmog1
 
Creating a Whatsapp Clone - Part II.pdf
Creating a Whatsapp Clone - Part II.pdfCreating a Whatsapp Clone - Part II.pdf
Creating a Whatsapp Clone - Part II.pdfShaiAlmog1
 
Creating a Whatsapp Clone - Part IX - Transcript.pdf
Creating a Whatsapp Clone - Part IX - Transcript.pdfCreating a Whatsapp Clone - Part IX - Transcript.pdf
Creating a Whatsapp Clone - Part IX - Transcript.pdfShaiAlmog1
 
Creating a Whatsapp Clone - Part II - Transcript.pdf
Creating a Whatsapp Clone - Part II - Transcript.pdfCreating a Whatsapp Clone - Part II - Transcript.pdf
Creating a Whatsapp Clone - Part II - Transcript.pdfShaiAlmog1
 
Creating a Whatsapp Clone - Part V - Transcript.pdf
Creating a Whatsapp Clone - Part V - Transcript.pdfCreating a Whatsapp Clone - Part V - Transcript.pdf
Creating a Whatsapp Clone - Part V - Transcript.pdfShaiAlmog1
 
Creating a Whatsapp Clone - Part IV - Transcript.pdf
Creating a Whatsapp Clone - Part IV - Transcript.pdfCreating a Whatsapp Clone - Part IV - Transcript.pdf
Creating a Whatsapp Clone - Part IV - Transcript.pdfShaiAlmog1
 
Creating a Whatsapp Clone - Part IV.pdf
Creating a Whatsapp Clone - Part IV.pdfCreating a Whatsapp Clone - Part IV.pdf
Creating a Whatsapp Clone - Part IV.pdfShaiAlmog1
 
Creating a Whatsapp Clone - Part I - Transcript.pdf
Creating a Whatsapp Clone - Part I - Transcript.pdfCreating a Whatsapp Clone - Part I - Transcript.pdf
Creating a Whatsapp Clone - Part I - Transcript.pdfShaiAlmog1
 

More from ShaiAlmog1 (20)

The Duck Teaches Learn to debug from the masters. Local to production- kill ...
The Duck Teaches  Learn to debug from the masters. Local to production- kill ...The Duck Teaches  Learn to debug from the masters. Local to production- kill ...
The Duck Teaches Learn to debug from the masters. Local to production- kill ...
 
create-netflix-clone-06-client-ui.pdf
create-netflix-clone-06-client-ui.pdfcreate-netflix-clone-06-client-ui.pdf
create-netflix-clone-06-client-ui.pdf
 
create-netflix-clone-01-introduction_transcript.pdf
create-netflix-clone-01-introduction_transcript.pdfcreate-netflix-clone-01-introduction_transcript.pdf
create-netflix-clone-01-introduction_transcript.pdf
 
create-netflix-clone-02-server_transcript.pdf
create-netflix-clone-02-server_transcript.pdfcreate-netflix-clone-02-server_transcript.pdf
create-netflix-clone-02-server_transcript.pdf
 
create-netflix-clone-04-server-continued_transcript.pdf
create-netflix-clone-04-server-continued_transcript.pdfcreate-netflix-clone-04-server-continued_transcript.pdf
create-netflix-clone-04-server-continued_transcript.pdf
 
create-netflix-clone-01-introduction.pdf
create-netflix-clone-01-introduction.pdfcreate-netflix-clone-01-introduction.pdf
create-netflix-clone-01-introduction.pdf
 
create-netflix-clone-06-client-ui_transcript.pdf
create-netflix-clone-06-client-ui_transcript.pdfcreate-netflix-clone-06-client-ui_transcript.pdf
create-netflix-clone-06-client-ui_transcript.pdf
 
create-netflix-clone-03-server.pdf
create-netflix-clone-03-server.pdfcreate-netflix-clone-03-server.pdf
create-netflix-clone-03-server.pdf
 
create-netflix-clone-04-server-continued.pdf
create-netflix-clone-04-server-continued.pdfcreate-netflix-clone-04-server-continued.pdf
create-netflix-clone-04-server-continued.pdf
 
create-netflix-clone-05-client-model_transcript.pdf
create-netflix-clone-05-client-model_transcript.pdfcreate-netflix-clone-05-client-model_transcript.pdf
create-netflix-clone-05-client-model_transcript.pdf
 
create-netflix-clone-03-server_transcript.pdf
create-netflix-clone-03-server_transcript.pdfcreate-netflix-clone-03-server_transcript.pdf
create-netflix-clone-03-server_transcript.pdf
 
create-netflix-clone-02-server.pdf
create-netflix-clone-02-server.pdfcreate-netflix-clone-02-server.pdf
create-netflix-clone-02-server.pdf
 
create-netflix-clone-05-client-model.pdf
create-netflix-clone-05-client-model.pdfcreate-netflix-clone-05-client-model.pdf
create-netflix-clone-05-client-model.pdf
 
Creating a Whatsapp Clone - Part II.pdf
Creating a Whatsapp Clone - Part II.pdfCreating a Whatsapp Clone - Part II.pdf
Creating a Whatsapp Clone - Part II.pdf
 
Creating a Whatsapp Clone - Part IX - Transcript.pdf
Creating a Whatsapp Clone - Part IX - Transcript.pdfCreating a Whatsapp Clone - Part IX - Transcript.pdf
Creating a Whatsapp Clone - Part IX - Transcript.pdf
 
Creating a Whatsapp Clone - Part II - Transcript.pdf
Creating a Whatsapp Clone - Part II - Transcript.pdfCreating a Whatsapp Clone - Part II - Transcript.pdf
Creating a Whatsapp Clone - Part II - Transcript.pdf
 
Creating a Whatsapp Clone - Part V - Transcript.pdf
Creating a Whatsapp Clone - Part V - Transcript.pdfCreating a Whatsapp Clone - Part V - Transcript.pdf
Creating a Whatsapp Clone - Part V - Transcript.pdf
 
Creating a Whatsapp Clone - Part IV - Transcript.pdf
Creating a Whatsapp Clone - Part IV - Transcript.pdfCreating a Whatsapp Clone - Part IV - Transcript.pdf
Creating a Whatsapp Clone - Part IV - Transcript.pdf
 
Creating a Whatsapp Clone - Part IV.pdf
Creating a Whatsapp Clone - Part IV.pdfCreating a Whatsapp Clone - Part IV.pdf
Creating a Whatsapp Clone - Part IV.pdf
 
Creating a Whatsapp Clone - Part I - Transcript.pdf
Creating a Whatsapp Clone - Part I - Transcript.pdfCreating a Whatsapp Clone - Part I - Transcript.pdf
Creating a Whatsapp Clone - Part I - Transcript.pdf
 

Recently uploaded

Navigating the Deluge_ Dubai Floods and the Resilience of Dubai International...
Navigating the Deluge_ Dubai Floods and the Resilience of Dubai International...Navigating the Deluge_ Dubai Floods and the Resilience of Dubai International...
Navigating the Deluge_ Dubai Floods and the Resilience of Dubai International...Orbitshub
 
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers:  A Deep Dive into Serverless Spatial Data and FMECloud Frontiers:  A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FMESafe Software
 
Architecting Cloud Native Applications
Architecting Cloud Native ApplicationsArchitecting Cloud Native Applications
Architecting Cloud Native ApplicationsWSO2
 
ICT role in 21st century education and its challenges
ICT role in 21st century education and its challengesICT role in 21st century education and its challenges
ICT role in 21st century education and its challengesrafiqahmad00786416
 
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobe
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, AdobeApidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobe
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobeapidays
 
Polkadot JAM Slides - Token2049 - By Dr. Gavin Wood
Polkadot JAM Slides - Token2049 - By Dr. Gavin WoodPolkadot JAM Slides - Token2049 - By Dr. Gavin Wood
Polkadot JAM Slides - Token2049 - By Dr. Gavin WoodJuan lago vázquez
 
FWD Group - Insurer Innovation Award 2024
FWD Group - Insurer Innovation Award 2024FWD Group - Insurer Innovation Award 2024
FWD Group - Insurer Innovation Award 2024The Digital Insurer
 
WSO2's API Vision: Unifying Control, Empowering Developers
WSO2's API Vision: Unifying Control, Empowering DevelopersWSO2's API Vision: Unifying Control, Empowering Developers
WSO2's API Vision: Unifying Control, Empowering DevelopersWSO2
 
Elevate Developer Efficiency & build GenAI Application with Amazon Q​
Elevate Developer Efficiency & build GenAI Application with Amazon Q​Elevate Developer Efficiency & build GenAI Application with Amazon Q​
Elevate Developer Efficiency & build GenAI Application with Amazon Q​Bhuvaneswari Subramani
 
CNIC Information System with Pakdata Cf In Pakistan
CNIC Information System with Pakdata Cf In PakistanCNIC Information System with Pakdata Cf In Pakistan
CNIC Information System with Pakdata Cf In Pakistandanishmna97
 
Introduction to Multilingual Retrieval Augmented Generation (RAG)
Introduction to Multilingual Retrieval Augmented Generation (RAG)Introduction to Multilingual Retrieval Augmented Generation (RAG)
Introduction to Multilingual Retrieval Augmented Generation (RAG)Zilliz
 
MS Copilot expands with MS Graph connectors
MS Copilot expands with MS Graph connectorsMS Copilot expands with MS Graph connectors
MS Copilot expands with MS Graph connectorsNanddeep Nachan
 
EMPOWERMENT TECHNOLOGY GRADE 11 QUARTER 2 REVIEWER
EMPOWERMENT TECHNOLOGY GRADE 11 QUARTER 2 REVIEWEREMPOWERMENT TECHNOLOGY GRADE 11 QUARTER 2 REVIEWER
EMPOWERMENT TECHNOLOGY GRADE 11 QUARTER 2 REVIEWERMadyBayot
 
AWS Community Day CPH - Three problems of Terraform
AWS Community Day CPH - Three problems of TerraformAWS Community Day CPH - Three problems of Terraform
AWS Community Day CPH - Three problems of TerraformAndrey Devyatkin
 
Apidays New York 2024 - Passkeys: Developing APIs to enable passwordless auth...
Apidays New York 2024 - Passkeys: Developing APIs to enable passwordless auth...Apidays New York 2024 - Passkeys: Developing APIs to enable passwordless auth...
Apidays New York 2024 - Passkeys: Developing APIs to enable passwordless auth...apidays
 
Platformless Horizons for Digital Adaptability
Platformless Horizons for Digital AdaptabilityPlatformless Horizons for Digital Adaptability
Platformless Horizons for Digital AdaptabilityWSO2
 
Apidays New York 2024 - The value of a flexible API Management solution for O...
Apidays New York 2024 - The value of a flexible API Management solution for O...Apidays New York 2024 - The value of a flexible API Management solution for O...
Apidays New York 2024 - The value of a flexible API Management solution for O...apidays
 
Web Form Automation for Bonterra Impact Management (fka Social Solutions Apri...
Web Form Automation for Bonterra Impact Management (fka Social Solutions Apri...Web Form Automation for Bonterra Impact Management (fka Social Solutions Apri...
Web Form Automation for Bonterra Impact Management (fka Social Solutions Apri...Jeffrey Haguewood
 
Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024
Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024
Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024Victor Rentea
 

Recently uploaded (20)

Navigating the Deluge_ Dubai Floods and the Resilience of Dubai International...
Navigating the Deluge_ Dubai Floods and the Resilience of Dubai International...Navigating the Deluge_ Dubai Floods and the Resilience of Dubai International...
Navigating the Deluge_ Dubai Floods and the Resilience of Dubai International...
 
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers:  A Deep Dive into Serverless Spatial Data and FMECloud Frontiers:  A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
 
Architecting Cloud Native Applications
Architecting Cloud Native ApplicationsArchitecting Cloud Native Applications
Architecting Cloud Native Applications
 
ICT role in 21st century education and its challenges
ICT role in 21st century education and its challengesICT role in 21st century education and its challenges
ICT role in 21st century education and its challenges
 
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobe
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, AdobeApidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobe
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobe
 
Understanding the FAA Part 107 License ..
Understanding the FAA Part 107 License ..Understanding the FAA Part 107 License ..
Understanding the FAA Part 107 License ..
 
Polkadot JAM Slides - Token2049 - By Dr. Gavin Wood
Polkadot JAM Slides - Token2049 - By Dr. Gavin WoodPolkadot JAM Slides - Token2049 - By Dr. Gavin Wood
Polkadot JAM Slides - Token2049 - By Dr. Gavin Wood
 
FWD Group - Insurer Innovation Award 2024
FWD Group - Insurer Innovation Award 2024FWD Group - Insurer Innovation Award 2024
FWD Group - Insurer Innovation Award 2024
 
WSO2's API Vision: Unifying Control, Empowering Developers
WSO2's API Vision: Unifying Control, Empowering DevelopersWSO2's API Vision: Unifying Control, Empowering Developers
WSO2's API Vision: Unifying Control, Empowering Developers
 
Elevate Developer Efficiency & build GenAI Application with Amazon Q​
Elevate Developer Efficiency & build GenAI Application with Amazon Q​Elevate Developer Efficiency & build GenAI Application with Amazon Q​
Elevate Developer Efficiency & build GenAI Application with Amazon Q​
 
CNIC Information System with Pakdata Cf In Pakistan
CNIC Information System with Pakdata Cf In PakistanCNIC Information System with Pakdata Cf In Pakistan
CNIC Information System with Pakdata Cf In Pakistan
 
Introduction to Multilingual Retrieval Augmented Generation (RAG)
Introduction to Multilingual Retrieval Augmented Generation (RAG)Introduction to Multilingual Retrieval Augmented Generation (RAG)
Introduction to Multilingual Retrieval Augmented Generation (RAG)
 
MS Copilot expands with MS Graph connectors
MS Copilot expands with MS Graph connectorsMS Copilot expands with MS Graph connectors
MS Copilot expands with MS Graph connectors
 
EMPOWERMENT TECHNOLOGY GRADE 11 QUARTER 2 REVIEWER
EMPOWERMENT TECHNOLOGY GRADE 11 QUARTER 2 REVIEWEREMPOWERMENT TECHNOLOGY GRADE 11 QUARTER 2 REVIEWER
EMPOWERMENT TECHNOLOGY GRADE 11 QUARTER 2 REVIEWER
 
AWS Community Day CPH - Three problems of Terraform
AWS Community Day CPH - Three problems of TerraformAWS Community Day CPH - Three problems of Terraform
AWS Community Day CPH - Three problems of Terraform
 
Apidays New York 2024 - Passkeys: Developing APIs to enable passwordless auth...
Apidays New York 2024 - Passkeys: Developing APIs to enable passwordless auth...Apidays New York 2024 - Passkeys: Developing APIs to enable passwordless auth...
Apidays New York 2024 - Passkeys: Developing APIs to enable passwordless auth...
 
Platformless Horizons for Digital Adaptability
Platformless Horizons for Digital AdaptabilityPlatformless Horizons for Digital Adaptability
Platformless Horizons for Digital Adaptability
 
Apidays New York 2024 - The value of a flexible API Management solution for O...
Apidays New York 2024 - The value of a flexible API Management solution for O...Apidays New York 2024 - The value of a flexible API Management solution for O...
Apidays New York 2024 - The value of a flexible API Management solution for O...
 
Web Form Automation for Bonterra Impact Management (fka Social Solutions Apri...
Web Form Automation for Bonterra Impact Management (fka Social Solutions Apri...Web Form Automation for Bonterra Impact Management (fka Social Solutions Apri...
Web Form Automation for Bonterra Impact Management (fka Social Solutions Apri...
 
Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024
Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024
Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024
 

Building a Native Camera Access Library - Part III.pdf

  • 1. Building Native Camera Access - Part III
  • 2. #import <Foundation/Foundation.h> @interface com_codename1_camerakit_impl_CameraNativeAccessImpl : NSObject { } -(void)start; -(void)stop; -(void)setVideoBitRate:(int)param; -(int)getPreviewWidth; -(BOOL)isStarted; -(void)setMethod:(int)param; -(void*)getView; -(void)setPermissions:(int)param; -(int)getFacing; -(void)setZoom:(float)param; -(int)toggleFacing; -(int)getCaptureWidth; -(float)getHorizontalViewingAngle; -(void)setJpegQuality:(int)param; -(void)stopVideo; -(BOOL)isFacingBack; -(int)getFlash; -(void)captureImage; -(int)getPreviewHeight; -(void)captureVideoFile:(NSString*)param; -(void)setLockVideoAspectRatio:(BOOL)param; -(void)setFocus:(int)param; com_codename1_camerakit_impl_CameraNativeAccessImpl.h
  • 3. #import <Foundation/Foundation.h> @interface com_codename1_camerakit_impl_CameraNativeAccessImpl : NSObject { } -(void)start; -(void)stop; -(void)setVideoBitRate:(int)param; -(int)getPreviewWidth; -(BOOL)isStarted; -(void)setMethod:(int)param; -(void*)getView; -(void)setPermissions:(int)param; -(int)getFacing; -(void)setZoom:(float)param; -(int)toggleFacing; -(int)getCaptureWidth; -(float)getHorizontalViewingAngle; -(void)setJpegQuality:(int)param; -(void)stopVideo; -(BOOL)isFacingBack; -(int)getFlash; -(void)captureImage; -(int)getPreviewHeight; -(void)captureVideoFile:(NSString*)param; -(void)setLockVideoAspectRatio:(BOOL)param; -(void)setFocus:(int)param; com_codename1_camerakit_impl_CameraNativeAccessImpl.h
  • 4. #import <Foundation/Foundation.h> @interface com_codename1_camerakit_impl_CameraNativeAccessImpl : NSObject { } -(void)start; -(void)stop; -(void)setVideoBitRate:(int)param; -(int)getPreviewWidth; -(BOOL)isStarted; -(void)setMethod:(int)param; -(void*)getView; -(void)setPermissions:(int)param; -(int)getFacing; -(void)setZoom:(float)param; -(int)toggleFacing; -(int)getCaptureWidth; -(float)getHorizontalViewingAngle; -(void)setJpegQuality:(int)param; -(void)stopVideo; -(BOOL)isFacingBack; -(int)getFlash; -(void)captureImage; -(int)getPreviewHeight; -(void)captureVideoFile:(NSString*)param; -(void)setLockVideoAspectRatio:(BOOL)param; -(void)setFocus:(int)param; com_codename1_camerakit_impl_CameraNativeAccessImpl.h
  • 5. #import <Foundation/Foundation.h> @interface com_codename1_camerakit_impl_CameraNativeAccessImpl : NSObject { } -(void)start; -(void)stop; -(void)setVideoBitRate:(int)param; -(int)getPreviewWidth; -(BOOL)isStarted; -(void)setMethod:(int)param; -(void*)getView; -(void)setPermissions:(int)param; -(int)getFacing; -(void)setZoom:(float)param; -(int)toggleFacing; -(int)getCaptureWidth; -(float)getHorizontalViewingAngle; -(void)setJpegQuality:(int)param; -(void)stopVideo; -(BOOL)isFacingBack; -(int)getFlash; -(void)captureImage; -(int)getPreviewHeight; -(void)captureVideoFile:(NSString*)param; -(void)setLockVideoAspectRatio:(BOOL)param; -(void)setFocus:(int)param; com_codename1_camerakit_impl_CameraNativeAccessImpl.h
  • 6. #import "com_codename1_camerakit_impl_CameraNativeAccessImpl.h" @implementation com_codename1_camerakit_impl_CameraNativeAccessImpl -(void)start{} -(void)stop{} -(void)setVideoBitRate:(int)param{} -(int)getPreviewWidth{ return 0; } -(BOOL)isStarted{ return NO; } -(void)setMethod:(int)param{} -(void*)getView{ return nil; } -(void)setPermissions:(int)param{} -(int)getFacing{ return 0; } -(void)setZoom:(float)param{} -(int)toggleFacing{ return 0; } com_codename1_camerakit_impl_CameraNativeAccessImpl.m
  • 7. #import "com_codename1_camerakit_impl_CameraNativeAccessImpl.h" @implementation com_codename1_camerakit_impl_CameraNativeAccessImpl -(void)start{} -(void)stop{} -(void)setVideoBitRate:(int)param{} -(int)getPreviewWidth{ return 0; } -(BOOL)isStarted{ return NO; } -(void)setMethod:(int)param{} -(void*)getView{ return nil; } -(void)setPermissions:(int)param{} -(int)getFacing{ return 0; } -(void)setZoom:(float)param{} -(int)toggleFacing{ return 0; } com_codename1_camerakit_impl_CameraNativeAccessImpl.m
  • 8. #import "com_codename1_camerakit_impl_CameraNativeAccessImpl.h" @implementation com_codename1_camerakit_impl_CameraNativeAccessImpl -(void)start{} -(void)stop{} -(void)setVideoBitRate:(int)param{} -(int)getPreviewWidth{ return 0; } -(BOOL)isStarted{ return NO; } -(void)setMethod:(int)param{} -(void*)getView{ return nil; } -(void)setPermissions:(int)param{} -(int)getFacing{ return 0; } -(void)setZoom:(float)param{} -(int)toggleFacing{ return 0; } com_codename1_camerakit_impl_CameraNativeAccessImpl.m
  • 9. #import "com_codename1_camerakit_impl_CameraNativeAccessImpl.h" @implementation com_codename1_camerakit_impl_CameraNativeAccessImpl -(void)start{} -(void)stop{} -(void)setVideoBitRate:(int)param{} -(int)getPreviewWidth{ return 0; } -(BOOL)isStarted{ return NO; } -(void)setMethod:(int)param{} -(void*)getView{ return nil; } -(void)setPermissions:(int)param{} -(int)getFacing{ return 0; } -(void)setZoom:(float)param{} -(int)toggleFacing{ return 0; } com_codename1_camerakit_impl_CameraNativeAccessImpl.m
  • 10. #import "com_codename1_camerakit_impl_CameraNativeAccessImpl.h" @implementation com_codename1_camerakit_impl_CameraNativeAccessImpl -(void)start{} -(void)stop{} -(void)setVideoBitRate:(int)param{} -(int)getPreviewWidth{ return 0; } -(BOOL)isStarted{ return NO; } -(void)setMethod:(int)param{} -(void*)getView{ return nil; } -(void)setPermissions:(int)param{} -(int)getFacing{ return 0; } -(void)setZoom:(float)param{} -(int)toggleFacing{ return 0; } com_codename1_camerakit_impl_CameraNativeAccessImpl.m
  • 11. #import <AVFoundation/AVFoundation.h> const int FACING_BACK = 0; const int FACING_FRONT = 1; const int FLASH_OFF = 0; const int FLASH_ON = 1; const int FLASH_AUTO = 2; const int FLASH_TORCH = 3; const int FOCUS_OFF = 0; const int FOCUS_CONTINUOUS = 1; const int FOCUS_TAP = 2; const int FOCUS_TAP_WITH_MARKER = 3; const int METHOD_STANDARD = 0; const int METHOD_STILL = 1; const int VIDEO_QUALITY_480P = 0; const int VIDEO_QUALITY_720P = 1; const int VIDEO_QUALITY_1080P = 2; const int VIDEO_QUALITY_2160P = 3; const int VIDEO_QUALITY_HIGHEST = 4; const int VIDEO_QUALITY_LOWEST = 5; const int VIDEO_QUALITY_QVGA = 6; com_codename1_camerakit_impl_CameraNativeAccessImpl.h
  • 12. BOOL firstTimeCameraKitLaunch = YES; @implementation com_codename1_camerakit_impl_CameraNativeAccessImpl -(void)start{ if(firstTimeCameraKitLaunch) { direction = FACING_BACK; flash = FLASH_OFF; focus = FOCUS_CONTINUOUS; method = METHOD_STANDARD; videoQuality = VIDEO_QUALITY_480P; previewLayer = nil; device = nil; photoOutput = nil; captureSession = nil; stillImageOutput = nil; firstTimeCameraKitLaunch = NO; zoom = 1; [self lazyInit]; } else { dispatch_sync(dispatch_get_main_queue(), ^{ [captureSession startRunning]; }); } } com_codename1_camerakit_impl_CameraNativeAccessImpl.m
  • 13. BOOL firstTimeCameraKitLaunch = YES; @implementation com_codename1_camerakit_impl_CameraNativeAccessImpl -(void)start{ if(firstTimeCameraKitLaunch) { direction = FACING_BACK; flash = FLASH_OFF; focus = FOCUS_CONTINUOUS; method = METHOD_STANDARD; videoQuality = VIDEO_QUALITY_480P; previewLayer = nil; device = nil; photoOutput = nil; captureSession = nil; stillImageOutput = nil; firstTimeCameraKitLaunch = NO; zoom = 1; [self lazyInit]; } else { dispatch_sync(dispatch_get_main_queue(), ^{ [captureSession startRunning]; }); } } com_codename1_camerakit_impl_CameraNativeAccessImpl.m
  • 14. BOOL firstTimeCameraKitLaunch = YES; @implementation com_codename1_camerakit_impl_CameraNativeAccessImpl -(void)start{ if(firstTimeCameraKitLaunch) { direction = FACING_BACK; flash = FLASH_OFF; focus = FOCUS_CONTINUOUS; method = METHOD_STANDARD; videoQuality = VIDEO_QUALITY_480P; previewLayer = nil; device = nil; photoOutput = nil; captureSession = nil; stillImageOutput = nil; firstTimeCameraKitLaunch = NO; zoom = 1; [self lazyInit]; } else { dispatch_sync(dispatch_get_main_queue(), ^{ [captureSession startRunning]; }); } } com_codename1_camerakit_impl_CameraNativeAccessImpl.m
  • 15. BOOL firstTimeCameraKitLaunch = YES; @implementation com_codename1_camerakit_impl_CameraNativeAccessImpl -(void)start{ if(firstTimeCameraKitLaunch) { direction = FACING_BACK; flash = FLASH_OFF; focus = FOCUS_CONTINUOUS; method = METHOD_STANDARD; videoQuality = VIDEO_QUALITY_480P; previewLayer = nil; device = nil; photoOutput = nil; captureSession = nil; stillImageOutput = nil; firstTimeCameraKitLaunch = NO; zoom = 1; [self lazyInit]; } else { dispatch_sync(dispatch_get_main_queue(), ^{ [captureSession startRunning]; }); } } com_codename1_camerakit_impl_CameraNativeAccessImpl.m
  • 16. BOOL firstTimeCameraKitLaunch = YES; @implementation com_codename1_camerakit_impl_CameraNativeAccessImpl -(void)start{ if(firstTimeCameraKitLaunch) { direction = FACING_BACK; flash = FLASH_OFF; focus = FOCUS_CONTINUOUS; method = METHOD_STANDARD; videoQuality = VIDEO_QUALITY_480P; previewLayer = nil; device = nil; photoOutput = nil; captureSession = nil; stillImageOutput = nil; firstTimeCameraKitLaunch = NO; zoom = 1; [self lazyInit]; } else { dispatch_sync(dispatch_get_main_queue(), ^{ [captureSession startRunning]; }); } } com_codename1_camerakit_impl_CameraNativeAccessImpl.m
  • 17. #import "CameraKitView.h" @interface com_codename1_camerakit_impl_CameraNativeAccessImpl : NSObject { int direction; int flash; int focus; int method; int videoQuality; float zoom; BOOL authorized; BOOL capturingVideo; CameraKitView* container; AVCaptureDevice* device; AVCaptureSession* captureSession; AVCaptureVideoPreviewLayer* previewLayer; AVCaptureMovieFileOutput* movieOutput; AVCapturePhotoOutput* photoOutput; AVCaptureStillImageOutput* stillImageOutput; } com_codename1_camerakit_impl_CameraNativeAccessImpl.h
  • 18. #import "CameraKitView.h" @interface com_codename1_camerakit_impl_CameraNativeAccessImpl : NSObject { int direction; int flash; int focus; int method; int videoQuality; float zoom; BOOL authorized; BOOL capturingVideo; CameraKitView* container; AVCaptureDevice* device; AVCaptureSession* captureSession; AVCaptureVideoPreviewLayer* previewLayer; AVCaptureMovieFileOutput* movieOutput; AVCapturePhotoOutput* photoOutput; AVCaptureStillImageOutput* stillImageOutput; } com_codename1_camerakit_impl_CameraNativeAccessImpl.h
  • 19. #import "CameraKitView.h" @interface com_codename1_camerakit_impl_CameraNativeAccessImpl : NSObject { int direction; int flash; int focus; int method; int videoQuality; float zoom; BOOL authorized; BOOL capturingVideo; CameraKitView* container; AVCaptureDevice* device; AVCaptureSession* captureSession; AVCaptureVideoPreviewLayer* previewLayer; AVCaptureMovieFileOutput* movieOutput; AVCapturePhotoOutput* photoOutput; AVCaptureStillImageOutput* stillImageOutput; } com_codename1_camerakit_impl_CameraNativeAccessImpl.h
  • 20. #import "CameraKitView.h" @interface com_codename1_camerakit_impl_CameraNativeAccessImpl : NSObject { int direction; int flash; int focus; int method; int videoQuality; float zoom; BOOL authorized; BOOL capturingVideo; CameraKitView* container; AVCaptureDevice* device; AVCaptureSession* captureSession; AVCaptureVideoPreviewLayer* previewLayer; AVCaptureMovieFileOutput* movieOutput; AVCapturePhotoOutput* photoOutput; AVCaptureStillImageOutput* stillImageOutput; } com_codename1_camerakit_impl_CameraNativeAccessImpl.h
  • 21. #import "CameraKitView.h" @interface com_codename1_camerakit_impl_CameraNativeAccessImpl : NSObject { int direction; int flash; int focus; int method; int videoQuality; float zoom; BOOL authorized; BOOL capturingVideo; CameraKitView* container; AVCaptureDevice* device; AVCaptureSession* captureSession; AVCaptureVideoPreviewLayer* previewLayer; AVCaptureMovieFileOutput* movieOutput; AVCapturePhotoOutput* photoOutput; AVCaptureStillImageOutput* stillImageOutput; } com_codename1_camerakit_impl_CameraNativeAccessImpl.h
  • 22. #import "CameraKitView.h" @interface com_codename1_camerakit_impl_CameraNativeAccessImpl : NSObject { int direction; int flash; int focus; int method; int videoQuality; float zoom; BOOL authorized; BOOL capturingVideo; CameraKitView* container; AVCaptureDevice* device; AVCaptureSession* captureSession; AVCaptureVideoPreviewLayer* previewLayer; AVCaptureMovieFileOutput* movieOutput; AVCapturePhotoOutput* photoOutput; AVCaptureStillImageOutput* stillImageOutput; } com_codename1_camerakit_impl_CameraNativeAccessImpl.h
  • 23. #import "CameraKitView.h" @interface com_codename1_camerakit_impl_CameraNativeAccessImpl : NSObject { int direction; int flash; int focus; int method; int videoQuality; float zoom; BOOL authorized; BOOL capturingVideo; CameraKitView* container; AVCaptureDevice* device; AVCaptureSession* captureSession; AVCaptureVideoPreviewLayer* previewLayer; AVCaptureMovieFileOutput* movieOutput; AVCapturePhotoOutput* photoOutput; AVCaptureStillImageOutput* stillImageOutput; } com_codename1_camerakit_impl_CameraNativeAccessImpl.h
  • 24. #import "CameraKitView.h" @interface com_codename1_camerakit_impl_CameraNativeAccessImpl : NSObject { int direction; int flash; int focus; int method; int videoQuality; float zoom; BOOL authorized; BOOL capturingVideo; CameraKitView* container; AVCaptureDevice* device; AVCaptureSession* captureSession; AVCaptureVideoPreviewLayer* previewLayer; AVCaptureMovieFileOutput* movieOutput; AVCapturePhotoOutput* photoOutput; AVCaptureStillImageOutput* stillImageOutput; } com_codename1_camerakit_impl_CameraNativeAccessImpl.h
  • 25. #import "CameraKitView.h" @interface com_codename1_camerakit_impl_CameraNativeAccessImpl : NSObject { int direction; int flash; int focus; int method; int videoQuality; float zoom; BOOL authorized; BOOL capturingVideo; CameraKitView* container; AVCaptureDevice* device; AVCaptureSession* captureSession; AVCaptureVideoPreviewLayer* previewLayer; AVCaptureMovieFileOutput* movieOutput; AVCapturePhotoOutput* photoOutput; AVCaptureStillImageOutput* stillImageOutput; } com_codename1_camerakit_impl_CameraNativeAccessImpl.h
  • 26. #import "CameraKitView.h" @interface com_codename1_camerakit_impl_CameraNativeAccessImpl : NSObject { int direction; int flash; int focus; int method; int videoQuality; float zoom; BOOL authorized; BOOL capturingVideo; CameraKitView* container; AVCaptureDevice* device; AVCaptureSession* captureSession; AVCaptureVideoPreviewLayer* previewLayer; AVCaptureMovieFileOutput* movieOutput; AVCapturePhotoOutput* photoOutput; AVCaptureStillImageOutput* stillImageOutput; } com_codename1_camerakit_impl_CameraNativeAccessImpl.h
  • 27. #import "CameraKitView.h" @interface com_codename1_camerakit_impl_CameraNativeAccessImpl : NSObject { int direction; int flash; int focus; int method; int videoQuality; float zoom; BOOL authorized; BOOL capturingVideo; CameraKitView* container; AVCaptureDevice* device; AVCaptureSession* captureSession; AVCaptureVideoPreviewLayer* previewLayer; AVCaptureMovieFileOutput* movieOutput; AVCapturePhotoOutput* photoOutput; AVCaptureStillImageOutput* stillImageOutput; } com_codename1_camerakit_impl_CameraNativeAccessImpl.h
  • 28. #import "CameraKitView.h" @interface com_codename1_camerakit_impl_CameraNativeAccessImpl : NSObject { int direction; int flash; int focus; int method; int videoQuality; float zoom; BOOL authorized; BOOL capturingVideo; CameraKitView* container; AVCaptureDevice* device; AVCaptureSession* captureSession; AVCaptureVideoPreviewLayer* previewLayer; AVCaptureMovieFileOutput* movieOutput; AVCapturePhotoOutput* photoOutput; AVCaptureStillImageOutput* stillImageOutput; } com_codename1_camerakit_impl_CameraNativeAccessImpl.h
  • 29. #import "CameraKitView.h" @interface com_codename1_camerakit_impl_CameraNativeAccessImpl : NSObject { int direction; int flash; int focus; int method; int videoQuality; float zoom; BOOL authorized; BOOL capturingVideo; CameraKitView* container; AVCaptureDevice* device; AVCaptureSession* captureSession; AVCaptureVideoPreviewLayer* previewLayer; AVCaptureMovieFileOutput* movieOutput; AVCapturePhotoOutput* photoOutput; AVCaptureStillImageOutput* stillImageOutput; } com_codename1_camerakit_impl_CameraNativeAccessImpl.h
  • 30. #import "CameraKitView.h" @interface com_codename1_camerakit_impl_CameraNativeAccessImpl : NSObject { int direction; int flash; int focus; int method; int videoQuality; float zoom; BOOL authorized; BOOL capturingVideo; CameraKitView* container; AVCaptureDevice* device; AVCaptureSession* captureSession; AVCaptureVideoPreviewLayer* previewLayer; AVCaptureMovieFileOutput* movieOutput; AVCapturePhotoOutput* photoOutput; AVCaptureStillImageOutput* stillImageOutput; } com_codename1_camerakit_impl_CameraNativeAccessImpl.h
  • 31. #import "CameraKitView.h" @interface com_codename1_camerakit_impl_CameraNativeAccessImpl : NSObject { int direction; int flash; int focus; int method; int videoQuality; float zoom; BOOL authorized; BOOL capturingVideo; CameraKitView* container; AVCaptureDevice* device; AVCaptureSession* captureSession; AVCaptureVideoPreviewLayer* previewLayer; AVCaptureMovieFileOutput* movieOutput; AVCapturePhotoOutput* photoOutput; AVCaptureStillImageOutput* stillImageOutput; } com_codename1_camerakit_impl_CameraNativeAccessImpl.h
  • 32. -(void)lazyInit { dispatch_sync(dispatch_get_main_queue(), ^{ container = [[CameraKitView alloc] init]; switch ([AVCaptureDevice authorizationStatusForMediaType:AVMediaTypeVideo]) { case AVAuthorizationStatusNotDetermined: [AVCaptureDevice requestAccessForMediaType:AVMediaTypeVideo completionHandler:^( BOOL granted ) { if ( ! granted ) { authorized = NO; return; } authorized = YES; [self lazyInitPostAuthorization]; }]; break; case AVAuthorizationStatusDenied: case AVAuthorizationStatusRestricted: authorized = NO; break; case AVAuthorizationStatusAuthorized: authorized = YES; [self lazyInitPostAuthorization]; break; } }); } com_codename1_camerakit_impl_CameraNativeAccessImpl.m
  • 33. -(void)lazyInit { dispatch_sync(dispatch_get_main_queue(), ^{ container = [[CameraKitView alloc] init]; switch ([AVCaptureDevice authorizationStatusForMediaType:AVMediaTypeVideo]) { case AVAuthorizationStatusNotDetermined: [AVCaptureDevice requestAccessForMediaType:AVMediaTypeVideo completionHandler:^( BOOL granted ) { if ( ! granted ) { authorized = NO; return; } authorized = YES; [self lazyInitPostAuthorization]; }]; break; case AVAuthorizationStatusDenied: case AVAuthorizationStatusRestricted: authorized = NO; break; case AVAuthorizationStatusAuthorized: authorized = YES; [self lazyInitPostAuthorization]; break; } }); } com_codename1_camerakit_impl_CameraNativeAccessImpl.m
  • 34. -(void)lazyInit { dispatch_sync(dispatch_get_main_queue(), ^{ container = [[CameraKitView alloc] init]; switch ([AVCaptureDevice authorizationStatusForMediaType:AVMediaTypeVideo]) { case AVAuthorizationStatusNotDetermined: [AVCaptureDevice requestAccessForMediaType:AVMediaTypeVideo completionHandler:^( BOOL granted ) { if ( ! granted ) { authorized = NO; return; } authorized = YES; [self lazyInitPostAuthorization]; }]; break; case AVAuthorizationStatusDenied: case AVAuthorizationStatusRestricted: authorized = NO; break; case AVAuthorizationStatusAuthorized: authorized = YES; [self lazyInitPostAuthorization]; break; } }); } com_codename1_camerakit_impl_CameraNativeAccessImpl.m
  • 35. -(void)lazyInit { dispatch_sync(dispatch_get_main_queue(), ^{ container = [[CameraKitView alloc] init]; switch ([AVCaptureDevice authorizationStatusForMediaType:AVMediaTypeVideo]) { case AVAuthorizationStatusNotDetermined: [AVCaptureDevice requestAccessForMediaType:AVMediaTypeVideo completionHandler:^( BOOL granted ) { if ( ! granted ) { authorized = NO; return; } authorized = YES; [self lazyInitPostAuthorization]; }]; break; case AVAuthorizationStatusDenied: case AVAuthorizationStatusRestricted: authorized = NO; break; case AVAuthorizationStatusAuthorized: authorized = YES; [self lazyInitPostAuthorization]; break; } }); } com_codename1_camerakit_impl_CameraNativeAccessImpl.m
  • 36. -(void)lazyInit { dispatch_sync(dispatch_get_main_queue(), ^{ container = [[CameraKitView alloc] init]; switch ([AVCaptureDevice authorizationStatusForMediaType:AVMediaTypeVideo]) { case AVAuthorizationStatusNotDetermined: [AVCaptureDevice requestAccessForMediaType:AVMediaTypeVideo completionHandler:^( BOOL granted ) { if ( ! granted ) { authorized = NO; return; } authorized = YES; [self lazyInitPostAuthorization]; }]; break; case AVAuthorizationStatusDenied: case AVAuthorizationStatusRestricted: authorized = NO; break; case AVAuthorizationStatusAuthorized: authorized = YES; [self lazyInitPostAuthorization]; break; } }); } com_codename1_camerakit_impl_CameraNativeAccessImpl.m
  • 37. -(void)lazyInit { dispatch_sync(dispatch_get_main_queue(), ^{ container = [[CameraKitView alloc] init]; switch ([AVCaptureDevice authorizationStatusForMediaType:AVMediaTypeVideo]) { case AVAuthorizationStatusNotDetermined: [AVCaptureDevice requestAccessForMediaType:AVMediaTypeVideo completionHandler:^( BOOL granted ) { if ( ! granted ) { authorized = NO; return; } authorized = YES; [self lazyInitPostAuthorization]; }]; break; case AVAuthorizationStatusDenied: case AVAuthorizationStatusRestricted: authorized = NO; break; case AVAuthorizationStatusAuthorized: authorized = YES; [self lazyInitPostAuthorization]; break; } }); } com_codename1_camerakit_impl_CameraNativeAccessImpl.m
  • 38. -(void)lazyInit { dispatch_sync(dispatch_get_main_queue(), ^{ container = [[CameraKitView alloc] init]; switch ([AVCaptureDevice authorizationStatusForMediaType:AVMediaTypeVideo]) { case AVAuthorizationStatusNotDetermined: [AVCaptureDevice requestAccessForMediaType:AVMediaTypeVideo completionHandler:^( BOOL granted ) { if ( ! granted ) { authorized = NO; return; } authorized = YES; [self lazyInitPostAuthorization]; }]; break; case AVAuthorizationStatusDenied: case AVAuthorizationStatusRestricted: authorized = NO; break; case AVAuthorizationStatusAuthorized: authorized = YES; [self lazyInitPostAuthorization]; break; } }); } com_codename1_camerakit_impl_CameraNativeAccessImpl.m
  • 39. -(void)lazyInit { dispatch_sync(dispatch_get_main_queue(), ^{ container = [[CameraKitView alloc] init]; switch ([AVCaptureDevice authorizationStatusForMediaType:AVMediaTypeVideo]) { case AVAuthorizationStatusNotDetermined: [AVCaptureDevice requestAccessForMediaType:AVMediaTypeVideo completionHandler:^( BOOL granted ) { if ( ! granted ) { authorized = NO; return; } authorized = YES; [self lazyInitPostAuthorization]; }]; break; case AVAuthorizationStatusDenied: case AVAuthorizationStatusRestricted: authorized = NO; break; case AVAuthorizationStatusAuthorized: authorized = YES; [self lazyInitPostAuthorization]; break; } }); } com_codename1_camerakit_impl_CameraNativeAccessImpl.m
  • 40. -(void)lazyInitPostAuthorization { if ([AVCaptureDeviceDiscoverySession class]) { if(direction == FACING_FRONT) { device = [AVCaptureDevice defaultDeviceWithDeviceType: AVCaptureDeviceTypeBuiltInWideAngleCamera mediaType:AVMediaTypeVideo position:AVCaptureDevicePositionFront]; } else { device = [AVCaptureDevice defaultDeviceWithDeviceType: AVCaptureDeviceTypeBuiltInWideAngleCamera mediaType:AVMediaTypeVideo position:AVCaptureDevicePositionBack]; } } else { if(direction == FACING_FRONT) { for(AVCaptureDevice* d in [AVCaptureDevice devices]) { if(d.position == AVCaptureDevicePositionFront) { device = d; break; } com_codename1_camerakit_impl_CameraNativeAccessImpl.m
  • 41. -(void)lazyInitPostAuthorization { if ([AVCaptureDeviceDiscoverySession class]) { if(direction == FACING_FRONT) { device = [AVCaptureDevice defaultDeviceWithDeviceType: AVCaptureDeviceTypeBuiltInWideAngleCamera mediaType:AVMediaTypeVideo position:AVCaptureDevicePositionFront]; } else { device = [AVCaptureDevice defaultDeviceWithDeviceType: AVCaptureDeviceTypeBuiltInWideAngleCamera mediaType:AVMediaTypeVideo position:AVCaptureDevicePositionBack]; } } else { if(direction == FACING_FRONT) { for(AVCaptureDevice* d in [AVCaptureDevice devices]) { if(d.position == AVCaptureDevicePositionFront) { device = d; break; } com_codename1_camerakit_impl_CameraNativeAccessImpl.m
  • 42. -(void)lazyInitPostAuthorization { if ([AVCaptureDeviceDiscoverySession class]) { if(direction == FACING_FRONT) { device = [AVCaptureDevice defaultDeviceWithDeviceType: AVCaptureDeviceTypeBuiltInWideAngleCamera mediaType:AVMediaTypeVideo position:AVCaptureDevicePositionFront]; } else { device = [AVCaptureDevice defaultDeviceWithDeviceType: AVCaptureDeviceTypeBuiltInWideAngleCamera mediaType:AVMediaTypeVideo position:AVCaptureDevicePositionBack]; } } else { if(direction == FACING_FRONT) { for(AVCaptureDevice* d in [AVCaptureDevice devices]) { if(d.position == AVCaptureDevicePositionFront) { device = d; break; } com_codename1_camerakit_impl_CameraNativeAccessImpl.m
  • 43. mediaType:AVMediaTypeVideo position:AVCaptureDevicePositionBack]; } } else { if(direction == FACING_FRONT) { for(AVCaptureDevice* d in [AVCaptureDevice devices]) { if(d.position == AVCaptureDevicePositionFront) { device = d; break; } } } else { for(AVCaptureDevice* d in [AVCaptureDevice devices]) { if(d.position == AVCaptureDevicePositionBack) { device = d; break; } } } } // ... common device code ... } com_codename1_camerakit_impl_CameraNativeAccessImpl.m
  • 44. mediaType:AVMediaTypeVideo position:AVCaptureDevicePositionBack]; } } else { if(direction == FACING_FRONT) { for(AVCaptureDevice* d in [AVCaptureDevice devices]) { if(d.position == AVCaptureDevicePositionFront) { device = d; break; } } } else { for(AVCaptureDevice* d in [AVCaptureDevice devices]) { if(d.position == AVCaptureDevicePositionBack) { device = d; break; } } } } // ... common device code ... } com_codename1_camerakit_impl_CameraNativeAccessImpl.m
  • 45. NSError *error = nil; AVCaptureDeviceInput *input = [AVCaptureDeviceInput deviceInputWithDevice:device error:&error]; captureSession = [[AVCaptureSession alloc] init]; [captureSession addInput:input]; previewLayer = [AVCaptureVideoPreviewLayer layerWithSession:captureSession]; previewLayer.videoGravity = AVLayerVideoGravityResizeAspectFill; [container setLayer:previewLayer]; [container.layer addSublayer:previewLayer]; [self updateFlash]; [self updateZoom]; [self updateFocus]; [self updateVideoQuality]; [captureSession startRunning]; com_codename1_camerakit_impl_CameraNativeAccessImpl.m
  • 46. NSError *error = nil; AVCaptureDeviceInput *input = [AVCaptureDeviceInput deviceInputWithDevice:device error:&error]; captureSession = [[AVCaptureSession alloc] init]; [captureSession addInput:input]; previewLayer = [AVCaptureVideoPreviewLayer layerWithSession:captureSession]; previewLayer.videoGravity = AVLayerVideoGravityResizeAspectFill; [container setLayer:previewLayer]; [container.layer addSublayer:previewLayer]; [self updateFlash]; [self updateZoom]; [self updateFocus]; [self updateVideoQuality]; [captureSession startRunning]; com_codename1_camerakit_impl_CameraNativeAccessImpl.m
  • 47. NSError *error = nil; AVCaptureDeviceInput *input = [AVCaptureDeviceInput deviceInputWithDevice:device error:&error]; captureSession = [[AVCaptureSession alloc] init]; [captureSession addInput:input]; previewLayer = [AVCaptureVideoPreviewLayer layerWithSession:captureSession]; previewLayer.videoGravity = AVLayerVideoGravityResizeAspectFill; [container setLayer:previewLayer]; [container.layer addSublayer:previewLayer]; [self updateFlash]; [self updateZoom]; [self updateFocus]; [self updateVideoQuality]; [captureSession startRunning]; com_codename1_camerakit_impl_CameraNativeAccessImpl.m
  • 48. NSError *error = nil; AVCaptureDeviceInput *input = [AVCaptureDeviceInput deviceInputWithDevice:device error:&error]; captureSession = [[AVCaptureSession alloc] init]; [captureSession addInput:input]; previewLayer = [AVCaptureVideoPreviewLayer layerWithSession:captureSession]; previewLayer.videoGravity = AVLayerVideoGravityResizeAspectFill; [container setLayer:previewLayer]; [container.layer addSublayer:previewLayer]; [self updateFlash]; [self updateZoom]; [self updateFocus]; [self updateVideoQuality]; [captureSession startRunning]; com_codename1_camerakit_impl_CameraNativeAccessImpl.m
  • 49. NSError *error = nil; AVCaptureDeviceInput *input = [AVCaptureDeviceInput deviceInputWithDevice:device error:&error]; captureSession = [[AVCaptureSession alloc] init]; [captureSession addInput:input]; previewLayer = [AVCaptureVideoPreviewLayer layerWithSession:captureSession]; previewLayer.videoGravity = AVLayerVideoGravityResizeAspectFill; [container setLayer:previewLayer]; [container.layer addSublayer:previewLayer]; [self updateFlash]; [self updateZoom]; [self updateFocus]; [self updateVideoQuality]; [captureSession startRunning]; com_codename1_camerakit_impl_CameraNativeAccessImpl.m
  • 50. NSError *error = nil; AVCaptureDeviceInput *input = [AVCaptureDeviceInput deviceInputWithDevice:device error:&error]; captureSession = [[AVCaptureSession alloc] init]; [captureSession addInput:input]; previewLayer = [AVCaptureVideoPreviewLayer layerWithSession:captureSession]; previewLayer.videoGravity = AVLayerVideoGravityResizeAspectFill; [container setLayer:previewLayer]; [container.layer addSublayer:previewLayer]; [self updateFlash]; [self updateZoom]; [self updateFocus]; [self updateVideoQuality]; [captureSession startRunning]; com_codename1_camerakit_impl_CameraNativeAccessImpl.m
  • 51. NSError *error = nil; AVCaptureDeviceInput *input = [AVCaptureDeviceInput deviceInputWithDevice:device error:&error]; captureSession = [[AVCaptureSession alloc] init]; [captureSession addInput:input]; previewLayer = [AVCaptureVideoPreviewLayer layerWithSession:captureSession]; previewLayer.videoGravity = AVLayerVideoGravityResizeAspectFill; [container setLayer:previewLayer]; [container.layer addSublayer:previewLayer]; [self updateFlash]; [self updateZoom]; [self updateFocus]; [self updateVideoQuality]; [captureSession startRunning]; com_codename1_camerakit_impl_CameraNativeAccessImpl.m
  • 52. NSError *error = nil; AVCaptureDeviceInput *input = [AVCaptureDeviceInput deviceInputWithDevice:device error:&error]; captureSession = [[AVCaptureSession alloc] init]; [captureSession addInput:input]; previewLayer = [AVCaptureVideoPreviewLayer layerWithSession:captureSession]; previewLayer.videoGravity = AVLayerVideoGravityResizeAspectFill; [container setLayer:previewLayer]; [container.layer addSublayer:previewLayer]; [self updateFlash]; [self updateZoom]; [self updateFocus]; [self updateVideoQuality]; [captureSession startRunning]; com_codename1_camerakit_impl_CameraNativeAccessImpl.m