다양한 Core xxxx 프레임 워크와 함께 AVFoundation 프레임 워크를 더 잘 이해하기 위해 간단한 비디오 캡처를 시도하고 이미지를 UI에 추가합니다. 저는 rosyWriter 코드와 문서를 보았지만 대답은 없었습니다. 따라서 :captureOutput을 사용하여 비디오 캡쳐 및 이미지 표시 : captureOutput didOutputSampleBuffer : sampleBuffer fromConnection : connection
나는 입력과 출력을 추가하기위한 표준 캡처 세션 코드를 가지고 있습니다.
//moving the buffer processing off the main queue
dispatch_queue_t bufferProcessingQueue=dispatch_queue_create("theBufferQueue", NULL);
[self.theOutput setSampleBufferDelegate:self queue:bufferProcessingQueue];
dispatch_release(bufferProcessingQueue);
그리고 대리인 :
-(void) captureOutput:(AVCaptureOutput *)captureOutput didOutputSampleBuffer:(CMSampleBufferRef)sampleBuffer
fromConnection:(AVCaptureConnection *)connection
{
CVPixelBufferRef pb = CMSampleBufferGetImageBuffer(sampleBuffer);
CIImage *ciImage = [CIImage imageWithCVPixelBuffer:pb];
CGImageRef ref = [self.theContext createCGImage:ciImage fromRect:ciImage.extent];
dispatch_async(dispatch_get_main_queue(), ^{
self.testBufferImage.image= [UIImage imageWithCGImage:ref scale:1.0 orientation:UIImageOrientationRight];
});
}
질문 :
1 내가 위에서처럼, 우리는 항상 대리자를 설정해야 추측하고 다음은 질문에 관련이 내가 메인 큐가 아니라 위에서했던 것과 같이 별도의 큐에서 실행하는 것. 옳은?
2 함께 대리자 메서드에서 UI를 처리하는 모든 호출을 내가했던 것처럼 기본 큐로 되돌려 놓아야합니다. 옳은?
3 5-10 초 후에이 코드를 실행하면 "메모리 수신 경고"오류가 표시되고 응용 프로그램이 종료됩니다. 무엇이 이것을 일으킬 수 있습니까?
미리 감사드립니다. KMB
스티브 감사합니다. 이것은 단지 초기 테스트 일뿐입니다. 실제로, 내가하려고하는 것은이 이미지를 화면에 렌더링하는 것이 아니라 픽셀을 얻어 분석하는 것입니다. 나는 OpenGL에 들어갈 필요없이 이것을 할 수 있기를 바랬다. 더 자세히 분석 할 수 있도록 여기에 렌더링했습니다. 그래서, 프레임, 브레이크 포인트, 분석, 프로그램을 계속 진행하여 픽셀 분석이 캡처 된 이미지를 반영하는지 확인합니다. 이것을 지나치게 복잡하게 만들고 Open GL을 배워야합니다. 감사합니다 – Spectravideo328
성능상의 이유로 OpenGL을 사용합니다. 이미지 처리와 관련하여 신속하게 작업하고 싶다면 [Brad Larson 's] (http://stackoverflow.com/users/19679/brad-larson) [GPUImage] (http://www.google.com /url?sa=t&rct=j&q=brad%20larson%20gpuimage&source=web&cd=1&cad=rja&ved=0CB0QFjAA&url=https%3A%2F%2Fgithub.com%2FBradLarson%2FGPUImage&ei=OgRmUJmOLevpiwKzhoGoBQ&usg=AFQjCNHzBO8bMGWO2bBFhe8DTjMv7eTQBQ). 당신이하고있는 일은 테스트를하는 것이 좋습니다. 그 CVImageRefs를 어딘가에 CFRelease하십시오. –
ARC를 사용하여 생각했지만 더 이상 객체를 릴리즈 할 필요가 없지만 createCGImage 메소드 세부 정보를 읽고 (CF의 논리를 복사/작성) 도움말을 읽습니다. 도움에 감사드립니다. – Spectravideo328