2011-12-16 2 views
3

에 축소립니다. 아래의 코드는 작동하지만 GLKView의 이미지는 90도 회전하고 50 % 축소됩니다.CIImage가 회전하고 난 다음에, AVCaptureSession, 공정 콜백 (결국)에서 비디오와 비디오를 잡아 내 GLKView에 결과를 렌더링하기 위해 노력하고있어 GLKView

glContext은 [[EAGLContext alloc] initWithAPI : kEAGLRenderingAPIOpenGLES2]로 생성됩니다.

coreImageContext은 [CIContext contextWithEAGLContext : glContext]로 만들어집니다.

- (void)captureOutput:(AVCaptureOutput *)captureOutput 
didOutputSampleBuffer:(CMSampleBufferRef)sampleBuffer 
     fromConnection:(AVCaptureConnection *)connection 
{ 
    // process the image 
    CVPixelBufferRef pixelBuffer = (CVPixelBufferRef)CMSampleBufferGetImageBuffer(sampleBuffer); 
    CIImage *image = [CIImage imageWithCVPixelBuffer:pixelBuffer]; 

    // display it (using main thread) 
    dispatch_async(dispatch_get_main_queue(), ^{ 
     // running synchronously on the main thread now 
     [self.coreImageContext drawImage:image inRect:self.view.bounds fromRect:[image extent]]; 
     [self.glContext presentRenderbuffer:GL_RENDERBUFFER]; 
    }); 
} 

수행 및 아핀 변환을 삽입하는 것이 비효율적 인 것처럼 보입니다. 회전 및 크기 조정을 방지하기 위해 설정 호출 또는 매개 변수가 누락 되었습니까?

+0

같은 문제가 있습니다. 나는 당신의 경우와 거의 같은 코드를 사용했다. 나는 포기를 끝내고 회전을 보정하고 전체 화면을 채우기 위해 이미지의 크기를 조정하기 위해 affine transform을 사용했습니다. –

답변

2

AVFoundation의 비디오 미리보기는 그래픽 하드웨어를 사용하여 이미지의 회전을 수행합니다. 뒤 향함 카메라의 기본 캡처 방향은 왼쪽에 있습니다. 정면을 향한 카메라의 풍경이 오른쪽입니다. 비디오를 레코딩 할 때 AVFoundation은 MOV/MP4 헤더에 변형을 배치하여 플레이어에게 비디오의 올바른 방향을 나타냅니다. MOV/MP4에서 이미지를 가져 오면 기본 캡처 방향으로 이동합니다. 위의 두 번째 예제 프로그램을 참조하십시오. SO Post

0

drawImage : inRect : fromRect : 이미지를 대상 사각형에 맞게 축척합니다. 다음과 같이 self.view.bounds를 적절하게 조정하면됩니다.

CGFloat screenScale = [[UIScreen mainScreen] scale]; 
[self.coreImageContext drawImage:image inRect:CGRectApplyAffineTransform(self.view.bounds, CGAffineTransformMakeScale(screenScale, screenScale)) fromRect:[image extent]];