본문 바로가기

C++(oF)

[IOS] 아이폰의 카메라 기능을 모두 사용 하기



아이폰에서 OF 를 통하여 카메라를 사용 할때 ofVideoGrabber 를 사용하면 fps 가 현저히 떨어진다 (0.9.3 의 경우)


따라서 이건 사용 하지 못하고 [ AVFoundationVideoGrabber ] 를 사용 하여야 한다. 


아쉽게도 직접 그리는 방법은 제공 되지 않고 ofImage로 픽셀을 복사 하여 draw 하면 된다. 



그런데 아쉽게도 of에서 제공하는 [ AVFoundationVideoGrabber ]  는 아이폰 카메라의 focus , torch , white balance 의 기능을 제어하지 못하게 되어 있다. 


하지만 objective-c 를 호출 하여 해결 할 수 있다.



또한 아이폰 카메라 뷰의 "사진" 모드와 다소 비율이 다른데 이것은 


AVFoundationVideoGrabber.mm 에서 해상도 설정을 강제로 4:3 으로 맞추면 된다. (1024 x 768)

그렇게 하면 아래위로 보다 넓은 해상도를 얻을수 있다.

이때 preset 을 16:9 가 명시되어 있는 것으로 지정 하면 종횡비가 맞지 않는다. (AVCaptureSessionPreset1280x720 와 같은것은 안된다.)



(원문 출처 : : :https://github.com/armadillu/openFrameworks/blob/7c6d4e28802a9bbfd47ed27651e7df10c1b78a1f/addons/ofxiPhone/src/AVFoundationVideoGrabber.h)

 : 

AVFoundationVideoGrabber.h 중 일부 


... (생략) ...

-(void)lockExposureAndFocus;
-(vector <string>)listDevices;
-(void)setDevice:(int)_device;
-(void)eraseGrabberPtr;

-(CGImageRef)getCurrentFrame;


//add jjongun

// focus
-(bool)setContinuousAutoFocus;
-(bool)focusOnce;
-(bool)lockFocus; //at curent focus
-(bool)touchFocusAt:(CGPoint)focusPoint; // (0,0) bottom left, (1,1) top right, calls focusOnce



// Exposure
-(bool)setContinuousAutoExposure;
-(bool)lockExposure;
-(bool)autoExposureOnce;
-(bool)touchExposeAt:(CGPoint)autoExposeHere; // (0,0) bottom left, (1,1) top right, calls autoExposreOnce



// Torch
-(float)currentTorchLevel; // [0..1]
-(bool)startTorch;
-(bool)setAutoTorch; //adjust torch intensity depending on scene darkness
-(bool)stopTorch;



//white balance
-(bool)setContinuousAutoWhiteBalance;
-(bool)lockWhiteBalance;
-(bool)autoWhiteBalanceOnce;



@end

class AVFoundationVideoGrabber{

    public:     
        AVFoundationVideoGrabber();
        ~AVFoundationVideoGrabber();

 ... (생략) ...

//jjongun c++ 로 링킹 iOSVideoGrabber* getiOSVideoGrabber() const; //focus bool setContinuousAutoFocus(); bool focusOnce(); bool lockFocus(); bool touchFocusAt(ofVec2f point); //Exposure bool setContinuousAutoExposure(); bool lockExposure(); bool autoExposureOnce(); bool touchExposeAt(ofVec2f point); // Torch float currentTorchLevel(); // [0..1] bool startTorch(); bool setAutoTorch(); //adjust torch intensity depending on scene darkness bool stopTorch(); //white balance bool setContinuousAutoWhiteBalance(); bool lockWhiteBalance(); bool autoWhiteBalanceOnce();


 ... (생략) ...



이하 mm 파일은 아래에 


AVFoundationVideoGrabber.h


AVFoundationVideoGrabber.mm



..