cap_ios.h 5.33 KB
Newer Older
wester committed
1 2 3 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 30 31 32
/*  For iOS video I/O
 *  by Eduard Feicho on 29/07/12
 *  Copyright 2012. All rights reserved.
 *
 * Redistribution and use in source and binary forms, with or without
 * modification, are permitted provided that the following conditions are met:
 *
 * 1. Redistributions of source code must retain the above copyright notice,
 *    this list of conditions and the following disclaimer.
 * 2. Redistributions in binary form must reproduce the above copyright notice,
 *    this list of conditions and the following disclaimer in the documentation
 *    and/or other materials provided with the distribution.
 * 3. The name of the author may not be used to endorse or promote products
 *    derived from this software without specific prior written permission.
 *
 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR IMPLIED
 * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
 * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO
 * EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
 * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
 * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
 * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
 * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
 * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 *
 */

#import <UIKit/UIKit.h>
#import <Accelerate/Accelerate.h>
#import <AVFoundation/AVFoundation.h>
#import <ImageIO/ImageIO.h>
wester committed
33
#include "opencv2/core/core.hpp"
wester committed
34 35 36 37 38

/////////////////////////////////////// CvAbstractCamera /////////////////////////////////////

@class CvAbstractCamera;

a  
Kai Westerkamp committed
39
@interface CvAbstractCamera : NSObject
wester committed
40
{
a  
Kai Westerkamp committed
41 42 43 44
    AVCaptureSession* captureSession;
    AVCaptureConnection* videoCaptureConnection;
    AVCaptureVideoPreviewLayer *captureVideoPreviewLayer;

wester committed
45 46 47
    UIDeviceOrientation currentDeviceOrientation;

    BOOL cameraAvailable;
a  
Kai Westerkamp committed
48 49 50 51 52 53 54 55 56 57 58 59 60 61
    BOOL captureSessionLoaded;
    BOOL running;
    BOOL useAVCaptureVideoPreviewLayer;

    AVCaptureDevicePosition defaultAVCaptureDevicePosition;
    AVCaptureVideoOrientation defaultAVCaptureVideoOrientation;
    NSString *const defaultAVCaptureSessionPreset;

    int defaultFPS;

    UIView* parentView;

    int imageWidth;
    int imageHeight;
wester committed
62 63
}

a  
Kai Westerkamp committed
64 65
@property (nonatomic, retain) AVCaptureSession* captureSession;
@property (nonatomic, retain) AVCaptureConnection* videoCaptureConnection;
wester committed
66 67 68 69 70 71 72 73 74 75 76 77 78 79

@property (nonatomic, readonly) BOOL running;
@property (nonatomic, readonly) BOOL captureSessionLoaded;

@property (nonatomic, assign) int defaultFPS;
@property (nonatomic, readonly) AVCaptureVideoPreviewLayer *captureVideoPreviewLayer;
@property (nonatomic, assign) AVCaptureDevicePosition defaultAVCaptureDevicePosition;
@property (nonatomic, assign) AVCaptureVideoOrientation defaultAVCaptureVideoOrientation;
@property (nonatomic, assign) BOOL useAVCaptureVideoPreviewLayer;
@property (nonatomic, strong) NSString *const defaultAVCaptureSessionPreset;

@property (nonatomic, assign) int imageWidth;
@property (nonatomic, assign) int imageHeight;

a  
Kai Westerkamp committed
80
@property (nonatomic, retain) UIView* parentView;
wester committed
81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104

- (void)start;
- (void)stop;
- (void)switchCameras;

- (id)initWithParentView:(UIView*)parent;

- (void)createCaptureOutput;
- (void)createVideoPreviewLayer;
- (void)updateOrientation;

- (void)lockFocus;
- (void)unlockFocus;
- (void)lockExposure;
- (void)unlockExposure;
- (void)lockBalance;
- (void)unlockBalance;

@end

///////////////////////////////// CvVideoCamera ///////////////////////////////////////////

@class CvVideoCamera;

a  
Kai Westerkamp committed
105
@protocol CvVideoCameraDelegate <NSObject>
wester committed
106 107 108 109 110 111 112 113

#ifdef __cplusplus
// delegate method for processing image frames
- (void)processImage:(cv::Mat&)image;
#endif

@end

a  
Kai Westerkamp committed
114
@interface CvVideoCamera : CvAbstractCamera<AVCaptureVideoDataOutputSampleBufferDelegate>
wester committed
115 116 117 118 119 120
{
    AVCaptureVideoDataOutput *videoDataOutput;

    dispatch_queue_t videoDataOutputQueue;
    CALayer *customPreviewLayer;

a  
Kai Westerkamp committed
121 122 123 124 125 126 127 128
    BOOL grayscaleMode;

    BOOL recordVideo;
    BOOL rotateVideo;
    AVAssetWriterInput* recordAssetWriterInput;
    AVAssetWriterInputPixelBufferAdaptor* recordPixelBufferAdaptor;
    AVAssetWriter* recordAssetWriter;

wester committed
129 130 131 132
    CMTime lastSampleTime;

}

a  
Kai Westerkamp committed
133
@property (nonatomic, assign) id<CvVideoCameraDelegate> delegate;
wester committed
134 135 136 137
@property (nonatomic, assign) BOOL grayscaleMode;

@property (nonatomic, assign) BOOL recordVideo;
@property (nonatomic, assign) BOOL rotateVideo;
a  
Kai Westerkamp committed
138 139 140
@property (nonatomic, retain) AVAssetWriterInput* recordAssetWriterInput;
@property (nonatomic, retain) AVAssetWriterInputPixelBufferAdaptor* recordPixelBufferAdaptor;
@property (nonatomic, retain) AVAssetWriter* recordAssetWriter;
wester committed
141 142 143 144 145 146 147 148 149 150 151 152 153 154

- (void)adjustLayoutToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation;
- (void)layoutPreviewLayer;
- (void)saveVideo;
- (NSURL *)videoFileURL;
- (NSString *)videoFileString;


@end

///////////////////////////////// CvPhotoCamera ///////////////////////////////////////////

@class CvPhotoCamera;

a  
Kai Westerkamp committed
155
@protocol CvPhotoCameraDelegate <NSObject>
wester committed
156 157 158 159 160 161

- (void)photoCamera:(CvPhotoCamera*)photoCamera capturedImage:(UIImage *)image;
- (void)photoCameraCancel:(CvPhotoCamera*)photoCamera;

@end

a  
Kai Westerkamp committed
162
@interface CvPhotoCamera : CvAbstractCamera
wester committed
163 164 165 166
{
    AVCaptureStillImageOutput *stillImageOutput;
}

a  
Kai Westerkamp committed
167
@property (nonatomic, assign) id<CvPhotoCameraDelegate> delegate;
wester committed
168 169 170 171

- (void)takePicture;

@end