Я пытаюсь захватить видео с помощью AVCaptureSession, обрабатывать видео в обратном вызове (в конечном итоге), а затем отображать результаты в моем GLKView. Код ниже работает, но изображение в моем GLKView поворачивается на 90 градусов и уменьшается на 50%.CIImage, созданный из CVPixelBufferRef, рисует вращающийся и сжатый в GLKView
glContext создан с [[EAGLContext alloc] initWithAPI: kEAGLRenderingAPIOpenGLES2];
My 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];
});
}
Вставка кода для выполнения и аффинного преобразования кажется неэффективной. У меня отсутствует установочный вызов или параметр, чтобы предотвратить вращение и масштабирование?
Такая же проблема здесь. Я использовал почти тот же код, что и в вашем случае. Я закончил тем, что отказался и использовал аффинное преобразование, чтобы исправить поворот и изменить размер изображения, чтобы заполнить весь экран. –