Я получаю канал YUV с IPhone в формате kCVPixelFormatType_420YpCbCr8BiPlanarVideoRange (YUV, двухплоскостной).
Я намереваюсь обработать канал y, поэтому я получаю его, используя
CVImageBufferRef pixelBuffer = CMSampleBufferGetImageBuffer( sampleBuffer );
CVPixelBufferLockBaseAddress( pixelBuffer, 0 );
int bufferHeight = CVPixelBufferGetHeight(pixelBuffer);
int bufferWidth = CVPixelBufferGetWidth(pixelBuffer);
uint8_t *y_channel = CVPixelBufferGetBaseAddressOfPlane(pixelBuffer, 0);
Проблема в том, что пиксели y_channel выглядят повернутыми и зеркальными (я рисую их на наложенном слое, чтобы посмотреть, как выглядит:
- (void)drawLayer:(CALayer *)layer inContext:(CGContextRef)context
{
CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceGray();
CGContextRef bitmapContext = CGBitmapContextCreate(rotated,
imageSize->x,
imageSize->y,
8, // bitsPerComponent
1*imageSize->x, // bytesPerRow
colorSpace,
kCGImageAlphaNone);
CFRelease(colorSpace);
CGImageRef cgImage = CGBitmapContextCreateImage(bitmapContext);
CGContextDrawImage(context, CGRectMake(0, 0, imageSize->x/2, imageSize->y/2), cgImage);
CFRelease(cgImage);
CFRelease(bitmapContext);
}
Я рассмотрел цикл по пикселям и создал фиксированную версиюизображения, но мне интересно, есть ли способ получить y_channel в правильной ориентации (т.е. не поворачивать на 90 градусов) прямо из камеры.